From e3374c74c2f83ed72b723a039a0fe01b211f2aaf Mon Sep 17 00:00:00 2001 From: baldurk Date: Sat, 6 Dec 2014 20:27:09 +0000 Subject: [PATCH] Switch to the proper context to fetch VAO/feedback initial data --- renderdoc/driver/gl/gl_manager.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/renderdoc/driver/gl/gl_manager.cpp b/renderdoc/driver/gl/gl_manager.cpp index e6cf5a401..05bff55de 100644 --- a/renderdoc/driver/gl/gl_manager.cpp +++ b/renderdoc/driver/gl/gl_manager.cpp @@ -282,6 +282,9 @@ bool GLResourceManager::Prepare_InitialState(GLResource res) } else if(res.Namespace == eResFeedback) { + // need to be on the right context, as feedback objects are never shared + void *oldctx = m_GL->SwitchToContext(res.Context); + GLuint prevfeedback = 0; gl.glGetIntegerv(eGL_TRANSFORM_FEEDBACK, (GLint *)&prevfeedback); @@ -304,11 +307,17 @@ bool GLResourceManager::Prepare_InitialState(GLResource res) SetInitialContents(Id, InitialContentData(GLResource(MakeNullResource), 0, (byte *)data)); gl.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, prevfeedback); + + // restore the previous context + m_GL->SwitchToContext(oldctx); } else if(res.Namespace == eResVertexArray) { - GLuint VAO = 0; - gl.glGetIntegerv(eGL_VERTEX_ARRAY_BINDING, (GLint *)&VAO); + // need to be on the right context, as VAOs are never shared + void *oldctx = m_GL->SwitchToContext(res.Context); + + GLuint prevVAO = 0; + gl.glGetIntegerv(eGL_VERTEX_ARRAY_BINDING, (GLint *)&prevVAO); gl.glBindVertexArray(res.name); @@ -340,7 +349,10 @@ bool GLResourceManager::Prepare_InitialState(GLResource res) SetInitialContents(Id, InitialContentData(GLResource(MakeNullResource), 0, (byte *)data)); - gl.glBindVertexArray(VAO); + gl.glBindVertexArray(prevVAO); + + // restore the previous context + m_GL->SwitchToContext(oldctx); } else {