From 06d14967ab1b693c2990e67ce268e16b7bdab60f Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 24 Feb 2015 14:17:43 +0000 Subject: [PATCH] Intercept queries to glGetBufferPointer that return the map pointer --- renderdoc/driver/gl/wrappers/gl_get_funcs.cpp | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp index 9eb762d9c..0279a2444 100644 --- a/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp @@ -383,7 +383,28 @@ void WrappedOpenGL::glGetBufferPointerv(GLenum target, GLenum pname, void **para { CoherentMapImplicitBarrier(); + // intercept GL_BUFFER_MAP_POINTER queries + if(pname == eGL_BUFFER_MAP_POINTER) + { + GLResourceRecord *record = GetCtxData().m_BufferRecord[BufferIdx(target)]; + RDCASSERT(record); + + if(record) + { + if(record->Map.status == GLResourceRecord::Unmapped) + *params = NULL; + else + *params = (void *)record->Map.ptr; + } + else + { + *params = NULL; + } + } + else + { m_Real.glGetBufferPointerv(target, pname, params); + } } void WrappedOpenGL::glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, void *data) @@ -996,7 +1017,28 @@ void WrappedOpenGL::glGetNamedBufferPointervEXT(GLuint buffer, GLenum pname, voi { CoherentMapImplicitBarrier(); + // intercept GL_BUFFER_MAP_POINTER queries + if(pname == eGL_BUFFER_MAP_POINTER) + { + GLResourceRecord *record = GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffer)); + RDCASSERT(record); + + if(record) + { + if(record->Map.status == GLResourceRecord::Unmapped) + *params = NULL; + else + *params = (void *)record->Map.ptr; + } + else + { + *params = NULL; + } + } + else + { m_Real.glGetNamedBufferPointervEXT(buffer, pname, params); + } } void WrappedOpenGL::glGetNamedProgramivEXT(GLuint program, GLenum target, GLenum pname, GLint *params)