From aae6208b22831bfc2b114a8377906db5ba5f9028 Mon Sep 17 00:00:00 2001 From: Baldur Karlsson Date: Tue, 24 Jun 2014 15:56:01 +0100 Subject: [PATCH] Account for UNPACK_ROW_LENGTH and UNPACK_IMAGE_HEIGHT --- .../driver/gl/wrappers/gl_texture_funcs.cpp | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp index 6ce186fa1..a1d5ce649 100644 --- a/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp @@ -927,11 +927,14 @@ bool WrappedOpenGL::Serialise_glTextureSubImage1DEXT(GLuint texture, GLenum targ SERIALISE_ELEMENT(GLenum, Format, format); SERIALISE_ELEMENT(GLenum, Type, type); SERIALISE_ELEMENT(ResourceId, id, GetResourceManager()->GetID(TextureRes(texture))); - + GLint align = 1; m_Real.glGetIntegerv(eGL_UNPACK_ALIGNMENT, &align); + + GLint rowlen = 0; + m_Real.glGetIntegerv(eGL_UNPACK_ROW_LENGTH, &rowlen); - size_t subimageSize = GetByteSize(Width, 1, 1, Format, Type, Level, align); + size_t subimageSize = GetByteSize(rowlen > 0 ? rowlen : Width, 1, 1, Format, Type, Level, align); SERIALISE_ELEMENT_BUF(byte *, buf, pixels, subimageSize); @@ -998,8 +1001,14 @@ bool WrappedOpenGL::Serialise_glTextureSubImage2DEXT(GLuint texture, GLenum targ GLint align = 1; m_Real.glGetIntegerv(eGL_UNPACK_ALIGNMENT, &align); + + GLint rowlen = 0; + m_Real.glGetIntegerv(eGL_UNPACK_ROW_LENGTH, &rowlen); + + GLint imgheight = 0; + m_Real.glGetIntegerv(eGL_UNPACK_IMAGE_HEIGHT, &imgheight); - size_t subimageSize = GetByteSize(Width, Height, 1, Format, Type, Level, align); + size_t subimageSize = GetByteSize(rowlen > 0 ? rowlen : Width, imgheight > 0 ? imgheight : Height, 1, Format, Type, Level, align); SERIALISE_ELEMENT_BUF(byte *, buf, pixels, subimageSize); @@ -1068,8 +1077,14 @@ bool WrappedOpenGL::Serialise_glTextureSubImage3DEXT(GLuint texture, GLenum targ GLint align = 1; m_Real.glGetIntegerv(eGL_UNPACK_ALIGNMENT, &align); + + GLint rowlen = 0; + m_Real.glGetIntegerv(eGL_UNPACK_ROW_LENGTH, &rowlen); + + GLint imgheight = 0; + m_Real.glGetIntegerv(eGL_UNPACK_IMAGE_HEIGHT, &imgheight); - size_t subimageSize = GetByteSize(Width, Height, Depth, Format, Type, Level, align); + size_t subimageSize = GetByteSize(rowlen > 0 ? rowlen : Width, imgheight > 0 ? imgheight : Height, Depth, Format, Type, Level, align); SERIALISE_ELEMENT_BUF(byte *, buf, pixels, subimageSize);