From 4de29f3df3115020bab10adb2c76d0bd32ed84b1 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 10 Nov 2014 23:45:32 +0000 Subject: [PATCH] If no pixel unpack buffer was bound on capture, make replay match --- .../driver/gl/wrappers/gl_texture_funcs.cpp | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp index f240d70fc..4296439e1 100644 --- a/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp @@ -2056,8 +2056,14 @@ bool WrappedOpenGL::Serialise_glTextureSubImage1DEXT(GLuint texture, GLenum targ if(m_State == READING) { + if(!UnpackBufBound) + m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0); + m_Real.glTextureSubImage1DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, Width, Format, Type, buf ? buf : (const void *)bufoffs); + if(!UnpackBufBound) + m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf); + SAFE_DELETE_ARRAY(buf); } @@ -2162,8 +2168,14 @@ bool WrappedOpenGL::Serialise_glTextureSubImage2DEXT(GLuint texture, GLenum targ if(m_State == READING) { + if(!UnpackBufBound) + m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0); + m_Real.glTextureSubImage2DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, yoff, Width, Height, Format, Type, buf ? buf : (const void *)bufoffs); + if(!UnpackBufBound) + m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf); + SAFE_DELETE_ARRAY(buf); } @@ -2270,7 +2282,13 @@ bool WrappedOpenGL::Serialise_glTextureSubImage3DEXT(GLuint texture, GLenum targ if(m_State == READING) { + if(!UnpackBufBound) + m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0); + m_Real.glTextureSubImage3DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, yoff, zoff, Width, Height, Depth, Format, Type, buf ? buf : (const void *)bufoffs); + + if(!UnpackBufBound) + m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf); SAFE_DELETE_ARRAY(buf); } @@ -2363,8 +2381,14 @@ bool WrappedOpenGL::Serialise_glCompressedTextureSubImage1DEXT(GLuint texture, G if(m_State == READING) { + if(!UnpackBufBound) + m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0); + m_Real.glCompressedTextureSubImage1DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, Width, fmt, byteSize, buf ? buf : (const void *)bufoffs); + if(!UnpackBufBound) + m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf); + SAFE_DELETE_ARRAY(buf); } @@ -2458,8 +2482,14 @@ bool WrappedOpenGL::Serialise_glCompressedTextureSubImage2DEXT(GLuint texture, G if(m_State == READING) { + if(!UnpackBufBound) + m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0); + m_Real.glCompressedTextureSubImage2DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, yoff, Width, Height, fmt, byteSize, buf ? buf : (const void *)bufoffs); + if(!UnpackBufBound) + m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf); + SAFE_DELETE_ARRAY(buf); } @@ -2555,8 +2585,14 @@ bool WrappedOpenGL::Serialise_glCompressedTextureSubImage3DEXT(GLuint texture, G if(m_State == READING) { + if(!UnpackBufBound) + m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0); + m_Real.glCompressedTextureSubImage3DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, yoff, zoff, Width, Height, Depth, fmt, byteSize, buf ? buf : (const void *)bufoffs); + if(!UnpackBufBound) + m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf); + SAFE_DELETE_ARRAY(buf); }