ARB_dsa part 1 - hook DSA functions, implement all but tex* & create*

* Doesn't compile yet! Just splitting this up logically so the change is
  a bit easier to digest.
* I've commented and organised a bit better the gl_hookset.h hook list.
* The function hooks are set up for all of the ARB_dsa entry points.
  Those that are semnatically identical to EXT_dsa are set up as aliases
  (with EXT_ being canonical, so we can fall back if ARB_dsa isn't
  supported - see comments in gl_hookset.h).
* Implemented the new functions except for the glTexture* family and the
  glCreate* family. No deduplication of code yet.
* As with EXT_dsa we "promote" to the DSA function for serialisation,
  but since unlike EXT_dsa we can't assume ARB_dsa is present, instead
  we emulate those functions that we might use unconditionally but may
  not be present.
This commit is contained in:
baldurk
2015-02-22 23:36:33 +00:00
parent 8b9459b841
commit c9c52537f1
15 changed files with 1042 additions and 340 deletions
+1
View File
@@ -47,6 +47,7 @@ driver/gl/gl_renderstate.o \
driver/gl/wrappers/gl_buffer_funcs.o \
driver/gl/wrappers/gl_debug_funcs.o \
driver/gl/wrappers/gl_draw_funcs.o \
driver/gl/wrappers/gl_emulated.o \
driver/gl/wrappers/gl_framebuffer_funcs.o \
driver/gl/wrappers/gl_get_funcs.o \
driver/gl/wrappers/gl_query_funcs.o \
+6 -6
View File
@@ -2577,16 +2577,16 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
Serialise_glClear(0);
break;
case CLEARBUFFERF:
Serialise_glClearBufferfv(eGL_NONE, 0, NULL);
Serialise_glClearNamedFramebufferfv(0, eGL_NONE, 0, NULL);
break;
case CLEARBUFFERI:
Serialise_glClearBufferiv(eGL_NONE, 0, NULL);
Serialise_glClearNamedFramebufferiv(0, eGL_NONE, 0, NULL);
break;
case CLEARBUFFERUI:
Serialise_glClearBufferuiv(eGL_NONE, 0, NULL);
Serialise_glClearNamedFramebufferuiv(0, eGL_NONE, 0, NULL);
break;
case CLEARBUFFERFI:
Serialise_glClearBufferfi(eGL_NONE, 0, 0, 0);
Serialise_glClearNamedFramebufferfi(0, eGL_NONE, 0, 0);
break;
case CLEARBUFFERDATA:
Serialise_glClearNamedBufferDataEXT(0, eGL_NONE, eGL_NONE, eGL_NONE, NULL);
@@ -2772,7 +2772,7 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
Serialise_glVertexArrayBindVertexBufferEXT(0, 0, 0, 0, 0);
break;
case BIND_VERTEXBUFFERS:
Serialise_glBindVertexBuffers(0, 0, NULL, NULL, NULL);
Serialise_glVertexArrayVertexBuffers(0, 0, 0, NULL, NULL, NULL);
break;
case VERTEXBINDINGDIVISOR:
Serialise_glVertexArrayVertexBindingDivisorEXT(0, 0, 0);
@@ -2905,7 +2905,7 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
Serialise_glFramebufferDrawBuffersEXT(0, 0, NULL);
break;
case BLIT_FRAMEBUFFER:
Serialise_glBlitFramebuffer(0, 0, 0, 0, 0, 0, 0, 0, 0, eGL_NONE);
Serialise_glBlitNamedFramebuffer(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, eGL_NONE);
break;
case GEN_RENDERBUFFERS:
+67 -9
View File
@@ -55,7 +55,7 @@ struct GLInitParams : public RDCInitParams
uint32_t width;
uint32_t height;
static const uint32_t GL_SERIALISE_VERSION = 0x0000007;
static const uint32_t GL_SERIALISE_VERSION = 0x0000008;
// version number internal to opengl stream
uint32_t SerialiseVersion;
@@ -682,11 +682,6 @@ class WrappedOpenGL
bool Serialise_glVertexAttrib(GLuint index, int count, GLenum type, GLboolean normalized, const void *value, int attribtype);
// hack for now until ARB_dsa is serialised
bool Serialise_glVertexArrayElementBuffer(GLuint vaobj, GLuint buffer);
bool Serialise_glTransformFeedbackBufferBase(GLuint xfb, GLuint index, GLuint buffer);
bool Serialise_glTransformFeedbackBufferRange(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizei size);
IMPLEMENT_FUNCTION_SERIALISED(void, glVertexAttrib1d(GLuint index, GLdouble x));
IMPLEMENT_FUNCTION_SERIALISED(void, glVertexAttrib1dv(GLuint index, const GLdouble *v));
IMPLEMENT_FUNCTION_SERIALISED(void, glVertexAttrib1f(GLuint index, GLfloat x));
@@ -850,6 +845,10 @@ class WrappedOpenGL
IMPLEMENT_FUNCTION_SERIALISED(void, glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetQueryObjecti64v(GLuint id, GLenum pname, GLint64 *params));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetQueryObjectiv(GLuint id, GLenum pname, GLint *params));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetQueryBufferObjectui64v(GLuint id, GLuint buffer, GLenum pname, GLintptr offset));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetQueryBufferObjectuiv(GLuint id, GLuint buffer, GLenum pname, GLintptr offset));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetQueryBufferObjecti64v(GLuint id, GLuint buffer, GLenum pname, GLintptr offset));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetQueryBufferObjectiv(GLuint id, GLuint buffer, GLenum pname, GLintptr offset));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetQueryiv(GLenum target, GLenum pname, GLint *params));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, void *data));
@@ -912,8 +911,6 @@ class WrappedOpenGL
IMPLEMENT_FUNCTION_SERIALISED(void, glGetVertexAttribdv(GLuint index, GLenum pname, GLdouble *params));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetNamedBufferParameteri64v(GLuint buffer, GLenum pname, GLint64 *params));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetNamedBufferParameteriv(GLuint buffer, GLenum pname, GLint *params));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetNamedBufferPointerv(GLuint buffer, GLenum pname, void **params));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetNamedBufferSubData(GLuint buffer, GLintptr offset, GLsizei size, void *data));
enum UniformType
@@ -1104,7 +1101,6 @@ class WrappedOpenGL
IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTextureSubImage1DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits));
IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits));
IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits));
IMPLEMENT_FUNCTION_SERIALISED(void, glFramebufferDrawBuffersEXT(GLuint framebuffer, GLsizei n, const GLenum *bufs));
IMPLEMENT_FUNCTION_SERIALISED(void, glGenerateTextureMipmapEXT(GLuint texture, GLenum target));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetPointeri_vEXT(GLenum pname, GLuint index, void **params));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetDoubleIndexedvEXT(GLenum target, GLuint index, GLdouble *data));
@@ -1157,6 +1153,7 @@ class WrappedOpenGL
IMPLEMENT_FUNCTION_SERIALISED(void, glNamedFramebufferTextureLayerEXT(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer));
IMPLEMENT_FUNCTION_SERIALISED(void, glNamedFramebufferParameteriEXT(GLuint framebuffer, GLenum pname, GLint param));
IMPLEMENT_FUNCTION_SERIALISED(void, glFramebufferDrawBufferEXT(GLuint framebuffer, GLenum mode));
IMPLEMENT_FUNCTION_SERIALISED(void, glFramebufferDrawBuffersEXT(GLuint framebuffer, GLsizei n, const GLenum *bufs));
IMPLEMENT_FUNCTION_SERIALISED(void, glFramebufferReadBufferEXT(GLuint framebuffer, GLenum mode));
IMPLEMENT_FUNCTION_SERIALISED(void, glNamedRenderbufferStorageEXT(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height));
IMPLEMENT_FUNCTION_SERIALISED(void, glNamedRenderbufferStorageMultisampleEXT(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height));
@@ -1224,6 +1221,67 @@ class WrappedOpenGL
IMPLEMENT_FUNCTION_SERIALISED(void, glVertexArrayVertexBindingDivisorEXT(GLuint vaobj, GLuint bindingindex, GLuint divisor));
IMPLEMENT_FUNCTION_SERIALISED(void, glVertexArrayVertexAttribLOffsetEXT(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset));
IMPLEMENT_FUNCTION_SERIALISED(void, glVertexArrayVertexAttribDivisorEXT(GLuint vaobj, GLuint index, GLuint divisor));
// ARB_direct_state_access
IMPLEMENT_FUNCTION_SERIALISED(void, glCreateTransformFeedbacks(GLsizei n, GLuint *ids));
IMPLEMENT_FUNCTION_SERIALISED(void, glCreateBuffers(GLsizei n, GLuint *buffers));
IMPLEMENT_FUNCTION_SERIALISED(void, glCreateFramebuffers(GLsizei n, GLuint *framebuffers));
IMPLEMENT_FUNCTION_SERIALISED(void, glCreateRenderbuffers(GLsizei n, GLuint *renderbuffers));
IMPLEMENT_FUNCTION_SERIALISED(void, glCreateTextures(GLenum target, GLsizei n, GLuint *textures));
IMPLEMENT_FUNCTION_SERIALISED(void, glCreateVertexArrays(GLsizei n, GLuint *arrays));
IMPLEMENT_FUNCTION_SERIALISED(void, glCreateSamplers(GLsizei n, GLuint *samplers));
IMPLEMENT_FUNCTION_SERIALISED(void, glCreateProgramPipelines(GLsizei n, GLuint *pipelines));
IMPLEMENT_FUNCTION_SERIALISED(void, glCreateQueries(GLenum target, GLsizei n, GLuint *ids));
IMPLEMENT_FUNCTION_SERIALISED(void, glNamedBufferData(GLuint buffer, GLsizei size, const void *data, GLenum usage));
IMPLEMENT_FUNCTION_SERIALISED(void, glNamedBufferStorage(GLuint buffer, GLsizei size, const void *data, GLbitfield flags));
IMPLEMENT_FUNCTION_SERIALISED(void, glNamedBufferSubData(GLuint buffer, GLintptr offset, GLsizei size, const void *data));
IMPLEMENT_FUNCTION_SERIALISED(void, glCopyNamedBufferSubData(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizei size));
IMPLEMENT_FUNCTION_SERIALISED(void, glClearNamedBufferSubData(GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizei size, GLenum format, GLenum type, const void *data));
IMPLEMENT_FUNCTION_SERIALISED(void *, glMapNamedBufferRange(GLuint buffer, GLintptr offset, GLsizei length, GLbitfield access));
IMPLEMENT_FUNCTION_SERIALISED(void, glFlushMappedNamedBufferRange(GLuint buffer, GLintptr offset, GLsizei length));
IMPLEMENT_FUNCTION_SERIALISED(void, glTransformFeedbackBufferBase(GLuint xfb, GLuint index, GLuint buffer));
IMPLEMENT_FUNCTION_SERIALISED(void, glTransformFeedbackBufferRange(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizei size));
IMPLEMENT_FUNCTION_SERIALISED(void, glInvalidateNamedFramebufferData(GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments));
IMPLEMENT_FUNCTION_SERIALISED(void, glInvalidateNamedFramebufferSubData(GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height));
IMPLEMENT_FUNCTION_SERIALISED(void, glClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glClearNamedFramebufferfv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glClearNamedFramebufferfi(GLuint framebuffer, GLenum buffer, const GLfloat depth, GLint stencil));
IMPLEMENT_FUNCTION_SERIALISED(void, glBlitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter));
IMPLEMENT_FUNCTION_SERIALISED(void, glTextureBuffer(GLuint texture, GLenum internalformat, GLuint buffer));
IMPLEMENT_FUNCTION_SERIALISED(void, glTextureBufferRange(GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizei size));
IMPLEMENT_FUNCTION_SERIALISED(void, glTextureStorage1D(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width));
IMPLEMENT_FUNCTION_SERIALISED(void, glTextureStorage2D(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height));
IMPLEMENT_FUNCTION_SERIALISED(void, glTextureStorage3D(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth));
IMPLEMENT_FUNCTION_SERIALISED(void, glTextureStorage2DMultisample(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations));
IMPLEMENT_FUNCTION_SERIALISED(void, glTextureStorage3DMultisample(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations));
IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTextureSubImage1D(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data));
IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTextureSubImage2D(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data));
IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTextureSubImage3D(GLuint texture, 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, glTextureSubImage1D(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels));
IMPLEMENT_FUNCTION_SERIALISED(void, glTextureSubImage2D(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels));
IMPLEMENT_FUNCTION_SERIALISED(void, glTextureSubImage3D(GLuint texture, 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, glCopyTextureSubImage1D(GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width));
IMPLEMENT_FUNCTION_SERIALISED(void, glCopyTextureSubImage2D(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height));
IMPLEMENT_FUNCTION_SERIALISED(void, glCopyTextureSubImage3D(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height));
IMPLEMENT_FUNCTION_SERIALISED(void, glTextureParameterf(GLuint texture, GLenum pname, GLfloat param));
IMPLEMENT_FUNCTION_SERIALISED(void, glTextureParameterfv(GLuint texture, GLenum pname, const GLfloat *param));
IMPLEMENT_FUNCTION_SERIALISED(void, glTextureParameteri(GLuint texture, GLenum pname, GLint param));
IMPLEMENT_FUNCTION_SERIALISED(void, glTextureParameterIiv(GLuint texture, GLenum pname, const GLint *params));
IMPLEMENT_FUNCTION_SERIALISED(void, glTextureParameterIuiv(GLuint texture, GLenum pname, const GLuint *params));
IMPLEMENT_FUNCTION_SERIALISED(void, glTextureParameteriv(GLuint texture, GLenum pname, const GLint *param));
IMPLEMENT_FUNCTION_SERIALISED(void, glGenerateTextureMipmap(GLuint texture));
IMPLEMENT_FUNCTION_SERIALISED(void, glBindTextureUnit(GLuint unit, GLuint texture));
IMPLEMENT_FUNCTION_SERIALISED(void, glVertexArrayElementBuffer(GLuint vaobj, GLuint buffer));
IMPLEMENT_FUNCTION_SERIALISED(void, glVertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides));
};
class ScopedDebugContext
+168 -59
View File
@@ -29,6 +29,12 @@
struct GLHookSet
{
// first we list all the core functions. 1.1 functions are separate under 'dllexport' for
// different handling on windows. Extensions come after
// Any corefunctions that are semantically identical to extension variants are listed as
// 'aliases' such that if the 'alias' is requested via *GetProcAddress, the core function
// will be returned and used.
// ++ dllexport
PFNGLBINDTEXTUREPROC glBindTexture;
PFNGLBLENDFUNCPROC glBlendFunc;
@@ -94,6 +100,10 @@ struct GLHookSet
PFNGLVIEWPORTPROC glViewport;
// --
// this just means 'functions not dllexport on windows', not necessarily extensions.
// note that for ARB_direct_state_access there is special treatment due to interaction with
// EXT_direct_state_access, so those functions are listed later in the extension section
// rather than here in the core section where you'd expect
// ++ glext
PFNGLACTIVETEXTUREPROC glActiveTexture; // aliases glActiveTextureARB
PFNGLTEXSTORAGE1DPROC glTexStorage1D;
@@ -138,8 +148,6 @@ struct GLHookSet
PFNGLGETSHADERPRECISIONFORMATPROC glGetShaderPrecisionFormat;
PFNGLGETSHADERSOURCEPROC glGetShaderSource;
PFNGLGETATTACHEDSHADERSPROC glGetAttachedShaders;
PFNGLGETNAMEDSTRINGARBPROC glGetNamedStringARB;
PFNGLGETNAMEDSTRINGIVARBPROC glGetNamedStringivARB;
PFNGLGETPROGRAMIVPROC glGetProgramiv;
PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
PFNGLGETPROGRAMINTERFACEIVPROC glGetProgramInterfaceiv;
@@ -172,17 +180,7 @@ struct GLHookSet
PFNGLGETVERTEXATTRIBPOINTERVPROC glGetVertexAttribPointerv;
PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage; // aliases glGetCompressedTexImageARB
PFNGLGETNCOMPRESSEDTEXIMAGEPROC glGetnCompressedTexImage; // aliases glGetnCompressedTexImageARB
PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glGetCompressedTextureImage;
PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glGetCompressedTextureSubImage;
PFNGLGETNTEXIMAGEPROC glGetnTexImage; // aliases glGetnTexImageARB
PFNGLGETTEXTUREIMAGEPROC glGetTextureImage;
PFNGLGETTEXTURELEVELPARAMETERFVPROC glGetTextureLevelParameterfv;
PFNGLGETTEXTURELEVELPARAMETERIVPROC glGetTextureLevelParameteriv;
PFNGLGETTEXTUREPARAMETERIIVPROC glGetTextureParameterIiv;
PFNGLGETTEXTUREPARAMETERIUIVPROC glGetTextureParameterIuiv;
PFNGLGETTEXTUREPARAMETERFVPROC glGetTextureParameterfv;
PFNGLGETTEXTUREPARAMETERIVPROC glGetTextureParameteriv;
PFNGLGETTEXTURESUBIMAGEPROC glGetTextureSubImage;
PFNGLGETTEXPARAMETERIIVPROC glGetTexParameterIiv; // aliases glGetTexParameterIivEXT
PFNGLGETTEXPARAMETERIUIVPROC glGetTexParameterIuiv; // aliases glGetTexParameterIuivEXT
PFNGLCLAMPCOLORPROC glClampColor; // aliases glClampColorARB
@@ -192,9 +190,6 @@ struct GLHookSet
PFNGLGETSAMPLERPARAMETERFVPROC glGetSamplerParameterfv;
PFNGLGETSAMPLERPARAMETERIVPROC glGetSamplerParameteriv;
PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glGetTransformFeedbackVarying; // aliases glGetTransformFeedbackVaryingEXT
PFNGLGETTRANSFORMFEEDBACKI64_VPROC glGetTransformFeedbacki64_v;
PFNGLGETTRANSFORMFEEDBACKI_VPROC glGetTransformFeedbacki_v;
PFNGLGETTRANSFORMFEEDBACKIVPROC glGetTransformFeedbackiv;
PFNGLGETSUBROUTINEINDEXPROC glGetSubroutineIndex;
PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glGetSubroutineUniformLocation;
PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glGetActiveAtomicCounterBufferiv;
@@ -220,16 +215,11 @@ struct GLHookSet
PFNGLGETNUNIFORMFVPROC glGetnUniformfv; // aliases glGetnUniformfvARB
PFNGLGETNUNIFORMIVPROC glGetnUniformiv; // aliases glGetnUniformivARB
PFNGLGETNUNIFORMUIVPROC glGetnUniformuiv; // aliases glGetnUniformuivARB
PFNGLGETVERTEXARRAYIVPROC glGetVertexArrayiv;
PFNGLGETVERTEXARRAYINDEXED64IVPROC glGetVertexArrayIndexed64iv;
PFNGLGETVERTEXARRAYINDEXEDIVPROC glGetVertexArrayIndexediv;
PFNGLGETVERTEXATTRIBIIVPROC glGetVertexAttribIiv; // aliases glGetVertexAttribIivEXT
PFNGLGETVERTEXATTRIBIUIVPROC glGetVertexAttribIuiv; // aliases glGetVertexAttribIuivEXT
PFNGLGETVERTEXATTRIBLDVPROC glGetVertexAttribLdv; // aliases glGetVertexAttribLdvEXT
PFNGLGETVERTEXATTRIBDVPROC glGetVertexAttribdv;
PFNGLGETVERTEXATTRIBFVPROC glGetVertexAttribfv;
PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glGetNamedBufferParameteri64v;
PFNGLGETNAMEDBUFFERPOINTERVPROC glGetNamedBufferPointerv;
PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus; // aliases glCheckFramebufferStatusEXT
PFNGLBLENDCOLORPROC glBlendColor; // aliases glBlendColorEXT
PFNGLBLENDFUNCIPROC glBlendFunci; // aliases glBlendFunciARB
@@ -245,14 +235,11 @@ struct GLHookSet
PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate;
PFNGLCOLORMASKIPROC glColorMaski; // aliases glColorMaskIndexedEXT
PFNGLSAMPLEMASKIPROC glSampleMaski;
PFNGLRASTERSAMPLESEXTPROC glRasterSamplesEXT;
PFNGLSAMPLECOVERAGEPROC glSampleCoverage; // aliases glSampleCoverageARB
PFNGLMINSAMPLESHADINGPROC glMinSampleShading; // aliases glMinSampleShadingARB
PFNGLDEPTHRANGEFPROC glDepthRangef;
PFNGLDEPTHRANGEINDEXEDPROC glDepthRangeIndexed;
PFNGLDEPTHRANGEARRAYVPROC glDepthRangeArrayv;
PFNGLDEPTHBOUNDSEXTPROC glDepthBoundsEXT;
PFNGLPOLYGONOFFSETCLAMPEXTPROC glPolygonOffsetClampEXT;
PFNGLCLIPCONTROLPROC glClipControl;
PFNGLPROVOKINGVERTEXPROC glProvokingVertex; // aliases glProvokingVertexEXT
PFNGLPRIMITIVERESTARTINDEXPROC glPrimitiveRestartIndex;
@@ -271,9 +258,6 @@ struct GLHookSet
PFNGLUSEPROGRAMPROC glUseProgram;
PFNGLSHADERBINARYPROC glShaderBinary;
PFNGLPROGRAMBINARYPROC glProgramBinary;
PFNGLNAMEDSTRINGARBPROC glNamedStringARB;
PFNGLDELETENAMEDSTRINGARBPROC glDeleteNamedStringARB;
PFNGLCOMPILESHADERINCLUDEARBPROC glCompileShaderIncludeARB;
PFNGLUSEPROGRAMSTAGESPROC glUseProgramStages;
PFNGLVALIDATEPROGRAMPROC glValidateProgram;
PFNGLGENPROGRAMPIPELINESPROC glGenProgramPipelines;
@@ -286,9 +270,6 @@ struct GLHookSet
PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert; // aliases glDebugMessageInsertARB
PFNGLPUSHDEBUGGROUPPROC glPushDebugGroup;
PFNGLPOPDEBUGGROUPPROC glPopDebugGroup;
PFNGLPUSHGROUPMARKEREXTPROC glPushGroupMarkerEXT;
PFNGLPOPGROUPMARKEREXTPROC glPopGroupMarkerEXT;
PFNGLINSERTEVENTMARKEREXTPROC glInsertEventMarkerEXT;
PFNGLOBJECTLABELPROC glObjectLabel; // aliases glLabelObjectEXT
PFNGLOBJECTPTRLABELPROC glObjectPtrLabel;
PFNGLENABLEIPROC glEnablei; // aliases glEnableIndexedEXT
@@ -305,7 +286,6 @@ struct GLHookSet
PFNGLISSYNCPROC glIsSync;
PFNGLISTRANSFORMFEEDBACKPROC glIsTransformFeedback;
PFNGLISVERTEXARRAYPROC glIsVertexArray;
PFNGLISNAMEDSTRINGARBPROC glIsNamedStringARB;
PFNGLGENBUFFERSPROC glGenBuffers; // aliases glGenBuffersARB
PFNGLBINDBUFFERPROC glBindBuffer; // aliases glBindBufferARB
PFNGLDRAWBUFFERSPROC glDrawBuffers; // aliases glDrawBuffersARB
@@ -473,7 +453,6 @@ struct GLHookSet
PFNGLPOINTPARAMETERIPROC glPointParameteri;
PFNGLPOINTPARAMETERIVPROC glPointParameteriv;
PFNGLDISPATCHCOMPUTEPROC glDispatchCompute;
PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC glDispatchComputeGroupSizeARB;
PFNGLDISPATCHCOMPUTEINDIRECTPROC glDispatchComputeIndirect;
PFNGLMEMORYBARRIERPROC glMemoryBarrier; // aliases glMemoryBarrierEXT
PFNGLMEMORYBARRIERBYREGIONPROC glMemoryBarrierByRegion;
@@ -616,19 +595,68 @@ struct GLHookSet
PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glMultiDrawElementsBaseVertex;
PFNGLMULTIDRAWARRAYSINDIRECTPROC glMultiDrawArraysIndirect;
PFNGLMULTIDRAWELEMENTSINDIRECTPROC glMultiDrawElementsIndirect;
PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC glMultiDrawArraysIndirectCountARB;
PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC glMultiDrawElementsIndirectCountARB;
PFNGLDRAWARRAYSINDIRECTPROC glDrawArraysIndirect;
PFNGLDRAWELEMENTSINDIRECTPROC glDrawElementsIndirect;
PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer; // aliases glBlitFramebufferEXT
PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC glCheckNamedFramebufferStatusEXT;
// ARB_shading_language_include
PFNGLNAMEDSTRINGARBPROC glNamedStringARB;
PFNGLDELETENAMEDSTRINGARBPROC glDeleteNamedStringARB;
PFNGLCOMPILESHADERINCLUDEARBPROC glCompileShaderIncludeARB;
PFNGLISNAMEDSTRINGARBPROC glIsNamedStringARB;
PFNGLGETNAMEDSTRINGARBPROC glGetNamedStringARB;
PFNGLGETNAMEDSTRINGIVARBPROC glGetNamedStringivARB;
// ARB_compute_variable_group_size
PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC glDispatchComputeGroupSizeARB;
// ARB_indirect_parameters
PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC glMultiDrawArraysIndirectCountARB;
PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC glMultiDrawElementsIndirectCountARB;
// EXT_raster_multisample
PFNGLRASTERSAMPLESEXTPROC glRasterSamplesEXT;
// EXT_depth_bounds_test
PFNGLDEPTHBOUNDSEXTPROC glDepthBoundsEXT;
// EXT_polygon_offset_clamp
PFNGLPOLYGONOFFSETCLAMPEXTPROC glPolygonOffsetClampEXT;
// EXT_debug_marker
PFNGLINSERTEVENTMARKEREXTPROC glInsertEventMarkerEXT;
PFNGLPUSHGROUPMARKEREXTPROC glPushGroupMarkerEXT;
PFNGLPOPGROUPMARKEREXTPROC glPopGroupMarkerEXT;
// GREMEDY_frame_terminator
PFNGLFRAMETERMINATORGREMEDYPROC glFrameTerminatorGREMEDY;
// GREMEDY_string_marker
PFNGLSTRINGMARKERGREMEDYPROC glStringMarkerGREMEDY;
// EXT_direct_state_access below here. We only include the functions relevant for core 3.2+ GL, not any
// functions for legacy functionality.
//
// NOTE: we set up ARB_dsa functions as aliases of EXT_dsa functions where they are identical.
// This breaks our 'rule' of making core functions the canonical versions, but for good reason.
//
// As with other aliases, this assumes the functions defined to have identical semantics are safe to substitute
// for each other (which in theory should be true). We do it this way around rather than have EXT_dsa as aliases
// of ARB_dsa - which is usually what we do for EXT extension variants. The reason being we want to support hw/sw
// configurations where ARB_dsa is not present, so we need to fall back on EXT_dsa. If the EXT functions are the
// aliases, we will never fetch them when getting function pointers, so if ARB_dsa functions aren't present then
// we just get NULL. In theory EXT_dsa supported cases should be a strict superset of ARB_dsa supported cases, so
// it's safe to always use the EXT variant when they're identical.
//
// Where a function is different, or unique to ARB_dsa, we include both separately. For ARB_dsa unique functions
// these are at the end, noted by comments.
PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC glCompressedTextureImage1DEXT;
PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC glCompressedTextureImage2DEXT;
PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC glCompressedTextureImage3DEXT;
PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC glCompressedTextureSubImage1DEXT;
PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC glCompressedTextureSubImage2DEXT;
PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC glCompressedTextureSubImage3DEXT;
PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC glFramebufferDrawBuffersEXT;
PFNGLGENERATETEXTUREMIPMAPEXTPROC glGenerateTextureMipmapEXT;
PFNGLGETPOINTERI_VEXTPROC glGetPointeri_vEXT;
PFNGLGETDOUBLEINDEXEDVEXTPROC glGetDoubleIndexedvEXT;
@@ -644,13 +672,12 @@ struct GLHookSet
PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC glGetMultiTexLevelParameterfvEXT;
PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC glGetMultiTexLevelParameterivEXT;
PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC glGetCompressedMultiTexImageEXT;
PFNGLGETNAMEDBUFFERPOINTERVEXTPROC glGetNamedBufferPointervEXT;
PFNGLGETNAMEDBUFFERPOINTERVEXTPROC glGetNamedBufferPointervEXT; // aliases glGetNamedBufferPointerv
PFNGLGETNAMEDPROGRAMIVEXTPROC glGetNamedProgramivEXT;
PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetNamedFramebufferAttachmentParameterivEXT; // aliases glGetNamedFramebufferAttachmentParameteriv
PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC glGetNamedBufferParameterivEXT; // aliases glGetNamedBufferParameteriv
// these functions are not aliases only by the size parameter being different types
PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC glCheckNamedFramebufferStatusEXT; // aliases glCheckNamedFramebufferStatus
PFNGLGETNAMEDBUFFERSUBDATAEXTPROC glGetNamedBufferSubDataEXT;
PFNGLGETNAMEDBUFFERSUBDATAPROC glGetNamedBufferSubData;
PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC glGetNamedFramebufferParameterivEXT; // aliases glGetFramebufferParameterivEXT, glGetNamedFramebufferParameteriv
PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC glGetNamedRenderbufferParameterivEXT; // aliases glGetNamedRenderbufferParameteriv
PFNGLGETVERTEXARRAYINTEGERVEXTPROC glGetVertexArrayIntegervEXT;
@@ -666,27 +693,28 @@ struct GLHookSet
PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC glGetTextureLevelParameterivEXT;
PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC glGetTextureLevelParameterfvEXT;
PFNGLBINDMULTITEXTUREEXTPROC glBindMultiTextureEXT;
PFNGLMAPNAMEDBUFFEREXTPROC glMapNamedBufferEXT;
PFNGLMAPNAMEDBUFFEREXTPROC glMapNamedBufferEXT; // aliases glMapNamedBuffer
PFNGLMAPNAMEDBUFFERRANGEEXTPROC glMapNamedBufferRangeEXT;
PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC glFlushMappedNamedBufferRangeEXT;
PFNGLUNMAPNAMEDBUFFEREXTPROC glUnmapNamedBufferEXT;
PFNGLCLEARNAMEDBUFFERDATAEXTPROC glClearNamedBufferDataEXT;
PFNGLUNMAPNAMEDBUFFEREXTPROC glUnmapNamedBufferEXT; // aliases glUnmapNamedBuffer
PFNGLCLEARNAMEDBUFFERDATAEXTPROC glClearNamedBufferDataEXT; // aliases glClearNamedBufferData
PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC glClearNamedBufferSubDataEXT;
PFNGLNAMEDBUFFERDATAEXTPROC glNamedBufferDataEXT;
PFNGLNAMEDBUFFERSTORAGEEXTPROC glNamedBufferStorageEXT;
PFNGLNAMEDBUFFERSUBDATAEXTPROC glNamedBufferSubDataEXT;
PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC glNamedCopyBufferSubDataEXT;
PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC glNamedFramebufferTextureEXT;
PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC glNamedFramebufferTextureEXT; // aliases glNamedFramebufferTexture
PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC glNamedFramebufferTexture1DEXT;
PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC glNamedFramebufferTexture2DEXT;
PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC glNamedFramebufferTexture3DEXT;
PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC glNamedFramebufferRenderbufferEXT;
PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC glNamedFramebufferTextureLayerEXT;
PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC glNamedFramebufferParameteriEXT;
PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC glNamedRenderbufferStorageEXT;
PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glNamedRenderbufferStorageMultisampleEXT;
PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC glFramebufferDrawBufferEXT;
PFNGLFRAMEBUFFERREADBUFFEREXTPROC glFramebufferReadBufferEXT;
PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC glNamedFramebufferRenderbufferEXT; // aliases glNamedFramebufferRenderbuffer
PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC glNamedFramebufferTextureLayerEXT; // aliases glNamedFramebufferTextureLayer
PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC glNamedFramebufferParameteriEXT; // aliases glNamedFramebufferParameteri
PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC glNamedRenderbufferStorageEXT; // aliases glNamedRenderbufferStorage
PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glNamedRenderbufferStorageMultisampleEXT; // aliases glNamedRenderbufferStorageMultisample
PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC glFramebufferDrawBufferEXT; // aliases glNamedFramebufferDrawBuffer
PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC glFramebufferDrawBuffersEXT; // aliases glNamedFramebufferDrawBuffers
PFNGLFRAMEBUFFERREADBUFFEREXTPROC glFramebufferReadBufferEXT; // aliases glNamedFramebufferReadBuffer
PFNGLTEXTUREBUFFEREXTPROC glTextureBufferEXT;
PFNGLTEXTUREBUFFERRANGEEXTPROC glTextureBufferRangeEXT;
PFNGLTEXTUREIMAGE1DEXTPROC glTextureImage1DEXT;
@@ -738,17 +766,98 @@ struct GLHookSet
PFNGLGENERATEMULTITEXMIPMAPEXTPROC glGenerateMultiTexMipmapEXT;
PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC glVertexArrayVertexAttribOffsetEXT;
PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC glVertexArrayVertexAttribIOffsetEXT;
PFNGLENABLEVERTEXARRAYATTRIBEXTPROC glEnableVertexArrayAttribEXT;
PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC glDisableVertexArrayAttribEXT;
PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC glVertexArrayBindVertexBufferEXT;
PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC glVertexArrayVertexAttribFormatEXT;
PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC glVertexArrayVertexAttribIFormatEXT;
PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC glVertexArrayVertexAttribLFormatEXT;
PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC glVertexArrayVertexAttribBindingEXT;
PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC glVertexArrayVertexBindingDivisorEXT;
PFNGLENABLEVERTEXARRAYATTRIBEXTPROC glEnableVertexArrayAttribEXT; // aliases glEnableVertexArrayAttrib
PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC glDisableVertexArrayAttribEXT; // aliases glDisableVertexArrayAttrib
PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC glVertexArrayBindVertexBufferEXT; // aliases glVertexArrayVertexBuffer
PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC glVertexArrayVertexAttribFormatEXT; // aliases glVertexArrayAttribFormat
PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC glVertexArrayVertexAttribIFormatEXT; // aliases glVertexArrayAttribIFormat
PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC glVertexArrayVertexAttribLFormatEXT; // aliases glVertexArrayAttribLFormat
PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC glVertexArrayVertexAttribBindingEXT; // aliases glVertexArrayAttribBinding
PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC glVertexArrayVertexBindingDivisorEXT; // aliases glVertexArrayBindingDivisor
PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC glVertexArrayVertexAttribLOffsetEXT;
PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC glVertexArrayVertexAttribDivisorEXT;
PFNGLFRAMETERMINATORGREMEDYPROC glFrameTerminatorGREMEDY;
PFNGLSTRINGMARKERGREMEDYPROC glStringMarkerGREMEDY;
// ARB_direct_state_access unique functions (others will be listed as aliases of EXT_dsa, see above).
PFNGLCREATETRANSFORMFEEDBACKSPROC glCreateTransformFeedbacks;
PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC glTransformFeedbackBufferBase;
PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC glTransformFeedbackBufferRange;
PFNGLGETTRANSFORMFEEDBACKI64_VPROC glGetTransformFeedbacki64_v;
PFNGLGETTRANSFORMFEEDBACKI_VPROC glGetTransformFeedbacki_v;
PFNGLGETTRANSFORMFEEDBACKIVPROC glGetTransformFeedbackiv;
PFNGLCREATEBUFFERSPROC glCreateBuffers;
// these functions aren't aliases only because the size parameter is a different type
PFNGLGETNAMEDBUFFERSUBDATAPROC glGetNamedBufferSubData;
PFNGLNAMEDBUFFERSTORAGEPROC glNamedBufferStorage;
PFNGLNAMEDBUFFERDATAPROC glNamedBufferData;
PFNGLNAMEDBUFFERSUBDATAPROC glNamedBufferSubData;
PFNGLCOPYNAMEDBUFFERSUBDATAPROC glCopyNamedBufferSubData;
PFNGLCLEARNAMEDBUFFERSUBDATAPROC glClearNamedBufferSubData;
PFNGLMAPNAMEDBUFFERRANGEPROC glMapNamedBufferRange;
PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glFlushMappedNamedBufferRange;
PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glGetNamedBufferParameteri64v;
PFNGLCREATEFRAMEBUFFERSPROC glCreateFramebuffers;
PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC glInvalidateNamedFramebufferData;
PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC glInvalidateNamedFramebufferSubData;
PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glClearNamedFramebufferiv;
PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glClearNamedFramebufferuiv;
PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glClearNamedFramebufferfv;
PFNGLCLEARNAMEDFRAMEBUFFERFIPROC glClearNamedFramebufferfi;
PFNGLBLITNAMEDFRAMEBUFFERPROC glBlitNamedFramebuffer;
PFNGLCREATERENDERBUFFERSPROC glCreateRenderbuffers;
PFNGLCREATETEXTURESPROC glCreateTextures;
// many of these texture functions only vary by the lack of target parameter from the EXT_dsa
// variants. The handling of this is generally to pipe through the EXT_dsa variant with a target
// of GL_NONE, and that signifies the ARB_dsa function should be used. See gl_texture_funcs.cpp
PFNGLTEXTUREBUFFERPROC glTextureBuffer;
PFNGLTEXTUREBUFFERRANGEPROC glTextureBufferRange;
PFNGLTEXTURESTORAGE1DPROC glTextureStorage1D;
PFNGLTEXTURESTORAGE2DPROC glTextureStorage2D;
PFNGLTEXTURESTORAGE3DPROC glTextureStorage3D;
PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC glTextureStorage2DMultisample;
PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC glTextureStorage3DMultisample;
PFNGLTEXTURESUBIMAGE1DPROC glTextureSubImage1D;
PFNGLTEXTURESUBIMAGE2DPROC glTextureSubImage2D;
PFNGLTEXTURESUBIMAGE3DPROC glTextureSubImage3D;
PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC glCompressedTextureSubImage1D;
PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC glCompressedTextureSubImage2D;
PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC glCompressedTextureSubImage3D;
PFNGLCOPYTEXTURESUBIMAGE1DPROC glCopyTextureSubImage1D;
PFNGLCOPYTEXTURESUBIMAGE2DPROC glCopyTextureSubImage2D;
PFNGLCOPYTEXTURESUBIMAGE3DPROC glCopyTextureSubImage3D;
PFNGLTEXTUREPARAMETERFPROC glTextureParameterf;
PFNGLTEXTUREPARAMETERFVPROC glTextureParameterfv;
PFNGLTEXTUREPARAMETERIPROC glTextureParameteri;
PFNGLTEXTUREPARAMETERIIVPROC glTextureParameterIiv;
PFNGLTEXTUREPARAMETERIUIVPROC glTextureParameterIuiv;
PFNGLTEXTUREPARAMETERIVPROC glTextureParameteriv;
PFNGLGENERATETEXTUREMIPMAPPROC glGenerateTextureMipmap;
PFNGLBINDTEXTUREUNITPROC glBindTextureUnit;
PFNGLGETTEXTUREIMAGEPROC glGetTextureImage;
PFNGLGETTEXTURESUBIMAGEPROC glGetTextureSubImage;
PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glGetCompressedTextureImage;
PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glGetCompressedTextureSubImage;
PFNGLGETTEXTURELEVELPARAMETERFVPROC glGetTextureLevelParameterfv;
PFNGLGETTEXTURELEVELPARAMETERIVPROC glGetTextureLevelParameteriv;
PFNGLGETTEXTUREPARAMETERIIVPROC glGetTextureParameterIiv;
PFNGLGETTEXTUREPARAMETERIUIVPROC glGetTextureParameterIuiv;
PFNGLGETTEXTUREPARAMETERFVPROC glGetTextureParameterfv;
PFNGLGETTEXTUREPARAMETERIVPROC glGetTextureParameteriv;
PFNGLCREATEVERTEXARRAYSPROC glCreateVertexArrays;
PFNGLCREATESAMPLERSPROC glCreateSamplers;
PFNGLCREATEPROGRAMPIPELINESPROC glCreateProgramPipelines;
PFNGLCREATEQUERIESPROC glCreateQueries;
PFNGLVERTEXARRAYELEMENTBUFFERPROC glVertexArrayElementBuffer;
PFNGLVERTEXARRAYVERTEXBUFFERSPROC glVertexArrayVertexBuffers;
PFNGLGETVERTEXARRAYIVPROC glGetVertexArrayiv;
PFNGLGETVERTEXARRAYINDEXED64IVPROC glGetVertexArrayIndexed64iv;
PFNGLGETVERTEXARRAYINDEXEDIVPROC glGetVertexArrayIndexediv;
PFNGLGETQUERYBUFFEROBJECTI64VPROC glGetQueryBufferObjecti64v;
PFNGLGETQUERYBUFFEROBJECTIVPROC glGetQueryBufferObjectiv;
PFNGLGETQUERYBUFFEROBJECTUI64VPROC glGetQueryBufferObjectui64v;
PFNGLGETQUERYBUFFEROBJECTUIVPROC glGetQueryBufferObjectuiv;
// --
};
+177 -199
View File
@@ -1,7 +1,7 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2014 Crytek
* Copyright (c) 2015 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -769,21 +769,93 @@
HookExtension(PFNGLBINDIMAGETEXTURESPROC, glBindImageTextures); \
HookExtension(PFNGLBINDVERTEXBUFFERSPROC, glBindVertexBuffers); \
HookExtension(PFNGLCLIPCONTROLPROC, glClipControl); \
HookExtension(PFNGLCREATETRANSFORMFEEDBACKSPROC, glCreateTransformFeedbacks); \
HookExtension(PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC, glTransformFeedbackBufferBase); \
HookExtension(PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC, glTransformFeedbackBufferRange); \
HookExtension(PFNGLGETTRANSFORMFEEDBACKIVPROC, glGetTransformFeedbackiv); \
HookExtension(PFNGLGETTRANSFORMFEEDBACKI_VPROC, glGetTransformFeedbacki_v); \
HookExtension(PFNGLGETTRANSFORMFEEDBACKI64_VPROC, glGetTransformFeedbacki64_v); \
HookExtension(PFNGLCREATEBUFFERSPROC, glCreateBuffers); \
HookExtension(PFNGLNAMEDBUFFERSTORAGEPROC, glNamedBufferStorage); \
HookExtension(PFNGLNAMEDBUFFERDATAPROC, glNamedBufferData); \
HookExtension(PFNGLNAMEDBUFFERSUBDATAPROC, glNamedBufferSubData); \
HookExtension(PFNGLCOPYNAMEDBUFFERSUBDATAPROC, glCopyNamedBufferSubData); \
HookExtension(PFNGLCLEARNAMEDBUFFERDATAPROC, glClearNamedBufferDataEXT); \
HookExtensionAlias(PFNGLCLEARNAMEDBUFFERDATAPROC, glClearNamedBufferDataEXT, glClearNamedBufferData); \
HookExtension(PFNGLCLEARNAMEDBUFFERSUBDATAPROC, glClearNamedBufferSubData); \
HookExtension(PFNGLMAPNAMEDBUFFERPROC, glMapNamedBufferEXT); \
HookExtensionAlias(PFNGLMAPNAMEDBUFFERPROC, glMapNamedBufferEXT, glMapNamedBuffer); \
HookExtension(PFNGLMAPNAMEDBUFFERRANGEPROC, glMapNamedBufferRange); \
HookExtension(PFNGLUNMAPNAMEDBUFFERPROC, glUnmapNamedBufferEXT); \
HookExtensionAlias(PFNGLUNMAPNAMEDBUFFERPROC, glUnmapNamedBufferEXT, glUnmapNamedBuffer); \
HookExtension(PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC, glFlushMappedNamedBufferRange); \
HookExtension(PFNGLGETNAMEDBUFFERPARAMETERIVPROC, glGetNamedBufferParameterivEXT); \
HookExtensionAlias(PFNGLGETNAMEDBUFFERPARAMETERIVPROC, glGetNamedBufferParameterivEXT, glGetNamedBufferParameteriv); \
HookExtension(PFNGLGETNAMEDBUFFERPARAMETERI64VPROC, glGetNamedBufferParameteri64v); \
HookExtension(PFNGLGETNAMEDBUFFERPOINTERVPROC, glGetNamedBufferPointerv); \
HookExtension(PFNGLGETNAMEDBUFFERPOINTERVPROC, glGetNamedBufferPointervEXT); \
HookExtensionAlias(PFNGLGETNAMEDBUFFERPOINTERVPROC, glGetNamedBufferPointervEXT, glGetNamedBufferPointerv); \
HookExtension(PFNGLGETNAMEDBUFFERSUBDATAPROC, glGetNamedBufferSubData); \
HookExtension(PFNGLCREATEFRAMEBUFFERSPROC, glCreateFramebuffers); \
HookExtension(PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC, glNamedFramebufferRenderbufferEXT); \
HookExtensionAlias(PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC, glNamedFramebufferRenderbufferEXT, glNamedFramebufferRenderbuffer); \
HookExtension(PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC, glNamedFramebufferParameteriEXT); \
HookExtensionAlias(PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC, glNamedFramebufferParameteriEXT, glNamedFramebufferParameteri); \
HookExtension(PFNGLNAMEDFRAMEBUFFERTEXTUREPROC, glNamedFramebufferTextureEXT); \
HookExtensionAlias(PFNGLNAMEDFRAMEBUFFERTEXTUREPROC, glNamedFramebufferTextureEXT, glNamedFramebufferTexture); \
HookExtension(PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC, glNamedFramebufferTextureLayerEXT); \
HookExtensionAlias(PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC, glNamedFramebufferTextureLayerEXT, glNamedFramebufferTextureLayer); \
HookExtension(PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC, glFramebufferDrawBufferEXT); \
HookExtensionAlias(PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC, glFramebufferDrawBufferEXT, glNamedFramebufferDrawBuffer); \
HookExtension(PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC, glFramebufferDrawBuffersEXT); \
HookExtensionAlias(PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC, glFramebufferDrawBuffersEXT, glNamedFramebufferDrawBuffers); \
HookExtension(PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC, glFramebufferReadBufferEXT); \
HookExtensionAlias(PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC, glFramebufferReadBufferEXT, glNamedFramebufferReadBuffer); \
HookExtension(PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC, glInvalidateNamedFramebufferData); \
HookExtension(PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC, glInvalidateNamedFramebufferSubData); \
HookExtension(PFNGLCLEARNAMEDFRAMEBUFFERIVPROC, glClearNamedFramebufferiv); \
HookExtension(PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC, glClearNamedFramebufferuiv); \
HookExtension(PFNGLCLEARNAMEDFRAMEBUFFERFVPROC, glClearNamedFramebufferfv); \
HookExtension(PFNGLCLEARNAMEDFRAMEBUFFERFIPROC, glClearNamedFramebufferfi); \
HookExtension(PFNGLBLITNAMEDFRAMEBUFFERPROC, glBlitNamedFramebuffer); \
HookExtension(PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC, glCheckNamedFramebufferStatusEXT); \
HookExtensionAlias(PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC, glCheckNamedFramebufferStatusEXT, glCheckNamedFramebufferStatus); \
HookExtension(PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC, glGetNamedFramebufferParameterivEXT); \
HookExtensionAlias(PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC, glGetNamedFramebufferParameterivEXT, glGetFramebufferParameterivEXT); \
HookExtensionAlias(PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC, glGetNamedFramebufferParameterivEXT, glGetNamedFramebufferParameteriv); \
HookExtension(PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC, glGetNamedFramebufferAttachmentParameterivEXT); \
HookExtensionAlias(PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC, glGetNamedFramebufferAttachmentParameterivEXT, glGetNamedFramebufferAttachmentParameteriv); \
HookExtension(PFNGLCREATERENDERBUFFERSPROC, glCreateRenderbuffers); \
HookExtension(PFNGLNAMEDRENDERBUFFERSTORAGEPROC, glNamedRenderbufferStorageEXT); \
HookExtensionAlias(PFNGLNAMEDRENDERBUFFERSTORAGEPROC, glNamedRenderbufferStorageEXT, glNamedRenderbufferStorage); \
HookExtension(PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC, glNamedRenderbufferStorageMultisampleEXT); \
HookExtensionAlias(PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC, glNamedRenderbufferStorageMultisampleEXT, glNamedRenderbufferStorageMultisample); \
HookExtension(PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC, glGetNamedRenderbufferParameterivEXT); \
HookExtensionAlias(PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC, glGetNamedRenderbufferParameterivEXT, glGetNamedRenderbufferParameteriv); \
HookExtension(PFNGLCREATETEXTURESPROC, glCreateTextures); \
HookExtension(PFNGLTEXTUREBUFFERPROC, glTextureBuffer); \
HookExtension(PFNGLTEXTUREBUFFERRANGEPROC, glTextureBufferRange); \
HookExtension(PFNGLTEXTURESTORAGE1DPROC, glTextureStorage1D); \
HookExtension(PFNGLTEXTURESTORAGE2DPROC, glTextureStorage2D); \
HookExtension(PFNGLTEXTURESTORAGE3DPROC, glTextureStorage3D); \
HookExtension(PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC, glTextureStorage2DMultisample); \
HookExtension(PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC, glTextureStorage3DMultisample); \
HookExtension(PFNGLTEXTURESUBIMAGE1DPROC, glTextureSubImage1D); \
HookExtension(PFNGLTEXTURESUBIMAGE2DPROC, glTextureSubImage2D); \
HookExtension(PFNGLTEXTURESUBIMAGE3DPROC, glTextureSubImage3D); \
HookExtension(PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC, glCompressedTextureSubImage1D); \
HookExtension(PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC, glCompressedTextureSubImage2D); \
HookExtension(PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC, glCompressedTextureSubImage3D); \
HookExtension(PFNGLCOPYTEXTURESUBIMAGE1DPROC, glCopyTextureSubImage1D); \
HookExtension(PFNGLCOPYTEXTURESUBIMAGE2DPROC, glCopyTextureSubImage2D); \
HookExtension(PFNGLCOPYTEXTURESUBIMAGE3DPROC, glCopyTextureSubImage3D); \
HookExtension(PFNGLTEXTUREPARAMETERFPROC, glTextureParameterf); \
HookExtension(PFNGLTEXTUREPARAMETERFVPROC, glTextureParameterfv); \
HookExtension(PFNGLTEXTUREPARAMETERIPROC, glTextureParameteri); \
HookExtension(PFNGLTEXTUREPARAMETERIIVPROC, glTextureParameterIiv); \
HookExtension(PFNGLTEXTUREPARAMETERIUIVPROC, glTextureParameterIuiv); \
HookExtension(PFNGLTEXTUREPARAMETERIVPROC, glTextureParameteriv); \
HookExtension(PFNGLGENERATETEXTUREMIPMAPPROC, glGenerateTextureMipmap); \
HookExtension(PFNGLBINDTEXTUREUNITPROC, glBindTextureUnit); \
HookExtension(PFNGLGETTEXTUREIMAGEPROC, glGetTextureImage); \
HookExtension(PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC, glGetCompressedTextureImage); \
HookExtension(PFNGLGETTEXTURELEVELPARAMETERFVPROC, glGetTextureLevelParameterfv); \
@@ -792,9 +864,35 @@
HookExtension(PFNGLGETTEXTUREPARAMETERIIVPROC, glGetTextureParameterIiv); \
HookExtension(PFNGLGETTEXTUREPARAMETERIUIVPROC, glGetTextureParameterIuiv); \
HookExtension(PFNGLGETTEXTUREPARAMETERIVPROC, glGetTextureParameteriv); \
HookExtension(PFNGLCREATEVERTEXARRAYSPROC, glCreateVertexArrays); \
HookExtension(PFNGLDISABLEVERTEXARRAYATTRIBPROC, glDisableVertexArrayAttribEXT); \
HookExtensionAlias(PFNGLDISABLEVERTEXARRAYATTRIBPROC, glDisableVertexArrayAttribEXT, glDisableVertexArrayAttrib); \
HookExtension(PFNGLENABLEVERTEXARRAYATTRIBPROC, glEnableVertexArrayAttribEXT); \
HookExtensionAlias(PFNGLENABLEVERTEXARRAYATTRIBPROC, glEnableVertexArrayAttribEXT, glEnableVertexArrayAttrib); \
HookExtension(PFNGLVERTEXARRAYELEMENTBUFFERPROC, glVertexArrayElementBuffer); \
HookExtension(PFNGLVERTEXARRAYVERTEXBUFFERPROC, glVertexArrayBindVertexBufferEXT); \
HookExtensionAlias(PFNGLVERTEXARRAYVERTEXBUFFERPROC, glVertexArrayBindVertexBufferEXT, glVertexArrayVertexBuffer); \
HookExtension(PFNGLVERTEXARRAYVERTEXBUFFERSPROC, glVertexArrayVertexBuffers); \
HookExtension(PFNGLVERTEXARRAYATTRIBBINDINGPROC, glVertexArrayVertexAttribBindingEXT); \
HookExtensionAlias(PFNGLVERTEXARRAYATTRIBBINDINGPROC, glVertexArrayVertexAttribBindingEXT, glVertexArrayAttribBinding); \
HookExtension(PFNGLVERTEXARRAYATTRIBFORMATPROC, glVertexArrayVertexAttribFormatEXT); \
HookExtensionAlias(PFNGLVERTEXARRAYATTRIBFORMATPROC, glVertexArrayVertexAttribFormatEXT, glVertexArrayAttribFormat); \
HookExtension(PFNGLVERTEXARRAYATTRIBIFORMATPROC, glVertexArrayVertexAttribIFormatEXT); \
HookExtensionAlias(PFNGLVERTEXARRAYATTRIBIFORMATPROC, glVertexArrayVertexAttribIFormatEXT, glVertexArrayAttribIFormat); \
HookExtension(PFNGLVERTEXARRAYATTRIBLFORMATPROC, glVertexArrayVertexAttribLFormatEXT); \
HookExtensionAlias(PFNGLVERTEXARRAYATTRIBLFORMATPROC, glVertexArrayVertexAttribLFormatEXT, glVertexArrayAttribLFormat); \
HookExtension(PFNGLVERTEXARRAYBINDINGDIVISORPROC, glVertexArrayVertexBindingDivisorEXT); \
HookExtensionAlias(PFNGLVERTEXARRAYBINDINGDIVISORPROC, glVertexArrayVertexBindingDivisorEXT, glVertexArrayBindingDivisor); \
HookExtension(PFNGLGETVERTEXARRAYIVPROC, glGetVertexArrayiv); \
HookExtension(PFNGLGETVERTEXARRAYINDEXEDIVPROC, glGetVertexArrayIndexediv); \
HookExtension(PFNGLGETVERTEXARRAYINDEXED64IVPROC, glGetVertexArrayIndexed64iv); \
HookExtension(PFNGLCREATESAMPLERSPROC, glCreateSamplers); \
HookExtension(PFNGLCREATEPROGRAMPIPELINESPROC, glCreateProgramPipelines); \
HookExtension(PFNGLCREATEQUERIESPROC, glCreateQueries); \
HookExtension(PFNGLGETQUERYBUFFEROBJECTI64VPROC, glGetQueryBufferObjecti64v); \
HookExtension(PFNGLGETQUERYBUFFEROBJECTIVPROC, glGetQueryBufferObjectiv); \
HookExtension(PFNGLGETQUERYBUFFEROBJECTUI64VPROC, glGetQueryBufferObjectui64v); \
HookExtension(PFNGLGETQUERYBUFFEROBJECTUIVPROC, glGetQueryBufferObjectuiv); \
HookExtension(PFNGLMEMORYBARRIERBYREGIONPROC, glMemoryBarrierByRegion); \
HookExtension(PFNGLGETTEXTURESUBIMAGEPROC, glGetTextureSubImage); \
HookExtension(PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC, glGetCompressedTextureSubImage); \
@@ -891,9 +989,6 @@
HookExtension(PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC, glGetCompressedMultiTexImageEXT); \
HookExtension(PFNGLNAMEDBUFFERDATAEXTPROC, glNamedBufferDataEXT); \
HookExtension(PFNGLNAMEDBUFFERSUBDATAEXTPROC, glNamedBufferSubDataEXT); \
HookExtension(PFNGLMAPNAMEDBUFFEREXTPROC, glMapNamedBufferEXT); \
HookExtension(PFNGLUNMAPNAMEDBUFFEREXTPROC, glUnmapNamedBufferEXT); \
HookExtension(PFNGLGETNAMEDBUFFERPOINTERVEXTPROC, glGetNamedBufferPointervEXT); \
HookExtension(PFNGLGETNAMEDBUFFERSUBDATAEXTPROC, glGetNamedBufferSubDataEXT); \
HookExtension(PFNGLTEXTUREBUFFEREXTPROC, glTextureBufferEXT); \
HookExtension(PFNGLMULTITEXBUFFEREXTPROC, glMultiTexBufferEXT); \
@@ -907,25 +1002,14 @@
HookExtension(PFNGLGETMULTITEXPARAMETERIUIVEXTPROC, glGetMultiTexParameterIuivEXT); \
HookExtension(PFNGLGETPOINTERI_VEXTPROC, glGetPointeri_vEXT); \
HookExtension(PFNGLGETNAMEDPROGRAMIVEXTPROC, glGetNamedProgramivEXT); \
HookExtension(PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC, glNamedRenderbufferStorageEXT); \
HookExtension(PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC, glNamedRenderbufferStorageMultisampleEXT); \
HookExtension(PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC, glCheckNamedFramebufferStatusEXT); \
HookExtension(PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC, glNamedFramebufferTexture1DEXT); \
HookExtension(PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC, glNamedFramebufferTexture2DEXT); \
HookExtension(PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC, glNamedFramebufferTexture3DEXT); \
HookExtension(PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC, glNamedFramebufferRenderbufferEXT); \
HookExtension(PFNGLGENERATETEXTUREMIPMAPEXTPROC, glGenerateTextureMipmapEXT); \
HookExtension(PFNGLGENERATEMULTITEXMIPMAPEXTPROC, glGenerateMultiTexMipmapEXT); \
HookExtension(PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC, glFramebufferDrawBufferEXT); \
HookExtension(PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC, glFramebufferDrawBuffersEXT); \
HookExtension(PFNGLFRAMEBUFFERREADBUFFEREXTPROC, glFramebufferReadBufferEXT); \
HookExtension(PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC, glNamedCopyBufferSubDataEXT); \
HookExtension(PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC, glNamedFramebufferTextureEXT); \
HookExtension(PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC, glNamedFramebufferTextureLayerEXT); \
HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC, glVertexArrayVertexAttribOffsetEXT); \
HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC, glVertexArrayVertexAttribIOffsetEXT); \
HookExtension(PFNGLENABLEVERTEXARRAYATTRIBEXTPROC, glEnableVertexArrayAttribEXT); \
HookExtension(PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC, glDisableVertexArrayAttribEXT); \
HookExtension(PFNGLGETVERTEXARRAYINTEGERVEXTPROC, glGetVertexArrayIntegervEXT); \
HookExtension(PFNGLGETVERTEXARRAYPOINTERVEXTPROC, glGetVertexArrayPointervEXT); \
HookExtension(PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC, glGetVertexArrayIntegeri_vEXT); \
@@ -933,21 +1017,13 @@
HookExtension(PFNGLMAPNAMEDBUFFERRANGEEXTPROC, glMapNamedBufferRangeEXT); \
HookExtension(PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC, glFlushMappedNamedBufferRangeEXT); \
HookExtension(PFNGLNAMEDBUFFERSTORAGEEXTPROC, glNamedBufferStorageEXT); \
HookExtension(PFNGLCLEARNAMEDBUFFERDATAEXTPROC, glClearNamedBufferDataEXT); \
HookExtension(PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC, glClearNamedBufferSubDataEXT); \
HookExtension(PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC, glNamedFramebufferParameteriEXT); \
HookExtension(PFNGLTEXTUREBUFFERRANGEEXTPROC, glTextureBufferRangeEXT); \
HookExtension(PFNGLTEXTURESTORAGE1DEXTPROC, glTextureStorage1DEXT); \
HookExtension(PFNGLTEXTURESTORAGE2DEXTPROC, glTextureStorage2DEXT); \
HookExtension(PFNGLTEXTURESTORAGE3DEXTPROC, glTextureStorage3DEXT); \
HookExtension(PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC, glTextureStorage2DMultisampleEXT); \
HookExtension(PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC, glTextureStorage3DMultisampleEXT); \
HookExtension(PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC, glVertexArrayBindVertexBufferEXT); \
HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC, glVertexArrayVertexAttribFormatEXT); \
HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC, glVertexArrayVertexAttribIFormatEXT); \
HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC, glVertexArrayVertexAttribLFormatEXT); \
HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC, glVertexArrayVertexAttribBindingEXT); \
HookExtension(PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC, glVertexArrayVertexBindingDivisorEXT); \
HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC, glVertexArrayVertexAttribLOffsetEXT); \
HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC, glVertexArrayVertexAttribDivisorEXT); \
HookExtension(PFNGLPOLYGONOFFSETCLAMPEXTPROC, glPolygonOffsetClampEXT); \
@@ -1570,16 +1646,74 @@
HookWrapper3(void, glBindImageTextures, GLuint, first, GLsizei, count, const GLuint *, textures); \
HookWrapper5(void, glBindVertexBuffers, GLuint, first, GLsizei, count, const GLuint *, buffers, const GLintptr *, offsets, const GLsizei *, strides); \
HookWrapper2(void, glClipControl, GLenum, origin, GLenum, depth); \
HookWrapper2(void, glCreateTransformFeedbacks, GLsizei, n, GLuint *, ids); \
HookWrapper3(void, glTransformFeedbackBufferBase, GLuint, xfb, GLuint, index, GLuint, buffer); \
HookWrapper5(void, glTransformFeedbackBufferRange, GLuint, xfb, GLuint, index, GLuint, buffer, GLintptr, offset, GLsizei, size); \
HookWrapper3(void, glGetTransformFeedbackiv, GLuint, xfb, GLenum, pname, GLint *, param); \
HookWrapper4(void, glGetTransformFeedbacki_v, GLuint, xfb, GLenum, pname, GLuint, index, GLint *, param); \
HookWrapper4(void, glGetTransformFeedbacki64_v, GLuint, xfb, GLenum, pname, GLuint, index, GLint64 *, param); \
HookWrapper2(void, glCreateBuffers, GLsizei, n, GLuint *, buffers); \
HookWrapper4(void, glNamedBufferStorage, GLuint, buffer, GLsizei, size, const void *, data, GLbitfield, flags); \
HookWrapper4(void, glNamedBufferData, GLuint, buffer, GLsizei, size, const void *, data, GLenum, usage); \
HookWrapper4(void, glNamedBufferSubData, GLuint, buffer, GLintptr, offset, GLsizei, size, const void *, data); \
HookWrapper5(void, glCopyNamedBufferSubData, GLuint, readBuffer, GLuint, writeBuffer, GLintptr, readOffset, GLintptr, writeOffset, GLsizei, size); \
HookWrapper5(void, glClearNamedBufferDataEXT, GLuint, buffer, GLenum, internalformat, GLenum, format, GLenum, type, const void *, data); \
HookWrapper7(void, glClearNamedBufferSubData, GLuint, buffer, GLenum, internalformat, GLintptr, offset, GLsizei, size, GLenum, format, GLenum, type, const void *, data); \
HookWrapper2(void *, glMapNamedBufferEXT, GLuint, buffer, GLenum, access); \
HookWrapper4(void *, glMapNamedBufferRange, GLuint, buffer, GLintptr, offset, GLsizei, length, GLbitfield, access); \
HookWrapper1(GLboolean, glUnmapNamedBufferEXT, GLuint, buffer); \
HookWrapper3(void, glFlushMappedNamedBufferRange, GLuint, buffer, GLintptr, offset, GLsizei, length); \
HookWrapper3(void, glGetNamedBufferParameterivEXT, GLuint, buffer, GLenum, pname, GLint *, params); \
HookWrapper3(void, glGetNamedBufferParameteri64v, GLuint, buffer, GLenum, pname, GLint64 *, params); \
HookWrapper3(void, glGetNamedBufferPointerv, GLuint, buffer, GLenum, pname, void **, params); \
HookWrapper3(void, glGetNamedBufferPointervEXT, GLuint, buffer, GLenum, pname, void **, params); \
HookWrapper4(void, glGetNamedBufferSubData, GLuint, buffer, GLintptr, offset, GLsizei, size, void *, data); \
HookWrapper2(void, glCreateFramebuffers, GLsizei, n, GLuint *, framebuffers); \
HookWrapper4(void, glNamedFramebufferRenderbufferEXT, GLuint, framebuffer, GLenum, attachment, GLenum, renderbuffertarget, GLuint, renderbuffer); \
HookWrapper3(void, glNamedFramebufferParameteriEXT, GLuint, framebuffer, GLenum, pname, GLint, param); \
HookWrapper4(void, glNamedFramebufferTextureEXT, GLuint, framebuffer, GLenum, attachment, GLuint, texture, GLint, level); \
HookWrapper5(void, glNamedFramebufferTextureLayerEXT, GLuint, framebuffer, GLenum, attachment, GLuint, texture, GLint, level, GLint, layer); \
HookWrapper2(void, glFramebufferDrawBufferEXT, GLuint, framebuffer, GLenum, buf); \
HookWrapper3(void, glFramebufferDrawBuffersEXT, GLuint, framebuffer, GLsizei, n, const GLenum *, bufs); \
HookWrapper2(void, glFramebufferReadBufferEXT, GLuint, framebuffer, GLenum, src); \
HookWrapper3(void, glInvalidateNamedFramebufferData, GLuint, framebuffer, GLsizei, numAttachments, const GLenum *, attachments); \
HookWrapper7(void, glInvalidateNamedFramebufferSubData, GLuint, framebuffer, GLsizei, numAttachments, const GLenum *, attachments, GLint, x, GLint, y, GLsizei, width, GLsizei, height); \
HookWrapper4(void, glClearNamedFramebufferiv, GLuint, framebuffer, GLenum, buffer, GLint, drawbuffer, const GLint *, value); \
HookWrapper4(void, glClearNamedFramebufferuiv, GLuint, framebuffer, GLenum, buffer, GLint, drawbuffer, const GLuint *, value); \
HookWrapper4(void, glClearNamedFramebufferfv, GLuint, framebuffer, GLenum, buffer, GLint, drawbuffer, const GLfloat *, value); \
HookWrapper4(void, glClearNamedFramebufferfi, GLuint, framebuffer, GLenum, buffer, const GLfloat, depth, GLint, stencil); \
HookWrapper12(void, glBlitNamedFramebuffer, GLuint, readFramebuffer, GLuint, drawFramebuffer, GLint, srcX0, GLint, srcY0, GLint, srcX1, GLint, srcY1, GLint, dstX0, GLint, dstY0, GLint, dstX1, GLint, dstY1, GLbitfield, mask, GLenum, filter); \
HookWrapper2(GLenum, glCheckNamedFramebufferStatusEXT, GLuint, framebuffer, GLenum, target); \
HookWrapper3(void, glGetNamedFramebufferParameterivEXT, GLuint, framebuffer, GLenum, pname, GLint *, param); \
HookWrapper4(void, glGetNamedFramebufferAttachmentParameterivEXT, GLuint, framebuffer, GLenum, attachment, GLenum, pname, GLint *, params); \
HookWrapper2(void, glCreateRenderbuffers, GLsizei, n, GLuint *, renderbuffers); \
HookWrapper4(void, glNamedRenderbufferStorageEXT, GLuint, renderbuffer, GLenum, internalformat, GLsizei, width, GLsizei, height); \
HookWrapper5(void, glNamedRenderbufferStorageMultisampleEXT, GLuint, renderbuffer, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height); \
HookWrapper3(void, glGetNamedRenderbufferParameterivEXT, GLuint, renderbuffer, GLenum, pname, GLint *, params); \
HookWrapper3(void, glCreateTextures, GLenum, target, GLsizei, n, GLuint *, textures); \
HookWrapper3(void, glTextureBuffer, GLuint, texture, GLenum, internalformat, GLuint, buffer); \
HookWrapper5(void, glTextureBufferRange, GLuint, texture, GLenum, internalformat, GLuint, buffer, GLintptr, offset, GLsizei, size); \
HookWrapper4(void, glTextureStorage1D, GLuint, texture, GLsizei, levels, GLenum, internalformat, GLsizei, width); \
HookWrapper5(void, glTextureStorage2D, GLuint, texture, GLsizei, levels, GLenum, internalformat, GLsizei, width, GLsizei, height); \
HookWrapper6(void, glTextureStorage3D, GLuint, texture, GLsizei, levels, GLenum, internalformat, GLsizei, width, GLsizei, height, GLsizei, depth); \
HookWrapper6(void, glTextureStorage2DMultisample, GLuint, texture, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height, GLboolean, fixedsamplelocations); \
HookWrapper7(void, glTextureStorage3DMultisample, GLuint, texture, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height, GLsizei, depth, GLboolean, fixedsamplelocations); \
HookWrapper7(void, glTextureSubImage1D, GLuint, texture, GLint, level, GLint, xoffset, GLsizei, width, GLenum, format, GLenum, type, const void *, pixels); \
HookWrapper9(void, glTextureSubImage2D, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLsizei, width, GLsizei, height, GLenum, format, GLenum, type, const void *, pixels); \
HookWrapper11(void, glTextureSubImage3D, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLsizei, width, GLsizei, height, GLsizei, depth, GLenum, format, GLenum, type, const void *, pixels); \
HookWrapper7(void, glCompressedTextureSubImage1D, GLuint, texture, GLint, level, GLint, xoffset, GLsizei, width, GLenum, format, GLsizei, imageSize, const void *, data); \
HookWrapper9(void, glCompressedTextureSubImage2D, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLsizei, width, GLsizei, height, GLenum, format, GLsizei, imageSize, const void *, data); \
HookWrapper11(void, glCompressedTextureSubImage3D, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLsizei, width, GLsizei, height, GLsizei, depth, GLenum, format, GLsizei, imageSize, const void *, data); \
HookWrapper6(void, glCopyTextureSubImage1D, GLuint, texture, GLint, level, GLint, xoffset, GLint, x, GLint, y, GLsizei, width); \
HookWrapper8(void, glCopyTextureSubImage2D, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, x, GLint, y, GLsizei, width, GLsizei, height); \
HookWrapper9(void, glCopyTextureSubImage3D, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLint, x, GLint, y, GLsizei, width, GLsizei, height); \
HookWrapper3(void, glTextureParameterf, GLuint, texture, GLenum, pname, GLfloat, param); \
HookWrapper3(void, glTextureParameterfv, GLuint, texture, GLenum, pname, const GLfloat *, param); \
HookWrapper3(void, glTextureParameteri, GLuint, texture, GLenum, pname, GLint, param); \
HookWrapper3(void, glTextureParameterIiv, GLuint, texture, GLenum, pname, const GLint *, params); \
HookWrapper3(void, glTextureParameterIuiv, GLuint, texture, GLenum, pname, const GLuint *, params); \
HookWrapper3(void, glTextureParameteriv, GLuint, texture, GLenum, pname, const GLint *, param); \
HookWrapper1(void, glGenerateTextureMipmap, GLuint, texture); \
HookWrapper2(void, glBindTextureUnit, GLuint, unit, GLuint, texture); \
HookWrapper6(void, glGetTextureImage, GLuint, texture, GLint, level, GLenum, format, GLenum, type, GLsizei, bufSize, void *, pixels); \
HookWrapper4(void, glGetCompressedTextureImage, GLuint, texture, GLint, level, GLsizei, bufSize, void *, pixels); \
HookWrapper4(void, glGetTextureLevelParameterfv, GLuint, texture, GLint, level, GLenum, pname, GLfloat *, params); \
@@ -1588,9 +1722,27 @@
HookWrapper3(void, glGetTextureParameterIiv, GLuint, texture, GLenum, pname, GLint *, params); \
HookWrapper3(void, glGetTextureParameterIuiv, GLuint, texture, GLenum, pname, GLuint *, params); \
HookWrapper3(void, glGetTextureParameteriv, GLuint, texture, GLenum, pname, GLint *, params); \
HookWrapper2(void, glCreateVertexArrays, GLsizei, n, GLuint *, arrays); \
HookWrapper2(void, glDisableVertexArrayAttribEXT, GLuint, vaobj, GLuint, index); \
HookWrapper2(void, glEnableVertexArrayAttribEXT, GLuint, vaobj, GLuint, index); \
HookWrapper2(void, glVertexArrayElementBuffer, GLuint, vaobj, GLuint, buffer); \
HookWrapper5(void, glVertexArrayBindVertexBufferEXT, GLuint, vaobj, GLuint, bindingindex, GLuint, buffer, GLintptr, offset, GLsizei, stride); \
HookWrapper6(void, glVertexArrayVertexBuffers, GLuint, vaobj, GLuint, first, GLsizei, count, const GLuint *, buffers, const GLintptr *, offsets, const GLsizei *, strides); \
HookWrapper3(void, glVertexArrayVertexAttribBindingEXT, GLuint, vaobj, GLuint, attribindex, GLuint, bindingindex); \
HookWrapper6(void, glVertexArrayVertexAttribFormatEXT, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLboolean, normalized, GLuint, relativeoffset); \
HookWrapper5(void, glVertexArrayVertexAttribIFormatEXT, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLuint, relativeoffset); \
HookWrapper5(void, glVertexArrayVertexAttribLFormatEXT, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLuint, relativeoffset); \
HookWrapper3(void, glVertexArrayVertexBindingDivisorEXT, GLuint, vaobj, GLuint, bindingindex, GLuint, divisor); \
HookWrapper3(void, glGetVertexArrayiv, GLuint, vaobj, GLenum, pname, GLint *, param); \
HookWrapper4(void, glGetVertexArrayIndexediv, GLuint, vaobj, GLuint, index, GLenum, pname, GLint *, param); \
HookWrapper4(void, glGetVertexArrayIndexed64iv, GLuint, vaobj, GLuint, index, GLenum, pname, GLint64 *, param); \
HookWrapper2(void, glCreateSamplers, GLsizei, n, GLuint *, samplers); \
HookWrapper2(void, glCreateProgramPipelines, GLsizei, n, GLuint *, pipelines); \
HookWrapper3(void, glCreateQueries, GLenum, target, GLsizei, n, GLuint *, ids); \
HookWrapper4(void, glGetQueryBufferObjecti64v, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \
HookWrapper4(void, glGetQueryBufferObjectiv, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \
HookWrapper4(void, glGetQueryBufferObjectui64v, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \
HookWrapper4(void, glGetQueryBufferObjectuiv, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \
HookWrapper1(void, glMemoryBarrierByRegion, GLbitfield, barriers); \
HookWrapper12(void, glGetTextureSubImage, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLsizei, width, GLsizei, height, GLsizei, depth, GLenum, format, GLenum, type, GLsizei, bufSize, void *, pixels); \
HookWrapper10(void, glGetCompressedTextureSubImage, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLsizei, width, GLsizei, height, GLsizei, depth, GLsizei, bufSize, void *, pixels); \
@@ -1679,9 +1831,6 @@
HookWrapper4(void, glGetCompressedMultiTexImageEXT, GLenum, texunit, GLenum, target, GLint, lod, void *, img); \
HookWrapper4(void, glNamedBufferDataEXT, GLuint, buffer, GLsizeiptr, size, const void *, data, GLenum, usage); \
HookWrapper4(void, glNamedBufferSubDataEXT, GLuint, buffer, GLintptr, offset, GLsizeiptr, size, const void *, data); \
HookWrapper2(void *, glMapNamedBufferEXT, GLuint, buffer, GLenum, access); \
HookWrapper1(GLboolean, glUnmapNamedBufferEXT, GLuint, buffer); \
HookWrapper3(void, glGetNamedBufferPointervEXT, GLuint, buffer, GLenum, pname, void **, params); \
HookWrapper4(void, glGetNamedBufferSubDataEXT, GLuint, buffer, GLintptr, offset, GLsizeiptr, size, void *, data); \
HookWrapper4(void, glTextureBufferEXT, GLuint, texture, GLenum, target, GLenum, internalformat, GLuint, buffer); \
HookWrapper4(void, glMultiTexBufferEXT, GLenum, texunit, GLenum, target, GLenum, internalformat, GLuint, buffer); \
@@ -1695,25 +1844,14 @@
HookWrapper4(void, glGetMultiTexParameterIuivEXT, GLenum, texunit, GLenum, target, GLenum, pname, GLuint *, params); \
HookWrapper3(void, glGetPointeri_vEXT, GLenum, pname, GLuint, index, void **, params); \
HookWrapper4(void, glGetNamedProgramivEXT, GLuint, program, GLenum, target, GLenum, pname, GLint *, params); \
HookWrapper4(void, glNamedRenderbufferStorageEXT, GLuint, renderbuffer, GLenum, internalformat, GLsizei, width, GLsizei, height); \
HookWrapper5(void, glNamedRenderbufferStorageMultisampleEXT, GLuint, renderbuffer, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height); \
HookWrapper2(GLenum, glCheckNamedFramebufferStatusEXT, GLuint, framebuffer, GLenum, target); \
HookWrapper5(void, glNamedFramebufferTexture1DEXT, GLuint, framebuffer, GLenum, attachment, GLenum, textarget, GLuint, texture, GLint, level); \
HookWrapper5(void, glNamedFramebufferTexture2DEXT, GLuint, framebuffer, GLenum, attachment, GLenum, textarget, GLuint, texture, GLint, level); \
HookWrapper6(void, glNamedFramebufferTexture3DEXT, GLuint, framebuffer, GLenum, attachment, GLenum, textarget, GLuint, texture, GLint, level, GLint, zoffset); \
HookWrapper4(void, glNamedFramebufferRenderbufferEXT, GLuint, framebuffer, GLenum, attachment, GLenum, renderbuffertarget, GLuint, renderbuffer); \
HookWrapper2(void, glGenerateTextureMipmapEXT, GLuint, texture, GLenum, target); \
HookWrapper2(void, glGenerateMultiTexMipmapEXT, GLenum, texunit, GLenum, target); \
HookWrapper2(void, glFramebufferDrawBufferEXT, GLuint, framebuffer, GLenum, mode); \
HookWrapper3(void, glFramebufferDrawBuffersEXT, GLuint, framebuffer, GLsizei, n, const GLenum *, bufs); \
HookWrapper2(void, glFramebufferReadBufferEXT, GLuint, framebuffer, GLenum, mode); \
HookWrapper5(void, glNamedCopyBufferSubDataEXT, GLuint, readBuffer, GLuint, writeBuffer, GLintptr, readOffset, GLintptr, writeOffset, GLsizeiptr, size); \
HookWrapper4(void, glNamedFramebufferTextureEXT, GLuint, framebuffer, GLenum, attachment, GLuint, texture, GLint, level); \
HookWrapper5(void, glNamedFramebufferTextureLayerEXT, GLuint, framebuffer, GLenum, attachment, GLuint, texture, GLint, level, GLint, layer); \
HookWrapper8(void, glVertexArrayVertexAttribOffsetEXT, GLuint, vaobj, GLuint, buffer, GLuint, index, GLint, size, GLenum, type, GLboolean, normalized, GLsizei, stride, GLintptr, offset); \
HookWrapper7(void, glVertexArrayVertexAttribIOffsetEXT, GLuint, vaobj, GLuint, buffer, GLuint, index, GLint, size, GLenum, type, GLsizei, stride, GLintptr, offset); \
HookWrapper2(void, glEnableVertexArrayAttribEXT, GLuint, vaobj, GLuint, index); \
HookWrapper2(void, glDisableVertexArrayAttribEXT, GLuint, vaobj, GLuint, index); \
HookWrapper3(void, glGetVertexArrayIntegervEXT, GLuint, vaobj, GLenum, pname, GLint *, param); \
HookWrapper3(void, glGetVertexArrayPointervEXT, GLuint, vaobj, GLenum, pname, void **, param); \
HookWrapper4(void, glGetVertexArrayIntegeri_vEXT, GLuint, vaobj, GLuint, index, GLenum, pname, GLint *, param); \
@@ -1721,21 +1859,13 @@
HookWrapper4(void *, glMapNamedBufferRangeEXT, GLuint, buffer, GLintptr, offset, GLsizeiptr, length, GLbitfield, access); \
HookWrapper3(void, glFlushMappedNamedBufferRangeEXT, GLuint, buffer, GLintptr, offset, GLsizeiptr, length); \
HookWrapper4(void, glNamedBufferStorageEXT, GLuint, buffer, GLsizeiptr, size, const void *, data, GLbitfield, flags); \
HookWrapper5(void, glClearNamedBufferDataEXT, GLuint, buffer, GLenum, internalformat, GLenum, format, GLenum, type, const void *, data); \
HookWrapper7(void, glClearNamedBufferSubDataEXT, GLuint, buffer, GLenum, internalformat, GLsizeiptr, offset, GLsizeiptr, size, GLenum, format, GLenum, type, const void *, data); \
HookWrapper3(void, glNamedFramebufferParameteriEXT, GLuint, framebuffer, GLenum, pname, GLint, param); \
HookWrapper6(void, glTextureBufferRangeEXT, GLuint, texture, GLenum, target, GLenum, internalformat, GLuint, buffer, GLintptr, offset, GLsizeiptr, size); \
HookWrapper5(void, glTextureStorage1DEXT, GLuint, texture, GLenum, target, GLsizei, levels, GLenum, internalformat, GLsizei, width); \
HookWrapper6(void, glTextureStorage2DEXT, GLuint, texture, GLenum, target, GLsizei, levels, GLenum, internalformat, GLsizei, width, GLsizei, height); \
HookWrapper7(void, glTextureStorage3DEXT, GLuint, texture, GLenum, target, GLsizei, levels, GLenum, internalformat, GLsizei, width, GLsizei, height, GLsizei, depth); \
HookWrapper7(void, glTextureStorage2DMultisampleEXT, GLuint, texture, GLenum, target, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height, GLboolean, fixedsamplelocations); \
HookWrapper8(void, glTextureStorage3DMultisampleEXT, GLuint, texture, GLenum, target, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height, GLsizei, depth, GLboolean, fixedsamplelocations); \
HookWrapper5(void, glVertexArrayBindVertexBufferEXT, GLuint, vaobj, GLuint, bindingindex, GLuint, buffer, GLintptr, offset, GLsizei, stride); \
HookWrapper6(void, glVertexArrayVertexAttribFormatEXT, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLboolean, normalized, GLuint, relativeoffset); \
HookWrapper5(void, glVertexArrayVertexAttribIFormatEXT, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLuint, relativeoffset); \
HookWrapper5(void, glVertexArrayVertexAttribLFormatEXT, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLuint, relativeoffset); \
HookWrapper3(void, glVertexArrayVertexAttribBindingEXT, GLuint, vaobj, GLuint, attribindex, GLuint, bindingindex); \
HookWrapper3(void, glVertexArrayVertexBindingDivisorEXT, GLuint, vaobj, GLuint, bindingindex, GLuint, divisor); \
HookWrapper7(void, glVertexArrayVertexAttribLOffsetEXT, GLuint, vaobj, GLuint, buffer, GLuint, index, GLint, size, GLenum, type, GLsizei, stride, GLintptr, offset); \
HookWrapper3(void, glVertexArrayVertexAttribDivisorEXT, GLuint, vaobj, GLuint, index, GLuint, divisor); \
HookWrapper3(void, glPolygonOffsetClampEXT, GLfloat, factor, GLfloat, units, GLfloat, clamp); \
@@ -1747,82 +1877,6 @@
// unsupported entry points - used for dummy functions
#define DefineUnsupportedDummies() \
HookWrapper2(void, glcreatetransformfeedbacks, GLsizei, n, GLuint *, ids); \
HookWrapper3(void, gltransformfeedbackbufferbase, GLuint, xfb, GLuint, index, GLuint, buffer); \
HookWrapper5(void, gltransformfeedbackbufferrange, GLuint, xfb, GLuint, index, GLuint, buffer, GLintptr, offset, GLsizei, size); \
HookWrapper2(void, glcreatebuffers, GLsizei, n, GLuint *, buffers); \
HookWrapper4(void, glnamedbufferstorage, GLuint, buffer, GLsizei, size, const void *, data, GLbitfield, flags); \
HookWrapper4(void, glnamedbufferdata, GLuint, buffer, GLsizei, size, const void *, data, GLenum, usage); \
HookWrapper4(void, glnamedbuffersubdata, GLuint, buffer, GLintptr, offset, GLsizei, size, const void *, data); \
HookWrapper5(void, glcopynamedbuffersubdata, GLuint, readBuffer, GLuint, writeBuffer, GLintptr, readOffset, GLintptr, writeOffset, GLsizei, size); \
HookWrapper5(void, glclearnamedbufferdata, GLuint, buffer, GLenum, internalformat, GLenum, format, GLenum, type, const void *, data); \
HookWrapper7(void, glclearnamedbuffersubdata, GLuint, buffer, GLenum, internalformat, GLintptr, offset, GLsizei, size, GLenum, format, GLenum, type, const void *, data); \
HookWrapper2(void *, glmapnamedbuffer, GLuint, buffer, GLenum, access); \
HookWrapper4(void *, glmapnamedbufferrange, GLuint, buffer, GLintptr, offset, GLsizei, length, GLbitfield, access); \
HookWrapper1(GLboolean, glunmapnamedbuffer, GLuint, buffer); \
HookWrapper3(void, glflushmappednamedbufferrange, GLuint, buffer, GLintptr, offset, GLsizei, length); \
HookWrapper2(void, glcreateframebuffers, GLsizei, n, GLuint *, framebuffers); \
HookWrapper4(void, glnamedframebufferrenderbuffer, GLuint, framebuffer, GLenum, attachment, GLenum, renderbuffertarget, GLuint, renderbuffer); \
HookWrapper3(void, glnamedframebufferparameteri, GLuint, framebuffer, GLenum, pname, GLint, param); \
HookWrapper4(void, glnamedframebuffertexture, GLuint, framebuffer, GLenum, attachment, GLuint, texture, GLint, level); \
HookWrapper5(void, glnamedframebuffertexturelayer, GLuint, framebuffer, GLenum, attachment, GLuint, texture, GLint, level, GLint, layer); \
HookWrapper2(void, glnamedframebufferdrawbuffer, GLuint, framebuffer, GLenum, buf); \
HookWrapper3(void, glnamedframebufferdrawbuffers, GLuint, framebuffer, GLsizei, n, const GLenum *, bufs); \
HookWrapper2(void, glnamedframebufferreadbuffer, GLuint, framebuffer, GLenum, src); \
HookWrapper3(void, glinvalidatenamedframebufferdata, GLuint, framebuffer, GLsizei, numAttachments, const GLenum *, attachments); \
HookWrapper7(void, glinvalidatenamedframebuffersubdata, GLuint, framebuffer, GLsizei, numAttachments, const GLenum *, attachments, GLint, x, GLint, y, GLsizei, width, GLsizei, height); \
HookWrapper4(void, glclearnamedframebufferiv, GLuint, framebuffer, GLenum, buffer, GLint, drawbuffer, const GLint *, value); \
HookWrapper4(void, glclearnamedframebufferuiv, GLuint, framebuffer, GLenum, buffer, GLint, drawbuffer, const GLuint *, value); \
HookWrapper4(void, glclearnamedframebufferfv, GLuint, framebuffer, GLenum, buffer, GLint, drawbuffer, const GLfloat *, value); \
HookWrapper4(void, glclearnamedframebufferfi, GLuint, framebuffer, GLenum, buffer, const GLfloat, depth, GLint, stencil); \
HookWrapper12(void, glblitnamedframebuffer, GLuint, readFramebuffer, GLuint, drawFramebuffer, GLint, srcX0, GLint, srcY0, GLint, srcX1, GLint, srcY1, GLint, dstX0, GLint, dstY0, GLint, dstX1, GLint, dstY1, GLbitfield, mask, GLenum, filter); \
HookWrapper2(GLenum, glchecknamedframebufferstatus, GLuint, framebuffer, GLenum, target); \
HookWrapper2(void, glcreaterenderbuffers, GLsizei, n, GLuint *, renderbuffers); \
HookWrapper4(void, glnamedrenderbufferstorage, GLuint, renderbuffer, GLenum, internalformat, GLsizei, width, GLsizei, height); \
HookWrapper5(void, glnamedrenderbufferstoragemultisample, GLuint, renderbuffer, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height); \
HookWrapper3(void, glcreatetextures, GLenum, target, GLsizei, n, GLuint *, textures); \
HookWrapper3(void, gltexturebuffer, GLuint, texture, GLenum, internalformat, GLuint, buffer); \
HookWrapper5(void, gltexturebufferrange, GLuint, texture, GLenum, internalformat, GLuint, buffer, GLintptr, offset, GLsizei, size); \
HookWrapper4(void, gltexturestorage1d, GLuint, texture, GLsizei, levels, GLenum, internalformat, GLsizei, width); \
HookWrapper5(void, gltexturestorage2d, GLuint, texture, GLsizei, levels, GLenum, internalformat, GLsizei, width, GLsizei, height); \
HookWrapper6(void, gltexturestorage3d, GLuint, texture, GLsizei, levels, GLenum, internalformat, GLsizei, width, GLsizei, height, GLsizei, depth); \
HookWrapper6(void, gltexturestorage2dmultisample, GLuint, texture, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height, GLboolean, fixedsamplelocations); \
HookWrapper7(void, gltexturestorage3dmultisample, GLuint, texture, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height, GLsizei, depth, GLboolean, fixedsamplelocations); \
HookWrapper7(void, gltexturesubimage1d, GLuint, texture, GLint, level, GLint, xoffset, GLsizei, width, GLenum, format, GLenum, type, const void *, pixels); \
HookWrapper9(void, gltexturesubimage2d, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLsizei, width, GLsizei, height, GLenum, format, GLenum, type, const void *, pixels); \
HookWrapper11(void, gltexturesubimage3d, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLsizei, width, GLsizei, height, GLsizei, depth, GLenum, format, GLenum, type, const void *, pixels); \
HookWrapper7(void, glcompressedtexturesubimage1d, GLuint, texture, GLint, level, GLint, xoffset, GLsizei, width, GLenum, format, GLsizei, imageSize, const void *, data); \
HookWrapper9(void, glcompressedtexturesubimage2d, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLsizei, width, GLsizei, height, GLenum, format, GLsizei, imageSize, const void *, data); \
HookWrapper11(void, glcompressedtexturesubimage3d, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLsizei, width, GLsizei, height, GLsizei, depth, GLenum, format, GLsizei, imageSize, const void *, data); \
HookWrapper6(void, glcopytexturesubimage1d, GLuint, texture, GLint, level, GLint, xoffset, GLint, x, GLint, y, GLsizei, width); \
HookWrapper8(void, glcopytexturesubimage2d, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, x, GLint, y, GLsizei, width, GLsizei, height); \
HookWrapper9(void, glcopytexturesubimage3d, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLint, x, GLint, y, GLsizei, width, GLsizei, height); \
HookWrapper3(void, gltextureparameterf, GLuint, texture, GLenum, pname, GLfloat, param); \
HookWrapper3(void, gltextureparameterfv, GLuint, texture, GLenum, pname, const GLfloat *, param); \
HookWrapper3(void, gltextureparameteri, GLuint, texture, GLenum, pname, GLint, param); \
HookWrapper3(void, gltextureparameteriiv, GLuint, texture, GLenum, pname, const GLint *, params); \
HookWrapper3(void, gltextureparameteriuiv, GLuint, texture, GLenum, pname, const GLuint *, params); \
HookWrapper3(void, gltextureparameteriv, GLuint, texture, GLenum, pname, const GLint *, param); \
HookWrapper1(void, glgeneratetexturemipmap, GLuint, texture); \
HookWrapper2(void, glbindtextureunit, GLuint, unit, GLuint, texture); \
HookWrapper2(void, glcreatevertexarrays, GLsizei, n, GLuint *, arrays); \
HookWrapper2(void, gldisablevertexarrayattrib, GLuint, vaobj, GLuint, index); \
HookWrapper2(void, glenablevertexarrayattrib, GLuint, vaobj, GLuint, index); \
HookWrapper2(void, glvertexarrayelementbuffer, GLuint, vaobj, GLuint, buffer); \
HookWrapper5(void, glvertexarrayvertexbuffer, GLuint, vaobj, GLuint, bindingindex, GLuint, buffer, GLintptr, offset, GLsizei, stride); \
HookWrapper6(void, glvertexarrayvertexbuffers, GLuint, vaobj, GLuint, first, GLsizei, count, const GLuint *, buffers, const GLintptr *, offsets, const GLsizei *, strides); \
HookWrapper3(void, glvertexarrayattribbinding, GLuint, vaobj, GLuint, attribindex, GLuint, bindingindex); \
HookWrapper6(void, glvertexarrayattribformat, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLboolean, normalized, GLuint, relativeoffset); \
HookWrapper5(void, glvertexarrayattribiformat, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLuint, relativeoffset); \
HookWrapper5(void, glvertexarrayattriblformat, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLuint, relativeoffset); \
HookWrapper3(void, glvertexarraybindingdivisor, GLuint, vaobj, GLuint, bindingindex, GLuint, divisor); \
HookWrapper2(void, glcreatesamplers, GLsizei, n, GLuint *, samplers); \
HookWrapper2(void, glcreateprogrampipelines, GLsizei, n, GLuint *, pipelines); \
HookWrapper3(void, glcreatequeries, GLenum, target, GLsizei, n, GLuint *, ids); \
HookWrapper4(void, glgetquerybufferobjecti64v, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \
HookWrapper4(void, glgetquerybufferobjectiv, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \
HookWrapper4(void, glgetquerybufferobjectui64v, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \
HookWrapper4(void, glgetquerybufferobjectuiv, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \
HookWrapper1(GLuint64, glgettexturehandlearb, GLuint, texture); \
HookWrapper2(GLuint64, glgettexturesamplerhandlearb, GLuint, texture, GLuint, sampler); \
HookWrapper1(void, glmaketexturehandleresidentarb, GLuint64, handle); \
@@ -3354,82 +3408,6 @@
#define CheckUnsupported() \
HandleUnsupported(PFNGLCREATETRANSFORMFEEDBACKSPROC, glcreatetransformfeedbacks); \
HandleUnsupported(PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC, gltransformfeedbackbufferbase); \
HandleUnsupported(PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC, gltransformfeedbackbufferrange); \
HandleUnsupported(PFNGLCREATEBUFFERSPROC, glcreatebuffers); \
HandleUnsupported(PFNGLNAMEDBUFFERSTORAGEPROC, glnamedbufferstorage); \
HandleUnsupported(PFNGLNAMEDBUFFERDATAPROC, glnamedbufferdata); \
HandleUnsupported(PFNGLNAMEDBUFFERSUBDATAPROC, glnamedbuffersubdata); \
HandleUnsupported(PFNGLCOPYNAMEDBUFFERSUBDATAPROC, glcopynamedbuffersubdata); \
HandleUnsupported(PFNGLCLEARNAMEDBUFFERDATAPROC, glclearnamedbufferdata); \
HandleUnsupported(PFNGLCLEARNAMEDBUFFERSUBDATAPROC, glclearnamedbuffersubdata); \
HandleUnsupported(PFNGLMAPNAMEDBUFFERPROC, glmapnamedbuffer); \
HandleUnsupported(PFNGLMAPNAMEDBUFFERRANGEPROC, glmapnamedbufferrange); \
HandleUnsupported(PFNGLUNMAPNAMEDBUFFERPROC, glunmapnamedbuffer); \
HandleUnsupported(PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC, glflushmappednamedbufferrange); \
HandleUnsupported(PFNGLCREATEFRAMEBUFFERSPROC, glcreateframebuffers); \
HandleUnsupported(PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC, glnamedframebufferrenderbuffer); \
HandleUnsupported(PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC, glnamedframebufferparameteri); \
HandleUnsupported(PFNGLNAMEDFRAMEBUFFERTEXTUREPROC, glnamedframebuffertexture); \
HandleUnsupported(PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC, glnamedframebuffertexturelayer); \
HandleUnsupported(PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC, glnamedframebufferdrawbuffer); \
HandleUnsupported(PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC, glnamedframebufferdrawbuffers); \
HandleUnsupported(PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC, glnamedframebufferreadbuffer); \
HandleUnsupported(PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC, glinvalidatenamedframebufferdata); \
HandleUnsupported(PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC, glinvalidatenamedframebuffersubdata); \
HandleUnsupported(PFNGLCLEARNAMEDFRAMEBUFFERIVPROC, glclearnamedframebufferiv); \
HandleUnsupported(PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC, glclearnamedframebufferuiv); \
HandleUnsupported(PFNGLCLEARNAMEDFRAMEBUFFERFVPROC, glclearnamedframebufferfv); \
HandleUnsupported(PFNGLCLEARNAMEDFRAMEBUFFERFIPROC, glclearnamedframebufferfi); \
HandleUnsupported(PFNGLBLITNAMEDFRAMEBUFFERPROC, glblitnamedframebuffer); \
HandleUnsupported(PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC, glchecknamedframebufferstatus); \
HandleUnsupported(PFNGLCREATERENDERBUFFERSPROC, glcreaterenderbuffers); \
HandleUnsupported(PFNGLNAMEDRENDERBUFFERSTORAGEPROC, glnamedrenderbufferstorage); \
HandleUnsupported(PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC, glnamedrenderbufferstoragemultisample); \
HandleUnsupported(PFNGLCREATETEXTURESPROC, glcreatetextures); \
HandleUnsupported(PFNGLTEXTUREBUFFERPROC, gltexturebuffer); \
HandleUnsupported(PFNGLTEXTUREBUFFERRANGEPROC, gltexturebufferrange); \
HandleUnsupported(PFNGLTEXTURESTORAGE1DPROC, gltexturestorage1d); \
HandleUnsupported(PFNGLTEXTURESTORAGE2DPROC, gltexturestorage2d); \
HandleUnsupported(PFNGLTEXTURESTORAGE3DPROC, gltexturestorage3d); \
HandleUnsupported(PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC, gltexturestorage2dmultisample); \
HandleUnsupported(PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC, gltexturestorage3dmultisample); \
HandleUnsupported(PFNGLTEXTURESUBIMAGE1DPROC, gltexturesubimage1d); \
HandleUnsupported(PFNGLTEXTURESUBIMAGE2DPROC, gltexturesubimage2d); \
HandleUnsupported(PFNGLTEXTURESUBIMAGE3DPROC, gltexturesubimage3d); \
HandleUnsupported(PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC, glcompressedtexturesubimage1d); \
HandleUnsupported(PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC, glcompressedtexturesubimage2d); \
HandleUnsupported(PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC, glcompressedtexturesubimage3d); \
HandleUnsupported(PFNGLCOPYTEXTURESUBIMAGE1DPROC, glcopytexturesubimage1d); \
HandleUnsupported(PFNGLCOPYTEXTURESUBIMAGE2DPROC, glcopytexturesubimage2d); \
HandleUnsupported(PFNGLCOPYTEXTURESUBIMAGE3DPROC, glcopytexturesubimage3d); \
HandleUnsupported(PFNGLTEXTUREPARAMETERFPROC, gltextureparameterf); \
HandleUnsupported(PFNGLTEXTUREPARAMETERFVPROC, gltextureparameterfv); \
HandleUnsupported(PFNGLTEXTUREPARAMETERIPROC, gltextureparameteri); \
HandleUnsupported(PFNGLTEXTUREPARAMETERIIVPROC, gltextureparameteriiv); \
HandleUnsupported(PFNGLTEXTUREPARAMETERIUIVPROC, gltextureparameteriuiv); \
HandleUnsupported(PFNGLTEXTUREPARAMETERIVPROC, gltextureparameteriv); \
HandleUnsupported(PFNGLGENERATETEXTUREMIPMAPPROC, glgeneratetexturemipmap); \
HandleUnsupported(PFNGLBINDTEXTUREUNITPROC, glbindtextureunit); \
HandleUnsupported(PFNGLCREATEVERTEXARRAYSPROC, glcreatevertexarrays); \
HandleUnsupported(PFNGLDISABLEVERTEXARRAYATTRIBPROC, gldisablevertexarrayattrib); \
HandleUnsupported(PFNGLENABLEVERTEXARRAYATTRIBPROC, glenablevertexarrayattrib); \
HandleUnsupported(PFNGLVERTEXARRAYELEMENTBUFFERPROC, glvertexarrayelementbuffer); \
HandleUnsupported(PFNGLVERTEXARRAYVERTEXBUFFERPROC, glvertexarrayvertexbuffer); \
HandleUnsupported(PFNGLVERTEXARRAYVERTEXBUFFERSPROC, glvertexarrayvertexbuffers); \
HandleUnsupported(PFNGLVERTEXARRAYATTRIBBINDINGPROC, glvertexarrayattribbinding); \
HandleUnsupported(PFNGLVERTEXARRAYATTRIBFORMATPROC, glvertexarrayattribformat); \
HandleUnsupported(PFNGLVERTEXARRAYATTRIBIFORMATPROC, glvertexarrayattribiformat); \
HandleUnsupported(PFNGLVERTEXARRAYATTRIBLFORMATPROC, glvertexarrayattriblformat); \
HandleUnsupported(PFNGLVERTEXARRAYBINDINGDIVISORPROC, glvertexarraybindingdivisor); \
HandleUnsupported(PFNGLCREATESAMPLERSPROC, glcreatesamplers); \
HandleUnsupported(PFNGLCREATEPROGRAMPIPELINESPROC, glcreateprogrampipelines); \
HandleUnsupported(PFNGLCREATEQUERIESPROC, glcreatequeries); \
HandleUnsupported(PFNGLGETQUERYBUFFEROBJECTI64VPROC, glgetquerybufferobjecti64v); \
HandleUnsupported(PFNGLGETQUERYBUFFEROBJECTIVPROC, glgetquerybufferobjectiv); \
HandleUnsupported(PFNGLGETQUERYBUFFEROBJECTUI64VPROC, glgetquerybufferobjectui64v); \
HandleUnsupported(PFNGLGETQUERYBUFFEROBJECTUIVPROC, glgetquerybufferobjectuiv); \
HandleUnsupported(PFNGLGETTEXTUREHANDLEARBPROC, glgettexturehandlearb); \
HandleUnsupported(PFNGLGETTEXTURESAMPLERHANDLEARBPROC, glgettexturesamplerhandlearb); \
HandleUnsupported(PFNGLMAKETEXTUREHANDLERESIDENTARBPROC, glmaketexturehandleresidentarb); \
+2 -2
View File
@@ -53,7 +53,7 @@ while(<HOOKSET>)
$current = \@dllexport if $1 eq "dllexport";
$current = \@glext if $1 eq "glext";
}
elsif($line =~ /^\s*\/\/ .*/)
elsif($line =~ /^\s*\/\/.*/)
{
# skip comments
}
@@ -182,7 +182,7 @@ print <<ENDOFHEADER;
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2014 Crytek
* Copyright (c) 2015 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
+183 -30
View File
@@ -322,6 +322,12 @@ void WrappedOpenGL::glNamedBufferStorageEXT(GLuint buffer, GLsizeiptr size, cons
}
}
void WrappedOpenGL::glNamedBufferStorage(GLuint buffer, GLsizei size, const void *data, GLbitfield flags)
{
// only difference to EXT function is size parameter, so just upcast
glNamedBufferStorageEXT(buffer, (GLsizeiptr)size, data, flags);
}
void WrappedOpenGL::glBufferStorage(GLenum target, GLsizeiptr size, const void *data, GLbitfield flags)
{
m_Real.glBufferStorage(target, size, data, flags);
@@ -498,6 +504,12 @@ void WrappedOpenGL::glNamedBufferDataEXT(GLuint buffer, GLsizeiptr size, const v
}
}
void WrappedOpenGL::glNamedBufferData(GLuint buffer, GLsizei size, const void *data, GLenum usage)
{
// only difference to EXT function is size parameter, so just upcast
glNamedBufferDataEXT(buffer, (GLsizeiptr)size, data, usage);
}
void WrappedOpenGL::glBufferData(GLenum target, GLsizeiptr size, const void *data, GLenum usage)
{
m_Real.glBufferData(target, size, data, usage);
@@ -655,6 +667,12 @@ void WrappedOpenGL::glNamedBufferSubDataEXT(GLuint buffer, GLintptr offset, GLsi
}
}
void WrappedOpenGL::glNamedBufferSubData(GLuint buffer, GLintptr offset, GLsizei size, const void *data)
{
// only difference to EXT function is size parameter, so just upcast
glNamedBufferSubDataEXT(buffer, offset, (GLsizeiptr)size, data);
}
void WrappedOpenGL::glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void *data)
{
m_Real.glBufferSubData(target, offset, size, data);
@@ -735,6 +753,11 @@ void WrappedOpenGL::glNamedCopyBufferSubDataEXT(GLuint readBuffer, GLuint writeB
}
}
void WrappedOpenGL::glCopyNamedBufferSubData(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizei size)
{
glNamedCopyBufferSubDataEXT(readBuffer, writeBuffer, readOffset, writeOffset, (GLsizeiptr)size);
}
void WrappedOpenGL::glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
{
m_Real.glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
@@ -1537,6 +1560,12 @@ void *WrappedOpenGL::glMapNamedBufferRangeEXT(GLuint buffer, GLintptr offset, GL
return m_Real.glMapNamedBufferRangeEXT(buffer, offset, length, access);
}
void *WrappedOpenGL::glMapNamedBufferRange(GLuint buffer, GLintptr offset, GLsizei length, GLbitfield access)
{
// only difference to EXT function is size parameter, so just upcast
return glMapNamedBufferRangeEXT(buffer, offset, (GLsizeiptr)length, access);
}
void *WrappedOpenGL::glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
{
if(m_State >= WRITING)
@@ -1817,6 +1846,12 @@ void WrappedOpenGL::glFlushMappedNamedBufferRangeEXT(GLuint buffer, GLintptr off
}
}
void WrappedOpenGL::glFlushMappedNamedBufferRange(GLuint buffer, GLintptr offset, GLsizei length)
{
// only difference to EXT function is size parameter, so just upcast
glFlushMappedNamedBufferRangeEXT(buffer, offset, (GLsizeiptr)length);
}
void WrappedOpenGL::glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
{
if(m_State >= WRITING)
@@ -1914,17 +1949,46 @@ bool WrappedOpenGL::Serialise_glTransformFeedbackBufferBase(GLuint xfb, GLuint i
if(m_State <= EXECUTING)
{
m_Real.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, GetResourceManager()->GetLiveResource(xid).name);
xfb = GetResourceManager()->GetLiveResource(xid).name;
// use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If
// we are running without ARB_dsa support, these functions are emulated in the trivial way. This is
// necessary since these functions can be serialised even if ARB_dsa was not used originally, and
// we need to support this case.
if(bid == ResourceId())
m_Real.glBindBufferBase(eGL_TRANSFORM_FEEDBACK_BUFFER, idx, 0);
m_Real.glTransformFeedbackBufferBase(xfb, idx, 0);
else
m_Real.glBindBufferBase(eGL_TRANSFORM_FEEDBACK_BUFFER, idx, GetResourceManager()->GetLiveResource(bid).name);
m_Real.glTransformFeedbackBufferBase(xfb, idx, GetResourceManager()->GetLiveResource(bid).name);
}
return true;
}
void WrappedOpenGL::glTransformFeedbackBufferBase(GLuint xfb, GLuint index, GLuint buffer)
{
m_Real.glTransformFeedbackBufferBase(xfb, index, buffer);
if(m_State >= WRITING)
{
SCOPED_SERIALISE_CONTEXT(FEEDBACK_BUFFER_BASE);
Serialise_glTransformFeedbackBufferBase(xfb, index, buffer);
if(m_State == WRITING_CAPFRAME)
{
m_ContextRecord->AddChunk(scope.Get());
}
else if(xfb != 0)
{
GLResourceRecord *fbrecord = GetResourceManager()->GetResourceRecord(FeedbackRes(GetCtx(), xfb));
fbrecord->AddChunk(scope.Get());
if(buffer != 0)
fbrecord->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffer)));
}
}
}
bool WrappedOpenGL::Serialise_glTransformFeedbackBufferRange(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizei size)
{
SERIALISE_ELEMENT(uint32_t, idx, index);
@@ -1935,17 +1999,46 @@ bool WrappedOpenGL::Serialise_glTransformFeedbackBufferRange(GLuint xfb, GLuint
if(m_State <= EXECUTING)
{
m_Real.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, GetResourceManager()->GetLiveResource(xid).name);
xfb = GetResourceManager()->GetLiveResource(xid).name;
// use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If
// we are running without ARB_dsa support, these functions are emulated in the obvious way. This is
// necessary since these functions can be serialised even if ARB_dsa was not used originally, and
// we need to support this case.
if(bid == ResourceId())
m_Real.glBindBufferBase(eGL_TRANSFORM_FEEDBACK_BUFFER, idx, 0); // if we're unbinding, offset/size don't matter
m_Real.glTransformFeedbackBufferBase(xfb, idx, 0); // if we're unbinding, offset/size don't matter
else
m_Real.glBindBufferRange(eGL_TRANSFORM_FEEDBACK_BUFFER, idx, GetResourceManager()->GetLiveResource(bid).name, (GLintptr)offs, (GLsizei)sz);
m_Real.glTransformFeedbackBufferRange(xfb, idx, GetResourceManager()->GetLiveResource(bid).name, (GLintptr)offs, (GLsizei)sz);
}
return true;
}
void WrappedOpenGL::glTransformFeedbackBufferRange(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizei size)
{
m_Real.glTransformFeedbackBufferRange(xfb, index, buffer, offset, size);
if(m_State >= WRITING)
{
SCOPED_SERIALISE_CONTEXT(FEEDBACK_BUFFER_RANGE);
Serialise_glTransformFeedbackBufferRange(xfb, index, buffer, offset, size);
if(m_State == WRITING_CAPFRAME)
{
m_ContextRecord->AddChunk(scope.Get());
}
else if(xfb != 0)
{
GLResourceRecord *fbrecord = GetResourceManager()->GetResourceRecord(FeedbackRes(GetCtx(), xfb));
fbrecord->AddChunk(scope.Get());
if(buffer != 0)
fbrecord->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffer)));
}
}
}
bool WrappedOpenGL::Serialise_glBindTransformFeedback(GLenum target, GLuint id)
{
SERIALISE_ELEMENT(GLenum, Target, target);
@@ -3007,16 +3100,47 @@ bool WrappedOpenGL::Serialise_glVertexArrayElementBuffer(GLuint vaobj, GLuint bu
buffer = 0;
if(bid != ResourceId()) buffer = GetResourceManager()->GetLiveResource(bid).name;
// hack for now, since we don't properly serialise ARB_dsa, this is just used from
// glBindBuffer as a utility serialise function
m_Real.glBindVertexArray(vaobj);
m_Real.glBindBuffer(eGL_ELEMENT_ARRAY_BUFFER, buffer);
// use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If
// we are running without ARB_dsa support, these functions are emulated in the obvious way. This is
// necessary since these functions can be serialised even if ARB_dsa was not used originally, and
// we need to support this case.
m_Real.glVertexArrayElementBuffer(vaobj, buffer);
}
return true;
}
void WrappedOpenGL::glVertexArrayElementBuffer(GLuint vaobj, GLuint buffer)
{
m_Real.glVertexArrayElementBuffer(vaobj, buffer);
if(m_State >= WRITING)
{
GLResourceRecord *varecord = GetResourceManager()->GetResourceRecord(VertexArrayRes(GetCtx(), vaobj));
GLResourceRecord *r = m_State == WRITING_CAPFRAME ? m_ContextRecord : varecord;
if(r)
{
if(m_State == WRITING_IDLE && !RecordUpdateCheck(varecord))
return;
if(m_State == WRITING_CAPFRAME && varecord)
GetResourceManager()->MarkResourceFrameReferenced(varecord->GetResourceID(), eFrameRef_Write);
{
SCOPED_SERIALISE_CONTEXT(VAO_ELEMENT_BUFFER);
Serialise_glVertexArrayElementBuffer(vaobj, buffer);
r->AddChunk(scope.Get());
}
if(buffer != 0)
r->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffer)));
}
}
}
bool WrappedOpenGL::Serialise_glVertexArrayBindVertexBufferEXT(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride)
{
SERIALISE_ELEMENT(uint32_t, idx, bindingindex);
@@ -3099,11 +3223,11 @@ void WrappedOpenGL::glBindVertexBuffer(GLuint bindingindex, GLuint buffer, GLint
}
}
bool WrappedOpenGL::Serialise_glBindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides)
bool WrappedOpenGL::Serialise_glVertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides)
{
SERIALISE_ELEMENT(uint32_t, First, first);
SERIALISE_ELEMENT(int32_t, Count, count);
SERIALISE_ELEMENT(ResourceId, vid, GetCtxData().m_VertexArrayRecord ? GetCtxData().m_VertexArrayRecord->GetResourceID() : ResourceId());
SERIALISE_ELEMENT(ResourceId, vid, vaobj ? GetResourceManager()->GetID(VertexArrayRes(GetCtx(), vaobj)) : ResourceId());
GLuint *bufs = NULL;
GLintptr *offs = NULL;
@@ -3135,20 +3259,16 @@ bool WrappedOpenGL::Serialise_glBindVertexBuffers(GLuint first, GLsizei count, c
if(m_State <= EXECUTING)
{
if(m_State == READING && m_CurEventID == 0)
{
if(vid != ResourceId())
{
GLResource res = GetResourceManager()->GetLiveResource(vid);
m_Real.glBindVertexArray(res.name);
}
else
{
m_Real.glBindVertexArray(m_FakeVAO);
}
}
m_Real.glBindVertexBuffers(First, Count, bufs, offs, str);
if(vid != ResourceId())
vaobj = GetResourceManager()->GetLiveResource(vid).name;
else
vaobj = m_FakeVAO;
// use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If
// we are running without ARB_dsa support, these functions are emulated in the obvious way. This is
// necessary since these functions can be serialised even if ARB_dsa was not used originally, and
// we need to support this case.
m_Real.glVertexArrayVertexBuffers(vaobj, First, Count, bufs, offs, str);
delete[] bufs;
delete[] offs;
@@ -3158,6 +3278,39 @@ bool WrappedOpenGL::Serialise_glBindVertexBuffers(GLuint first, GLsizei count, c
return true;
}
void WrappedOpenGL::glVertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides)
{
m_Real.glVertexArrayVertexBuffers(vaobj, first, count, buffers, offsets, strides);
if(m_State >= WRITING)
{
GLResourceRecord *varecord = GetResourceManager()->GetResourceRecord(VertexArrayRes(GetCtx(), vaobj));
GLResourceRecord *r = m_State == WRITING_CAPFRAME ? m_ContextRecord : varecord;
if(r)
{
if(m_State == WRITING_IDLE && !RecordUpdateCheck(varecord))
return;
if(m_State == WRITING_CAPFRAME && varecord)
GetResourceManager()->MarkResourceFrameReferenced(varecord->GetResourceID(), eFrameRef_Write);
{
SCOPED_SERIALISE_CONTEXT(BIND_VERTEXBUFFERS);
Serialise_glVertexArrayVertexBuffers(vaobj, first, count, buffers, offsets, strides);
r->AddChunk(scope.Get());
}
for(GLsizei i=0; i < count; i++)
{
if(buffers[i] != 0)
r->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffers[i])));
}
}
}
}
void WrappedOpenGL::glBindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides)
{
m_Real.glBindVertexBuffers(first, count, buffers, offsets, strides);
@@ -3177,7 +3330,7 @@ void WrappedOpenGL::glBindVertexBuffers(GLuint first, GLsizei count, const GLuin
{
SCOPED_SERIALISE_CONTEXT(BIND_VERTEXBUFFERS);
Serialise_glBindVertexBuffers(first, count, buffers, offsets, strides);
Serialise_glVertexArrayVertexBuffers(varecord ? varecord->Resource.name : 0, first, count, buffers, offsets, strides);
r->AddChunk(scope.Get());
}
+189 -27
View File
@@ -2316,11 +2316,22 @@ void WrappedOpenGL::glMultiDrawElementsIndirectCountARB(GLenum mode, GLenum type
}
}
bool WrappedOpenGL::Serialise_glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)
bool WrappedOpenGL::Serialise_glClearNamedFramebufferfv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value)
{
SERIALISE_ELEMENT(ResourceId, Id, (framebuffer ? GetResourceManager()->GetID(FramebufferRes(GetCtx(), framebuffer)) : ResourceId()));
SERIALISE_ELEMENT(GLenum, buf, buffer);
SERIALISE_ELEMENT(int32_t, draw, drawbuffer);
if(m_State <= EXECUTING)
{
if(Id == ResourceId())
framebuffer = m_FakeBB_FBO;
else
framebuffer = GetResourceManager()->GetLiveResource(Id).name;
}
string name;
if(buf != eGL_DEPTH)
{
Vec4f v;
@@ -2328,15 +2339,34 @@ bool WrappedOpenGL::Serialise_glClearBufferfv(GLenum buffer, GLint drawbuffer, c
m_pSerialiser->Serialise<4>("value", (float *)&v.x);
if(m_State == READING)
name = "glClearBufferfv(" +
ToStr::Get(buf) + ", " +
ToStr::Get(draw) + ", " +
ToStr::Get(v.x) + ", " +
ToStr::Get(v.y) + ", " +
ToStr::Get(v.z) + ", " +
ToStr::Get(v.w) + ")";
// use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If
// we are running without ARB_dsa support, these functions are emulated in the obvious way. This is
// necessary since these functions can be serialised even if ARB_dsa was not used originally, and
// we need to support this case.
if(m_State <= EXECUTING)
m_Real.glClearBufferfv(buf, draw, &v.x);
m_Real.glClearNamedFramebufferfv(framebuffer, buf, draw, &v.x);
}
else
{
SERIALISE_ELEMENT(float, val, *value);
if(m_State == READING)
name = "glClearBufferfv(" +
ToStr::Get(buf) + ", " +
ToStr::Get(draw) + ", " +
ToStr::Get(val) + ")";
if(m_State <= EXECUTING)
m_Real.glClearBufferfv(buf, draw, &val);
m_Real.glClearNamedFramebufferfv(framebuffer, buf, draw, &val);
}
const string desc = m_pSerialiser->GetDebugStr();
@@ -2346,9 +2376,6 @@ bool WrappedOpenGL::Serialise_glClearBufferfv(GLenum buffer, GLint drawbuffer, c
if(m_State == READING)
{
AddEvent(CLEARBUFFERF, desc);
string name = "glClearBufferfv(" +
ToStr::Get(buf) + ", " +
ToStr::Get(draw) + ")";
FetchDrawcall draw;
draw.name = name;
@@ -2361,24 +2388,52 @@ bool WrappedOpenGL::Serialise_glClearBufferfv(GLenum buffer, GLint drawbuffer, c
return true;
}
void WrappedOpenGL::glClearNamedFramebufferfv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value)
{
m_Real.glClearNamedFramebufferfv(framebuffer, buffer, drawbuffer, value);
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(CLEARBUFFERF);
Serialise_glClearNamedFramebufferfv(framebuffer, buffer, drawbuffer, value);
m_ContextRecord->AddChunk(scope.Get());
}
}
void WrappedOpenGL::glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)
{
m_Real.glClearBufferfv(buffer, drawbuffer, value);
if(m_State == WRITING_CAPFRAME)
{
GLuint framebuffer = 0;
if(GetCtxData().m_DrawFramebufferRecord)
framebuffer = GetCtxData().m_DrawFramebufferRecord->Resource.name;
SCOPED_SERIALISE_CONTEXT(CLEARBUFFERF);
Serialise_glClearBufferfv(buffer, drawbuffer, value);
Serialise_glClearNamedFramebufferfv(framebuffer, buffer, drawbuffer, value);
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value)
bool WrappedOpenGL::Serialise_glClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value)
{
SERIALISE_ELEMENT(ResourceId, Id, (framebuffer ? GetResourceManager()->GetID(FramebufferRes(GetCtx(), framebuffer)) : ResourceId()));
SERIALISE_ELEMENT(GLenum, buf, buffer);
SERIALISE_ELEMENT(int32_t, draw, drawbuffer);
if(m_State <= EXECUTING)
{
if(Id == ResourceId())
framebuffer = m_FakeBB_FBO;
else
framebuffer = GetResourceManager()->GetLiveResource(Id).name;
}
string name;
if(buf != eGL_STENCIL)
{
int32_t v[4];
@@ -2386,15 +2441,34 @@ bool WrappedOpenGL::Serialise_glClearBufferiv(GLenum buffer, GLint drawbuffer, c
m_pSerialiser->Serialise<4>("value", v);
if(m_State == READING)
name = "glClearBufferiv(" +
ToStr::Get(buf) + ", " +
ToStr::Get(draw) + ", " +
ToStr::Get(v[0]) + ", " +
ToStr::Get(v[1]) + ", " +
ToStr::Get(v[2]) + ", " +
ToStr::Get(v[3]) + ")";
// use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If
// we are running without ARB_dsa support, these functions are emulated in the obvious way. This is
// necessary since these functions can be serialised even if ARB_dsa was not used originally, and
// we need to support this case.
if(m_State <= EXECUTING)
m_Real.glClearBufferiv(buf, draw, v);
m_Real.glClearNamedFramebufferiv(framebuffer, buf, draw, v);
}
else
{
SERIALISE_ELEMENT(int32_t, val, *value);
if(m_State == READING)
name = "glClearBufferiv(" +
ToStr::Get(buf) + ", " +
ToStr::Get(draw) + ", " +
ToStr::Get(val) + ")";
if(m_State <= EXECUTING)
m_Real.glClearBufferiv(buf, draw, &val);
m_Real.glClearNamedFramebufferiv(framebuffer, buf, draw, &val);
}
const string desc = m_pSerialiser->GetDebugStr();
@@ -2404,9 +2478,6 @@ bool WrappedOpenGL::Serialise_glClearBufferiv(GLenum buffer, GLint drawbuffer, c
if(m_State == READING)
{
AddEvent(CLEARBUFFERI, desc);
string name = "glClearBufferiv(" +
ToStr::Get(buf) + ", " +
ToStr::Get(draw) + ")";
FetchDrawcall draw;
draw.name = name;
@@ -2419,32 +2490,73 @@ bool WrappedOpenGL::Serialise_glClearBufferiv(GLenum buffer, GLint drawbuffer, c
return true;
}
void WrappedOpenGL::glClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value)
{
m_Real.glClearNamedFramebufferiv(framebuffer, buffer, drawbuffer, value);
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(CLEARBUFFERI);
Serialise_glClearNamedFramebufferiv(framebuffer, buffer, drawbuffer, value);
m_ContextRecord->AddChunk(scope.Get());
}
}
void WrappedOpenGL::glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value)
{
m_Real.glClearBufferiv(buffer, drawbuffer, value);
if(m_State == WRITING_CAPFRAME)
{
GLuint framebuffer = 0;
if(GetCtxData().m_DrawFramebufferRecord)
framebuffer = GetCtxData().m_DrawFramebufferRecord->Resource.name;
SCOPED_SERIALISE_CONTEXT(CLEARBUFFERI);
Serialise_glClearBufferiv(buffer, drawbuffer, value);
Serialise_glClearNamedFramebufferiv(framebuffer, buffer, drawbuffer, value);
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
bool WrappedOpenGL::Serialise_glClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value)
{
SERIALISE_ELEMENT(ResourceId, Id, (framebuffer ? GetResourceManager()->GetID(FramebufferRes(GetCtx(), framebuffer)) : ResourceId()));
SERIALISE_ELEMENT(GLenum, buf, buffer);
SERIALISE_ELEMENT(int32_t, draw, drawbuffer);
if(m_State <= EXECUTING)
{
if(Id == ResourceId())
framebuffer = m_FakeBB_FBO;
else
framebuffer = GetResourceManager()->GetLiveResource(Id).name;
}
string name;
{
uint32_t v[4];
if(value) memcpy(v, value, sizeof(v));
m_pSerialiser->Serialise<4>("value", v);
if(m_State == READING)
name = "glClearBufferuiv(" +
ToStr::Get(buf) + ", " +
ToStr::Get(draw) + ", " +
ToStr::Get(v[0]) + ", " +
ToStr::Get(v[1]) + ", " +
ToStr::Get(v[2]) + ", " +
ToStr::Get(v[3]) + ")";
// use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If
// we are running without ARB_dsa support, these functions are emulated in the obvious way. This is
// necessary since these functions can be serialised even if ARB_dsa was not used originally, and
// we need to support this case.
if(m_State <= EXECUTING)
m_Real.glClearBufferuiv(buf, draw, v);
m_Real.glClearNamedFramebufferuiv(framebuffer, buf, draw, v);
}
const string desc = m_pSerialiser->GetDebugStr();
@@ -2454,9 +2566,6 @@ bool WrappedOpenGL::Serialise_glClearBufferuiv(GLenum buffer, GLint drawbuffer,
if(m_State == READING)
{
AddEvent(CLEARBUFFERUI, desc);
string name = "glClearBufferuiv(" +
ToStr::Get(buf) + ", " +
ToStr::Get(draw) + ")";
FetchDrawcall draw;
draw.name = name;
@@ -2468,28 +2577,57 @@ bool WrappedOpenGL::Serialise_glClearBufferuiv(GLenum buffer, GLint drawbuffer,
return true;
}
void WrappedOpenGL::glClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value)
{
m_Real.glClearNamedFramebufferuiv(framebuffer, buffer, drawbuffer, value);
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(CLEARBUFFERUI);
Serialise_glClearNamedFramebufferuiv(framebuffer, buffer, drawbuffer, value);
m_ContextRecord->AddChunk(scope.Get());
}
}
void WrappedOpenGL::glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
{
m_Real.glClearBufferuiv(buffer, drawbuffer, value);
if(m_State == WRITING_CAPFRAME)
{
GLuint framebuffer = 0;
if(GetCtxData().m_DrawFramebufferRecord)
framebuffer = GetCtxData().m_DrawFramebufferRecord->Resource.name;
SCOPED_SERIALISE_CONTEXT(CLEARBUFFERUI);
Serialise_glClearBufferuiv(buffer, drawbuffer, value);
Serialise_glClearNamedFramebufferuiv(framebuffer, buffer, drawbuffer, value);
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
bool WrappedOpenGL::Serialise_glClearNamedFramebufferfi(GLuint framebuffer, GLenum buffer, GLfloat depth, GLint stencil)
{
SERIALISE_ELEMENT(ResourceId, Id, (framebuffer ? GetResourceManager()->GetID(FramebufferRes(GetCtx(), framebuffer)) : ResourceId()));
SERIALISE_ELEMENT(GLenum, buf, buffer);
SERIALISE_ELEMENT(int32_t, draw, drawbuffer);
SERIALISE_ELEMENT(float, d, depth);
SERIALISE_ELEMENT(int32_t, s, stencil);
if(m_State <= EXECUTING)
m_Real.glClearBufferfi(buf, draw, d, s);
{
if(Id == ResourceId())
framebuffer = m_FakeBB_FBO;
else
framebuffer = GetResourceManager()->GetLiveResource(Id).name;
}
// use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If
// we are running without ARB_dsa support, these functions are emulated in the obvious way. This is
// necessary since these functions can be serialised even if ARB_dsa was not used originally, and
// we need to support this case.
if(m_State <= EXECUTING)
m_Real.glClearNamedFramebufferfi(framebuffer, buf, d, s);
const string desc = m_pSerialiser->GetDebugStr();
@@ -2499,8 +2637,8 @@ bool WrappedOpenGL::Serialise_glClearBufferfi(GLenum buffer, GLint drawbuffer, G
{
AddEvent(CLEARBUFFERFI, desc);
string name = "glClearBufferfi(" +
ToStr::Get(buf) + ", " +
ToStr::Get(draw) + ")";
ToStr::Get(d) +
ToStr::Get(s) + ")";
FetchDrawcall draw;
draw.name = name;
@@ -2512,14 +2650,32 @@ bool WrappedOpenGL::Serialise_glClearBufferfi(GLenum buffer, GLint drawbuffer, G
return true;
}
void WrappedOpenGL::glClearNamedFramebufferfi(GLuint framebuffer, GLenum buffer, GLfloat depth, GLint stencil)
{
m_Real.glClearNamedFramebufferfi(framebuffer, buffer, depth, stencil);
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(CLEARBUFFERFI);
Serialise_glClearNamedFramebufferfi(framebuffer, buffer, depth, stencil);
m_ContextRecord->AddChunk(scope.Get());
}
}
void WrappedOpenGL::glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
{
m_Real.glClearBufferfi(buffer, drawbuffer, depth, stencil);
if(m_State == WRITING_CAPFRAME)
{
GLuint framebuffer = 0;
if(GetCtxData().m_DrawFramebufferRecord)
framebuffer = GetCtxData().m_DrawFramebufferRecord->Resource.name;
// drawbuffer is ignored, as it must be 0 anyway
SCOPED_SERIALISE_CONTEXT(CLEARBUFFERFI);
Serialise_glClearBufferfi(buffer, drawbuffer, depth, stencil);
Serialise_glClearNamedFramebufferfi(framebuffer, buffer, depth, stencil);
m_ContextRecord->AddChunk(scope.Get());
}
@@ -2713,6 +2869,12 @@ void WrappedOpenGL::glClearNamedBufferSubDataEXT(GLuint buffer, GLenum internalf
}
}
void WrappedOpenGL::glClearNamedBufferSubData(GLuint buffer, GLenum internalformat, GLintptr offset, GLsizei size, GLenum format, GLenum type, const void *data)
{
// only difference to EXT function is size parameter, so just upcast
glClearNamedBufferSubDataEXT(buffer, internalformat, offset, (GLsizeiptr)size, format, type, data);
}
void WrappedOpenGL::glClearBufferSubData(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data)
{
m_Real.glClearBufferSubData(target, internalformat, offset, size, format, type, data);
@@ -2742,7 +2904,7 @@ bool WrappedOpenGL::Serialise_glClear(GLbitfield mask)
if(m_State == READING)
{
AddEvent(CLEARBUFFERF, desc);
AddEvent(CLEAR, desc);
string name = "glClear(";
if(Mask & GL_COLOR_BUFFER_BIT)
{
@@ -0,0 +1,142 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2015 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
// in some cases we might need some functions (notably ARB_direct_state_access)
// emulated where possible, so we can simplify most codepaths by just assuming they're
// present elsewhere and using them unconditionally.
#include "driver/gl/gl_common.h"
#include "driver/gl/gl_hookset.h"
namespace glEmulate {
GLHookSet *hookset = NULL;
void APIENTRY _glTransformFeedbackBufferBase(GLuint xfb, GLuint index, GLuint buffer)
{
GLuint old = 0;
hookset->glGetIntegerv(eGL_TRANSFORM_FEEDBACK_BINDING, (GLint *)&old);
hookset->glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, xfb);
hookset->glBindBufferBase(eGL_TRANSFORM_FEEDBACK_BUFFER, index, buffer);
hookset->glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, old);
}
void APIENTRY _glTransformFeedbackBufferRange(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizei size)
{
GLuint old = 0;
hookset->glGetIntegerv(eGL_TRANSFORM_FEEDBACK_BINDING, (GLint *)&old);
hookset->glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, xfb);
hookset->glBindBufferRange(eGL_TRANSFORM_FEEDBACK_BUFFER, index, buffer, offset, size);
hookset->glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, old);
}
void APIENTRY _glClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value)
{
GLuint old = 0;
hookset->glGetIntegerv(eGL_DRAW_FRAMEBUFFER_BINDING, (GLint *)&old);
hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, framebuffer);
hookset->glClearBufferiv(buffer, drawbuffer, value);
hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, old);
}
void APIENTRY _glClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value)
{
GLuint old = 0;
hookset->glGetIntegerv(eGL_DRAW_FRAMEBUFFER_BINDING, (GLint *)&old);
hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, framebuffer);
hookset->glClearBufferuiv(buffer, drawbuffer, value);
hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, old);
}
void APIENTRY _glClearNamedFramebufferfv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value)
{
GLuint old = 0;
hookset->glGetIntegerv(eGL_DRAW_FRAMEBUFFER_BINDING, (GLint *)&old);
hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, framebuffer);
hookset->glClearBufferfv(buffer, drawbuffer, value);
hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, old);
}
void APIENTRY _glClearNamedFramebufferfi(GLuint framebuffer, GLenum buffer, const GLfloat depth, GLint stencil)
{
GLuint old = 0;
hookset->glGetIntegerv(eGL_DRAW_FRAMEBUFFER_BINDING, (GLint *)&old);
hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, framebuffer);
hookset->glClearBufferfi(buffer, 0, depth, stencil);
hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, old);
}
void APIENTRY _glBlitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFramebuffer,
GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
GLbitfield mask, GLenum filter)
{
GLuint oldR = 0, oldD = 0;
hookset->glGetIntegerv(eGL_READ_FRAMEBUFFER_BINDING, (GLint *)&oldR);
hookset->glGetIntegerv(eGL_DRAW_FRAMEBUFFER_BINDING, (GLint *)&oldD);
hookset->glBindFramebuffer(eGL_READ_FRAMEBUFFER, readFramebuffer);
hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, drawFramebuffer);
hookset->glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
hookset->glBindFramebuffer(eGL_READ_FRAMEBUFFER, oldR);
hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, oldD);
}
void APIENTRY _glVertexArrayElementBuffer(GLuint vaobj, GLuint buffer)
{
GLuint old = 0;
hookset->glGetIntegerv(eGL_VERTEX_ARRAY_BINDING, (GLint *)&old);
hookset->glBindVertexArray(vaobj);
hookset->glBindBuffer(eGL_ELEMENT_ARRAY_BUFFER, buffer);
hookset->glBindVertexArray(old);
}
void APIENTRY _glVertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides)
{
GLuint old = 0;
hookset->glGetIntegerv(eGL_VERTEX_ARRAY_BINDING, (GLint *)&old);
hookset->glBindVertexArray(vaobj);
hookset->glBindVertexBuffers(first, count, buffers, offsets, strides);
hookset->glBindVertexArray(old);
}
void EmulateUnsupportedFunctions(GLHookSet *hooks)
{
hookset = hooks;
#define EMULATE_UNSUPPORTED(func) if(!hooks->func) hooks->func = &CONCAT(_, func);
EMULATE_UNSUPPORTED(glTransformFeedbackBufferBase)
EMULATE_UNSUPPORTED(glTransformFeedbackBufferRange)
EMULATE_UNSUPPORTED(glClearNamedFramebufferiv)
EMULATE_UNSUPPORTED(glClearNamedFramebufferuiv)
EMULATE_UNSUPPORTED(glClearNamedFramebufferfv)
EMULATE_UNSUPPORTED(glClearNamedFramebufferfi)
EMULATE_UNSUPPORTED(glBlitNamedFramebuffer)
EMULATE_UNSUPPORTED(glVertexArrayVertexBuffers)
}
}; // namespace glEmulate
@@ -1120,6 +1120,19 @@ void WrappedOpenGL::glInvalidateFramebuffer(GLenum target, GLsizei numAttachment
}
}
void WrappedOpenGL::glInvalidateNamedFramebufferData(GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments)
{
m_Real.glInvalidateNamedFramebufferData(framebuffer, numAttachments, attachments);
if(m_State == WRITING_IDLE)
{
GLResourceRecord *record = GetResourceManager()->GetResourceRecord(FramebufferRes(GetCtx(), framebuffer));
if(record)
record->MarkParentsDirty(GetResourceManager());
}
}
void WrappedOpenGL::glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height)
{
m_Real.glInvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);
@@ -1144,8 +1157,26 @@ void WrappedOpenGL::glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachm
}
}
bool WrappedOpenGL::Serialise_glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
void WrappedOpenGL::glInvalidateNamedFramebufferSubData(GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height)
{
m_Real.glInvalidateNamedFramebufferSubData(framebuffer, numAttachments, attachments, x, y, width, height);
if(m_State == WRITING_IDLE)
{
GLResourceRecord *record = GetResourceManager()->GetResourceRecord(FramebufferRes(GetCtx(), framebuffer));
if(record)
record->MarkParentsDirty(GetResourceManager());
}
}
bool WrappedOpenGL::Serialise_glBlitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFramebuffer,
GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
GLbitfield mask, GLenum filter)
{
SERIALISE_ELEMENT(ResourceId, readId, (readFramebuffer ? GetResourceManager()->GetID(FramebufferRes(GetCtx(), readFramebuffer)) : ResourceId()));
SERIALISE_ELEMENT(ResourceId, drawId, (drawFramebuffer ? GetResourceManager()->GetID(FramebufferRes(GetCtx(), drawFramebuffer)) : ResourceId()));
SERIALISE_ELEMENT(int32_t, sX0, srcX0);
SERIALISE_ELEMENT(int32_t, sY0, srcY0);
SERIALISE_ELEMENT(int32_t, sX1, srcX1);
@@ -1159,18 +1190,57 @@ bool WrappedOpenGL::Serialise_glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint
if(m_State <= EXECUTING)
{
m_Real.glBlitFramebuffer(sX0, sY0, sX1, sY1, dX0, dY0, dX1, dY1, msk, flt);
if(readId == ResourceId())
readFramebuffer = m_FakeBB_FBO;
else
readFramebuffer = GetResourceManager()->GetLiveResource(readId).name;
if(drawId == ResourceId())
drawFramebuffer = m_FakeBB_FBO;
else
drawFramebuffer = GetResourceManager()->GetLiveResource(drawId).name;
// use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If
// we are running without ARB_dsa support, these functions are emulated in the obvious way. This is
// necessary since these functions can be serialised even if ARB_dsa was not used originally, and
// we need to support this case.
m_Real.glBlitNamedFramebuffer(readFramebuffer, drawFramebuffer, sX0, sY0, sX1, sY1, dX0, dY0, dX1, dY1, msk, flt);
}
return true;
}
void WrappedOpenGL::glBlitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFramebuffer,
GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
GLbitfield mask, GLenum filter)
{
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(BLIT_FRAMEBUFFER);
Serialise_glBlitNamedFramebuffer(readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
m_ContextRecord->AddChunk(scope.Get());
}
// use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If
// we are running without ARB_dsa support, these functions are emulated in the obvious way. This is
// necessary since these functions can be serialised even if ARB_dsa was not used originally, and
// we need to support this case.
m_Real.glBlitNamedFramebuffer(readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
}
void WrappedOpenGL::glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
{
if(m_State == WRITING_CAPFRAME)
{
GLuint readFramebuffer = 0, drawFramebuffer = 0;
if(GetCtxData().m_ReadFramebufferRecord) readFramebuffer = GetCtxData().m_ReadFramebufferRecord->Resource.name;
if(GetCtxData().m_DrawFramebufferRecord) drawFramebuffer = GetCtxData().m_DrawFramebufferRecord->Resource.name;
SCOPED_SERIALISE_CONTEXT(BLIT_FRAMEBUFFER);
Serialise_glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
Serialise_glBlitNamedFramebuffer(readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
m_ContextRecord->AddChunk(scope.Get());
}
+20 -5
View File
@@ -399,6 +399,26 @@ void WrappedOpenGL::glGetQueryiv(GLenum target, GLenum pname, GLint *params)
m_Real.glGetQueryiv(target, pname, params);
}
void WrappedOpenGL::glGetQueryBufferObjectui64v(GLuint id, GLuint buffer, GLenum pname, GLintptr offset)
{
m_Real.glGetQueryBufferObjectui64v(id, buffer, pname, offset);
}
void WrappedOpenGL::glGetQueryBufferObjectuiv(GLuint id, GLuint buffer, GLenum pname, GLintptr offset)
{
m_Real.glGetQueryBufferObjectuiv(id, buffer, pname, offset);
}
void WrappedOpenGL::glGetQueryBufferObjecti64v(GLuint id, GLuint buffer, GLenum pname, GLintptr offset)
{
m_Real.glGetQueryBufferObjecti64v(id, buffer, pname, offset);
}
void WrappedOpenGL::glGetQueryBufferObjectiv(GLuint id, GLuint buffer, GLenum pname, GLintptr offset)
{
m_Real.glGetQueryBufferObjectiv(id, buffer, pname, offset);
}
void WrappedOpenGL::glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)
{
m_Real.glGetSynciv(sync, pname, bufSize, length, values);
@@ -780,11 +800,6 @@ void WrappedOpenGL::glGetNamedBufferParameteri64v(GLuint buffer, GLenum pname, G
m_Real.glGetNamedBufferParameteri64v(buffer, pname, params);
}
void WrappedOpenGL::glGetNamedBufferPointerv(GLuint buffer, GLenum pname, void **params)
{
m_Real.glGetNamedBufferPointerv(buffer, pname, params);
}
void WrappedOpenGL::glGetNamedFramebufferParameterivEXT(GLuint framebuffer, GLenum pname, GLint *param)
{
m_Real.glGetNamedFramebufferParameterivEXT(framebuffer, pname, param);
+5
View File
@@ -36,6 +36,8 @@
#include "common/threading.h"
#include "common/string_utils.h"
namespace glEmulate { void EmulateUnsupportedFunctions(GLHookSet *hooks); }
// bit of a hack
namespace Keyboard { extern Display *CurrentXDisplay; }
@@ -849,6 +851,9 @@ bool OpenGLHook::PopulateHooks()
DLLExportHooks();
HookCheckGLExtensions();
// see gl_emulated.cpp
if(RenderDoc::Inst().IsReplayApp()) glEmulate::EmulateUnsupportedFunctions(&GL);
return true;
}
+5
View File
@@ -34,6 +34,8 @@
#include "hooks.h"
namespace glEmulate { void EmulateUnsupportedFunctions(GLHookSet *hooks); }
#define DLL_NAME "opengl32.dll"
#define HookInit(function) \
@@ -654,6 +656,9 @@ class OpenGLHook : LibraryHook
DLLExportHooks();
HookCheckGLExtensions();
// see gl_emulated.cpp
if(RenderDoc::Inst().IsReplayApp()) glEmulate::EmulateUnsupportedFunctions(&GL);
return true;
}
+1
View File
@@ -328,6 +328,7 @@
<ClCompile Include="driver\gl\wrappers\gl_buffer_funcs.cpp" />
<ClCompile Include="driver\gl\wrappers\gl_debug_funcs.cpp" />
<ClCompile Include="driver\gl\wrappers\gl_draw_funcs.cpp" />
<ClCompile Include="driver\gl\wrappers\gl_emulated.cpp" />
<ClCompile Include="driver\gl\wrappers\gl_framebuffer_funcs.cpp" />
<ClCompile Include="driver\gl\wrappers\gl_get_funcs.cpp" />
<ClCompile Include="driver\gl\wrappers\gl_query_funcs.cpp" />
+3
View File
@@ -551,6 +551,9 @@
<ClCompile Include="driver\gl\gl_counters.cpp">
<Filter>Drivers\OpenGL</Filter>
</ClCompile>
<ClCompile Include="driver\gl\wrappers\gl_emulated.cpp">
<Filter>Drivers\OpenGL\Function Wrappers</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="os\win32\comexport.def">