diff --git a/renderdoc/driver/gl/gl_common.h b/renderdoc/driver/gl/gl_common.h index bc332afc9..e1d975e77 100644 --- a/renderdoc/driver/gl/gl_common.h +++ b/renderdoc/driver/gl/gl_common.h @@ -163,9 +163,12 @@ enum GLChunkType DRAWARRAYS_INSTANCED, DRAWARRAYS_INSTANCEDBASEINSTANCE, DRAWELEMENTS, + DRAWRANGEELEMENTS, DRAWELEMENTS_INSTANCED, DRAWELEMENTS_INSTANCEDBASEINSTANCE, DRAWELEMENTS_BASEVERTEX, + DRAWELEMENTS_INSTANCEDBASEVERTEX, + DRAWELEMENTS_INSTANCEDBASEVERTEXBASEINSTANCE, GEN_FRAMEBUFFERS, FRAMEBUFFER_TEX, diff --git a/renderdoc/driver/gl/gl_context_driver.cpp b/renderdoc/driver/gl/gl_context_driver.cpp index f5e2a7380..948066ee5 100644 --- a/renderdoc/driver/gl/gl_context_driver.cpp +++ b/renderdoc/driver/gl/gl_context_driver.cpp @@ -1112,7 +1112,7 @@ bool WrappedOpenGL::Serialise_glDrawElements(GLenum mode, GLsizei count, GLenum ToStr::Get(Mode) + ", " + ToStr::Get(Count) + ", " + ToStr::Get(Type) + ", " + - ToStr::Get(IdxOffset) + ", " + ")"; + ToStr::Get(IdxOffset) + ")"; FetchDrawcall draw; draw.name = widen(name); @@ -1147,6 +1147,64 @@ void WrappedOpenGL::glDrawElements(GLenum mode, GLsizei count, GLenum type, cons } } +bool WrappedOpenGL::Serialise_glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices) +{ + SERIALISE_ELEMENT(GLenum, Mode, mode); + SERIALISE_ELEMENT(uint32_t, Start, start); + SERIALISE_ELEMENT(uint32_t, End, end); + SERIALISE_ELEMENT(uint32_t, Count, count); + SERIALISE_ELEMENT(GLenum, Type, type); + SERIALISE_ELEMENT(uint64_t, IdxOffset, (uint64_t)indices); + + if(m_State <= EXECUTING) + { + m_Real.glDrawRangeElements(Mode, Start, End, Count, Type, (const void *)IdxOffset); + } + + const string desc = m_pSerialiser->GetDebugStr(); + + if(m_State == READING) + { + AddEvent(DRAWELEMENTS, desc); + string name = "glDrawRangeElements(" + + ToStr::Get(Mode) + ", " + + ToStr::Get(Count) + ", " + + ToStr::Get(Type) + ", " + + ToStr::Get(IdxOffset) + ")"; + + FetchDrawcall draw; + draw.name = widen(name); + draw.numIndices = Count; + draw.numInstances = 1; + draw.indexOffset = (uint32_t)IdxOffset; + draw.vertexOffset = 0; + draw.instanceOffset = 0; + + draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer; + + m_LastDrawMode = Mode; + m_LastIndexSize = Type; + m_LastIndexOffset = (GLuint)IdxOffset; + + AddDrawcall(draw, true); + } + + return true; +} + +void WrappedOpenGL::glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices) +{ + m_Real.glDrawRangeElements(mode, start, end, count, type, indices); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(DRAWRANGEELEMENTS); + Serialise_glDrawRangeElements(mode, start, end, count, type, indices); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + bool WrappedOpenGL::Serialise_glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex) { SERIALISE_ELEMENT(GLenum, Mode, mode); @@ -1170,7 +1228,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsBaseVertex(GLenum mode, GLsizei coun ToStr::Get(Count) + ", " + ToStr::Get(Type) + ", " + ToStr::Get(IdxOffset) + ", " + - ToStr::Get(BaseVtx) + ", " + ")"; + ToStr::Get(BaseVtx) + ")"; FetchDrawcall draw; draw.name = widen(name); @@ -1228,7 +1286,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstanced(GLenum mode, GLsizei count ToStr::Get(Count) + ", " + ToStr::Get(Type) + ", " + ToStr::Get(IdxOffset) + ", " + - ToStr::Get(InstCount) + ", " + ")"; + ToStr::Get(InstCount) + ")"; FetchDrawcall draw; draw.name = widen(name); @@ -1288,7 +1346,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseInstance(GLenum mode, G ToStr::Get(Type) + ", " + ToStr::Get(IdxOffset) + ", " + ToStr::Get(InstCount) + ", " + - ToStr::Get(BaseInstance) + ", " + ")"; + ToStr::Get(BaseInstance) + ")"; FetchDrawcall draw; draw.name = widen(name); @@ -1323,6 +1381,128 @@ void WrappedOpenGL::glDrawElementsInstancedBaseInstance(GLenum mode, GLsizei cou } } +bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex) +{ + SERIALISE_ELEMENT(GLenum, Mode, mode); + SERIALISE_ELEMENT(uint32_t, Count, count); + SERIALISE_ELEMENT(GLenum, Type, type); + SERIALISE_ELEMENT(uint64_t, IdxOffset, (uint64_t)indices); + SERIALISE_ELEMENT(uint32_t, InstCount, instancecount); + SERIALISE_ELEMENT(int32_t, BaseVertex, basevertex); + + if(m_State <= EXECUTING) + { + m_Real.glDrawElementsInstancedBaseVertex(Mode, Count, Type, (const void *)IdxOffset, InstCount, BaseVertex); + } + + const string desc = m_pSerialiser->GetDebugStr(); + + if(m_State == READING) + { + AddEvent(DRAWELEMENTS_INSTANCEDBASEVERTEX, desc); + string name = "glDrawElementsInstancedBaseVertex(" + + ToStr::Get(Mode) + ", " + + ToStr::Get(Count) + ", " + + ToStr::Get(Type) + ", " + + ToStr::Get(IdxOffset) + ", " + + ToStr::Get(InstCount) + ", " + + ToStr::Get(BaseVertex) + ")"; + + FetchDrawcall draw; + draw.name = widen(name); + draw.numIndices = Count; + draw.numInstances = InstCount; + draw.indexOffset = (uint32_t)IdxOffset; + draw.vertexOffset = BaseVertex; + draw.instanceOffset = 0; + + draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer; + + m_LastDrawMode = Mode; + m_LastIndexSize = Type; + m_LastIndexOffset = (GLuint)IdxOffset; + + AddDrawcall(draw, true); + } + + return true; +} + +void WrappedOpenGL::glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex) +{ + m_Real.glDrawElementsInstancedBaseVertex(mode, count, type, indices, instancecount, basevertex); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(DRAWELEMENTS_INSTANCEDBASEVERTEX); + Serialise_glDrawElementsInstancedBaseVertex(mode, count, type, indices, instancecount, basevertex); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + +bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseVertexBaseInstance(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance) +{ + SERIALISE_ELEMENT(GLenum, Mode, mode); + SERIALISE_ELEMENT(uint32_t, Count, count); + SERIALISE_ELEMENT(GLenum, Type, type); + SERIALISE_ELEMENT(uint64_t, IdxOffset, (uint64_t)indices); + SERIALISE_ELEMENT(uint32_t, InstCount, instancecount); + SERIALISE_ELEMENT(int32_t, BaseVertex, basevertex); + SERIALISE_ELEMENT(uint32_t, BaseInstance, baseinstance); + + if(m_State <= EXECUTING) + { + m_Real.glDrawElementsInstancedBaseVertexBaseInstance(Mode, Count, Type, (const void *)IdxOffset, InstCount, BaseVertex, BaseInstance); + } + + const string desc = m_pSerialiser->GetDebugStr(); + + if(m_State == READING) + { + AddEvent(DRAWELEMENTS_INSTANCEDBASEVERTEXBASEINSTANCE, desc); + string name = "glDrawElementsInstancedBaseVertexBaseInstance(" + + ToStr::Get(Mode) + ", " + + ToStr::Get(Count) + ", " + + ToStr::Get(Type) + ", " + + ToStr::Get(IdxOffset) + ", " + + ToStr::Get(InstCount) + ", " + + ToStr::Get(BaseVertex) + ", " + + ToStr::Get(BaseInstance) + ")"; + + FetchDrawcall draw; + draw.name = widen(name); + draw.numIndices = Count; + draw.numInstances = InstCount; + draw.indexOffset = (uint32_t)IdxOffset; + draw.vertexOffset = BaseVertex; + draw.instanceOffset = BaseInstance; + + draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer; + + m_LastDrawMode = Mode; + m_LastIndexSize = Type; + m_LastIndexOffset = (GLuint)IdxOffset; + + AddDrawcall(draw, true); + } + + return true; +} + +void WrappedOpenGL::glDrawElementsInstancedBaseVertexBaseInstance(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance) +{ + m_Real.glDrawElementsInstancedBaseVertexBaseInstance(mode, count, type, indices, instancecount, basevertex, baseinstance); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(DRAWELEMENTS_INSTANCEDBASEVERTEXBASEINSTANCE); + Serialise_glDrawElementsInstancedBaseVertexBaseInstance(mode, count, type, indices, instancecount, basevertex, baseinstance); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + bool WrappedOpenGL::Serialise_glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value) { SERIALISE_ELEMENT(GLenum, buf, buffer); diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index 06e4c0381..66e122b7b 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -120,9 +120,12 @@ const char *GLChunkNames[] = "glDrawArraysInstanced", "glDrawArraysInstancedBaseInstance", "glDrawElements", + "glDrawRangeElements", "glDrawElementsInstanced", "glDrawElementsInstancedBaseInstance", "glDrawElementsBaseVertex", + "glDrawElementsInstancedBaseVertex", + "glDrawElementsInstancedBaseVertexBaseInstance", "glGenFramebuffers", "glFramebufferTexture", "glReadBuffer", @@ -1197,14 +1200,20 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context) case DRAWELEMENTS: Serialise_glDrawElements(eGL_UNKNOWN_ENUM, 0, eGL_UNKNOWN_ENUM, NULL); break; + case DRAWELEMENTS_BASEVERTEX: + Serialise_glDrawElementsBaseVertex(eGL_UNKNOWN_ENUM, 0, eGL_UNKNOWN_ENUM, NULL, 0); + break; case DRAWELEMENTS_INSTANCED: Serialise_glDrawElementsInstanced(eGL_UNKNOWN_ENUM, 0, eGL_UNKNOWN_ENUM, NULL, 0); break; case DRAWELEMENTS_INSTANCEDBASEINSTANCE: Serialise_glDrawElementsInstancedBaseInstance(eGL_UNKNOWN_ENUM, 0, eGL_UNKNOWN_ENUM, NULL, 0, 0); break; - case DRAWELEMENTS_BASEVERTEX: - Serialise_glDrawElementsBaseVertex(eGL_UNKNOWN_ENUM, 0, eGL_UNKNOWN_ENUM, NULL, 0); + case DRAWELEMENTS_INSTANCEDBASEVERTEX: + Serialise_glDrawElementsInstancedBaseVertex(eGL_UNKNOWN_ENUM, 0, eGL_UNKNOWN_ENUM, NULL, 0, 0); + break; + case DRAWELEMENTS_INSTANCEDBASEVERTEXBASEINSTANCE: + Serialise_glDrawElementsInstancedBaseVertexBaseInstance(eGL_UNKNOWN_ENUM, 0, eGL_UNKNOWN_ENUM, NULL, 0, 0, 0); break; case GEN_BUFFER: diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index eabc37663..e0d9f7a68 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -450,9 +450,12 @@ class WrappedOpenGL IMPLEMENT_FUNCTION_SERIALISED(void, glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount)); IMPLEMENT_FUNCTION_SERIALISED(void, glDrawArraysInstancedBaseInstance(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance)); IMPLEMENT_FUNCTION_SERIALISED(void, glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)); + IMPLEMENT_FUNCTION_SERIALISED(void, glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices)); IMPLEMENT_FUNCTION_SERIALISED(void, glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex)); IMPLEMENT_FUNCTION_SERIALISED(void, glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount)); IMPLEMENT_FUNCTION_SERIALISED(void, glDrawElementsInstancedBaseInstance(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance)); + IMPLEMENT_FUNCTION_SERIALISED(void, glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex)); + IMPLEMENT_FUNCTION_SERIALISED(void, glDrawElementsInstancedBaseVertexBaseInstance(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance)); IMPLEMENT_FUNCTION_SERIALISED(void, glDeleteBuffers(GLsizei n, const GLuint *buffers)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, void *data)); IMPLEMENT_FUNCTION_SERIALISED(void, glDeleteVertexArrays(GLsizei n, const GLuint *arrays)); diff --git a/renderdoc/driver/gl/gl_hookset.h b/renderdoc/driver/gl/gl_hookset.h index 868a74250..748f4a0e4 100644 --- a/renderdoc/driver/gl/gl_hookset.h +++ b/renderdoc/driver/gl/gl_hookset.h @@ -42,6 +42,7 @@ struct GLHookSet PFNGLDEPTHMASKPROC glDepthMask; PFNGLDISABLEPROC glDisable; PFNGLDRAWBUFFERPROC glDrawBuffer; + PFNGLDRAWELEMENTSPROC glDrawElements; PFNGLDRAWARRAYSPROC glDrawArrays; PFNGLENABLEPROC glEnable; PFNGLFLUSHPROC glFlush; @@ -206,12 +207,14 @@ struct GLHookSet PFNGLUNIFORM2FVPROC glUniform2fv; PFNGLUNIFORM3FVPROC glUniform3fv; PFNGLUNIFORM4FVPROC glUniform4fv; + PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements; PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glDrawArraysInstancedBaseInstance; PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced; - PFNGLDRAWELEMENTSPROC glDrawElements; PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced; PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glDrawElementsInstancedBaseInstance; PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex; + PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertex; + PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glDrawElementsInstancedBaseVertexBaseInstance; PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer; // -- diff --git a/renderdoc/driver/gl/gl_hookset_defs.h b/renderdoc/driver/gl/gl_hookset_defs.h index d2f123cde..76b7d9574 100644 --- a/renderdoc/driver/gl/gl_hookset_defs.h +++ b/renderdoc/driver/gl/gl_hookset_defs.h @@ -42,6 +42,7 @@ HookInit(glDepthMask); \ HookInit(glDisable); \ HookInit(glDrawBuffer); \ + HookInit(glDrawElements); \ HookInit(glDrawArrays); \ HookInit(glEnable); \ HookInit(glFlush); \ @@ -218,12 +219,14 @@ HookExtension(PFNGLUNIFORM2FVPROC, glUniform2fv); \ HookExtension(PFNGLUNIFORM3FVPROC, glUniform3fv); \ HookExtension(PFNGLUNIFORM4FVPROC, glUniform4fv); \ + HookExtension(PFNGLDRAWRANGEELEMENTSPROC, glDrawRangeElements); \ HookExtension(PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC, glDrawArraysInstancedBaseInstance); \ HookExtension(PFNGLDRAWARRAYSINSTANCEDPROC, glDrawArraysInstanced); \ - HookExtension(PFNGLDRAWELEMENTSPROC, glDrawElements); \ HookExtension(PFNGLDRAWELEMENTSINSTANCEDPROC, glDrawElementsInstanced); \ HookExtension(PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC, glDrawElementsInstancedBaseInstance); \ HookExtension(PFNGLDRAWELEMENTSBASEVERTEXPROC, glDrawElementsBaseVertex); \ + HookExtension(PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC, glDrawElementsInstancedBaseVertex); \ + HookExtension(PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC, glDrawElementsInstancedBaseVertexBaseInstance); \ HookExtension(PFNGLBLITFRAMEBUFFERPROC, glBlitFramebuffer); \ HookExtension(PFNGLBINDTEXTUREPROC, glBindTexture); \ HookExtension(PFNGLBLENDFUNCPROC, glBlendFunc); \ @@ -236,6 +239,7 @@ HookExtension(PFNGLDEPTHMASKPROC, glDepthMask); \ HookExtension(PFNGLDISABLEPROC, glDisable); \ HookExtension(PFNGLDRAWBUFFERPROC, glDrawBuffer); \ + HookExtension(PFNGLDRAWELEMENTSPROC, glDrawElements); \ HookExtension(PFNGLDRAWARRAYSPROC, glDrawArrays); \ HookExtension(PFNGLENABLEPROC, glEnable); \ HookExtension(PFNGLFLUSHPROC, glFlush); \ @@ -300,6 +304,7 @@ HookWrapper1(void, glDepthMask, GLboolean, flag); \ HookWrapper1(void, glDisable, GLenum, cap); \ HookWrapper1(void, glDrawBuffer, GLenum, mode); \ + HookWrapper4(void, glDrawElements, GLenum, mode, GLsizei, count, GLenum, type, const void *, indices); \ HookWrapper3(void, glDrawArrays, GLenum, mode, GLint, first, GLsizei, count); \ HookWrapper1(void, glEnable, GLenum, cap); \ HookWrapper0(void, glFlush); \ @@ -388,10 +393,10 @@ HookWrapper2(void, glBlendEquationSeparate, GLenum, modeRGB, GLenum, modeAlpha); \ HookWrapper3(void, glBlendEquationSeparatei, GLuint, buf, GLenum, modeRGB, GLenum, modeAlpha); \ HookWrapper5(void, glColorMaski, GLuint, index, GLboolean, r, GLboolean, g, GLboolean, b, GLboolean, a); \ - HookWrapper2(void, glDepthRange, GLdouble, nearVal, GLdouble, farVal); \ - HookWrapper2(void, glDepthRangef, GLfloat, nearVal, GLfloat, farVal); \ + HookWrapper2(void, glDepthRange, GLdouble, near, GLdouble, far); \ + HookWrapper2(void, glDepthRangef, GLfloat, n, GLfloat, f); \ HookWrapper3(void, glDepthRangeArrayv, GLuint, first, GLsizei, count, const GLdouble *, v); \ - HookWrapper2(void, glDepthBoundsEXT, GLclampd, nearVal, GLclampd, farVal); \ + HookWrapper2(void, glDepthBoundsEXT, GLclampd, zmin, GLclampd, zmax); \ HookWrapper1(GLuint, glCreateShader, GLenum, type); \ HookWrapper1(void, glDeleteShader, GLuint, shader); \ HookWrapper4(void, glShaderSource, GLuint, shader, GLsizei, count, const GLchar *const*, string, const GLint *, length); \ @@ -475,12 +480,14 @@ HookWrapper3(void, glUniform2fv, GLint, location, GLsizei, count, const GLfloat *, value); \ HookWrapper3(void, glUniform3fv, GLint, location, GLsizei, count, const GLfloat *, value); \ HookWrapper3(void, glUniform4fv, GLint, location, GLsizei, count, const GLfloat *, value); \ + HookWrapper6(void, glDrawRangeElements, GLenum, mode, GLuint, start, GLuint, end, GLsizei, count, GLenum, type, const void *, indices); \ HookWrapper5(void, glDrawArraysInstancedBaseInstance, GLenum, mode, GLint, first, GLsizei, count, GLsizei, instancecount, GLuint, baseinstance); \ HookWrapper4(void, glDrawArraysInstanced, GLenum, mode, GLint, first, GLsizei, count, GLsizei, instancecount); \ - HookWrapper4(void, glDrawElements, GLenum, mode, GLsizei, count, GLenum, type, const void *, indices); \ HookWrapper5(void, glDrawElementsInstanced, GLenum, mode, GLsizei, count, GLenum, type, const void *, indices, GLsizei, instancecount); \ HookWrapper6(void, glDrawElementsInstancedBaseInstance, GLenum, mode, GLsizei, count, GLenum, type, const void *, indices, GLsizei, instancecount, GLuint, baseinstance); \ HookWrapper5(void, glDrawElementsBaseVertex, GLenum, mode, GLsizei, count, GLenum, type, const void *, indices, GLint, basevertex); \ + HookWrapper6(void, glDrawElementsInstancedBaseVertex, GLenum, mode, GLsizei, count, GLenum, type, const void *, indices, GLsizei, instancecount, GLint, basevertex); \ + HookWrapper7(void, glDrawElementsInstancedBaseVertexBaseInstance, GLenum, mode, GLsizei, count, GLenum, type, const void *, indices, GLsizei, instancecount, GLint, basevertex, GLuint, baseinstance); \ HookWrapper10(void, glBlitFramebuffer, GLint, srcX0, GLint, srcY0, GLint, srcX1, GLint, srcY1, GLint, dstX0, GLint, dstY0, GLint, dstX1, GLint, dstY1, GLbitfield, mask, GLenum, filter); \