mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-07-21 06:51:35 +00:00
Element array buffer binding is part of VAO state
This commit is contained in:
@@ -57,6 +57,7 @@ struct VAOInitialData
|
||||
{
|
||||
VertexAttribInitialData VertexAttribs[16];
|
||||
VertexBufferInitialData VertexBuffers[16];
|
||||
ResourceId ElementArrayBuffer;
|
||||
};
|
||||
|
||||
template<>
|
||||
@@ -288,6 +289,10 @@ bool GLResourceManager::Prepare_InitialState(GLResource res)
|
||||
gl.glGetIntegeri_v(eGL_VERTEX_BINDING_DIVISOR, i, (GLint *)&data->VertexBuffers[i].Divisor);
|
||||
}
|
||||
|
||||
GLuint buffer = 0;
|
||||
gl.glGetIntegerv(eGL_ELEMENT_ARRAY_BUFFER_BINDING, (GLint*)&buffer);
|
||||
data->ElementArrayBuffer = GetID(BufferRes(res.Context, buffer));
|
||||
|
||||
SetInitialContents(Id, InitialContentData(GLResource(MakeNullResource), 0, (byte *)data));
|
||||
|
||||
gl.glBindVertexArray(VAO);
|
||||
@@ -738,6 +743,7 @@ bool GLResourceManager::Serialise_InitialState(GLResource res)
|
||||
m_pSerialiser->Serialise("VertexAttrib[]", data.VertexAttribs[i]);
|
||||
m_pSerialiser->Serialise("VertexBuffer[]", data.VertexBuffers[i]);
|
||||
}
|
||||
m_pSerialiser->Serialise("ElementArrayBuffer", data.ElementArrayBuffer);
|
||||
|
||||
if(m_State < WRITING)
|
||||
{
|
||||
@@ -864,6 +870,9 @@ void GLResourceManager::Apply_InitialState(GLResource live, InitialContentData i
|
||||
gl.glBindVertexBuffer(i, buffer, (GLintptr)buf.Offset, (GLsizei)buf.Stride);
|
||||
gl.glVertexBindingDivisor(i, buf.Divisor);
|
||||
}
|
||||
|
||||
GLuint buffer = initialdata->ElementArrayBuffer == ResourceId() ? 0 : GetLiveResource(initialdata->ElementArrayBuffer).name;
|
||||
gl.glBindBuffer(eGL_ELEMENT_ARRAY_BUFFER, buffer);
|
||||
|
||||
gl.glBindVertexArray(VAO);
|
||||
}
|
||||
|
||||
@@ -157,7 +157,6 @@ void GLRenderState::FetchState()
|
||||
m_Real->glGetIntegerv(eGL_COPY_WRITE_BUFFER_BINDING, (GLint*)&BufferBindings[eBufIdx_Copy_Write]);
|
||||
m_Real->glGetIntegerv(eGL_DRAW_INDIRECT_BUFFER_BINDING, (GLint*)&BufferBindings[eBufIdx_Draw_Indirect]);
|
||||
m_Real->glGetIntegerv(eGL_DISPATCH_INDIRECT_BUFFER_BINDING, (GLint*)&BufferBindings[eBufIdx_Dispatch_Indirect]);
|
||||
m_Real->glGetIntegerv(eGL_ELEMENT_ARRAY_BUFFER_BINDING, (GLint*)&BufferBindings[eBufIdx_Element_Array]);
|
||||
m_Real->glGetIntegerv(eGL_PIXEL_PACK_BUFFER_BINDING, (GLint*)&BufferBindings[eBufIdx_Pixel_Pack]);
|
||||
m_Real->glGetIntegerv(eGL_PIXEL_UNPACK_BUFFER_BINDING, (GLint*)&BufferBindings[eBufIdx_Pixel_Unpack]);
|
||||
m_Real->glGetIntegerv(eGL_QUERY_BUFFER_BINDING, (GLint*)&BufferBindings[eBufIdx_Query]);
|
||||
@@ -381,7 +380,6 @@ void GLRenderState::ApplyState()
|
||||
m_Real->glBindBuffer(eGL_COPY_WRITE_BUFFER, BufferBindings[eBufIdx_Copy_Write]);
|
||||
m_Real->glBindBuffer(eGL_DRAW_INDIRECT_BUFFER, BufferBindings[eBufIdx_Draw_Indirect]);
|
||||
m_Real->glBindBuffer(eGL_DISPATCH_INDIRECT_BUFFER, BufferBindings[eBufIdx_Dispatch_Indirect]);
|
||||
m_Real->glBindBuffer(eGL_ELEMENT_ARRAY_BUFFER, BufferBindings[eBufIdx_Element_Array]);
|
||||
m_Real->glBindBuffer(eGL_PIXEL_PACK_BUFFER, BufferBindings[eBufIdx_Pixel_Pack]);
|
||||
m_Real->glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, BufferBindings[eBufIdx_Pixel_Unpack]);
|
||||
m_Real->glBindBuffer(eGL_QUERY_BUFFER, BufferBindings[eBufIdx_Query]);
|
||||
|
||||
@@ -99,7 +99,6 @@ struct GLRenderState
|
||||
eBufIdx_Copy_Write,
|
||||
eBufIdx_Draw_Indirect,
|
||||
eBufIdx_Dispatch_Indirect,
|
||||
eBufIdx_Element_Array,
|
||||
eBufIdx_Pixel_Pack,
|
||||
eBufIdx_Pixel_Unpack,
|
||||
eBufIdx_Query,
|
||||
|
||||
@@ -785,7 +785,9 @@ void GLReplay::SavePipelineState()
|
||||
|
||||
void *ctx = m_ReplayCtx.ctx;
|
||||
|
||||
pipe.m_VtxIn.ibuffer.Buffer = rm->GetOriginalID(rm->GetID(BufferRes(ctx, rs.BufferBindings[GLRenderState::eBufIdx_Element_Array])));
|
||||
GLuint ibuffer = 0;
|
||||
gl.glGetIntegerv(eGL_ELEMENT_ARRAY_BUFFER_BINDING, (GLint*)&ibuffer);
|
||||
pipe.m_VtxIn.ibuffer.Buffer = rm->GetOriginalID(rm->GetID(BufferRes(ctx, ibuffer)));
|
||||
|
||||
// Vertex buffers and attributes
|
||||
GLint numVBufferBindings = 16;
|
||||
|
||||
@@ -160,6 +160,15 @@ void WrappedOpenGL::glBindBuffer(GLenum target, GLuint buffer)
|
||||
|
||||
r->AddChunk(chunk);
|
||||
}
|
||||
|
||||
// element array buffer binding is vertex array record state, record there (if we've not just stopped)
|
||||
if(m_State == WRITING_IDLE && target == eGL_ELEMENT_ARRAY_BUFFER && m_VertexArrayRecord && VertexArrayUpdateCheck())
|
||||
{
|
||||
SCOPED_SERIALISE_CONTEXT(BIND_BUFFER);
|
||||
Serialise_glBindBuffer(target, buffer);
|
||||
|
||||
m_VertexArrayRecord->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user