From fd7bb21832db003bd9fd6d130e7bf39351ed2d50 Mon Sep 17 00:00:00 2001 From: Baldur Karlsson Date: Wed, 18 Jun 2014 14:13:04 +0100 Subject: [PATCH] Add compressed texture manipulation functions --- renderdoc/driver/gl/gl_common.h | 3 + renderdoc/driver/gl/gl_device_driver.cpp | 141 +++++++++++++++++++++++ renderdoc/driver/gl/gl_driver.cpp | 17 +++ renderdoc/driver/gl/gl_driver.h | 7 ++ renderdoc/driver/gl/gl_hookset.h | 11 +- renderdoc/driver/gl/gl_hookset_defs.h | 24 +++- 6 files changed, 197 insertions(+), 6 deletions(-) diff --git a/renderdoc/driver/gl/gl_common.h b/renderdoc/driver/gl/gl_common.h index f27062825..5269009a3 100644 --- a/renderdoc/driver/gl/gl_common.h +++ b/renderdoc/driver/gl/gl_common.h @@ -89,6 +89,9 @@ enum GLChunkType TEXSUBIMAGE1D, TEXSUBIMAGE2D, TEXSUBIMAGE3D, + TEXSUBIMAGE1D_COMPRESSED, + TEXSUBIMAGE2D_COMPRESSED, + TEXSUBIMAGE3D_COMPRESSED, PIXELSTORE, TEXPARAMETERF, TEXPARAMETERFV, diff --git a/renderdoc/driver/gl/gl_device_driver.cpp b/renderdoc/driver/gl/gl_device_driver.cpp index 6323b8a2a..5b7fab3b6 100644 --- a/renderdoc/driver/gl/gl_device_driver.cpp +++ b/renderdoc/driver/gl/gl_device_driver.cpp @@ -420,6 +420,126 @@ void WrappedOpenGL::glTexSubImage3D(GLenum target, GLint level, GLint xoffset, G } } +bool WrappedOpenGL::Serialise_glCompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *pixels) +{ + SERIALISE_ELEMENT(GLenum, Target, target); + SERIALISE_ELEMENT(int32_t, Level, level); + SERIALISE_ELEMENT(int32_t, xoff, xoffset); + SERIALISE_ELEMENT(uint32_t, Width, width); + SERIALISE_ELEMENT(GLenum, fmt, format); + SERIALISE_ELEMENT(uint32_t, byteSize, imageSize); + SERIALISE_ELEMENT(ResourceId, id, m_TextureRecord[m_TextureUnit]->GetResourceID()); + + SERIALISE_ELEMENT_BUF(byte *, buf, pixels, byteSize); + + if(m_State == READING) + { + m_Real.glBindTexture(Target, GetResourceManager()->GetLiveResource(id).name); + m_Real.glCompressedTexSubImage1D(Target, Level, xoff, Width, fmt, byteSize, buf); + + delete[] buf; + } + + return true; +} + +void WrappedOpenGL::glCompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *pixels) +{ + m_Real.glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, pixels); + + if(m_State >= WRITING) + { + RDCASSERT(m_TextureRecord[m_TextureUnit]); + + SCOPED_SERIALISE_CONTEXT(TEXSUBIMAGE1D_COMPRESSED); + Serialise_glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, pixels); + + m_TextureRecord[m_TextureUnit]->AddChunk(scope.Get()); + } +} + +bool WrappedOpenGL::Serialise_glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels) +{ + SERIALISE_ELEMENT(GLenum, Target, target); + SERIALISE_ELEMENT(int32_t, Level, level); + SERIALISE_ELEMENT(int32_t, xoff, xoffset); + SERIALISE_ELEMENT(int32_t, yoff, yoffset); + SERIALISE_ELEMENT(uint32_t, Width, width); + SERIALISE_ELEMENT(uint32_t, Height, height); + SERIALISE_ELEMENT(GLenum, fmt, format); + SERIALISE_ELEMENT(uint32_t, byteSize, imageSize); + SERIALISE_ELEMENT(ResourceId, id, m_TextureRecord[m_TextureUnit]->GetResourceID()); + + SERIALISE_ELEMENT_BUF(byte *, buf, pixels, byteSize); + + if(m_State == READING) + { + m_Real.glBindTexture(Target, GetResourceManager()->GetLiveResource(id).name); + m_Real.glCompressedTexSubImage2D(Target, Level, xoff, yoff, Width, Height, fmt, byteSize, buf); + + delete[] buf; + } + + return true; +} + +void WrappedOpenGL::glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels) +{ + m_Real.glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, pixels); + + if(m_State >= WRITING) + { + RDCASSERT(m_TextureRecord[m_TextureUnit]); + + SCOPED_SERIALISE_CONTEXT(TEXSUBIMAGE2D_COMPRESSED); + Serialise_glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, pixels); + + m_TextureRecord[m_TextureUnit]->AddChunk(scope.Get()); + } +} + +bool WrappedOpenGL::Serialise_glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *pixels) +{ + SERIALISE_ELEMENT(GLenum, Target, target); + SERIALISE_ELEMENT(int32_t, Level, level); + SERIALISE_ELEMENT(int32_t, xoff, xoffset); + SERIALISE_ELEMENT(int32_t, yoff, yoffset); + SERIALISE_ELEMENT(int32_t, zoff, zoffset); + SERIALISE_ELEMENT(uint32_t, Width, width); + SERIALISE_ELEMENT(uint32_t, Height, height); + SERIALISE_ELEMENT(uint32_t, Depth, depth); + SERIALISE_ELEMENT(GLenum, fmt, format); + SERIALISE_ELEMENT(uint32_t, byteSize, imageSize); + SERIALISE_ELEMENT(ResourceId, id, m_TextureRecord[m_TextureUnit]->GetResourceID()); + + SERIALISE_ELEMENT_BUF(byte *, buf, pixels, byteSize); + + if(m_State == READING) + { + m_Real.glBindTexture(Target, GetResourceManager()->GetLiveResource(id).name); + m_Real.glCompressedTexSubImage3D(Target, Level, xoff, yoff, zoff, Width, Height, Depth, fmt, byteSize, buf); + + delete[] buf; + } + + return true; +} + +void WrappedOpenGL::glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *pixels) +{ + m_Real.glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, pixels); + + if(m_State >= WRITING) + { + RDCASSERT(m_TextureRecord[m_TextureUnit]); + + SCOPED_SERIALISE_CONTEXT(TEXSUBIMAGE3D_COMPRESSED); + Serialise_glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, pixels); + + m_TextureRecord[m_TextureUnit]->AddChunk(scope.Get()); + } +} + bool WrappedOpenGL::Serialise_glGenerateMipmap(GLenum target) { SERIALISE_ELEMENT(GLenum, Target, target); @@ -918,6 +1038,27 @@ void WrappedOpenGL::glTexImage3D(GLenum target, GLint level, GLint internalforma RDCUNIMPLEMENTED(); } +void WrappedOpenGL::glCompressedTexImage1D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *pixels) +{ + m_Real.glCompressedTexImage1D(target, level, internalformat, width, border, imageSize, pixels); + + RDCUNIMPLEMENTED(); +} + +void WrappedOpenGL::glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * pixels) +{ + m_Real.glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, pixels); + + RDCUNIMPLEMENTED(); +} + +void WrappedOpenGL::glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * pixels) +{ + m_Real.glCompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, pixels); + + RDCUNIMPLEMENTED(); +} + bool WrappedOpenGL::Serialise_glActiveTexture(GLenum texture) { SERIALISE_ELEMENT(GLenum, Texture, texture); diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index 0cc6f440c..b25ea58c8 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -46,6 +46,9 @@ const char *GLChunkNames[] = "glTexSubImage1D", "glTexSubImage2D", "glTexSubImage3D", + "glCompressedTexSubImage1D", + "glCompressedTexSubImage2D", + "glCompressedTexSubImage3D", "glPixelStore", "glTexParameterf", "glTexParameterfv", @@ -1046,6 +1049,15 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context) case TEXSUBIMAGE3D: Serialise_glTexSubImage3D(eGL_UNKNOWN_ENUM, 0, 0, 0, 0, 0, 0, 0, eGL_UNKNOWN_ENUM, eGL_UNKNOWN_ENUM, NULL); break; + case TEXSUBIMAGE1D_COMPRESSED: + Serialise_glCompressedTexSubImage1D(eGL_UNKNOWN_ENUM, 0, 0, 0, eGL_UNKNOWN_ENUM, 0, NULL); + break; + case TEXSUBIMAGE2D_COMPRESSED: + Serialise_glCompressedTexSubImage2D(eGL_UNKNOWN_ENUM, 0, 0, 0, 0, 0, eGL_UNKNOWN_ENUM, 0, NULL); + break; + case TEXSUBIMAGE3D_COMPRESSED: + Serialise_glCompressedTexSubImage3D(eGL_UNKNOWN_ENUM, 0, 0, 0, 0, 0, 0, 0, eGL_UNKNOWN_ENUM, 0, NULL); + break; case PIXELSTORE: Serialise_glPixelStorei(eGL_UNKNOWN_ENUM, 0); break; @@ -1853,6 +1865,11 @@ void WrappedOpenGL::glGetTexImage(GLenum target, GLint level, GLenum format, GLe m_Real.glGetTexImage(target, level, format, type, pixels); } +void WrappedOpenGL::glGetCompressedTexImage(GLenum target, GLint level, void *img) +{ + m_Real.glGetCompressedTexImage(target, level, img); +} + void WrappedOpenGL::glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params) { m_Real.glGetInternalformativ(target, internalformat, pname, bufSize, params); diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index e85ea285d..918b810cb 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -328,6 +328,9 @@ class WrappedOpenGL IMPLEMENT_FUNCTION_SERIALISED(void, glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels)); IMPLEMENT_FUNCTION_SERIALISED(void, glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels)); IMPLEMENT_FUNCTION_SERIALISED(void, glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTexImage1D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *pixels)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * pixels)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * pixels)); IMPLEMENT_FUNCTION_SERIALISED(void, glTexParameterf(GLenum target, GLenum pname, GLfloat param)); IMPLEMENT_FUNCTION_SERIALISED(void, glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)); IMPLEMENT_FUNCTION_SERIALISED(void, glTexParameteri(GLenum target, GLenum pname, GLint param)); @@ -375,6 +378,9 @@ class WrappedOpenGL IMPLEMENT_FUNCTION_SERIALISED(void, glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)); IMPLEMENT_FUNCTION_SERIALISED(void, glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)); IMPLEMENT_FUNCTION_SERIALISED(void, glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data)); IMPLEMENT_FUNCTION_SERIALISED(void, glGenerateMipmap(GLenum target)); IMPLEMENT_FUNCTION_SERIALISED(void, glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)); @@ -383,6 +389,7 @@ class WrappedOpenGL IMPLEMENT_FUNCTION_SERIALISED(void, glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void *pixels)); + IMPLEMENT_FUNCTION_SERIALISED(void, glGetCompressedTexImage(GLenum target, GLint level, void *img)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetInternalformati64v(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)); diff --git a/renderdoc/driver/gl/gl_hookset.h b/renderdoc/driver/gl/gl_hookset.h index 1d05be895..d754cf03a 100644 --- a/renderdoc/driver/gl/gl_hookset.h +++ b/renderdoc/driver/gl/gl_hookset.h @@ -76,6 +76,8 @@ struct GLHookSet PFNGLTEXIMAGE1DPROC glTexImage1D; PFNGLTEXIMAGE2DPROC glTexImage2D; PFNGLTEXIMAGE3DPROC glTexImage3D; + PFNGLTEXSUBIMAGE1DPROC glTexSubImage1D; + PFNGLTEXSUBIMAGE2DPROC glTexSubImage2D; PFNGLTEXPARAMETERFPROC glTexParameterf; PFNGLTEXPARAMETERFVPROC glTexParameterfv; PFNGLTEXPARAMETERIPROC glTexParameteri; @@ -107,9 +109,13 @@ struct GLHookSet PFNGLTEXSTORAGE1DPROC glTexStorage1D; PFNGLTEXSTORAGE2DPROC glTexStorage2D; PFNGLTEXSTORAGE3DPROC glTexStorage3D; - PFNGLTEXSUBIMAGE1DPROC glTexSubImage1D; - PFNGLTEXSUBIMAGE2DPROC glTexSubImage2D; PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D; + PFNGLCOMPRESSEDTEXIMAGE1DPROC glCompressedTexImage1D; + PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D; + PFNGLCOMPRESSEDTEXIMAGE3DPROC glCompressedTexImage3D; + PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glCompressedTexSubImage1D; + PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glCompressedTexSubImage2D; + PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glCompressedTexSubImage3D; PFNGLGENERATEMIPMAPPROC glGenerateMipmap; PFNGLGETINTERNALFORMATIVPROC glGetInternalformativ; PFNGLGETINTERNALFORMATI64VPROC glGetInternalformati64v; @@ -204,6 +210,7 @@ struct GLHookSet PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray; PFNGLGETVERTEXATTRIBIVPROC glGetVertexAttribiv; PFNGLGETVERTEXATTRIBPOINTERVPROC glGetVertexAttribPointerv; + PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage; PFNGLGENSAMPLERSPROC glGenSamplers; PFNGLBINDSAMPLERPROC glBindSampler; PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri; diff --git a/renderdoc/driver/gl/gl_hookset_defs.h b/renderdoc/driver/gl/gl_hookset_defs.h index 915bab306..0731a0a59 100644 --- a/renderdoc/driver/gl/gl_hookset_defs.h +++ b/renderdoc/driver/gl/gl_hookset_defs.h @@ -76,6 +76,8 @@ HookInit(glTexImage1D); \ HookInit(glTexImage2D); \ HookInit(glTexImage3D); \ + HookInit(glTexSubImage1D); \ + HookInit(glTexSubImage2D); \ HookInit(glTexParameterf); \ HookInit(glTexParameterfv); \ HookInit(glTexParameteri); \ @@ -118,9 +120,13 @@ HookExtension(PFNGLTEXSTORAGE1DPROC, glTexStorage1D); \ HookExtension(PFNGLTEXSTORAGE2DPROC, glTexStorage2D); \ HookExtension(PFNGLTEXSTORAGE3DPROC, glTexStorage3D); \ - HookExtension(PFNGLTEXSUBIMAGE1DPROC, glTexSubImage1D); \ - HookExtension(PFNGLTEXSUBIMAGE2DPROC, glTexSubImage2D); \ HookExtension(PFNGLTEXSUBIMAGE3DPROC, glTexSubImage3D); \ + HookExtension(PFNGLCOMPRESSEDTEXIMAGE1DPROC, glCompressedTexImage1D); \ + HookExtension(PFNGLCOMPRESSEDTEXIMAGE2DPROC, glCompressedTexImage2D); \ + HookExtension(PFNGLCOMPRESSEDTEXIMAGE3DPROC, glCompressedTexImage3D); \ + HookExtension(PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC, glCompressedTexSubImage1D); \ + HookExtension(PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC, glCompressedTexSubImage2D); \ + HookExtension(PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC, glCompressedTexSubImage3D); \ HookExtension(PFNGLGENERATEMIPMAPPROC, glGenerateMipmap); \ HookExtension(PFNGLGETINTERNALFORMATIVPROC, glGetInternalformativ); \ HookExtension(PFNGLGETINTERNALFORMATI64VPROC, glGetInternalformati64v); \ @@ -216,6 +222,7 @@ HookExtension(PFNGLDISABLEVERTEXATTRIBARRAYPROC, glDisableVertexAttribArray); \ HookExtension(PFNGLGETVERTEXATTRIBIVPROC, glGetVertexAttribiv); \ HookExtension(PFNGLGETVERTEXATTRIBPOINTERVPROC, glGetVertexAttribPointerv); \ + HookExtension(PFNGLGETCOMPRESSEDTEXIMAGEPROC, glGetCompressedTexImage); \ HookExtension(PFNGLGENSAMPLERSPROC, glGenSamplers); \ HookExtension(PFNGLBINDSAMPLERPROC, glBindSampler); \ HookExtension(PFNGLSAMPLERPARAMETERIPROC, glSamplerParameteri); \ @@ -309,6 +316,8 @@ HookExtension(PFNGLTEXIMAGE1DPROC, glTexImage1D); \ HookExtension(PFNGLTEXIMAGE2DPROC, glTexImage2D); \ HookExtension(PFNGLTEXIMAGE3DPROC, glTexImage3D); \ + HookExtension(PFNGLTEXSUBIMAGE1DPROC, glTexSubImage1D); \ + HookExtension(PFNGLTEXSUBIMAGE2DPROC, glTexSubImage2D); \ HookExtension(PFNGLTEXPARAMETERFPROC, glTexParameterf); \ HookExtension(PFNGLTEXPARAMETERFVPROC, glTexParameterfv); \ HookExtension(PFNGLTEXPARAMETERIPROC, glTexParameteri); \ @@ -382,6 +391,8 @@ HookWrapper8(void, glTexImage1D, GLenum, target, GLint, level, GLint, internalformat, GLsizei, width, GLint, border, GLenum, format, GLenum, type, const void *, pixels); \ HookWrapper9(void, glTexImage2D, GLenum, target, GLint, level, GLint, internalformat, GLsizei, width, GLsizei, height, GLint, border, GLenum, format, GLenum, type, const void *, pixels); \ HookWrapper10(void, glTexImage3D, GLenum, target, GLint, level, GLint, internalformat, GLsizei, width, GLsizei, height, GLsizei, depth, GLint, border, GLenum, format, GLenum, type, const void *, pixels); \ + HookWrapper7(void, glTexSubImage1D, GLenum, target, GLint, level, GLint, xoffset, GLsizei, width, GLenum, format, GLenum, type, const void *, pixels); \ + HookWrapper9(void, glTexSubImage2D, GLenum, target, GLint, level, GLint, xoffset, GLint, yoffset, GLsizei, width, GLsizei, height, GLenum, format, GLenum, type, const void *, pixels); \ HookWrapper3(void, glTexParameterf, GLenum, target, GLenum, pname, GLfloat, param); \ HookWrapper3(void, glTexParameterfv, GLenum, target, GLenum, pname, const GLfloat *, params); \ HookWrapper3(void, glTexParameteri, GLenum, target, GLenum, pname, GLint, param); \ @@ -424,9 +435,13 @@ HookWrapper4(void, glTexStorage1D, GLenum, target, GLsizei, levels, GLenum, internalformat, GLsizei, width); \ HookWrapper5(void, glTexStorage2D, GLenum, target, GLsizei, levels, GLenum, internalformat, GLsizei, width, GLsizei, height); \ HookWrapper6(void, glTexStorage3D, GLenum, target, GLsizei, levels, GLenum, internalformat, GLsizei, width, GLsizei, height, GLsizei, depth); \ - HookWrapper7(void, glTexSubImage1D, GLenum, target, GLint, level, GLint, xoffset, GLsizei, width, GLenum, format, GLenum, type, const void *, pixels); \ - HookWrapper9(void, glTexSubImage2D, GLenum, target, GLint, level, GLint, xoffset, GLint, yoffset, GLsizei, width, GLsizei, height, GLenum, format, GLenum, type, const void *, pixels); \ HookWrapper11(void, glTexSubImage3D, GLenum, target, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLsizei, width, GLsizei, height, GLsizei, depth, GLenum, format, GLenum, type, const void *, pixels); \ + HookWrapper7(void, glCompressedTexImage1D, GLenum, target, GLint, level, GLenum, internalformat, GLsizei, width, GLint, border, GLsizei, imageSize, const void *, data); \ + HookWrapper8(void, glCompressedTexImage2D, GLenum, target, GLint, level, GLenum, internalformat, GLsizei, width, GLsizei, height, GLint, border, GLsizei, imageSize, const void *, data); \ + HookWrapper9(void, glCompressedTexImage3D, GLenum, target, GLint, level, GLenum, internalformat, GLsizei, width, GLsizei, height, GLsizei, depth, GLint, border, GLsizei, imageSize, const void *, data); \ + HookWrapper7(void, glCompressedTexSubImage1D, GLenum, target, GLint, level, GLint, xoffset, GLsizei, width, GLenum, format, GLsizei, imageSize, const void *, data); \ + HookWrapper9(void, glCompressedTexSubImage2D, GLenum, target, GLint, level, GLint, xoffset, GLint, yoffset, GLsizei, width, GLsizei, height, GLenum, format, GLsizei, imageSize, const void *, data); \ + HookWrapper11(void, glCompressedTexSubImage3D, GLenum, target, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLsizei, width, GLsizei, height, GLsizei, depth, GLenum, format, GLsizei, imageSize, const void *, data); \ HookWrapper1(void, glGenerateMipmap, GLenum, target); \ HookWrapper5(void, glGetInternalformativ, GLenum, target, GLenum, internalformat, GLenum, pname, GLsizei, bufSize, GLint *, params); \ HookWrapper5(void, glGetInternalformati64v, GLenum, target, GLenum, internalformat, GLenum, pname, GLsizei, bufSize, GLint64 *, params); \ @@ -521,6 +536,7 @@ HookWrapper1(void, glDisableVertexAttribArray, GLuint, index); \ HookWrapper3(void, glGetVertexAttribiv, GLuint, index, GLenum, pname, GLint *, params); \ HookWrapper3(void, glGetVertexAttribPointerv, GLuint, index, GLenum, pname, void **, pointer); \ + HookWrapper3(void, glGetCompressedTexImage, GLenum, target, GLint, level, void *, img); \ HookWrapper2(void, glGenSamplers, GLsizei, count, GLuint *, samplers); \ HookWrapper2(void, glBindSampler, GLuint, unit, GLuint, sampler); \ HookWrapper3(void, glSamplerParameteri, GLuint, sampler, GLenum, pname, GLint, param); \