Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:08:13

0001 // Copyright (C) 2016 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 
0004 #ifndef QOPENGLEXTRAFUNCTIONS_H
0005 #define QOPENGLEXTRAFUNCTIONS_H
0006 
0007 #include <QtGui/qtguiglobal.h>
0008 
0009 #ifndef QT_NO_OPENGL
0010 
0011 #include <QtGui/qopenglfunctions.h>
0012 
0013 // MemoryBarrier is a macro on some architectures on Windows
0014 #ifdef Q_OS_WIN
0015 #pragma push_macro("MemoryBarrier")
0016 #undef MemoryBarrier
0017 #endif
0018 
0019 // GLES build without having included gl32.h -> GLDEBUGPROC is still need for the protos, define it here
0020 #if QT_CONFIG(opengles2) && !QT_CONFIG(opengles32)
0021 typedef void (QOPENGLF_APIENTRY  *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
0022 #endif
0023 
0024 QT_BEGIN_NAMESPACE
0025 
0026 class QOpenGLExtraFunctionsPrivate;
0027 
0028 #undef glReadBuffer
0029 #undef glDrawRangeElements
0030 #undef glTexImage3D
0031 #undef glTexSubImage3D
0032 #undef glCopyTexSubImage3D
0033 #undef glCompressedTexImage3D
0034 #undef glCompressedTexSubImage3D
0035 #undef glGenQueries
0036 #undef glDeleteQueries
0037 #undef glIsQuery
0038 #undef glBeginQuery
0039 #undef glEndQuery
0040 #undef glGetQueryiv
0041 #undef glGetQueryObjectuiv
0042 #undef glUnmapBuffer
0043 #undef glGetBufferPointerv
0044 #undef glDrawBuffers
0045 #undef glUniformMatrix2x3fv
0046 #undef glUniformMatrix3x2fv
0047 #undef glUniformMatrix2x4fv
0048 #undef glUniformMatrix4x2fv
0049 #undef glUniformMatrix3x4fv
0050 #undef glUniformMatrix4x3fv
0051 #undef glBlitFramebuffer
0052 #undef glRenderbufferStorageMultisample
0053 #undef glFramebufferTextureLayer
0054 #undef glMapBufferRange
0055 #undef glFlushMappedBufferRange
0056 #undef glBindVertexArray
0057 #undef glDeleteVertexArrays
0058 #undef glGenVertexArrays
0059 #undef glIsVertexArray
0060 #undef glGetIntegeri_v
0061 #undef glBeginTransformFeedback
0062 #undef glEndTransformFeedback
0063 #undef glBindBufferRange
0064 #undef glBindBufferBase
0065 #undef glTransformFeedbackVaryings
0066 #undef glGetTransformFeedbackVarying
0067 #undef glVertexAttribIPointer
0068 #undef glGetVertexAttribIiv
0069 #undef glGetVertexAttribIuiv
0070 #undef glVertexAttribI4i
0071 #undef glVertexAttribI4ui
0072 #undef glVertexAttribI4iv
0073 #undef glVertexAttribI4uiv
0074 #undef glGetUniformuiv
0075 #undef glGetFragDataLocation
0076 #undef glUniform1ui
0077 #undef glUniform2ui
0078 #undef glUniform3ui
0079 #undef glUniform4ui
0080 #undef glUniform1uiv
0081 #undef glUniform2uiv
0082 #undef glUniform3uiv
0083 #undef glUniform4uiv
0084 #undef glClearBufferiv
0085 #undef glClearBufferuiv
0086 #undef glClearBufferfv
0087 #undef glClearBufferfi
0088 #undef glGetStringi
0089 #undef glCopyBufferSubData
0090 #undef glGetUniformIndices
0091 #undef glGetActiveUniformsiv
0092 #undef glGetUniformBlockIndex
0093 #undef glGetActiveUniformBlockiv
0094 #undef glGetActiveUniformBlockName
0095 #undef glUniformBlockBinding
0096 #undef glDrawArraysInstanced
0097 #undef glDrawElementsInstanced
0098 #undef glFenceSync
0099 #undef glIsSync
0100 #undef glDeleteSync
0101 #undef glClientWaitSync
0102 #undef glWaitSync
0103 #undef glGetInteger64v
0104 #undef glGetSynciv
0105 #undef glGetInteger64i_v
0106 #undef glGetBufferParameteri64v
0107 #undef glGenSamplers
0108 #undef glDeleteSamplers
0109 #undef glIsSampler
0110 #undef glBindSampler
0111 #undef glSamplerParameteri
0112 #undef glSamplerParameteriv
0113 #undef glSamplerParameterf
0114 #undef glSamplerParameterfv
0115 #undef glGetSamplerParameteriv
0116 #undef glGetSamplerParameterfv
0117 #undef glVertexAttribDivisor
0118 #undef glBindTransformFeedback
0119 #undef glDeleteTransformFeedbacks
0120 #undef glGenTransformFeedbacks
0121 #undef glIsTransformFeedback
0122 #undef glPauseTransformFeedback
0123 #undef glResumeTransformFeedback
0124 #undef glGetProgramBinary
0125 #undef glProgramBinary
0126 #undef glProgramParameteri
0127 #undef glInvalidateFramebuffer
0128 #undef glInvalidateSubFramebuffer
0129 #undef glTexStorage2D
0130 #undef glTexStorage3D
0131 #undef glGetInternalformativ
0132 
0133 #undef glDispatchCompute
0134 #undef glDispatchComputeIndirect
0135 #undef glDrawArraysIndirect
0136 #undef glDrawElementsIndirect
0137 #undef glFramebufferParameteri
0138 #undef glGetFramebufferParameteriv
0139 #undef glGetProgramInterfaceiv
0140 #undef glGetProgramResourceIndex
0141 #undef glGetProgramResourceName
0142 #undef glGetProgramResourceiv
0143 #undef glGetProgramResourceLocation
0144 #undef glUseProgramStages
0145 #undef glActiveShaderProgram
0146 #undef glCreateShaderProgramv
0147 #undef glBindProgramPipeline
0148 #undef glDeleteProgramPipelines
0149 #undef glGenProgramPipelines
0150 #undef glIsProgramPipeline
0151 #undef glGetProgramPipelineiv
0152 #undef glProgramUniform1i
0153 #undef glProgramUniform2i
0154 #undef glProgramUniform3i
0155 #undef glProgramUniform4i
0156 #undef glProgramUniform1ui
0157 #undef glProgramUniform2ui
0158 #undef glProgramUniform3ui
0159 #undef glProgramUniform4ui
0160 #undef glProgramUniform1f
0161 #undef glProgramUniform2f
0162 #undef glProgramUniform3f
0163 #undef glProgramUniform4f
0164 #undef glProgramUniform1iv
0165 #undef glProgramUniform2iv
0166 #undef glProgramUniform3iv
0167 #undef glProgramUniform4iv
0168 #undef glProgramUniform1uiv
0169 #undef glProgramUniform2uiv
0170 #undef glProgramUniform3uiv
0171 #undef glProgramUniform4uiv
0172 #undef glProgramUniform1fv
0173 #undef glProgramUniform2fv
0174 #undef glProgramUniform3fv
0175 #undef glProgramUniform4fv
0176 #undef glProgramUniformMatrix2fv
0177 #undef glProgramUniformMatrix3fv
0178 #undef glProgramUniformMatrix4fv
0179 #undef glProgramUniformMatrix2x3fv
0180 #undef glProgramUniformMatrix3x2fv
0181 #undef glProgramUniformMatrix2x4fv
0182 #undef glProgramUniformMatrix4x2fv
0183 #undef glProgramUniformMatrix3x4fv
0184 #undef glProgramUniformMatrix4x3fv
0185 #undef glValidateProgramPipeline
0186 #undef glGetProgramPipelineInfoLog
0187 #undef glBindImageTexture
0188 #undef glGetBooleani_v
0189 #undef glMemoryBarrier
0190 #undef glMemoryBarrierByRegion
0191 #undef glTexStorage2DMultisample
0192 #undef glGetMultisamplefv
0193 #undef glSampleMaski
0194 #undef glGetTexLevelParameteriv
0195 #undef glGetTexLevelParameterfv
0196 #undef glBindVertexBuffer
0197 #undef glVertexAttribFormat
0198 #undef glVertexAttribIFormat
0199 #undef glVertexAttribBinding
0200 #undef glVertexBindingDivisor
0201 
0202 #undef glBlendBarrier
0203 #undef glCopyImageSubData
0204 #undef glDebugMessageControl
0205 #undef glDebugMessageInsert
0206 #undef glDebugMessageCallback
0207 #undef glGetDebugMessageLog
0208 #undef glPushDebugGroup
0209 #undef glPopDebugGroup
0210 #undef glObjectLabel
0211 #undef glGetObjectLabel
0212 #undef glGetObjectPtrLabel
0213 #undef glGetPointerv
0214 #undef glEnablei
0215 #undef glDisablei
0216 #undef glBlendEquationi
0217 #undef glBlendEquationSeparatei
0218 #undef glBlendFunci
0219 #undef glBlendFuncSeparatei
0220 #undef glColorMaski
0221 #undef glIsEnabledi
0222 #undef glDrawElementsBaseVertex
0223 #undef glDrawRangeElementsBaseVertex
0224 #undef glDrawElementsInstancedBaseVertex
0225 #undef glFrameBufferTexture
0226 #undef glPrimitiveBoundingBox
0227 #undef glGetGraphicsResetStatus
0228 #undef glReadnPixels
0229 #undef glGetnUniformfv
0230 #undef glGetnUniformiv
0231 #undef glGetnUniformuiv
0232 #undef glMinSampleShading
0233 #undef glPatchParameteri
0234 #undef glTexParameterIiv
0235 #undef glTexParameterIuiv
0236 #undef glGetTexParameterIiv
0237 #undef glGetTexParameterIuiv
0238 #undef glSamplerParameterIiv
0239 #undef glSamplerParameterIuiv
0240 #undef glGetSamplerParameterIiv
0241 #undef glGetSamplerParameterIuiv
0242 #undef glTexBuffer
0243 #undef glTexBufferRange
0244 #undef glTexStorage3DMultisample
0245 
0246 class Q_GUI_EXPORT QOpenGLExtraFunctions : public QOpenGLFunctions
0247 {
0248     Q_DECLARE_PRIVATE(QOpenGLExtraFunctions)
0249 
0250 public:
0251     QOpenGLExtraFunctions();
0252     QOpenGLExtraFunctions(QOpenGLContext *context);
0253     ~QOpenGLExtraFunctions() {}
0254 
0255     // GLES3
0256     void glReadBuffer(GLenum mode);
0257     void glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
0258     void glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
0259     void glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
0260     void glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
0261     void glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
0262     void glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
0263     void glGenQueries(GLsizei n, GLuint *ids);
0264     void glDeleteQueries(GLsizei n, const GLuint *ids);
0265     GLboolean glIsQuery(GLuint id);
0266     void glBeginQuery(GLenum target, GLuint id);
0267     void glEndQuery(GLenum target);
0268     void glGetQueryiv(GLenum target, GLenum pname, GLint *params);
0269     void glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params);
0270     GLboolean glUnmapBuffer(GLenum target);
0271     void glGetBufferPointerv(GLenum target, GLenum pname, void **params);
0272     void glDrawBuffers(GLsizei n, const GLenum *bufs);
0273     void glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
0274     void glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
0275     void glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
0276     void glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
0277     void glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
0278     void glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
0279     void glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
0280     void glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
0281     void glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
0282     void *glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
0283     void glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length);
0284     void glBindVertexArray(GLuint array);
0285     void glDeleteVertexArrays(GLsizei n, const GLuint *arrays);
0286     void glGenVertexArrays(GLsizei n, GLuint *arrays);
0287     GLboolean glIsVertexArray(GLuint array);
0288     void glGetIntegeri_v(GLenum target, GLuint index, GLint *data);
0289     void glBeginTransformFeedback(GLenum primitiveMode);
0290     void glEndTransformFeedback(void);
0291     void glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
0292     void glBindBufferBase(GLenum target, GLuint index, GLuint buffer);
0293     void glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
0294     void glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
0295     void glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
0296     void glGetVertexAttribIiv(GLuint index, GLenum pname, GLint *params);
0297     void glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params);
0298     void glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
0299     void glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
0300     void glVertexAttribI4iv(GLuint index, const GLint *v);
0301     void glVertexAttribI4uiv(GLuint index, const GLuint *v);
0302     void glGetUniformuiv(GLuint program, GLint location, GLuint *params);
0303     GLint glGetFragDataLocation(GLuint program, const GLchar *name);
0304     void glUniform1ui(GLint location, GLuint v0);
0305     void glUniform2ui(GLint location, GLuint v0, GLuint v1);
0306     void glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2);
0307     void glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
0308     void glUniform1uiv(GLint location, GLsizei count, const GLuint *value);
0309     void glUniform2uiv(GLint location, GLsizei count, const GLuint *value);
0310     void glUniform3uiv(GLint location, GLsizei count, const GLuint *value);
0311     void glUniform4uiv(GLint location, GLsizei count, const GLuint *value);
0312     void glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value);
0313     void glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value);
0314     void glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value);
0315     void glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
0316     const GLubyte *glGetStringi(GLenum name, GLuint index);
0317     void glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
0318     void glGetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
0319     void glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
0320     GLuint glGetUniformBlockIndex(GLuint program, const GLchar *uniformBlockName);
0321     void glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
0322     void glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
0323     void glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
0324     void glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
0325     void glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
0326     GLsync glFenceSync(GLenum condition, GLbitfield flags);
0327     GLboolean glIsSync(GLsync sync);
0328     void glDeleteSync(GLsync sync);
0329     GLenum glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout);
0330     void glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout);
0331     void glGetInteger64v(GLenum pname, GLint64 *data);
0332     void glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
0333     void glGetInteger64i_v(GLenum target, GLuint index, GLint64 *data);
0334     void glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params);
0335     void glGenSamplers(GLsizei count, GLuint *samplers);
0336     void glDeleteSamplers(GLsizei count, const GLuint *samplers);
0337     GLboolean glIsSampler(GLuint sampler);
0338     void glBindSampler(GLuint unit, GLuint sampler);
0339     void glSamplerParameteri(GLuint sampler, GLenum pname, GLint param);
0340     void glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint *param);
0341     void glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param);
0342     void glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param);
0343     void glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params);
0344     void glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params);
0345     void glVertexAttribDivisor(GLuint index, GLuint divisor);
0346     void glBindTransformFeedback(GLenum target, GLuint id);
0347     void glDeleteTransformFeedbacks(GLsizei n, const GLuint *ids);
0348     void glGenTransformFeedbacks(GLsizei n, GLuint *ids);
0349     GLboolean glIsTransformFeedback(GLuint id);
0350     void glPauseTransformFeedback(void);
0351     void glResumeTransformFeedback(void);
0352     void glGetProgramBinary(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
0353     void glProgramBinary(GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
0354     void glProgramParameteri(GLuint program, GLenum pname, GLint value);
0355     void glInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments);
0356     void glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
0357     void glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
0358     void glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
0359     void glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
0360 
0361     // GLES 3.1
0362     void glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
0363     void glDispatchComputeIndirect(GLintptr indirect);
0364     void glDrawArraysIndirect(GLenum mode, const void *indirect);
0365     void glDrawElementsIndirect(GLenum mode, GLenum type, const void *indirect);
0366     void glFramebufferParameteri(GLenum target, GLenum pname, GLint param);
0367     void glGetFramebufferParameteriv(GLenum target, GLenum pname, GLint *params);
0368     void glGetProgramInterfaceiv(GLuint program, GLenum programInterface, GLenum pname, GLint *params);
0369     GLuint glGetProgramResourceIndex(GLuint program, GLenum programInterface, const GLchar *name);
0370     void glGetProgramResourceName(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
0371     void glGetProgramResourceiv(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
0372     GLint glGetProgramResourceLocation(GLuint program, GLenum programInterface, const GLchar *name);
0373     void glUseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program);
0374     void glActiveShaderProgram(GLuint pipeline, GLuint program);
0375     GLuint glCreateShaderProgramv(GLenum type, GLsizei count, const GLchar *const*strings);
0376     void glBindProgramPipeline(GLuint pipeline);
0377     void glDeleteProgramPipelines(GLsizei n, const GLuint *pipelines);
0378     void glGenProgramPipelines(GLsizei n, GLuint *pipelines);
0379     GLboolean glIsProgramPipeline(GLuint pipeline);
0380     void glGetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint *params);
0381     void glProgramUniform1i(GLuint program, GLint location, GLint v0);
0382     void glProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1);
0383     void glProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
0384     void glProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
0385     void glProgramUniform1ui(GLuint program, GLint location, GLuint v0);
0386     void glProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1);
0387     void glProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
0388     void glProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
0389     void glProgramUniform1f(GLuint program, GLint location, GLfloat v0);
0390     void glProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1);
0391     void glProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
0392     void glProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
0393     void glProgramUniform1iv(GLuint program, GLint location, GLsizei count, const GLint *value);
0394     void glProgramUniform2iv(GLuint program, GLint location, GLsizei count, const GLint *value);
0395     void glProgramUniform3iv(GLuint program, GLint location, GLsizei count, const GLint *value);
0396     void glProgramUniform4iv(GLuint program, GLint location, GLsizei count, const GLint *value);
0397     void glProgramUniform1uiv(GLuint program, GLint location, GLsizei count, const GLuint *value);
0398     void glProgramUniform2uiv(GLuint program, GLint location, GLsizei count, const GLuint *value);
0399     void glProgramUniform3uiv(GLuint program, GLint location, GLsizei count, const GLuint *value);
0400     void glProgramUniform4uiv(GLuint program, GLint location, GLsizei count, const GLuint *value);
0401     void glProgramUniform1fv(GLuint program, GLint location, GLsizei count, const GLfloat *value);
0402     void glProgramUniform2fv(GLuint program, GLint location, GLsizei count, const GLfloat *value);
0403     void glProgramUniform3fv(GLuint program, GLint location, GLsizei count, const GLfloat *value);
0404     void glProgramUniform4fv(GLuint program, GLint location, GLsizei count, const GLfloat *value);
0405     void glProgramUniformMatrix2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
0406     void glProgramUniformMatrix3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
0407     void glProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
0408     void glProgramUniformMatrix2x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
0409     void glProgramUniformMatrix3x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
0410     void glProgramUniformMatrix2x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
0411     void glProgramUniformMatrix4x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
0412     void glProgramUniformMatrix3x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
0413     void glProgramUniformMatrix4x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
0414     void glValidateProgramPipeline(GLuint pipeline);
0415     void glGetProgramPipelineInfoLog(GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
0416     void glBindImageTexture(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
0417     void glGetBooleani_v(GLenum target, GLuint index, GLboolean *data);
0418     void glMemoryBarrier(GLbitfield barriers);
0419     void glMemoryBarrierByRegion(GLbitfield barriers);
0420     void glTexStorage2DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
0421     void glGetMultisamplefv(GLenum pname, GLuint index, GLfloat *val);
0422     void glSampleMaski(GLuint maskNumber, GLbitfield mask);
0423     void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params);
0424     void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params);
0425     void glBindVertexBuffer(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
0426     void glVertexAttribFormat(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
0427     void glVertexAttribIFormat(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
0428     void glVertexAttribBinding(GLuint attribindex, GLuint bindingindex);
0429     void glVertexBindingDivisor(GLuint bindingindex, GLuint divisor);
0430 
0431     // GLES 3.2
0432     void glBlendBarrier(void);
0433     void glCopyImageSubData(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
0434     void glDebugMessageControl(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
0435     void glDebugMessageInsert(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
0436     void glDebugMessageCallback(GLDEBUGPROC callback, const void *userParam);
0437     GLuint glGetDebugMessageLog(GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
0438     void glPushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar *message);
0439     void glPopDebugGroup(void);
0440     void glObjectLabel(GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
0441     void glGetObjectLabel(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
0442     void glObjectPtrLabel(const void *ptr, GLsizei length, const GLchar *label);
0443     void glGetObjectPtrLabel(const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
0444     void glGetPointerv(GLenum pname, void **params);
0445     void glEnablei(GLenum target, GLuint index);
0446     void glDisablei(GLenum target, GLuint index);
0447     void glBlendEquationi(GLuint buf, GLenum mode);
0448     void glBlendEquationSeparatei(GLuint buf, GLenum modeRGB, GLenum modeAlpha);
0449     void glBlendFunci(GLuint buf, GLenum src, GLenum dst);
0450     void glBlendFuncSeparatei(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
0451     void glColorMaski(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
0452     GLboolean glIsEnabledi(GLenum target, GLuint index);
0453     void glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
0454     void glDrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
0455     void glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
0456     void glFramebufferTexture(GLenum target, GLenum attachment, GLuint texture, GLint level);
0457     void glPrimitiveBoundingBox(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
0458     GLenum glGetGraphicsResetStatus(void);
0459     void glReadnPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
0460     void glGetnUniformfv(GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
0461     void glGetnUniformiv(GLuint program, GLint location, GLsizei bufSize, GLint *params);
0462     void glGetnUniformuiv(GLuint program, GLint location, GLsizei bufSize, GLuint *params);
0463     void glMinSampleShading(GLfloat value);
0464     void glPatchParameteri(GLenum pname, GLint value);
0465     void glTexParameterIiv(GLenum target, GLenum pname, const GLint *params);
0466     void glTexParameterIuiv(GLenum target, GLenum pname, const GLuint *params);
0467     void glGetTexParameterIiv(GLenum target, GLenum pname, GLint *params);
0468     void glGetTexParameterIuiv(GLenum target, GLenum pname, GLuint *params);
0469     void glSamplerParameterIiv(GLuint sampler, GLenum pname, const GLint *param);
0470     void glSamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint *param);
0471     void glGetSamplerParameterIiv(GLuint sampler, GLenum pname, GLint *params);
0472     void glGetSamplerParameterIuiv(GLuint sampler, GLenum pname, GLuint *params);
0473     void glTexBuffer(GLenum target, GLenum internalformat, GLuint buffer);
0474     void glTexBufferRange(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
0475     void glTexStorage3DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
0476 
0477 private:
0478     static bool isInitialized(const QOpenGLExtraFunctionsPrivate *d) { return d != nullptr; }
0479 };
0480 
0481 
0482 #define QT_OPENGL_DECLARE_FUNCTIONS(ret, name, args) \
0483     ret (QOPENGLF_APIENTRYP name)args;
0484 #define QT_OPENGL_COUNT_FUNCTIONS(ret, name, args) +1
0485 
0486 #define QT_OPENGL_DECLARE(FUNCTIONS) \
0487 public: \
0488     struct Functions { \
0489         FUNCTIONS(QT_OPENGL_DECLARE_FUNCTIONS) \
0490     }; \
0491     union { \
0492         QFunctionPointer functions[FUNCTIONS(QT_OPENGL_COUNT_FUNCTIONS)]; \
0493         Functions f; \
0494     }; \
0495 private: \
0496     void init(QOpenGLContext *context);
0497 
0498 class QOpenGLExtraFunctionsPrivate : public QOpenGLFunctionsPrivate
0499 {
0500 public:
0501     QOpenGLExtraFunctionsPrivate(QOpenGLContext *ctx);
0502 
0503     // GLES3
0504 #define QT_OPENGL_EXTRA_FUNCTIONS(F) \
0505     F(void, ReadBuffer, (GLenum mode)) \
0506     F(void, DrawRangeElements, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices)) \
0507     F(void, TexImage3D, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels)) \
0508     F(void, TexSubImage3D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels)) \
0509     F(void, CopyTexSubImage3D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)) \
0510     F(void, CompressedTexImage3D, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data)) \
0511     F(void, CompressedTexSubImage3D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data)) \
0512     F(void, GenQueries, (GLsizei n, GLuint *ids)) \
0513     F(void, DeleteQueries, (GLsizei n, const GLuint *ids)) \
0514     F(GLboolean, IsQuery, (GLuint id)) \
0515     F(void, BeginQuery, (GLenum target, GLuint id)) \
0516     F(void, EndQuery, (GLenum target)) \
0517     F(void, GetQueryiv, (GLenum target, GLenum pname, GLint *params)) \
0518     F(void, GetQueryObjectuiv, (GLuint id, GLenum pname, GLuint *params)) \
0519     F(GLboolean, UnmapBuffer, (GLenum target)) \
0520     F(void, GetBufferPointerv, (GLenum target, GLenum pname, void **params)) \
0521     F(void, DrawBuffers, (GLsizei n, const GLenum *bufs)) \
0522     F(void, UniformMatrix2x3fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
0523     F(void, UniformMatrix3x2fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
0524     F(void, UniformMatrix2x4fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
0525     F(void, UniformMatrix4x2fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
0526     F(void, UniformMatrix3x4fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
0527     F(void, UniformMatrix4x3fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
0528     F(void, BlitFramebuffer, (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)) \
0529     F(void, RenderbufferStorageMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)) \
0530     F(void, FramebufferTextureLayer, (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)) \
0531     F(void *,MapBufferRange, (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)) \
0532     F(void, FlushMappedBufferRange, (GLenum target, GLintptr offset, GLsizeiptr length)) \
0533     F(void, BindVertexArray, (GLuint array)) \
0534     F(void, DeleteVertexArrays, (GLsizei n, const GLuint *arrays)) \
0535     F(void, GenVertexArrays, (GLsizei n, GLuint *arrays)) \
0536     F(GLboolean, IsVertexArray, (GLuint array)) \
0537     F(void, GetIntegeri_v, (GLenum target, GLuint index, GLint *data)) \
0538     F(void, BeginTransformFeedback, (GLenum primitiveMode)) \
0539     F(void, EndTransformFeedback, (void)) \
0540     F(void, BindBufferRange, (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)) \
0541     F(void, BindBufferBase, (GLenum target, GLuint index, GLuint buffer)) \
0542     F(void, TransformFeedbackVaryings, (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode)) \
0543     F(void, GetTransformFeedbackVarying, (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name)) \
0544     F(void, VertexAttribIPointer, (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer)) \
0545     F(void, GetVertexAttribIiv, (GLuint index, GLenum pname, GLint *params)) \
0546     F(void, GetVertexAttribIuiv, (GLuint index, GLenum pname, GLuint *params)) \
0547     F(void, VertexAttribI4i, (GLuint index, GLint x, GLint y, GLint z, GLint w)) \
0548     F(void, VertexAttribI4ui, (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)) \
0549     F(void, VertexAttribI4iv, (GLuint index, const GLint *v)) \
0550     F(void, VertexAttribI4uiv, (GLuint index, const GLuint *v)) \
0551     F(void, GetUniformuiv, (GLuint program, GLint location, GLuint *params)) \
0552     F(GLint, GetFragDataLocation, (GLuint program, const GLchar *name)) \
0553     F(void, Uniform1ui, (GLint location, GLuint v0)) \
0554     F(void, Uniform2ui, (GLint location, GLuint v0, GLuint v1)) \
0555     F(void, Uniform3ui, (GLint location, GLuint v0, GLuint v1, GLuint v2)) \
0556     F(void, Uniform4ui, (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)) \
0557     F(void, Uniform1uiv, (GLint location, GLsizei count, const GLuint *value)) \
0558     F(void, Uniform2uiv, (GLint location, GLsizei count, const GLuint *value)) \
0559     F(void, Uniform3uiv, (GLint location, GLsizei count, const GLuint *value)) \
0560     F(void, Uniform4uiv, (GLint location, GLsizei count, const GLuint *value)) \
0561     F(void, ClearBufferiv, (GLenum buffer, GLint drawbuffer, const GLint *value)) \
0562     F(void, ClearBufferuiv, (GLenum buffer, GLint drawbuffer, const GLuint *value)) \
0563     F(void, ClearBufferfv, (GLenum buffer, GLint drawbuffer, const GLfloat *value)) \
0564     F(void, ClearBufferfi, (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)) \
0565     F(const GLubyte *, GetStringi, (GLenum name, GLuint index)) \
0566     F(void, CopyBufferSubData, (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)) \
0567     F(void, GetUniformIndices, (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices)) \
0568     F(void, GetActiveUniformsiv, (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params)) \
0569     F(GLuint, GetUniformBlockIndex, (GLuint program, const GLchar *uniformBlockName)) \
0570     F(void, GetActiveUniformBlockiv, (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params)) \
0571     F(void, GetActiveUniformBlockName, (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName)) \
0572     F(void, UniformBlockBinding, (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)) \
0573     F(void, DrawArraysInstanced, (GLenum mode, GLint first, GLsizei count, GLsizei instancecount)) \
0574     F(void, DrawElementsInstanced, (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount)) \
0575     F(GLsync, FenceSync, (GLenum condition, GLbitfield flags)) \
0576     F(GLboolean, IsSync, (GLsync sync)) \
0577     F(void, DeleteSync, (GLsync sync)) \
0578     F(GLenum, ClientWaitSync, (GLsync sync, GLbitfield flags, GLuint64 timeout)) \
0579     F(void, WaitSync, (GLsync sync, GLbitfield flags, GLuint64 timeout)) \
0580     F(void, GetInteger64v, (GLenum pname, GLint64 *data)) \
0581     F(void, GetSynciv, (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)) \
0582     F(void, GetInteger64i_v, (GLenum target, GLuint index, GLint64 *data)) \
0583     F(void, GetBufferParameteri64v, (GLenum target, GLenum pname, GLint64 *params)) \
0584     F(void, GenSamplers, (GLsizei count, GLuint *samplers)) \
0585     F(void, DeleteSamplers, (GLsizei count, const GLuint *samplers)) \
0586     F(GLboolean, IsSampler, (GLuint sampler)) \
0587     F(void, BindSampler, (GLuint unit, GLuint sampler)) \
0588     F(void, SamplerParameteri, (GLuint sampler, GLenum pname, GLint param)) \
0589     F(void, SamplerParameteriv, (GLuint sampler, GLenum pname, const GLint *param)) \
0590     F(void, SamplerParameterf, (GLuint sampler, GLenum pname, GLfloat param)) \
0591     F(void, SamplerParameterfv, (GLuint sampler, GLenum pname, const GLfloat *param)) \
0592     F(void, GetSamplerParameteriv, (GLuint sampler, GLenum pname, GLint *params)) \
0593     F(void, GetSamplerParameterfv, (GLuint sampler, GLenum pname, GLfloat *params)) \
0594     F(void, VertexAttribDivisor, (GLuint index, GLuint divisor)) \
0595     F(void, BindTransformFeedback, (GLenum target, GLuint id)) \
0596     F(void, DeleteTransformFeedbacks, (GLsizei n, const GLuint *ids)) \
0597     F(void, GenTransformFeedbacks, (GLsizei n, GLuint *ids)) \
0598     F(GLboolean, IsTransformFeedback, (GLuint id)) \
0599     F(void, PauseTransformFeedback, (void)) \
0600     F(void, ResumeTransformFeedback, (void)) \
0601     F(void, GetProgramBinary, (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary)) \
0602     F(void, ProgramBinary, (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length)) \
0603     F(void, ProgramParameteri, (GLuint program, GLenum pname, GLint value)) \
0604     F(void, InvalidateFramebuffer, (GLenum target, GLsizei numAttachments, const GLenum *attachments)) \
0605     F(void, InvalidateSubFramebuffer, (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height)) \
0606     F(void, TexStorage2D, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)) \
0607     F(void, TexStorage3D, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)) \
0608     F(void, GetInternalformativ, (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params)) \
0609     F(void, DispatchCompute, (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z)) \
0610     F(void, DispatchComputeIndirect, (GLintptr indirect)) \
0611     F(void, DrawArraysIndirect, (GLenum mode, const void *indirect)) \
0612     F(void, DrawElementsIndirect, (GLenum mode, GLenum type, const void *indirect)) \
0613     F(void, FramebufferParameteri, (GLenum target, GLenum pname, GLint param)) \
0614     F(void, GetFramebufferParameteriv, (GLenum target, GLenum pname, GLint *params)) \
0615     F(void, GetProgramInterfaceiv, (GLuint program, GLenum programInterface, GLenum pname, GLint *params)) \
0616     F(GLuint, GetProgramResourceIndex, (GLuint program, GLenum programInterface, const GLchar *name)) \
0617     F(void, GetProgramResourceName, (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name)) \
0618     F(void, GetProgramResourceiv, (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params)) \
0619     F(GLint, GetProgramResourceLocation, (GLuint program, GLenum programInterface, const GLchar *name)) \
0620     F(void, UseProgramStages, (GLuint pipeline, GLbitfield stages, GLuint program)) \
0621     F(void, ActiveShaderProgram, (GLuint pipeline, GLuint program)) \
0622     F(GLuint, CreateShaderProgramv, (GLenum type, GLsizei count, const GLchar *const*strings)) \
0623     F(void, BindProgramPipeline, (GLuint pipeline)) \
0624     F(void, DeleteProgramPipelines, (GLsizei n, const GLuint *pipelines)) \
0625     F(void, GenProgramPipelines, (GLsizei n, GLuint *pipelines)) \
0626     F(GLboolean, IsProgramPipeline, (GLuint pipeline)) \
0627     F(void, GetProgramPipelineiv, (GLuint pipeline, GLenum pname, GLint *params)) \
0628     F(void, ProgramUniform1i, (GLuint program, GLint location, GLint v0)) \
0629     F(void, ProgramUniform2i, (GLuint program, GLint location, GLint v0, GLint v1)) \
0630     F(void, ProgramUniform3i, (GLuint program, GLint location, GLint v0, GLint v1, GLint v2)) \
0631     F(void, ProgramUniform4i, (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)) \
0632     F(void, ProgramUniform1ui, (GLuint program, GLint location, GLuint v0)) \
0633     F(void, ProgramUniform2ui, (GLuint program, GLint location, GLuint v0, GLuint v1)) \
0634     F(void, ProgramUniform3ui, (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2)) \
0635     F(void, ProgramUniform4ui, (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)) \
0636     F(void, ProgramUniform1f, (GLuint program, GLint location, GLfloat v0)) \
0637     F(void, ProgramUniform2f, (GLuint program, GLint location, GLfloat v0, GLfloat v1)) \
0638     F(void, ProgramUniform3f, (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)) \
0639     F(void, ProgramUniform4f, (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)) \
0640     F(void, ProgramUniform1iv, (GLuint program, GLint location, GLsizei count, const GLint *value)) \
0641     F(void, ProgramUniform2iv, (GLuint program, GLint location, GLsizei count, const GLint *value)) \
0642     F(void, ProgramUniform3iv, (GLuint program, GLint location, GLsizei count, const GLint *value)) \
0643     F(void, ProgramUniform4iv, (GLuint program, GLint location, GLsizei count, const GLint *value)) \
0644     F(void, ProgramUniform1uiv, (GLuint program, GLint location, GLsizei count, const GLuint *value)) \
0645     F(void, ProgramUniform2uiv, (GLuint program, GLint location, GLsizei count, const GLuint *value)) \
0646     F(void, ProgramUniform3uiv, (GLuint program, GLint location, GLsizei count, const GLuint *value)) \
0647     F(void, ProgramUniform4uiv, (GLuint program, GLint location, GLsizei count, const GLuint *value)) \
0648     F(void, ProgramUniform1fv, (GLuint program, GLint location, GLsizei count, const GLfloat *value)) \
0649     F(void, ProgramUniform2fv, (GLuint program, GLint location, GLsizei count, const GLfloat *value)) \
0650     F(void, ProgramUniform3fv, (GLuint program, GLint location, GLsizei count, const GLfloat *value)) \
0651     F(void, ProgramUniform4fv, (GLuint program, GLint location, GLsizei count, const GLfloat *value)) \
0652     F(void, ProgramUniformMatrix2fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
0653     F(void, ProgramUniformMatrix3fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
0654     F(void, ProgramUniformMatrix4fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
0655     F(void, ProgramUniformMatrix2x3fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
0656     F(void, ProgramUniformMatrix3x2fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
0657     F(void, ProgramUniformMatrix2x4fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
0658     F(void, ProgramUniformMatrix4x2fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
0659     F(void, ProgramUniformMatrix3x4fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
0660     F(void, ProgramUniformMatrix4x3fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
0661     F(void, ValidateProgramPipeline, (GLuint pipeline)) \
0662     F(void, GetProgramPipelineInfoLog, (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog)) \
0663     F(void, BindImageTexture, (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format)) \
0664     F(void, GetBooleani_v, (GLenum target, GLuint index, GLboolean *data)) \
0665     F(void, MemoryBarrier, (GLbitfield barriers)) \
0666     F(void, MemoryBarrierByRegion, (GLbitfield barriers)) \
0667     F(void, TexStorage2DMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)) \
0668     F(void, GetMultisamplefv, (GLenum pname, GLuint index, GLfloat *val)) \
0669     F(void, SampleMaski, (GLuint maskNumber, GLbitfield mask)) \
0670     F(void, GetTexLevelParameteriv, (GLenum target, GLint level, GLenum pname, GLint *params)) \
0671     F(void, GetTexLevelParameterfv, (GLenum target, GLint level, GLenum pname, GLfloat *params)) \
0672     F(void, BindVertexBuffer, (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride)) \
0673     F(void, VertexAttribFormat, (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset)) \
0674     F(void, VertexAttribIFormat, (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset)) \
0675     F(void, VertexAttribBinding, (GLuint attribindex, GLuint bindingindex)) \
0676     F(void, VertexBindingDivisor, (GLuint bindingindex, GLuint divisor)) \
0677     F(void, BlendBarrier, (void)) \
0678     F(void, BlendEquationSeparatei, (GLuint buf, GLenum modeRGB, GLenum modeAlpha)) \
0679     F(void, BlendEquationi, (GLuint buf, GLenum mode))              \
0680     F(void, BlendFuncSeparatei, (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)) \
0681     F(void, BlendFunci, (GLuint buf, GLenum src, GLenum dst)) \
0682     F(void, ColorMaski, (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a)) \
0683     F(void, CopyImageSubData, (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth)) \
0684     F(void, DebugMessageCallback, (GLDEBUGPROC callback, const void * userParam)) \
0685     F(void, DebugMessageControl, (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled)) \
0686     F(void, DebugMessageInsert, (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf)) \
0687     F(void, Disablei, (GLenum target, GLuint index)) \
0688     F(void, DrawElementsBaseVertex, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex)) \
0689     F(void, DrawElementsInstancedBaseVertex, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex)) \
0690     F(void, DrawRangeElementsBaseVertex, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex)) \
0691     F(void, Enablei, (GLenum target, GLuint index)) \
0692     F(void, FramebufferTexture, (GLenum target, GLenum attachment, GLuint texture, GLint level)) \
0693     F(GLuint, GetDebugMessageLog, (GLuint count, GLsizei bufSize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog)) \
0694     F(GLenum, GetGraphicsResetStatus, (void)) \
0695     F(void, GetObjectLabel, (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei* length, GLchar* label)) \
0696     F(void, GetObjectPtrLabel, (const void * ptr, GLsizei bufSize, GLsizei* length, GLchar* label)) \
0697     F(void, GetPointerv, (GLenum pname, void ** params)) \
0698     F(void, GetSamplerParameterIiv, (GLuint sampler, GLenum pname, GLint* params)) \
0699     F(void, GetSamplerParameterIuiv, (GLuint sampler, GLenum pname, GLuint* params)) \
0700     F(void, GetTexParameterIiv, (GLenum target, GLenum pname, GLint* params)) \
0701     F(void, GetTexParameterIuiv, (GLenum target, GLenum pname, GLuint* params)) \
0702     F(void, GetnUniformfv, (GLuint program, GLint location, GLsizei bufSize, GLfloat* params)) \
0703     F(void, GetnUniformiv, (GLuint program, GLint location, GLsizei bufSize, GLint* params)) \
0704     F(void, GetnUniformuiv, (GLuint program, GLint location, GLsizei bufSize, GLuint* params)) \
0705     F(GLboolean, IsEnabledi, (GLenum target, GLuint index)) \
0706     F(void, MinSampleShading, (GLfloat value)) \
0707     F(void, ObjectLabel, (GLenum identifier, GLuint name, GLsizei length, const GLchar * label)) \
0708     F(void, ObjectPtrLabel, (const void * ptr, GLsizei length, const GLchar * label)) \
0709     F(void, PatchParameteri, (GLenum pname, GLint value)) \
0710     F(void, PopDebugGroup, (void)) \
0711     F(void, PrimitiveBoundingBox, (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW)) \
0712     F(void, PushDebugGroup, (GLenum source, GLuint id, GLsizei length, const GLchar * message)) \
0713     F(void, ReadnPixels, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data)) \
0714     F(void, SamplerParameterIiv, (GLuint sampler, GLenum pname, const GLint * param)) \
0715     F(void, SamplerParameterIuiv, (GLuint sampler, GLenum pname, const GLuint * param)) \
0716     F(void, TexBuffer, (GLenum target, GLenum internalformat, GLuint buffer)) \
0717     F(void, TexBufferRange, (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size)) \
0718     F(void, TexParameterIiv, (GLenum target, GLenum pname, const GLint * params)) \
0719     F(void, TexParameterIuiv, (GLenum target, GLenum pname, const GLuint * params)) \
0720     F(void, TexStorage3DMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations)) \
0721 
0722     QT_OPENGL_DECLARE(QT_OPENGL_EXTRA_FUNCTIONS)
0723 };
0724 
0725 // GLES 3.0 and 3.1
0726 
0727 inline void QOpenGLExtraFunctions::glBeginQuery(GLenum target, GLuint id)
0728 {
0729     Q_D(QOpenGLExtraFunctions);
0730     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0731     d->f.BeginQuery(target, id);
0732     Q_OPENGL_FUNCTIONS_DEBUG
0733 }
0734 
0735 inline void QOpenGLExtraFunctions::glBeginTransformFeedback(GLenum primitiveMode)
0736 {
0737     Q_D(QOpenGLExtraFunctions);
0738     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0739     d->f.BeginTransformFeedback(primitiveMode);
0740     Q_OPENGL_FUNCTIONS_DEBUG
0741 }
0742 
0743 inline void QOpenGLExtraFunctions::glBindBufferBase(GLenum target, GLuint index, GLuint buffer)
0744 {
0745     Q_D(QOpenGLExtraFunctions);
0746     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0747     d->f.BindBufferBase(target, index, buffer);
0748     Q_OPENGL_FUNCTIONS_DEBUG
0749 }
0750 
0751 inline void QOpenGLExtraFunctions::glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
0752 {
0753     Q_D(QOpenGLExtraFunctions);
0754     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0755     d->f.BindBufferRange(target, index, buffer, offset, size);
0756     Q_OPENGL_FUNCTIONS_DEBUG
0757 }
0758 
0759 inline void QOpenGLExtraFunctions::glBindSampler(GLuint unit, GLuint sampler)
0760 {
0761     Q_D(QOpenGLExtraFunctions);
0762     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0763     d->f.BindSampler(unit, sampler);
0764     Q_OPENGL_FUNCTIONS_DEBUG
0765 }
0766 
0767 inline void QOpenGLExtraFunctions::glBindTransformFeedback(GLenum target, GLuint id)
0768 {
0769     Q_D(QOpenGLExtraFunctions);
0770     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0771     d->f.BindTransformFeedback(target, id);
0772     Q_OPENGL_FUNCTIONS_DEBUG
0773 }
0774 
0775 inline void QOpenGLExtraFunctions::glBindVertexArray(GLuint array)
0776 {
0777     Q_D(QOpenGLExtraFunctions);
0778     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0779     d->f.BindVertexArray(array);
0780     Q_OPENGL_FUNCTIONS_DEBUG
0781 }
0782 
0783 inline void QOpenGLExtraFunctions::glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
0784 {
0785     Q_D(QOpenGLExtraFunctions);
0786     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0787     d->f.BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
0788     Q_OPENGL_FUNCTIONS_DEBUG
0789 }
0790 
0791 inline void QOpenGLExtraFunctions::glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
0792 {
0793     Q_D(QOpenGLExtraFunctions);
0794     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0795     d->f.ClearBufferfi(buffer, drawbuffer, depth, stencil);
0796     Q_OPENGL_FUNCTIONS_DEBUG
0797 }
0798 
0799 inline void QOpenGLExtraFunctions::glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat * value)
0800 {
0801     Q_D(QOpenGLExtraFunctions);
0802     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0803     d->f.ClearBufferfv(buffer, drawbuffer, value);
0804     Q_OPENGL_FUNCTIONS_DEBUG
0805 }
0806 
0807 inline void QOpenGLExtraFunctions::glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint * value)
0808 {
0809     Q_D(QOpenGLExtraFunctions);
0810     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0811     d->f.ClearBufferiv(buffer, drawbuffer, value);
0812     Q_OPENGL_FUNCTIONS_DEBUG
0813 }
0814 
0815 inline void QOpenGLExtraFunctions::glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint * value)
0816 {
0817     Q_D(QOpenGLExtraFunctions);
0818     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0819     d->f.ClearBufferuiv(buffer, drawbuffer, value);
0820     Q_OPENGL_FUNCTIONS_DEBUG
0821 }
0822 
0823 inline GLenum QOpenGLExtraFunctions::glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
0824 {
0825     Q_D(QOpenGLExtraFunctions);
0826     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0827     GLenum result = d->f.ClientWaitSync(sync, flags, timeout);
0828     Q_OPENGL_FUNCTIONS_DEBUG
0829     return result;
0830 }
0831 
0832 inline void QOpenGLExtraFunctions::glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data)
0833 {
0834     Q_D(QOpenGLExtraFunctions);
0835     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0836     d->f.CompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data);
0837     Q_OPENGL_FUNCTIONS_DEBUG
0838 }
0839 
0840 inline void QOpenGLExtraFunctions::glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data)
0841 {
0842     Q_D(QOpenGLExtraFunctions);
0843     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0844     d->f.CompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
0845     Q_OPENGL_FUNCTIONS_DEBUG
0846 }
0847 
0848 inline void QOpenGLExtraFunctions::glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
0849 {
0850     Q_D(QOpenGLExtraFunctions);
0851     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0852     d->f.CopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
0853     Q_OPENGL_FUNCTIONS_DEBUG
0854 }
0855 
0856 inline void QOpenGLExtraFunctions::glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
0857 {
0858     Q_D(QOpenGLExtraFunctions);
0859     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0860     d->f.CopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
0861     Q_OPENGL_FUNCTIONS_DEBUG
0862 }
0863 
0864 inline void QOpenGLExtraFunctions::glDeleteQueries(GLsizei n, const GLuint * ids)
0865 {
0866     Q_D(QOpenGLExtraFunctions);
0867     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0868     d->f.DeleteQueries(n, ids);
0869     Q_OPENGL_FUNCTIONS_DEBUG
0870 }
0871 
0872 inline void QOpenGLExtraFunctions::glDeleteSamplers(GLsizei count, const GLuint * samplers)
0873 {
0874     Q_D(QOpenGLExtraFunctions);
0875     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0876     d->f.DeleteSamplers(count, samplers);
0877     Q_OPENGL_FUNCTIONS_DEBUG
0878 }
0879 
0880 inline void QOpenGLExtraFunctions::glDeleteSync(GLsync sync)
0881 {
0882     Q_D(QOpenGLExtraFunctions);
0883     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0884     d->f.DeleteSync(sync);
0885     Q_OPENGL_FUNCTIONS_DEBUG
0886 }
0887 
0888 inline void QOpenGLExtraFunctions::glDeleteTransformFeedbacks(GLsizei n, const GLuint * ids)
0889 {
0890     Q_D(QOpenGLExtraFunctions);
0891     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0892     d->f.DeleteTransformFeedbacks(n, ids);
0893     Q_OPENGL_FUNCTIONS_DEBUG
0894 }
0895 
0896 inline void QOpenGLExtraFunctions::glDeleteVertexArrays(GLsizei n, const GLuint * arrays)
0897 {
0898     Q_D(QOpenGLExtraFunctions);
0899     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0900     d->f.DeleteVertexArrays(n, arrays);
0901     Q_OPENGL_FUNCTIONS_DEBUG
0902 }
0903 
0904 inline void QOpenGLExtraFunctions::glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount)
0905 {
0906     Q_D(QOpenGLExtraFunctions);
0907     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0908     d->f.DrawArraysInstanced(mode, first, count, instancecount);
0909     Q_OPENGL_FUNCTIONS_DEBUG
0910 }
0911 
0912 inline void QOpenGLExtraFunctions::glDrawBuffers(GLsizei n, const GLenum * bufs)
0913 {
0914     Q_D(QOpenGLExtraFunctions);
0915     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0916     d->f.DrawBuffers(n, bufs);
0917     Q_OPENGL_FUNCTIONS_DEBUG
0918 }
0919 
0920 inline void QOpenGLExtraFunctions::glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount)
0921 {
0922     Q_D(QOpenGLExtraFunctions);
0923     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0924     d->f.DrawElementsInstanced(mode, count, type, indices, instancecount);
0925     Q_OPENGL_FUNCTIONS_DEBUG
0926 }
0927 
0928 inline void QOpenGLExtraFunctions::glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices)
0929 {
0930     Q_D(QOpenGLExtraFunctions);
0931     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0932     d->f.DrawRangeElements(mode, start, end, count, type, indices);
0933     Q_OPENGL_FUNCTIONS_DEBUG
0934 }
0935 
0936 inline void QOpenGLExtraFunctions::glEndQuery(GLenum target)
0937 {
0938     Q_D(QOpenGLExtraFunctions);
0939     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0940     d->f.EndQuery(target);
0941     Q_OPENGL_FUNCTIONS_DEBUG
0942 }
0943 
0944 inline void QOpenGLExtraFunctions::glEndTransformFeedback()
0945 {
0946     Q_D(QOpenGLExtraFunctions);
0947     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0948     d->f.EndTransformFeedback();
0949     Q_OPENGL_FUNCTIONS_DEBUG
0950 }
0951 
0952 inline GLsync QOpenGLExtraFunctions::glFenceSync(GLenum condition, GLbitfield flags)
0953 {
0954     Q_D(QOpenGLExtraFunctions);
0955     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0956     GLsync result = d->f.FenceSync(condition, flags);
0957     Q_OPENGL_FUNCTIONS_DEBUG
0958     return result;
0959 }
0960 
0961 inline void QOpenGLExtraFunctions::glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
0962 {
0963     Q_D(QOpenGLExtraFunctions);
0964     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0965     d->f.FlushMappedBufferRange(target, offset, length);
0966     Q_OPENGL_FUNCTIONS_DEBUG
0967 }
0968 
0969 inline void QOpenGLExtraFunctions::glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
0970 {
0971     Q_D(QOpenGLExtraFunctions);
0972     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0973     d->f.FramebufferTextureLayer(target, attachment, texture, level, layer);
0974     Q_OPENGL_FUNCTIONS_DEBUG
0975 }
0976 
0977 inline void QOpenGLExtraFunctions::glGenQueries(GLsizei n, GLuint* ids)
0978 {
0979     Q_D(QOpenGLExtraFunctions);
0980     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0981     d->f.GenQueries(n, ids);
0982     Q_OPENGL_FUNCTIONS_DEBUG
0983 }
0984 
0985 inline void QOpenGLExtraFunctions::glGenSamplers(GLsizei count, GLuint* samplers)
0986 {
0987     Q_D(QOpenGLExtraFunctions);
0988     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0989     d->f.GenSamplers(count, samplers);
0990     Q_OPENGL_FUNCTIONS_DEBUG
0991 }
0992 
0993 inline void QOpenGLExtraFunctions::glGenTransformFeedbacks(GLsizei n, GLuint* ids)
0994 {
0995     Q_D(QOpenGLExtraFunctions);
0996     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
0997     d->f.GenTransformFeedbacks(n, ids);
0998     Q_OPENGL_FUNCTIONS_DEBUG
0999 }
1000 
1001 inline void QOpenGLExtraFunctions::glGenVertexArrays(GLsizei n, GLuint* arrays)
1002 {
1003     Q_D(QOpenGLExtraFunctions);
1004     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1005     d->f.GenVertexArrays(n, arrays);
1006     Q_OPENGL_FUNCTIONS_DEBUG
1007 }
1008 
1009 inline void QOpenGLExtraFunctions::glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName)
1010 {
1011     Q_D(QOpenGLExtraFunctions);
1012     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1013     d->f.GetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName);
1014     Q_OPENGL_FUNCTIONS_DEBUG
1015 }
1016 
1017 inline void QOpenGLExtraFunctions::glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params)
1018 {
1019     Q_D(QOpenGLExtraFunctions);
1020     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1021     d->f.GetActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
1022     Q_OPENGL_FUNCTIONS_DEBUG
1023 }
1024 
1025 inline void QOpenGLExtraFunctions::glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint * uniformIndices, GLenum pname, GLint* params)
1026 {
1027     Q_D(QOpenGLExtraFunctions);
1028     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1029     d->f.GetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
1030     Q_OPENGL_FUNCTIONS_DEBUG
1031 }
1032 
1033 inline void QOpenGLExtraFunctions::glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params)
1034 {
1035     Q_D(QOpenGLExtraFunctions);
1036     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1037     d->f.GetBufferParameteri64v(target, pname, params);
1038     Q_OPENGL_FUNCTIONS_DEBUG
1039 }
1040 
1041 inline void QOpenGLExtraFunctions::glGetBufferPointerv(GLenum target, GLenum pname, void ** params)
1042 {
1043     Q_D(QOpenGLExtraFunctions);
1044     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1045     d->f.GetBufferPointerv(target, pname, params);
1046     Q_OPENGL_FUNCTIONS_DEBUG
1047 }
1048 
1049 inline GLint QOpenGLExtraFunctions::glGetFragDataLocation(GLuint program, const GLchar * name)
1050 {
1051     Q_D(QOpenGLExtraFunctions);
1052     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1053     GLint result = d->f.GetFragDataLocation(program, name);
1054     Q_OPENGL_FUNCTIONS_DEBUG
1055     return result;
1056 }
1057 
1058 inline void QOpenGLExtraFunctions::glGetInteger64i_v(GLenum target, GLuint index, GLint64* data)
1059 {
1060     Q_D(QOpenGLExtraFunctions);
1061     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1062     d->f.GetInteger64i_v(target, index, data);
1063     Q_OPENGL_FUNCTIONS_DEBUG
1064 }
1065 
1066 inline void QOpenGLExtraFunctions::glGetInteger64v(GLenum pname, GLint64* data)
1067 {
1068     Q_D(QOpenGLExtraFunctions);
1069     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1070     d->f.GetInteger64v(pname, data);
1071     Q_OPENGL_FUNCTIONS_DEBUG
1072 }
1073 
1074 inline void QOpenGLExtraFunctions::glGetIntegeri_v(GLenum target, GLuint index, GLint* data)
1075 {
1076     Q_D(QOpenGLExtraFunctions);
1077     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1078     d->f.GetIntegeri_v(target, index, data);
1079     Q_OPENGL_FUNCTIONS_DEBUG
1080 }
1081 
1082 inline void QOpenGLExtraFunctions::glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params)
1083 {
1084     Q_D(QOpenGLExtraFunctions);
1085     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1086     d->f.GetInternalformativ(target, internalformat, pname, bufSize, params);
1087     Q_OPENGL_FUNCTIONS_DEBUG
1088 }
1089 
1090 inline void QOpenGLExtraFunctions::glGetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, void * binary)
1091 {
1092     Q_D(QOpenGLExtraFunctions);
1093     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1094     d->f.GetProgramBinary(program, bufSize, length, binaryFormat, binary);
1095     Q_OPENGL_FUNCTIONS_DEBUG
1096 }
1097 
1098 inline void QOpenGLExtraFunctions::glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params)
1099 {
1100     Q_D(QOpenGLExtraFunctions);
1101     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1102     d->f.GetQueryObjectuiv(id, pname, params);
1103     Q_OPENGL_FUNCTIONS_DEBUG
1104 }
1105 
1106 inline void QOpenGLExtraFunctions::glGetQueryiv(GLenum target, GLenum pname, GLint* params)
1107 {
1108     Q_D(QOpenGLExtraFunctions);
1109     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1110     d->f.GetQueryiv(target, pname, params);
1111     Q_OPENGL_FUNCTIONS_DEBUG
1112 }
1113 
1114 inline void QOpenGLExtraFunctions::glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params)
1115 {
1116     Q_D(QOpenGLExtraFunctions);
1117     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1118     d->f.GetSamplerParameterfv(sampler, pname, params);
1119     Q_OPENGL_FUNCTIONS_DEBUG
1120 }
1121 
1122 inline void QOpenGLExtraFunctions::glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params)
1123 {
1124     Q_D(QOpenGLExtraFunctions);
1125     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1126     d->f.GetSamplerParameteriv(sampler, pname, params);
1127     Q_OPENGL_FUNCTIONS_DEBUG
1128 }
1129 
1130 inline const GLubyte * QOpenGLExtraFunctions::glGetStringi(GLenum name, GLuint index)
1131 {
1132     Q_D(QOpenGLExtraFunctions);
1133     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1134     const GLubyte * result = d->f.GetStringi(name, index);
1135     Q_OPENGL_FUNCTIONS_DEBUG
1136     return result;
1137 }
1138 
1139 inline void QOpenGLExtraFunctions::glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values)
1140 {
1141     Q_D(QOpenGLExtraFunctions);
1142     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1143     d->f.GetSynciv(sync, pname, bufSize, length, values);
1144     Q_OPENGL_FUNCTIONS_DEBUG
1145 }
1146 
1147 inline void QOpenGLExtraFunctions::glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name)
1148 {
1149     Q_D(QOpenGLExtraFunctions);
1150     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1151     d->f.GetTransformFeedbackVarying(program, index, bufSize, length, size, type, name);
1152     Q_OPENGL_FUNCTIONS_DEBUG
1153 }
1154 
1155 inline GLuint QOpenGLExtraFunctions::glGetUniformBlockIndex(GLuint program, const GLchar * uniformBlockName)
1156 {
1157     Q_D(QOpenGLExtraFunctions);
1158     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1159     GLuint result = d->f.GetUniformBlockIndex(program, uniformBlockName);
1160     Q_OPENGL_FUNCTIONS_DEBUG
1161     return result;
1162 }
1163 
1164 inline void QOpenGLExtraFunctions::glGetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar *const* uniformNames, GLuint* uniformIndices)
1165 {
1166     Q_D(QOpenGLExtraFunctions);
1167     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1168     d->f.GetUniformIndices(program, uniformCount, uniformNames, uniformIndices);
1169     Q_OPENGL_FUNCTIONS_DEBUG
1170 }
1171 
1172 inline void QOpenGLExtraFunctions::glGetUniformuiv(GLuint program, GLint location, GLuint* params)
1173 {
1174     Q_D(QOpenGLExtraFunctions);
1175     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1176     d->f.GetUniformuiv(program, location, params);
1177     Q_OPENGL_FUNCTIONS_DEBUG
1178 }
1179 
1180 inline void QOpenGLExtraFunctions::glGetVertexAttribIiv(GLuint index, GLenum pname, GLint* params)
1181 {
1182     Q_D(QOpenGLExtraFunctions);
1183     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1184     d->f.GetVertexAttribIiv(index, pname, params);
1185     Q_OPENGL_FUNCTIONS_DEBUG
1186 }
1187 
1188 inline void QOpenGLExtraFunctions::glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params)
1189 {
1190     Q_D(QOpenGLExtraFunctions);
1191     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1192     d->f.GetVertexAttribIuiv(index, pname, params);
1193     Q_OPENGL_FUNCTIONS_DEBUG
1194 }
1195 
1196 inline void QOpenGLExtraFunctions::glInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum * attachments)
1197 {
1198     Q_D(QOpenGLExtraFunctions);
1199     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1200     d->f.InvalidateFramebuffer(target, numAttachments, attachments);
1201     Q_OPENGL_FUNCTIONS_DEBUG
1202 }
1203 
1204 inline void QOpenGLExtraFunctions::glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height)
1205 {
1206     Q_D(QOpenGLExtraFunctions);
1207     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1208     d->f.InvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);
1209     Q_OPENGL_FUNCTIONS_DEBUG
1210 }
1211 
1212 inline GLboolean QOpenGLExtraFunctions::glIsQuery(GLuint id)
1213 {
1214     Q_D(QOpenGLExtraFunctions);
1215     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1216     GLboolean result = d->f.IsQuery(id);
1217     Q_OPENGL_FUNCTIONS_DEBUG
1218     return result;
1219 }
1220 
1221 inline GLboolean QOpenGLExtraFunctions::glIsSampler(GLuint sampler)
1222 {
1223     Q_D(QOpenGLExtraFunctions);
1224     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1225     GLboolean result = d->f.IsSampler(sampler);
1226     Q_OPENGL_FUNCTIONS_DEBUG
1227     return result;
1228 }
1229 
1230 inline GLboolean QOpenGLExtraFunctions::glIsSync(GLsync sync)
1231 {
1232     Q_D(QOpenGLExtraFunctions);
1233     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1234     GLboolean result = d->f.IsSync(sync);
1235     Q_OPENGL_FUNCTIONS_DEBUG
1236     return result;
1237 }
1238 
1239 inline GLboolean QOpenGLExtraFunctions::glIsTransformFeedback(GLuint id)
1240 {
1241     Q_D(QOpenGLExtraFunctions);
1242     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1243     GLboolean result = d->f.IsTransformFeedback(id);
1244     Q_OPENGL_FUNCTIONS_DEBUG
1245     return result;
1246 }
1247 
1248 inline GLboolean QOpenGLExtraFunctions::glIsVertexArray(GLuint array)
1249 {
1250     Q_D(QOpenGLExtraFunctions);
1251     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1252     GLboolean result = d->f.IsVertexArray(array);
1253     Q_OPENGL_FUNCTIONS_DEBUG
1254     return result;
1255 }
1256 
1257 inline void * QOpenGLExtraFunctions::glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
1258 {
1259     Q_D(QOpenGLExtraFunctions);
1260     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1261     void *result = d->f.MapBufferRange(target, offset, length, access);
1262     Q_OPENGL_FUNCTIONS_DEBUG
1263     return result;
1264 }
1265 
1266 inline void QOpenGLExtraFunctions::glPauseTransformFeedback()
1267 {
1268     Q_D(QOpenGLExtraFunctions);
1269     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1270     d->f.PauseTransformFeedback();
1271     Q_OPENGL_FUNCTIONS_DEBUG
1272 }
1273 
1274 inline void QOpenGLExtraFunctions::glProgramBinary(GLuint program, GLenum binaryFormat, const void * binary, GLsizei length)
1275 {
1276     Q_D(QOpenGLExtraFunctions);
1277     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1278     d->f.ProgramBinary(program, binaryFormat, binary, length);
1279     Q_OPENGL_FUNCTIONS_DEBUG
1280 }
1281 
1282 inline void QOpenGLExtraFunctions::glProgramParameteri(GLuint program, GLenum pname, GLint value)
1283 {
1284     Q_D(QOpenGLExtraFunctions);
1285     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1286     d->f.ProgramParameteri(program, pname, value);
1287     Q_OPENGL_FUNCTIONS_DEBUG
1288 }
1289 
1290 inline void QOpenGLExtraFunctions::glReadBuffer(GLenum src)
1291 {
1292     Q_D(QOpenGLExtraFunctions);
1293     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1294     d->f.ReadBuffer(src);
1295     Q_OPENGL_FUNCTIONS_DEBUG
1296 }
1297 
1298 inline void QOpenGLExtraFunctions::glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
1299 {
1300     Q_D(QOpenGLExtraFunctions);
1301     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1302     d->f.RenderbufferStorageMultisample(target, samples, internalformat, width, height);
1303     Q_OPENGL_FUNCTIONS_DEBUG
1304 }
1305 
1306 inline void QOpenGLExtraFunctions::glResumeTransformFeedback()
1307 {
1308     Q_D(QOpenGLExtraFunctions);
1309     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1310     d->f.ResumeTransformFeedback();
1311     Q_OPENGL_FUNCTIONS_DEBUG
1312 }
1313 
1314 inline void QOpenGLExtraFunctions::glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
1315 {
1316     Q_D(QOpenGLExtraFunctions);
1317     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1318     d->f.SamplerParameterf(sampler, pname, param);
1319     Q_OPENGL_FUNCTIONS_DEBUG
1320 }
1321 
1322 inline void QOpenGLExtraFunctions::glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat * param)
1323 {
1324     Q_D(QOpenGLExtraFunctions);
1325     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1326     d->f.SamplerParameterfv(sampler, pname, param);
1327     Q_OPENGL_FUNCTIONS_DEBUG
1328 }
1329 
1330 inline void QOpenGLExtraFunctions::glSamplerParameteri(GLuint sampler, GLenum pname, GLint param)
1331 {
1332     Q_D(QOpenGLExtraFunctions);
1333     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1334     d->f.SamplerParameteri(sampler, pname, param);
1335     Q_OPENGL_FUNCTIONS_DEBUG
1336 }
1337 
1338 inline void QOpenGLExtraFunctions::glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint * param)
1339 {
1340     Q_D(QOpenGLExtraFunctions);
1341     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1342     d->f.SamplerParameteriv(sampler, pname, param);
1343     Q_OPENGL_FUNCTIONS_DEBUG
1344 }
1345 
1346 inline void QOpenGLExtraFunctions::glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels)
1347 {
1348     Q_D(QOpenGLExtraFunctions);
1349     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1350     d->f.TexImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels);
1351     Q_OPENGL_FUNCTIONS_DEBUG
1352 }
1353 
1354 inline void QOpenGLExtraFunctions::glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
1355 {
1356     Q_D(QOpenGLExtraFunctions);
1357     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1358     d->f.TexStorage2D(target, levels, internalformat, width, height);
1359     Q_OPENGL_FUNCTIONS_DEBUG
1360 }
1361 
1362 inline void QOpenGLExtraFunctions::glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
1363 {
1364     Q_D(QOpenGLExtraFunctions);
1365     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1366     d->f.TexStorage3D(target, levels, internalformat, width, height, depth);
1367     Q_OPENGL_FUNCTIONS_DEBUG
1368 }
1369 
1370 inline void QOpenGLExtraFunctions::glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels)
1371 {
1372     Q_D(QOpenGLExtraFunctions);
1373     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1374     d->f.TexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
1375     Q_OPENGL_FUNCTIONS_DEBUG
1376 }
1377 
1378 inline void QOpenGLExtraFunctions::glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode)
1379 {
1380     Q_D(QOpenGLExtraFunctions);
1381     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1382     d->f.TransformFeedbackVaryings(program, count, varyings, bufferMode);
1383     Q_OPENGL_FUNCTIONS_DEBUG
1384 }
1385 
1386 inline void QOpenGLExtraFunctions::glUniform1ui(GLint location, GLuint v0)
1387 {
1388     Q_D(QOpenGLExtraFunctions);
1389     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1390     d->f.Uniform1ui(location, v0);
1391     Q_OPENGL_FUNCTIONS_DEBUG
1392 }
1393 
1394 inline void QOpenGLExtraFunctions::glUniform1uiv(GLint location, GLsizei count, const GLuint * value)
1395 {
1396     Q_D(QOpenGLExtraFunctions);
1397     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1398     d->f.Uniform1uiv(location, count, value);
1399     Q_OPENGL_FUNCTIONS_DEBUG
1400 }
1401 
1402 inline void QOpenGLExtraFunctions::glUniform2ui(GLint location, GLuint v0, GLuint v1)
1403 {
1404     Q_D(QOpenGLExtraFunctions);
1405     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1406     d->f.Uniform2ui(location, v0, v1);
1407     Q_OPENGL_FUNCTIONS_DEBUG
1408 }
1409 
1410 inline void QOpenGLExtraFunctions::glUniform2uiv(GLint location, GLsizei count, const GLuint * value)
1411 {
1412     Q_D(QOpenGLExtraFunctions);
1413     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1414     d->f.Uniform2uiv(location, count, value);
1415     Q_OPENGL_FUNCTIONS_DEBUG
1416 }
1417 
1418 inline void QOpenGLExtraFunctions::glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
1419 {
1420     Q_D(QOpenGLExtraFunctions);
1421     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1422     d->f.Uniform3ui(location, v0, v1, v2);
1423     Q_OPENGL_FUNCTIONS_DEBUG
1424 }
1425 
1426 inline void QOpenGLExtraFunctions::glUniform3uiv(GLint location, GLsizei count, const GLuint * value)
1427 {
1428     Q_D(QOpenGLExtraFunctions);
1429     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1430     d->f.Uniform3uiv(location, count, value);
1431     Q_OPENGL_FUNCTIONS_DEBUG
1432 }
1433 
1434 inline void QOpenGLExtraFunctions::glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
1435 {
1436     Q_D(QOpenGLExtraFunctions);
1437     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1438     d->f.Uniform4ui(location, v0, v1, v2, v3);
1439     Q_OPENGL_FUNCTIONS_DEBUG
1440 }
1441 
1442 inline void QOpenGLExtraFunctions::glUniform4uiv(GLint location, GLsizei count, const GLuint * value)
1443 {
1444     Q_D(QOpenGLExtraFunctions);
1445     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1446     d->f.Uniform4uiv(location, count, value);
1447     Q_OPENGL_FUNCTIONS_DEBUG
1448 }
1449 
1450 inline void QOpenGLExtraFunctions::glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
1451 {
1452     Q_D(QOpenGLExtraFunctions);
1453     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1454     d->f.UniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
1455     Q_OPENGL_FUNCTIONS_DEBUG
1456 }
1457 
1458 inline void QOpenGLExtraFunctions::glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
1459 {
1460     Q_D(QOpenGLExtraFunctions);
1461     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1462     d->f.UniformMatrix2x3fv(location, count, transpose, value);
1463     Q_OPENGL_FUNCTIONS_DEBUG
1464 }
1465 
1466 inline void QOpenGLExtraFunctions::glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
1467 {
1468     Q_D(QOpenGLExtraFunctions);
1469     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1470     d->f.UniformMatrix2x4fv(location, count, transpose, value);
1471     Q_OPENGL_FUNCTIONS_DEBUG
1472 }
1473 
1474 inline void QOpenGLExtraFunctions::glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
1475 {
1476     Q_D(QOpenGLExtraFunctions);
1477     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1478     d->f.UniformMatrix3x2fv(location, count, transpose, value);
1479     Q_OPENGL_FUNCTIONS_DEBUG
1480 }
1481 
1482 inline void QOpenGLExtraFunctions::glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
1483 {
1484     Q_D(QOpenGLExtraFunctions);
1485     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1486     d->f.UniformMatrix3x4fv(location, count, transpose, value);
1487     Q_OPENGL_FUNCTIONS_DEBUG
1488 }
1489 
1490 inline void QOpenGLExtraFunctions::glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
1491 {
1492     Q_D(QOpenGLExtraFunctions);
1493     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1494     d->f.UniformMatrix4x2fv(location, count, transpose, value);
1495     Q_OPENGL_FUNCTIONS_DEBUG
1496 }
1497 
1498 inline void QOpenGLExtraFunctions::glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
1499 {
1500     Q_D(QOpenGLExtraFunctions);
1501     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1502     d->f.UniformMatrix4x3fv(location, count, transpose, value);
1503     Q_OPENGL_FUNCTIONS_DEBUG
1504 }
1505 
1506 inline GLboolean QOpenGLExtraFunctions::glUnmapBuffer(GLenum target)
1507 {
1508     Q_D(QOpenGLExtraFunctions);
1509     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1510     GLboolean result = d->f.UnmapBuffer(target);
1511     Q_OPENGL_FUNCTIONS_DEBUG
1512     return result;
1513 }
1514 
1515 inline void QOpenGLExtraFunctions::glVertexAttribDivisor(GLuint index, GLuint divisor)
1516 {
1517     Q_D(QOpenGLExtraFunctions);
1518     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1519     d->f.VertexAttribDivisor(index, divisor);
1520     Q_OPENGL_FUNCTIONS_DEBUG
1521 }
1522 
1523 inline void QOpenGLExtraFunctions::glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
1524 {
1525     Q_D(QOpenGLExtraFunctions);
1526     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1527     d->f.VertexAttribI4i(index, x, y, z, w);
1528     Q_OPENGL_FUNCTIONS_DEBUG
1529 }
1530 
1531 inline void QOpenGLExtraFunctions::glVertexAttribI4iv(GLuint index, const GLint * v)
1532 {
1533     Q_D(QOpenGLExtraFunctions);
1534     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1535     d->f.VertexAttribI4iv(index, v);
1536     Q_OPENGL_FUNCTIONS_DEBUG
1537 }
1538 
1539 inline void QOpenGLExtraFunctions::glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
1540 {
1541     Q_D(QOpenGLExtraFunctions);
1542     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1543     d->f.VertexAttribI4ui(index, x, y, z, w);
1544     Q_OPENGL_FUNCTIONS_DEBUG
1545 }
1546 
1547 inline void QOpenGLExtraFunctions::glVertexAttribI4uiv(GLuint index, const GLuint * v)
1548 {
1549     Q_D(QOpenGLExtraFunctions);
1550     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1551     d->f.VertexAttribI4uiv(index, v);
1552     Q_OPENGL_FUNCTIONS_DEBUG
1553 }
1554 
1555 inline void QOpenGLExtraFunctions::glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer)
1556 {
1557     Q_D(QOpenGLExtraFunctions);
1558     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1559     d->f.VertexAttribIPointer(index, size, type, stride, pointer);
1560     Q_OPENGL_FUNCTIONS_DEBUG
1561 }
1562 
1563 inline void QOpenGLExtraFunctions::glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
1564 {
1565     Q_D(QOpenGLExtraFunctions);
1566     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1567     d->f.WaitSync(sync, flags, timeout);
1568     Q_OPENGL_FUNCTIONS_DEBUG
1569 }
1570 
1571 inline void QOpenGLExtraFunctions::glActiveShaderProgram(GLuint pipeline, GLuint program)
1572 {
1573     Q_D(QOpenGLExtraFunctions);
1574     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1575     d->f.ActiveShaderProgram(pipeline, program);
1576     Q_OPENGL_FUNCTIONS_DEBUG
1577 }
1578 
1579 inline void QOpenGLExtraFunctions::glBindImageTexture(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format)
1580 {
1581     Q_D(QOpenGLExtraFunctions);
1582     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1583     d->f.BindImageTexture(unit, texture, level, layered, layer, access, format);
1584     Q_OPENGL_FUNCTIONS_DEBUG
1585 }
1586 
1587 inline void QOpenGLExtraFunctions::glBindProgramPipeline(GLuint pipeline)
1588 {
1589     Q_D(QOpenGLExtraFunctions);
1590     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1591     d->f.BindProgramPipeline(pipeline);
1592     Q_OPENGL_FUNCTIONS_DEBUG
1593 }
1594 
1595 inline void QOpenGLExtraFunctions::glBindVertexBuffer(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride)
1596 {
1597     Q_D(QOpenGLExtraFunctions);
1598     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1599     d->f.BindVertexBuffer(bindingindex, buffer, offset, stride);
1600     Q_OPENGL_FUNCTIONS_DEBUG
1601 }
1602 
1603 inline GLuint QOpenGLExtraFunctions::glCreateShaderProgramv(GLenum type, GLsizei count, const GLchar *const* strings)
1604 {
1605     Q_D(QOpenGLExtraFunctions);
1606     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1607     GLuint result = d->f.CreateShaderProgramv(type, count, strings);
1608     Q_OPENGL_FUNCTIONS_DEBUG
1609     return result;
1610 }
1611 
1612 inline void QOpenGLExtraFunctions::glDeleteProgramPipelines(GLsizei n, const GLuint * pipelines)
1613 {
1614     Q_D(QOpenGLExtraFunctions);
1615     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1616     d->f.DeleteProgramPipelines(n, pipelines);
1617     Q_OPENGL_FUNCTIONS_DEBUG
1618 }
1619 
1620 inline void QOpenGLExtraFunctions::glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z)
1621 {
1622     Q_D(QOpenGLExtraFunctions);
1623     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1624     d->f.DispatchCompute(num_groups_x, num_groups_y, num_groups_z);
1625     Q_OPENGL_FUNCTIONS_DEBUG
1626 }
1627 
1628 inline void QOpenGLExtraFunctions::glDispatchComputeIndirect(GLintptr indirect)
1629 {
1630     Q_D(QOpenGLExtraFunctions);
1631     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1632     d->f.DispatchComputeIndirect(indirect);
1633     Q_OPENGL_FUNCTIONS_DEBUG
1634 }
1635 
1636 inline void QOpenGLExtraFunctions::glDrawArraysIndirect(GLenum mode, const void * indirect)
1637 {
1638     Q_D(QOpenGLExtraFunctions);
1639     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1640     d->f.DrawArraysIndirect(mode, indirect);
1641     Q_OPENGL_FUNCTIONS_DEBUG
1642 }
1643 
1644 inline void QOpenGLExtraFunctions::glDrawElementsIndirect(GLenum mode, GLenum type, const void * indirect)
1645 {
1646     Q_D(QOpenGLExtraFunctions);
1647     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1648     d->f.DrawElementsIndirect(mode, type, indirect);
1649     Q_OPENGL_FUNCTIONS_DEBUG
1650 }
1651 
1652 inline void QOpenGLExtraFunctions::glFramebufferParameteri(GLenum target, GLenum pname, GLint param)
1653 {
1654     Q_D(QOpenGLExtraFunctions);
1655     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1656     d->f.FramebufferParameteri(target, pname, param);
1657     Q_OPENGL_FUNCTIONS_DEBUG
1658 }
1659 
1660 inline void QOpenGLExtraFunctions::glGenProgramPipelines(GLsizei n, GLuint* pipelines)
1661 {
1662     Q_D(QOpenGLExtraFunctions);
1663     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1664     d->f.GenProgramPipelines(n, pipelines);
1665     Q_OPENGL_FUNCTIONS_DEBUG
1666 }
1667 
1668 inline void QOpenGLExtraFunctions::glGetBooleani_v(GLenum target, GLuint index, GLboolean* data)
1669 {
1670     Q_D(QOpenGLExtraFunctions);
1671     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1672     d->f.GetBooleani_v(target, index, data);
1673     Q_OPENGL_FUNCTIONS_DEBUG
1674 }
1675 
1676 inline void QOpenGLExtraFunctions::glGetFramebufferParameteriv(GLenum target, GLenum pname, GLint* params)
1677 {
1678     Q_D(QOpenGLExtraFunctions);
1679     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1680     d->f.GetFramebufferParameteriv(target, pname, params);
1681     Q_OPENGL_FUNCTIONS_DEBUG
1682 }
1683 
1684 inline void QOpenGLExtraFunctions::glGetMultisamplefv(GLenum pname, GLuint index, GLfloat* val)
1685 {
1686     Q_D(QOpenGLExtraFunctions);
1687     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1688     d->f.GetMultisamplefv(pname, index, val);
1689     Q_OPENGL_FUNCTIONS_DEBUG
1690 }
1691 
1692 inline void QOpenGLExtraFunctions::glGetProgramInterfaceiv(GLuint program, GLenum programInterface, GLenum pname, GLint* params)
1693 {
1694     Q_D(QOpenGLExtraFunctions);
1695     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1696     d->f.GetProgramInterfaceiv(program, programInterface, pname, params);
1697     Q_OPENGL_FUNCTIONS_DEBUG
1698 }
1699 
1700 inline void QOpenGLExtraFunctions::glGetProgramPipelineInfoLog(GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog)
1701 {
1702     Q_D(QOpenGLExtraFunctions);
1703     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1704     d->f.GetProgramPipelineInfoLog(pipeline, bufSize, length, infoLog);
1705     Q_OPENGL_FUNCTIONS_DEBUG
1706 }
1707 
1708 inline void QOpenGLExtraFunctions::glGetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint* params)
1709 {
1710     Q_D(QOpenGLExtraFunctions);
1711     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1712     d->f.GetProgramPipelineiv(pipeline, pname, params);
1713     Q_OPENGL_FUNCTIONS_DEBUG
1714 }
1715 
1716 inline GLuint QOpenGLExtraFunctions::glGetProgramResourceIndex(GLuint program, GLenum programInterface, const GLchar * name)
1717 {
1718     Q_D(QOpenGLExtraFunctions);
1719     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1720     GLuint result = d->f.GetProgramResourceIndex(program, programInterface, name);
1721     Q_OPENGL_FUNCTIONS_DEBUG
1722     return result;
1723 }
1724 
1725 inline GLint QOpenGLExtraFunctions::glGetProgramResourceLocation(GLuint program, GLenum programInterface, const GLchar * name)
1726 {
1727     Q_D(QOpenGLExtraFunctions);
1728     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1729     GLint result = d->f.GetProgramResourceLocation(program, programInterface, name);
1730     Q_OPENGL_FUNCTIONS_DEBUG
1731     return result;
1732 }
1733 
1734 inline void QOpenGLExtraFunctions::glGetProgramResourceName(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name)
1735 {
1736     Q_D(QOpenGLExtraFunctions);
1737     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1738     d->f.GetProgramResourceName(program, programInterface, index, bufSize, length, name);
1739     Q_OPENGL_FUNCTIONS_DEBUG
1740 }
1741 
1742 inline void QOpenGLExtraFunctions::glGetProgramResourceiv(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei* length, GLint* params)
1743 {
1744     Q_D(QOpenGLExtraFunctions);
1745     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1746     d->f.GetProgramResourceiv(program, programInterface, index, propCount, props, bufSize, length, params);
1747     Q_OPENGL_FUNCTIONS_DEBUG
1748 }
1749 
1750 inline void QOpenGLExtraFunctions::glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat* params)
1751 {
1752     Q_D(QOpenGLExtraFunctions);
1753     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1754     d->f.GetTexLevelParameterfv(target, level, pname, params);
1755     Q_OPENGL_FUNCTIONS_DEBUG
1756 }
1757 
1758 inline void QOpenGLExtraFunctions::glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint* params)
1759 {
1760     Q_D(QOpenGLExtraFunctions);
1761     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1762     d->f.GetTexLevelParameteriv(target, level, pname, params);
1763     Q_OPENGL_FUNCTIONS_DEBUG
1764 }
1765 
1766 inline GLboolean QOpenGLExtraFunctions::glIsProgramPipeline(GLuint pipeline)
1767 {
1768     Q_D(QOpenGLExtraFunctions);
1769     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1770     GLboolean result = d->f.IsProgramPipeline(pipeline);
1771     Q_OPENGL_FUNCTIONS_DEBUG
1772     return result;
1773 }
1774 
1775 inline void QOpenGLExtraFunctions::glMemoryBarrier(GLbitfield barriers)
1776 {
1777     Q_D(QOpenGLExtraFunctions);
1778     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1779     d->f.MemoryBarrier(barriers);
1780     Q_OPENGL_FUNCTIONS_DEBUG
1781 }
1782 
1783 inline void QOpenGLExtraFunctions::glMemoryBarrierByRegion(GLbitfield barriers)
1784 {
1785     Q_D(QOpenGLExtraFunctions);
1786     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1787     d->f.MemoryBarrierByRegion(barriers);
1788     Q_OPENGL_FUNCTIONS_DEBUG
1789 }
1790 
1791 inline void QOpenGLExtraFunctions::glProgramUniform1f(GLuint program, GLint location, GLfloat v0)
1792 {
1793     Q_D(QOpenGLExtraFunctions);
1794     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1795     d->f.ProgramUniform1f(program, location, v0);
1796     Q_OPENGL_FUNCTIONS_DEBUG
1797 }
1798 
1799 inline void QOpenGLExtraFunctions::glProgramUniform1fv(GLuint program, GLint location, GLsizei count, const GLfloat * value)
1800 {
1801     Q_D(QOpenGLExtraFunctions);
1802     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1803     d->f.ProgramUniform1fv(program, location, count, value);
1804     Q_OPENGL_FUNCTIONS_DEBUG
1805 }
1806 
1807 inline void QOpenGLExtraFunctions::glProgramUniform1i(GLuint program, GLint location, GLint v0)
1808 {
1809     Q_D(QOpenGLExtraFunctions);
1810     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1811     d->f.ProgramUniform1i(program, location, v0);
1812     Q_OPENGL_FUNCTIONS_DEBUG
1813 }
1814 
1815 inline void QOpenGLExtraFunctions::glProgramUniform1iv(GLuint program, GLint location, GLsizei count, const GLint * value)
1816 {
1817     Q_D(QOpenGLExtraFunctions);
1818     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1819     d->f.ProgramUniform1iv(program, location, count, value);
1820     Q_OPENGL_FUNCTIONS_DEBUG
1821 }
1822 
1823 inline void QOpenGLExtraFunctions::glProgramUniform1ui(GLuint program, GLint location, GLuint v0)
1824 {
1825     Q_D(QOpenGLExtraFunctions);
1826     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1827     d->f.ProgramUniform1ui(program, location, v0);
1828     Q_OPENGL_FUNCTIONS_DEBUG
1829 }
1830 
1831 inline void QOpenGLExtraFunctions::glProgramUniform1uiv(GLuint program, GLint location, GLsizei count, const GLuint * value)
1832 {
1833     Q_D(QOpenGLExtraFunctions);
1834     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1835     d->f.ProgramUniform1uiv(program, location, count, value);
1836     Q_OPENGL_FUNCTIONS_DEBUG
1837 }
1838 
1839 inline void QOpenGLExtraFunctions::glProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1)
1840 {
1841     Q_D(QOpenGLExtraFunctions);
1842     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1843     d->f.ProgramUniform2f(program, location, v0, v1);
1844     Q_OPENGL_FUNCTIONS_DEBUG
1845 }
1846 
1847 inline void QOpenGLExtraFunctions::glProgramUniform2fv(GLuint program, GLint location, GLsizei count, const GLfloat * value)
1848 {
1849     Q_D(QOpenGLExtraFunctions);
1850     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1851     d->f.ProgramUniform2fv(program, location, count, value);
1852     Q_OPENGL_FUNCTIONS_DEBUG
1853 }
1854 
1855 inline void QOpenGLExtraFunctions::glProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1)
1856 {
1857     Q_D(QOpenGLExtraFunctions);
1858     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1859     d->f.ProgramUniform2i(program, location, v0, v1);
1860     Q_OPENGL_FUNCTIONS_DEBUG
1861 }
1862 
1863 inline void QOpenGLExtraFunctions::glProgramUniform2iv(GLuint program, GLint location, GLsizei count, const GLint * value)
1864 {
1865     Q_D(QOpenGLExtraFunctions);
1866     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1867     d->f.ProgramUniform2iv(program, location, count, value);
1868     Q_OPENGL_FUNCTIONS_DEBUG
1869 }
1870 
1871 inline void QOpenGLExtraFunctions::glProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1)
1872 {
1873     Q_D(QOpenGLExtraFunctions);
1874     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1875     d->f.ProgramUniform2ui(program, location, v0, v1);
1876     Q_OPENGL_FUNCTIONS_DEBUG
1877 }
1878 
1879 inline void QOpenGLExtraFunctions::glProgramUniform2uiv(GLuint program, GLint location, GLsizei count, const GLuint * value)
1880 {
1881     Q_D(QOpenGLExtraFunctions);
1882     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1883     d->f.ProgramUniform2uiv(program, location, count, value);
1884     Q_OPENGL_FUNCTIONS_DEBUG
1885 }
1886 
1887 inline void QOpenGLExtraFunctions::glProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
1888 {
1889     Q_D(QOpenGLExtraFunctions);
1890     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1891     d->f.ProgramUniform3f(program, location, v0, v1, v2);
1892     Q_OPENGL_FUNCTIONS_DEBUG
1893 }
1894 
1895 inline void QOpenGLExtraFunctions::glProgramUniform3fv(GLuint program, GLint location, GLsizei count, const GLfloat * value)
1896 {
1897     Q_D(QOpenGLExtraFunctions);
1898     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1899     d->f.ProgramUniform3fv(program, location, count, value);
1900     Q_OPENGL_FUNCTIONS_DEBUG
1901 }
1902 
1903 inline void QOpenGLExtraFunctions::glProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2)
1904 {
1905     Q_D(QOpenGLExtraFunctions);
1906     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1907     d->f.ProgramUniform3i(program, location, v0, v1, v2);
1908     Q_OPENGL_FUNCTIONS_DEBUG
1909 }
1910 
1911 inline void QOpenGLExtraFunctions::glProgramUniform3iv(GLuint program, GLint location, GLsizei count, const GLint * value)
1912 {
1913     Q_D(QOpenGLExtraFunctions);
1914     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1915     d->f.ProgramUniform3iv(program, location, count, value);
1916     Q_OPENGL_FUNCTIONS_DEBUG
1917 }
1918 
1919 inline void QOpenGLExtraFunctions::glProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2)
1920 {
1921     Q_D(QOpenGLExtraFunctions);
1922     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1923     d->f.ProgramUniform3ui(program, location, v0, v1, v2);
1924     Q_OPENGL_FUNCTIONS_DEBUG
1925 }
1926 
1927 inline void QOpenGLExtraFunctions::glProgramUniform3uiv(GLuint program, GLint location, GLsizei count, const GLuint * value)
1928 {
1929     Q_D(QOpenGLExtraFunctions);
1930     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1931     d->f.ProgramUniform3uiv(program, location, count, value);
1932     Q_OPENGL_FUNCTIONS_DEBUG
1933 }
1934 
1935 inline void QOpenGLExtraFunctions::glProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
1936 {
1937     Q_D(QOpenGLExtraFunctions);
1938     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1939     d->f.ProgramUniform4f(program, location, v0, v1, v2, v3);
1940     Q_OPENGL_FUNCTIONS_DEBUG
1941 }
1942 
1943 inline void QOpenGLExtraFunctions::glProgramUniform4fv(GLuint program, GLint location, GLsizei count, const GLfloat * value)
1944 {
1945     Q_D(QOpenGLExtraFunctions);
1946     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1947     d->f.ProgramUniform4fv(program, location, count, value);
1948     Q_OPENGL_FUNCTIONS_DEBUG
1949 }
1950 
1951 inline void QOpenGLExtraFunctions::glProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
1952 {
1953     Q_D(QOpenGLExtraFunctions);
1954     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1955     d->f.ProgramUniform4i(program, location, v0, v1, v2, v3);
1956     Q_OPENGL_FUNCTIONS_DEBUG
1957 }
1958 
1959 inline void QOpenGLExtraFunctions::glProgramUniform4iv(GLuint program, GLint location, GLsizei count, const GLint * value)
1960 {
1961     Q_D(QOpenGLExtraFunctions);
1962     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1963     d->f.ProgramUniform4iv(program, location, count, value);
1964     Q_OPENGL_FUNCTIONS_DEBUG
1965 }
1966 
1967 inline void QOpenGLExtraFunctions::glProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
1968 {
1969     Q_D(QOpenGLExtraFunctions);
1970     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1971     d->f.ProgramUniform4ui(program, location, v0, v1, v2, v3);
1972     Q_OPENGL_FUNCTIONS_DEBUG
1973 }
1974 
1975 inline void QOpenGLExtraFunctions::glProgramUniform4uiv(GLuint program, GLint location, GLsizei count, const GLuint * value)
1976 {
1977     Q_D(QOpenGLExtraFunctions);
1978     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1979     d->f.ProgramUniform4uiv(program, location, count, value);
1980     Q_OPENGL_FUNCTIONS_DEBUG
1981 }
1982 
1983 inline void QOpenGLExtraFunctions::glProgramUniformMatrix2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
1984 {
1985     Q_D(QOpenGLExtraFunctions);
1986     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1987     d->f.ProgramUniformMatrix2fv(program, location, count, transpose, value);
1988     Q_OPENGL_FUNCTIONS_DEBUG
1989 }
1990 
1991 inline void QOpenGLExtraFunctions::glProgramUniformMatrix2x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
1992 {
1993     Q_D(QOpenGLExtraFunctions);
1994     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
1995     d->f.ProgramUniformMatrix2x3fv(program, location, count, transpose, value);
1996     Q_OPENGL_FUNCTIONS_DEBUG
1997 }
1998 
1999 inline void QOpenGLExtraFunctions::glProgramUniformMatrix2x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
2000 {
2001     Q_D(QOpenGLExtraFunctions);
2002     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2003     d->f.ProgramUniformMatrix2x4fv(program, location, count, transpose, value);
2004     Q_OPENGL_FUNCTIONS_DEBUG
2005 }
2006 
2007 inline void QOpenGLExtraFunctions::glProgramUniformMatrix3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
2008 {
2009     Q_D(QOpenGLExtraFunctions);
2010     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2011     d->f.ProgramUniformMatrix3fv(program, location, count, transpose, value);
2012     Q_OPENGL_FUNCTIONS_DEBUG
2013 }
2014 
2015 inline void QOpenGLExtraFunctions::glProgramUniformMatrix3x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
2016 {
2017     Q_D(QOpenGLExtraFunctions);
2018     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2019     d->f.ProgramUniformMatrix3x2fv(program, location, count, transpose, value);
2020     Q_OPENGL_FUNCTIONS_DEBUG
2021 }
2022 
2023 inline void QOpenGLExtraFunctions::glProgramUniformMatrix3x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
2024 {
2025     Q_D(QOpenGLExtraFunctions);
2026     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2027     d->f.ProgramUniformMatrix3x4fv(program, location, count, transpose, value);
2028     Q_OPENGL_FUNCTIONS_DEBUG
2029 }
2030 
2031 inline void QOpenGLExtraFunctions::glProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
2032 {
2033     Q_D(QOpenGLExtraFunctions);
2034     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2035     d->f.ProgramUniformMatrix4fv(program, location, count, transpose, value);
2036     Q_OPENGL_FUNCTIONS_DEBUG
2037 }
2038 
2039 inline void QOpenGLExtraFunctions::glProgramUniformMatrix4x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
2040 {
2041     Q_D(QOpenGLExtraFunctions);
2042     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2043     d->f.ProgramUniformMatrix4x2fv(program, location, count, transpose, value);
2044     Q_OPENGL_FUNCTIONS_DEBUG
2045 }
2046 
2047 inline void QOpenGLExtraFunctions::glProgramUniformMatrix4x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
2048 {
2049     Q_D(QOpenGLExtraFunctions);
2050     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2051     d->f.ProgramUniformMatrix4x3fv(program, location, count, transpose, value);
2052     Q_OPENGL_FUNCTIONS_DEBUG
2053 }
2054 
2055 inline void QOpenGLExtraFunctions::glSampleMaski(GLuint maskNumber, GLbitfield mask)
2056 {
2057     Q_D(QOpenGLExtraFunctions);
2058     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2059     d->f.SampleMaski(maskNumber, mask);
2060     Q_OPENGL_FUNCTIONS_DEBUG
2061 }
2062 
2063 inline void QOpenGLExtraFunctions::glTexStorage2DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)
2064 {
2065     Q_D(QOpenGLExtraFunctions);
2066     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2067     d->f.TexStorage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations);
2068     Q_OPENGL_FUNCTIONS_DEBUG
2069 }
2070 
2071 inline void QOpenGLExtraFunctions::glUseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program)
2072 {
2073     Q_D(QOpenGLExtraFunctions);
2074     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2075     d->f.UseProgramStages(pipeline, stages, program);
2076     Q_OPENGL_FUNCTIONS_DEBUG
2077 }
2078 
2079 inline void QOpenGLExtraFunctions::glValidateProgramPipeline(GLuint pipeline)
2080 {
2081     Q_D(QOpenGLExtraFunctions);
2082     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2083     d->f.ValidateProgramPipeline(pipeline);
2084     Q_OPENGL_FUNCTIONS_DEBUG
2085 }
2086 
2087 inline void QOpenGLExtraFunctions::glVertexAttribBinding(GLuint attribindex, GLuint bindingindex)
2088 {
2089     Q_D(QOpenGLExtraFunctions);
2090     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2091     d->f.VertexAttribBinding(attribindex, bindingindex);
2092     Q_OPENGL_FUNCTIONS_DEBUG
2093 }
2094 
2095 inline void QOpenGLExtraFunctions::glVertexAttribFormat(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset)
2096 {
2097     Q_D(QOpenGLExtraFunctions);
2098     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2099     d->f.VertexAttribFormat(attribindex, size, type, normalized, relativeoffset);
2100     Q_OPENGL_FUNCTIONS_DEBUG
2101 }
2102 
2103 inline void QOpenGLExtraFunctions::glVertexAttribIFormat(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset)
2104 {
2105     Q_D(QOpenGLExtraFunctions);
2106     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2107     d->f.VertexAttribIFormat(attribindex, size, type, relativeoffset);
2108     Q_OPENGL_FUNCTIONS_DEBUG
2109 }
2110 
2111 inline void QOpenGLExtraFunctions::glVertexBindingDivisor(GLuint bindingindex, GLuint divisor)
2112 {
2113     Q_D(QOpenGLExtraFunctions);
2114     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2115     d->f.VertexBindingDivisor(bindingindex, divisor);
2116     Q_OPENGL_FUNCTIONS_DEBUG
2117 }
2118 
2119 // GLES 3.2
2120 
2121 inline void QOpenGLExtraFunctions::glBlendBarrier()
2122 {
2123     Q_D(QOpenGLExtraFunctions);
2124     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2125     d->f.BlendBarrier();
2126     Q_OPENGL_FUNCTIONS_DEBUG
2127 }
2128 
2129 inline void QOpenGLExtraFunctions::glBlendEquationSeparatei(GLuint buf, GLenum modeRGB, GLenum modeAlpha)
2130 {
2131     Q_D(QOpenGLExtraFunctions);
2132     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2133     d->f.BlendEquationSeparatei(buf, modeRGB, modeAlpha);
2134     Q_OPENGL_FUNCTIONS_DEBUG
2135 }
2136 
2137 inline void QOpenGLExtraFunctions::glBlendEquationi(GLuint buf, GLenum mode)
2138 {
2139     Q_D(QOpenGLExtraFunctions);
2140     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2141     d->f.BlendEquationi(buf, mode);
2142     Q_OPENGL_FUNCTIONS_DEBUG
2143 }
2144 
2145 inline void QOpenGLExtraFunctions::glBlendFuncSeparatei(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
2146 {
2147     Q_D(QOpenGLExtraFunctions);
2148     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2149     d->f.BlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);
2150     Q_OPENGL_FUNCTIONS_DEBUG
2151 }
2152 
2153 inline void QOpenGLExtraFunctions::glBlendFunci(GLuint buf, GLenum src, GLenum dst)
2154 {
2155     Q_D(QOpenGLExtraFunctions);
2156     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2157     d->f.BlendFunci(buf, src, dst);
2158     Q_OPENGL_FUNCTIONS_DEBUG
2159 }
2160 
2161 inline void QOpenGLExtraFunctions::glColorMaski(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
2162 {
2163     Q_D(QOpenGLExtraFunctions);
2164     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2165     d->f.ColorMaski(index, r, g, b, a);
2166     Q_OPENGL_FUNCTIONS_DEBUG
2167 }
2168 
2169 inline void QOpenGLExtraFunctions::glCopyImageSubData(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth)
2170 {
2171     Q_D(QOpenGLExtraFunctions);
2172     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2173     d->f.CopyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth);
2174     Q_OPENGL_FUNCTIONS_DEBUG
2175 }
2176 
2177 inline void QOpenGLExtraFunctions::glDebugMessageCallback(GLDEBUGPROC callback, const void * userParam)
2178 {
2179     Q_D(QOpenGLExtraFunctions);
2180     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2181     d->f.DebugMessageCallback(callback, userParam);
2182     Q_OPENGL_FUNCTIONS_DEBUG
2183 }
2184 
2185 inline void QOpenGLExtraFunctions::glDebugMessageControl(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled)
2186 {
2187     Q_D(QOpenGLExtraFunctions);
2188     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2189     d->f.DebugMessageControl(source, type, severity, count, ids, enabled);
2190     Q_OPENGL_FUNCTIONS_DEBUG
2191 }
2192 
2193 inline void QOpenGLExtraFunctions::glDebugMessageInsert(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf)
2194 {
2195     Q_D(QOpenGLExtraFunctions);
2196     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2197     d->f.DebugMessageInsert(source, type, id, severity, length, buf);
2198     Q_OPENGL_FUNCTIONS_DEBUG
2199 }
2200 
2201 inline void QOpenGLExtraFunctions::glDisablei(GLenum target, GLuint index)
2202 {
2203     Q_D(QOpenGLExtraFunctions);
2204     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2205     d->f.Disablei(target, index);
2206     Q_OPENGL_FUNCTIONS_DEBUG
2207 }
2208 
2209 inline void QOpenGLExtraFunctions::glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex)
2210 {
2211     Q_D(QOpenGLExtraFunctions);
2212     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2213     d->f.DrawElementsBaseVertex(mode, count, type, indices, basevertex);
2214     Q_OPENGL_FUNCTIONS_DEBUG
2215 }
2216 
2217 inline void QOpenGLExtraFunctions::glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex)
2218 {
2219     Q_D(QOpenGLExtraFunctions);
2220     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2221     d->f.DrawElementsInstancedBaseVertex(mode, count, type, indices, instancecount, basevertex);
2222     Q_OPENGL_FUNCTIONS_DEBUG
2223 }
2224 
2225 inline void QOpenGLExtraFunctions::glDrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex)
2226 {
2227     Q_D(QOpenGLExtraFunctions);
2228     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2229     d->f.DrawRangeElementsBaseVertex(mode, start, end, count, type, indices, basevertex);
2230     Q_OPENGL_FUNCTIONS_DEBUG
2231 }
2232 
2233 inline void QOpenGLExtraFunctions::glEnablei(GLenum target, GLuint index)
2234 {
2235     Q_D(QOpenGLExtraFunctions);
2236     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2237     d->f.Enablei(target, index);
2238     Q_OPENGL_FUNCTIONS_DEBUG
2239 }
2240 
2241 inline void QOpenGLExtraFunctions::glFramebufferTexture(GLenum target, GLenum attachment, GLuint texture, GLint level)
2242 {
2243     Q_D(QOpenGLExtraFunctions);
2244     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2245     d->f.FramebufferTexture(target, attachment, texture, level);
2246     Q_OPENGL_FUNCTIONS_DEBUG
2247 }
2248 
2249 inline GLuint QOpenGLExtraFunctions::glGetDebugMessageLog(GLuint count, GLsizei bufSize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog)
2250 {
2251     Q_D(QOpenGLExtraFunctions);
2252     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2253     GLuint result = d->f.GetDebugMessageLog(count, bufSize, sources, types, ids, severities, lengths, messageLog);
2254     Q_OPENGL_FUNCTIONS_DEBUG
2255     return result;
2256 }
2257 
2258 inline GLenum QOpenGLExtraFunctions::glGetGraphicsResetStatus()
2259 {
2260     Q_D(QOpenGLExtraFunctions);
2261     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2262     GLenum result = d->f.GetGraphicsResetStatus();
2263     Q_OPENGL_FUNCTIONS_DEBUG
2264     return result;
2265 }
2266 
2267 inline void QOpenGLExtraFunctions::glGetObjectLabel(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei* length, GLchar* label)
2268 {
2269     Q_D(QOpenGLExtraFunctions);
2270     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2271     d->f.GetObjectLabel(identifier, name, bufSize, length, label);
2272     Q_OPENGL_FUNCTIONS_DEBUG
2273 }
2274 
2275 inline void QOpenGLExtraFunctions::glGetObjectPtrLabel(const void * ptr, GLsizei bufSize, GLsizei* length, GLchar* label)
2276 {
2277     Q_D(QOpenGLExtraFunctions);
2278     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2279     d->f.GetObjectPtrLabel(ptr, bufSize, length, label);
2280     Q_OPENGL_FUNCTIONS_DEBUG
2281 }
2282 
2283 inline void QOpenGLExtraFunctions::glGetPointerv(GLenum pname, void ** params)
2284 {
2285     Q_D(QOpenGLExtraFunctions);
2286     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2287     d->f.GetPointerv(pname, params);
2288     Q_OPENGL_FUNCTIONS_DEBUG
2289 }
2290 
2291 inline void QOpenGLExtraFunctions::glGetSamplerParameterIiv(GLuint sampler, GLenum pname, GLint* params)
2292 {
2293     Q_D(QOpenGLExtraFunctions);
2294     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2295     d->f.GetSamplerParameterIiv(sampler, pname, params);
2296     Q_OPENGL_FUNCTIONS_DEBUG
2297 }
2298 
2299 inline void QOpenGLExtraFunctions::glGetSamplerParameterIuiv(GLuint sampler, GLenum pname, GLuint* params)
2300 {
2301     Q_D(QOpenGLExtraFunctions);
2302     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2303     d->f.GetSamplerParameterIuiv(sampler, pname, params);
2304     Q_OPENGL_FUNCTIONS_DEBUG
2305 }
2306 
2307 inline void QOpenGLExtraFunctions::glGetTexParameterIiv(GLenum target, GLenum pname, GLint* params)
2308 {
2309     Q_D(QOpenGLExtraFunctions);
2310     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2311     d->f.GetTexParameterIiv(target, pname, params);
2312     Q_OPENGL_FUNCTIONS_DEBUG
2313 }
2314 
2315 inline void QOpenGLExtraFunctions::glGetTexParameterIuiv(GLenum target, GLenum pname, GLuint* params)
2316 {
2317     Q_D(QOpenGLExtraFunctions);
2318     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2319     d->f.GetTexParameterIuiv(target, pname, params);
2320     Q_OPENGL_FUNCTIONS_DEBUG
2321 }
2322 
2323 inline void QOpenGLExtraFunctions::glGetnUniformfv(GLuint program, GLint location, GLsizei bufSize, GLfloat* params)
2324 {
2325     Q_D(QOpenGLExtraFunctions);
2326     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2327     d->f.GetnUniformfv(program, location, bufSize, params);
2328     Q_OPENGL_FUNCTIONS_DEBUG
2329 }
2330 
2331 inline void QOpenGLExtraFunctions::glGetnUniformiv(GLuint program, GLint location, GLsizei bufSize, GLint* params)
2332 {
2333     Q_D(QOpenGLExtraFunctions);
2334     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2335     d->f.GetnUniformiv(program, location, bufSize, params);
2336     Q_OPENGL_FUNCTIONS_DEBUG
2337 }
2338 
2339 inline void QOpenGLExtraFunctions::glGetnUniformuiv(GLuint program, GLint location, GLsizei bufSize, GLuint* params)
2340 {
2341     Q_D(QOpenGLExtraFunctions);
2342     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2343     d->f.GetnUniformuiv(program, location, bufSize, params);
2344     Q_OPENGL_FUNCTIONS_DEBUG
2345 }
2346 
2347 inline GLboolean QOpenGLExtraFunctions::glIsEnabledi(GLenum target, GLuint index)
2348 {
2349     Q_D(QOpenGLExtraFunctions);
2350     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2351     GLboolean result = d->f.IsEnabledi(target, index);
2352     Q_OPENGL_FUNCTIONS_DEBUG
2353     return result;
2354 }
2355 
2356 inline void QOpenGLExtraFunctions::glMinSampleShading(GLfloat value)
2357 {
2358     Q_D(QOpenGLExtraFunctions);
2359     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2360     d->f.MinSampleShading(value);
2361     Q_OPENGL_FUNCTIONS_DEBUG
2362 }
2363 
2364 inline void QOpenGLExtraFunctions::glObjectLabel(GLenum identifier, GLuint name, GLsizei length, const GLchar * label)
2365 {
2366     Q_D(QOpenGLExtraFunctions);
2367     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2368     d->f.ObjectLabel(identifier, name, length, label);
2369     Q_OPENGL_FUNCTIONS_DEBUG
2370 }
2371 
2372 inline void QOpenGLExtraFunctions::glObjectPtrLabel(const void * ptr, GLsizei length, const GLchar * label)
2373 {
2374     Q_D(QOpenGLExtraFunctions);
2375     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2376     d->f.ObjectPtrLabel(ptr, length, label);
2377     Q_OPENGL_FUNCTIONS_DEBUG
2378 }
2379 
2380 inline void QOpenGLExtraFunctions::glPatchParameteri(GLenum pname, GLint value)
2381 {
2382     Q_D(QOpenGLExtraFunctions);
2383     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2384     d->f.PatchParameteri(pname, value);
2385     Q_OPENGL_FUNCTIONS_DEBUG
2386 }
2387 
2388 inline void QOpenGLExtraFunctions::glPopDebugGroup()
2389 {
2390     Q_D(QOpenGLExtraFunctions);
2391     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2392     d->f.PopDebugGroup();
2393     Q_OPENGL_FUNCTIONS_DEBUG
2394 }
2395 
2396 inline void QOpenGLExtraFunctions::glPrimitiveBoundingBox(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW)
2397 {
2398     Q_D(QOpenGLExtraFunctions);
2399     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2400     d->f.PrimitiveBoundingBox(minX, minY, minZ, minW, maxX, maxY, maxZ, maxW);
2401     Q_OPENGL_FUNCTIONS_DEBUG
2402 }
2403 
2404 inline void QOpenGLExtraFunctions::glPushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar * message)
2405 {
2406     Q_D(QOpenGLExtraFunctions);
2407     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2408     d->f.PushDebugGroup(source, id, length, message);
2409     Q_OPENGL_FUNCTIONS_DEBUG
2410 }
2411 
2412 inline void QOpenGLExtraFunctions::glReadnPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data)
2413 {
2414     Q_D(QOpenGLExtraFunctions);
2415     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2416     d->f.ReadnPixels(x, y, width, height, format, type, bufSize, data);
2417     Q_OPENGL_FUNCTIONS_DEBUG
2418 }
2419 
2420 inline void QOpenGLExtraFunctions::glSamplerParameterIiv(GLuint sampler, GLenum pname, const GLint * param)
2421 {
2422     Q_D(QOpenGLExtraFunctions);
2423     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2424     d->f.SamplerParameterIiv(sampler, pname, param);
2425     Q_OPENGL_FUNCTIONS_DEBUG
2426 }
2427 
2428 inline void QOpenGLExtraFunctions::glSamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint * param)
2429 {
2430     Q_D(QOpenGLExtraFunctions);
2431     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2432     d->f.SamplerParameterIuiv(sampler, pname, param);
2433     Q_OPENGL_FUNCTIONS_DEBUG
2434 }
2435 
2436 inline void QOpenGLExtraFunctions::glTexBuffer(GLenum target, GLenum internalformat, GLuint buffer)
2437 {
2438     Q_D(QOpenGLExtraFunctions);
2439     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2440     d->f.TexBuffer(target, internalformat, buffer);
2441     Q_OPENGL_FUNCTIONS_DEBUG
2442 }
2443 
2444 inline void QOpenGLExtraFunctions::glTexBufferRange(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size)
2445 {
2446     Q_D(QOpenGLExtraFunctions);
2447     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2448     d->f.TexBufferRange(target, internalformat, buffer, offset, size);
2449     Q_OPENGL_FUNCTIONS_DEBUG
2450 }
2451 
2452 inline void QOpenGLExtraFunctions::glTexParameterIiv(GLenum target, GLenum pname, const GLint * params)
2453 {
2454     Q_D(QOpenGLExtraFunctions);
2455     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2456     d->f.TexParameterIiv(target, pname, params);
2457     Q_OPENGL_FUNCTIONS_DEBUG
2458 }
2459 
2460 inline void QOpenGLExtraFunctions::glTexParameterIuiv(GLenum target, GLenum pname, const GLuint * params)
2461 {
2462     Q_D(QOpenGLExtraFunctions);
2463     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2464     d->f.TexParameterIuiv(target, pname, params);
2465     Q_OPENGL_FUNCTIONS_DEBUG
2466 }
2467 
2468 inline void QOpenGLExtraFunctions::glTexStorage3DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations)
2469 {
2470     Q_D(QOpenGLExtraFunctions);
2471     Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
2472     d->f.TexStorage3DMultisample(target, samples, internalformat, width, height, depth, fixedsamplelocations);
2473     Q_OPENGL_FUNCTIONS_DEBUG
2474 }
2475 
2476 QT_END_NAMESPACE
2477 
2478 #undef QT_OPENGL_DECLARE_FUNCTIONS
2479 #undef QT_OPENGL_COUNT_FUNCTIONS
2480 #undef QT_OPENGL_DECLARE
2481 
2482 #ifdef Q_OS_WIN
2483 #pragma pop_macro("MemoryBarrier")
2484 #endif
2485 
2486 #endif // QT_NO_OPENGL
2487 
2488 #endif