From 3fd07076413cb6cee816a73f9d20a7e0676fdf64 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 7 Jun 2018 19:27:57 +0100 Subject: [PATCH] Check for KHR_debug and ensure ClientMemoryIBO is fully created --- renderdoc/driver/gl/gl_driver.cpp | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index 9cf44f76e..0f9794bd2 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -1125,6 +1125,9 @@ void WrappedOpenGL::ActivateContext(GLWindowingData winData) GLuint prevArrayBuffer = 0; glGetIntegerv(eGL_ARRAY_BUFFER_BINDING, (GLint *)&prevArrayBuffer); + GLuint prevElementArrayBuffer = 0; + glGetIntegerv(eGL_ELEMENT_ARRAY_BUFFER_BINDING, (GLint *)&prevElementArrayBuffer); + // Initialize VBOs used in case we copy from client memory. gl_CurChunk = GLChunk::glGenBuffers; glGenBuffers(ARRAY_COUNT(ctxdata.m_ClientMemoryVBOs), ctxdata.m_ClientMemoryVBOs); @@ -1137,19 +1140,32 @@ void WrappedOpenGL::ActivateContext(GLWindowingData winData) gl_CurChunk = GLChunk::glBufferData; glBufferData(eGL_ARRAY_BUFFER, 64, NULL, eGL_DYNAMIC_DRAW); + if(HasExt[KHR_debug]) + { + gl_CurChunk = GLChunk::glObjectLabel; + glObjectLabel(eGL_BUFFER, ctxdata.m_ClientMemoryVBOs[i], -1, + StringFormat::Fmt("Client-memory pointer data (VB %zu)", i).c_str()); + } + } + + gl_CurChunk = GLChunk::glGenBuffers; + glGenBuffers(1, &ctxdata.m_ClientMemoryIBO); + + glBindBuffer(eGL_ELEMENT_ARRAY_BUFFER, ctxdata.m_ClientMemoryIBO); + glBufferData(eGL_ELEMENT_ARRAY_BUFFER, 64, NULL, eGL_DYNAMIC_DRAW); + + if(HasExt[KHR_debug]) + { gl_CurChunk = GLChunk::glObjectLabel; - glObjectLabel(eGL_BUFFER, ctxdata.m_ClientMemoryVBOs[i], -1, - StringFormat::Fmt("Client-memory pointer data (VB %zu)", i).c_str()); + glObjectLabel(eGL_BUFFER, ctxdata.m_ClientMemoryIBO, -1, + "Client-memory pointer data (IB)"); } gl_CurChunk = GLChunk::glBindBuffer; glBindBuffer(eGL_ARRAY_BUFFER, prevArrayBuffer); - gl_CurChunk = GLChunk::glGenBuffers; - glGenBuffers(1, &ctxdata.m_ClientMemoryIBO); - - gl_CurChunk = GLChunk::glObjectLabel; - glObjectLabel(eGL_BUFFER, ctxdata.m_ClientMemoryIBO, -1, "Client-memory pointer data (IB)"); + gl_CurChunk = GLChunk::glBindBuffer; + glBindBuffer(eGL_ELEMENT_ARRAY_BUFFER, prevElementArrayBuffer); } if(IsCaptureMode(m_State))