1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QOPENGLEXTRAFUNCTIONS_H
5#define QOPENGLEXTRAFUNCTIONS_H
6
7#include <QtGui/qtguiglobal.h>
8
9#ifndef QT_NO_OPENGL
10
11#include <QtGui/qopenglfunctions.h>
12
13// MemoryBarrier is a macro on some architectures on Windows
14#ifdef Q_OS_WIN
15#pragma push_macro("MemoryBarrier")
16#undef MemoryBarrier
17#endif
18
19// GLES build without having included gl32.h -> GLDEBUGPROC is still need for the protos, define it here
20#if QT_CONFIG(opengles2) && !QT_CONFIG(opengles32)
21typedef void (QOPENGLF_APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
22#endif
23
24QT_BEGIN_NAMESPACE
25
26class QOpenGLExtraFunctionsPrivate;
27
28#undef glReadBuffer
29#undef glDrawRangeElements
30#undef glTexImage3D
31#undef glTexSubImage3D
32#undef glCopyTexSubImage3D
33#undef glCompressedTexImage3D
34#undef glCompressedTexSubImage3D
35#undef glGenQueries
36#undef glDeleteQueries
37#undef glIsQuery
38#undef glBeginQuery
39#undef glEndQuery
40#undef glGetQueryiv
41#undef glGetQueryObjectuiv
42#undef glUnmapBuffer
43#undef glGetBufferPointerv
44#undef glDrawBuffers
45#undef glUniformMatrix2x3fv
46#undef glUniformMatrix3x2fv
47#undef glUniformMatrix2x4fv
48#undef glUniformMatrix4x2fv
49#undef glUniformMatrix3x4fv
50#undef glUniformMatrix4x3fv
51#undef glBlitFramebuffer
52#undef glRenderbufferStorageMultisample
53#undef glFramebufferTextureLayer
54#undef glMapBufferRange
55#undef glFlushMappedBufferRange
56#undef glBindVertexArray
57#undef glDeleteVertexArrays
58#undef glGenVertexArrays
59#undef glIsVertexArray
60#undef glGetIntegeri_v
61#undef glBeginTransformFeedback
62#undef glEndTransformFeedback
63#undef glBindBufferRange
64#undef glBindBufferBase
65#undef glTransformFeedbackVaryings
66#undef glGetTransformFeedbackVarying
67#undef glVertexAttribIPointer
68#undef glGetVertexAttribIiv
69#undef glGetVertexAttribIuiv
70#undef glVertexAttribI4i
71#undef glVertexAttribI4ui
72#undef glVertexAttribI4iv
73#undef glVertexAttribI4uiv
74#undef glGetUniformuiv
75#undef glGetFragDataLocation
76#undef glUniform1ui
77#undef glUniform2ui
78#undef glUniform3ui
79#undef glUniform4ui
80#undef glUniform1uiv
81#undef glUniform2uiv
82#undef glUniform3uiv
83#undef glUniform4uiv
84#undef glClearBufferiv
85#undef glClearBufferuiv
86#undef glClearBufferfv
87#undef glClearBufferfi
88#undef glGetStringi
89#undef glCopyBufferSubData
90#undef glGetUniformIndices
91#undef glGetActiveUniformsiv
92#undef glGetUniformBlockIndex
93#undef glGetActiveUniformBlockiv
94#undef glGetActiveUniformBlockName
95#undef glUniformBlockBinding
96#undef glDrawArraysInstanced
97#undef glDrawElementsInstanced
98#undef glFenceSync
99#undef glIsSync
100#undef glDeleteSync
101#undef glClientWaitSync
102#undef glWaitSync
103#undef glGetInteger64v
104#undef glGetSynciv
105#undef glGetInteger64i_v
106#undef glGetBufferParameteri64v
107#undef glGenSamplers
108#undef glDeleteSamplers
109#undef glIsSampler
110#undef glBindSampler
111#undef glSamplerParameteri
112#undef glSamplerParameteriv
113#undef glSamplerParameterf
114#undef glSamplerParameterfv
115#undef glGetSamplerParameteriv
116#undef glGetSamplerParameterfv
117#undef glVertexAttribDivisor
118#undef glBindTransformFeedback
119#undef glDeleteTransformFeedbacks
120#undef glGenTransformFeedbacks
121#undef glIsTransformFeedback
122#undef glPauseTransformFeedback
123#undef glResumeTransformFeedback
124#undef glGetProgramBinary
125#undef glProgramBinary
126#undef glProgramParameteri
127#undef glInvalidateFramebuffer
128#undef glInvalidateSubFramebuffer
129#undef glTexStorage2D
130#undef glTexStorage3D
131#undef glGetInternalformativ
132
133#undef glDispatchCompute
134#undef glDispatchComputeIndirect
135#undef glDrawArraysIndirect
136#undef glDrawElementsIndirect
137#undef glFramebufferParameteri
138#undef glGetFramebufferParameteriv
139#undef glGetProgramInterfaceiv
140#undef glGetProgramResourceIndex
141#undef glGetProgramResourceName
142#undef glGetProgramResourceiv
143#undef glGetProgramResourceLocation
144#undef glUseProgramStages
145#undef glActiveShaderProgram
146#undef glCreateShaderProgramv
147#undef glBindProgramPipeline
148#undef glDeleteProgramPipelines
149#undef glGenProgramPipelines
150#undef glIsProgramPipeline
151#undef glGetProgramPipelineiv
152#undef glProgramUniform1i
153#undef glProgramUniform2i
154#undef glProgramUniform3i
155#undef glProgramUniform4i
156#undef glProgramUniform1ui
157#undef glProgramUniform2ui
158#undef glProgramUniform3ui
159#undef glProgramUniform4ui
160#undef glProgramUniform1f
161#undef glProgramUniform2f
162#undef glProgramUniform3f
163#undef glProgramUniform4f
164#undef glProgramUniform1iv
165#undef glProgramUniform2iv
166#undef glProgramUniform3iv
167#undef glProgramUniform4iv
168#undef glProgramUniform1uiv
169#undef glProgramUniform2uiv
170#undef glProgramUniform3uiv
171#undef glProgramUniform4uiv
172#undef glProgramUniform1fv
173#undef glProgramUniform2fv
174#undef glProgramUniform3fv
175#undef glProgramUniform4fv
176#undef glProgramUniformMatrix2fv
177#undef glProgramUniformMatrix3fv
178#undef glProgramUniformMatrix4fv
179#undef glProgramUniformMatrix2x3fv
180#undef glProgramUniformMatrix3x2fv
181#undef glProgramUniformMatrix2x4fv
182#undef glProgramUniformMatrix4x2fv
183#undef glProgramUniformMatrix3x4fv
184#undef glProgramUniformMatrix4x3fv
185#undef glValidateProgramPipeline
186#undef glGetProgramPipelineInfoLog
187#undef glBindImageTexture
188#undef glGetBooleani_v
189#undef glMemoryBarrier
190#undef glMemoryBarrierByRegion
191#undef glTexStorage2DMultisample
192#undef glGetMultisamplefv
193#undef glSampleMaski
194#undef glGetTexLevelParameteriv
195#undef glGetTexLevelParameterfv
196#undef glBindVertexBuffer
197#undef glVertexAttribFormat
198#undef glVertexAttribIFormat
199#undef glVertexAttribBinding
200#undef glVertexBindingDivisor
201
202#undef glBlendBarrier
203#undef glCopyImageSubData
204#undef glDebugMessageControl
205#undef glDebugMessageInsert
206#undef glDebugMessageCallback
207#undef glGetDebugMessageLog
208#undef glPushDebugGroup
209#undef glPopDebugGroup
210#undef glObjectLabel
211#undef glGetObjectLabel
212#undef glGetObjectPtrLabel
213#undef glGetPointerv
214#undef glEnablei
215#undef glDisablei
216#undef glBlendEquationi
217#undef glBlendEquationSeparatei
218#undef glBlendFunci
219#undef glBlendFuncSeparatei
220#undef glColorMaski
221#undef glIsEnabledi
222#undef glDrawElementsBaseVertex
223#undef glDrawRangeElementsBaseVertex
224#undef glDrawElementsInstancedBaseVertex
225#undef glFrameBufferTexture
226#undef glPrimitiveBoundingBox
227#undef glGetGraphicsResetStatus
228#undef glReadnPixels
229#undef glGetnUniformfv
230#undef glGetnUniformiv
231#undef glGetnUniformuiv
232#undef glMinSampleShading
233#undef glPatchParameteri
234#undef glTexParameterIiv
235#undef glTexParameterIuiv
236#undef glGetTexParameterIiv
237#undef glGetTexParameterIuiv
238#undef glSamplerParameterIiv
239#undef glSamplerParameterIuiv
240#undef glGetSamplerParameterIiv
241#undef glGetSamplerParameterIuiv
242#undef glTexBuffer
243#undef glTexBufferRange
244#undef glTexStorage3DMultisample
245
246class Q_GUI_EXPORT QOpenGLExtraFunctions : public QOpenGLFunctions
247{
248 Q_DECLARE_PRIVATE(QOpenGLExtraFunctions)
249
250public:
251 QOpenGLExtraFunctions();
252 QOpenGLExtraFunctions(QOpenGLContext *context);
253 ~QOpenGLExtraFunctions() {}
254
255 // GLES3
256 void glReadBuffer(GLenum mode);
257 void glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
258 void glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
259 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);
260 void glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
261 void glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
262 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);
263 void glGenQueries(GLsizei n, GLuint *ids);
264 void glDeleteQueries(GLsizei n, const GLuint *ids);
265 GLboolean glIsQuery(GLuint id);
266 void glBeginQuery(GLenum target, GLuint id);
267 void glEndQuery(GLenum target);
268 void glGetQueryiv(GLenum target, GLenum pname, GLint *params);
269 void glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params);
270 GLboolean glUnmapBuffer(GLenum target);
271 void glGetBufferPointerv(GLenum target, GLenum pname, void **params);
272 void glDrawBuffers(GLsizei n, const GLenum *bufs);
273 void glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
274 void glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
275 void glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
276 void glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
277 void glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
278 void glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
279 void glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
280 void glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
281 void glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
282 void *glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
283 void glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length);
284 void glBindVertexArray(GLuint array);
285 void glDeleteVertexArrays(GLsizei n, const GLuint *arrays);
286 void glGenVertexArrays(GLsizei n, GLuint *arrays);
287 GLboolean glIsVertexArray(GLuint array);
288 void glGetIntegeri_v(GLenum target, GLuint index, GLint *data);
289 void glBeginTransformFeedback(GLenum primitiveMode);
290 void glEndTransformFeedback(void);
291 void glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
292 void glBindBufferBase(GLenum target, GLuint index, GLuint buffer);
293 void glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
294 void glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
295 void glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
296 void glGetVertexAttribIiv(GLuint index, GLenum pname, GLint *params);
297 void glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params);
298 void glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
299 void glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
300 void glVertexAttribI4iv(GLuint index, const GLint *v);
301 void glVertexAttribI4uiv(GLuint index, const GLuint *v);
302 void glGetUniformuiv(GLuint program, GLint location, GLuint *params);
303 GLint glGetFragDataLocation(GLuint program, const GLchar *name);
304 void glUniform1ui(GLint location, GLuint v0);
305 void glUniform2ui(GLint location, GLuint v0, GLuint v1);
306 void glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2);
307 void glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
308 void glUniform1uiv(GLint location, GLsizei count, const GLuint *value);
309 void glUniform2uiv(GLint location, GLsizei count, const GLuint *value);
310 void glUniform3uiv(GLint location, GLsizei count, const GLuint *value);
311 void glUniform4uiv(GLint location, GLsizei count, const GLuint *value);
312 void glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value);
313 void glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value);
314 void glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value);
315 void glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
316 const GLubyte *glGetStringi(GLenum name, GLuint index);
317 void glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
318 void glGetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
319 void glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
320 GLuint glGetUniformBlockIndex(GLuint program, const GLchar *uniformBlockName);
321 void glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
322 void glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
323 void glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
324 void glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
325 void glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
326 GLsync glFenceSync(GLenum condition, GLbitfield flags);
327 GLboolean glIsSync(GLsync sync);
328 void glDeleteSync(GLsync sync);
329 GLenum glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout);
330 void glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout);
331 void glGetInteger64v(GLenum pname, GLint64 *data);
332 void glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
333 void glGetInteger64i_v(GLenum target, GLuint index, GLint64 *data);
334 void glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params);
335 void glGenSamplers(GLsizei count, GLuint *samplers);
336 void glDeleteSamplers(GLsizei count, const GLuint *samplers);
337 GLboolean glIsSampler(GLuint sampler);
338 void glBindSampler(GLuint unit, GLuint sampler);
339 void glSamplerParameteri(GLuint sampler, GLenum pname, GLint param);
340 void glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint *param);
341 void glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param);
342 void glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param);
343 void glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params);
344 void glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params);
345 void glVertexAttribDivisor(GLuint index, GLuint divisor);
346 void glBindTransformFeedback(GLenum target, GLuint id);
347 void glDeleteTransformFeedbacks(GLsizei n, const GLuint *ids);
348 void glGenTransformFeedbacks(GLsizei n, GLuint *ids);
349 GLboolean glIsTransformFeedback(GLuint id);
350 void glPauseTransformFeedback(void);
351 void glResumeTransformFeedback(void);
352 void glGetProgramBinary(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
353 void glProgramBinary(GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
354 void glProgramParameteri(GLuint program, GLenum pname, GLint value);
355 void glInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments);
356 void glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
357 void glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
358 void glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
359 void glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
360
361 // GLES 3.1
362 void glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
363 void glDispatchComputeIndirect(GLintptr indirect);
364 void glDrawArraysIndirect(GLenum mode, const void *indirect);
365 void glDrawElementsIndirect(GLenum mode, GLenum type, const void *indirect);
366 void glFramebufferParameteri(GLenum target, GLenum pname, GLint param);
367 void glGetFramebufferParameteriv(GLenum target, GLenum pname, GLint *params);
368 void glGetProgramInterfaceiv(GLuint program, GLenum programInterface, GLenum pname, GLint *params);
369 GLuint glGetProgramResourceIndex(GLuint program, GLenum programInterface, const GLchar *name);
370 void glGetProgramResourceName(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
371 void glGetProgramResourceiv(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
372 GLint glGetProgramResourceLocation(GLuint program, GLenum programInterface, const GLchar *name);
373 void glUseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program);
374 void glActiveShaderProgram(GLuint pipeline, GLuint program);
375 GLuint glCreateShaderProgramv(GLenum type, GLsizei count, const GLchar *const*strings);
376 void glBindProgramPipeline(GLuint pipeline);
377 void glDeleteProgramPipelines(GLsizei n, const GLuint *pipelines);
378 void glGenProgramPipelines(GLsizei n, GLuint *pipelines);
379 GLboolean glIsProgramPipeline(GLuint pipeline);
380 void glGetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint *params);
381 void glProgramUniform1i(GLuint program, GLint location, GLint v0);
382 void glProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1);
383 void glProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
384 void glProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
385 void glProgramUniform1ui(GLuint program, GLint location, GLuint v0);
386 void glProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1);
387 void glProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
388 void glProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
389 void glProgramUniform1f(GLuint program, GLint location, GLfloat v0);
390 void glProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1);
391 void glProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
392 void glProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
393 void glProgramUniform1iv(GLuint program, GLint location, GLsizei count, const GLint *value);
394 void glProgramUniform2iv(GLuint program, GLint location, GLsizei count, const GLint *value);
395 void glProgramUniform3iv(GLuint program, GLint location, GLsizei count, const GLint *value);
396 void glProgramUniform4iv(GLuint program, GLint location, GLsizei count, const GLint *value);
397 void glProgramUniform1uiv(GLuint program, GLint location, GLsizei count, const GLuint *value);
398 void glProgramUniform2uiv(GLuint program, GLint location, GLsizei count, const GLuint *value);
399 void glProgramUniform3uiv(GLuint program, GLint location, GLsizei count, const GLuint *value);
400 void glProgramUniform4uiv(GLuint program, GLint location, GLsizei count, const GLuint *value);
401 void glProgramUniform1fv(GLuint program, GLint location, GLsizei count, const GLfloat *value);
402 void glProgramUniform2fv(GLuint program, GLint location, GLsizei count, const GLfloat *value);
403 void glProgramUniform3fv(GLuint program, GLint location, GLsizei count, const GLfloat *value);
404 void glProgramUniform4fv(GLuint program, GLint location, GLsizei count, const GLfloat *value);
405 void glProgramUniformMatrix2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
406 void glProgramUniformMatrix3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
407 void glProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
408 void glProgramUniformMatrix2x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
409 void glProgramUniformMatrix3x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
410 void glProgramUniformMatrix2x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
411 void glProgramUniformMatrix4x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
412 void glProgramUniformMatrix3x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
413 void glProgramUniformMatrix4x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
414 void glValidateProgramPipeline(GLuint pipeline);
415 void glGetProgramPipelineInfoLog(GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
416 void glBindImageTexture(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
417 void glGetBooleani_v(GLenum target, GLuint index, GLboolean *data);
418 void glMemoryBarrier(GLbitfield barriers);
419 void glMemoryBarrierByRegion(GLbitfield barriers);
420 void glTexStorage2DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
421 void glGetMultisamplefv(GLenum pname, GLuint index, GLfloat *val);
422 void glSampleMaski(GLuint maskNumber, GLbitfield mask);
423 void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params);
424 void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params);
425 void glBindVertexBuffer(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
426 void glVertexAttribFormat(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
427 void glVertexAttribIFormat(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
428 void glVertexAttribBinding(GLuint attribindex, GLuint bindingindex);
429 void glVertexBindingDivisor(GLuint bindingindex, GLuint divisor);
430
431 // GLES 3.2
432 void glBlendBarrier(void);
433 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);
434 void glDebugMessageControl(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
435 void glDebugMessageInsert(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
436 void glDebugMessageCallback(GLDEBUGPROC callback, const void *userParam);
437 GLuint glGetDebugMessageLog(GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
438 void glPushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar *message);
439 void glPopDebugGroup(void);
440 void glObjectLabel(GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
441 void glGetObjectLabel(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
442 void glObjectPtrLabel(const void *ptr, GLsizei length, const GLchar *label);
443 void glGetObjectPtrLabel(const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
444 void glGetPointerv(GLenum pname, void **params);
445 void glEnablei(GLenum target, GLuint index);
446 void glDisablei(GLenum target, GLuint index);
447 void glBlendEquationi(GLuint buf, GLenum mode);
448 void glBlendEquationSeparatei(GLuint buf, GLenum modeRGB, GLenum modeAlpha);
449 void glBlendFunci(GLuint buf, GLenum src, GLenum dst);
450 void glBlendFuncSeparatei(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
451 void glColorMaski(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
452 GLboolean glIsEnabledi(GLenum target, GLuint index);
453 void glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
454 void glDrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
455 void glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
456 void glFramebufferTexture(GLenum target, GLenum attachment, GLuint texture, GLint level);
457 void glPrimitiveBoundingBox(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
458 GLenum glGetGraphicsResetStatus(void);
459 void glReadnPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
460 void glGetnUniformfv(GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
461 void glGetnUniformiv(GLuint program, GLint location, GLsizei bufSize, GLint *params);
462 void glGetnUniformuiv(GLuint program, GLint location, GLsizei bufSize, GLuint *params);
463 void glMinSampleShading(GLfloat value);
464 void glPatchParameteri(GLenum pname, GLint value);
465 void glTexParameterIiv(GLenum target, GLenum pname, const GLint *params);
466 void glTexParameterIuiv(GLenum target, GLenum pname, const GLuint *params);
467 void glGetTexParameterIiv(GLenum target, GLenum pname, GLint *params);
468 void glGetTexParameterIuiv(GLenum target, GLenum pname, GLuint *params);
469 void glSamplerParameterIiv(GLuint sampler, GLenum pname, const GLint *param);
470 void glSamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint *param);
471 void glGetSamplerParameterIiv(GLuint sampler, GLenum pname, GLint *params);
472 void glGetSamplerParameterIuiv(GLuint sampler, GLenum pname, GLuint *params);
473 void glTexBuffer(GLenum target, GLenum internalformat, GLuint buffer);
474 void glTexBufferRange(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
475 void glTexStorage3DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
476
477private:
478 static bool isInitialized(const QOpenGLExtraFunctionsPrivate *d) { return d != nullptr; }
479};
480
481
482#define QT_OPENGL_DECLARE_FUNCTIONS(ret, name, args) \
483 ret (QOPENGLF_APIENTRYP name)args;
484#define QT_OPENGL_COUNT_FUNCTIONS(ret, name, args) +1
485
486#define QT_OPENGL_DECLARE(FUNCTIONS) \
487public: \
488 struct Functions { \
489 FUNCTIONS(QT_OPENGL_DECLARE_FUNCTIONS) \
490 }; \
491 union { \
492 QFunctionPointer functions[FUNCTIONS(QT_OPENGL_COUNT_FUNCTIONS)]; \
493 Functions f; \
494 }; \
495private: \
496 void init(QOpenGLContext *context);
497
498class QOpenGLExtraFunctionsPrivate : public QOpenGLFunctionsPrivate
499{
500public:
501 QOpenGLExtraFunctionsPrivate(QOpenGLContext *ctx);
502
503 // GLES3
504#define QT_OPENGL_EXTRA_FUNCTIONS(F) \
505 F(void, ReadBuffer, (GLenum mode)) \
506 F(void, DrawRangeElements, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices)) \
507 F(void, TexImage3D, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels)) \
508 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)) \
509 F(void, CopyTexSubImage3D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)) \
510 F(void, CompressedTexImage3D, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data)) \
511 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)) \
512 F(void, GenQueries, (GLsizei n, GLuint *ids)) \
513 F(void, DeleteQueries, (GLsizei n, const GLuint *ids)) \
514 F(GLboolean, IsQuery, (GLuint id)) \
515 F(void, BeginQuery, (GLenum target, GLuint id)) \
516 F(void, EndQuery, (GLenum target)) \
517 F(void, GetQueryiv, (GLenum target, GLenum pname, GLint *params)) \
518 F(void, GetQueryObjectuiv, (GLuint id, GLenum pname, GLuint *params)) \
519 F(GLboolean, UnmapBuffer, (GLenum target)) \
520 F(void, GetBufferPointerv, (GLenum target, GLenum pname, void **params)) \
521 F(void, DrawBuffers, (GLsizei n, const GLenum *bufs)) \
522 F(void, UniformMatrix2x3fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
523 F(void, UniformMatrix3x2fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
524 F(void, UniformMatrix2x4fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
525 F(void, UniformMatrix4x2fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
526 F(void, UniformMatrix3x4fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
527 F(void, UniformMatrix4x3fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
528 F(void, BlitFramebuffer, (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)) \
529 F(void, RenderbufferStorageMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)) \
530 F(void, FramebufferTextureLayer, (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)) \
531 F(void *,MapBufferRange, (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)) \
532 F(void, FlushMappedBufferRange, (GLenum target, GLintptr offset, GLsizeiptr length)) \
533 F(void, BindVertexArray, (GLuint array)) \
534 F(void, DeleteVertexArrays, (GLsizei n, const GLuint *arrays)) \
535 F(void, GenVertexArrays, (GLsizei n, GLuint *arrays)) \
536 F(GLboolean, IsVertexArray, (GLuint array)) \
537 F(void, GetIntegeri_v, (GLenum target, GLuint index, GLint *data)) \
538 F(void, BeginTransformFeedback, (GLenum primitiveMode)) \
539 F(void, EndTransformFeedback, (void)) \
540 F(void, BindBufferRange, (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)) \
541 F(void, BindBufferBase, (GLenum target, GLuint index, GLuint buffer)) \
542 F(void, TransformFeedbackVaryings, (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode)) \
543 F(void, GetTransformFeedbackVarying, (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name)) \
544 F(void, VertexAttribIPointer, (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer)) \
545 F(void, GetVertexAttribIiv, (GLuint index, GLenum pname, GLint *params)) \
546 F(void, GetVertexAttribIuiv, (GLuint index, GLenum pname, GLuint *params)) \
547 F(void, VertexAttribI4i, (GLuint index, GLint x, GLint y, GLint z, GLint w)) \
548 F(void, VertexAttribI4ui, (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)) \
549 F(void, VertexAttribI4iv, (GLuint index, const GLint *v)) \
550 F(void, VertexAttribI4uiv, (GLuint index, const GLuint *v)) \
551 F(void, GetUniformuiv, (GLuint program, GLint location, GLuint *params)) \
552 F(GLint, GetFragDataLocation, (GLuint program, const GLchar *name)) \
553 F(void, Uniform1ui, (GLint location, GLuint v0)) \
554 F(void, Uniform2ui, (GLint location, GLuint v0, GLuint v1)) \
555 F(void, Uniform3ui, (GLint location, GLuint v0, GLuint v1, GLuint v2)) \
556 F(void, Uniform4ui, (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)) \
557 F(void, Uniform1uiv, (GLint location, GLsizei count, const GLuint *value)) \
558 F(void, Uniform2uiv, (GLint location, GLsizei count, const GLuint *value)) \
559 F(void, Uniform3uiv, (GLint location, GLsizei count, const GLuint *value)) \
560 F(void, Uniform4uiv, (GLint location, GLsizei count, const GLuint *value)) \
561 F(void, ClearBufferiv, (GLenum buffer, GLint drawbuffer, const GLint *value)) \
562 F(void, ClearBufferuiv, (GLenum buffer, GLint drawbuffer, const GLuint *value)) \
563 F(void, ClearBufferfv, (GLenum buffer, GLint drawbuffer, const GLfloat *value)) \
564 F(void, ClearBufferfi, (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)) \
565 F(const GLubyte *, GetStringi, (GLenum name, GLuint index)) \
566 F(void, CopyBufferSubData, (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)) \
567 F(void, GetUniformIndices, (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices)) \
568 F(void, GetActiveUniformsiv, (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params)) \
569 F(GLuint, GetUniformBlockIndex, (GLuint program, const GLchar *uniformBlockName)) \
570 F(void, GetActiveUniformBlockiv, (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params)) \
571 F(void, GetActiveUniformBlockName, (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName)) \
572 F(void, UniformBlockBinding, (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)) \
573 F(void, DrawArraysInstanced, (GLenum mode, GLint first, GLsizei count, GLsizei instancecount)) \
574 F(void, DrawElementsInstanced, (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount)) \
575 F(GLsync, FenceSync, (GLenum condition, GLbitfield flags)) \
576 F(GLboolean, IsSync, (GLsync sync)) \
577 F(void, DeleteSync, (GLsync sync)) \
578 F(GLenum, ClientWaitSync, (GLsync sync, GLbitfield flags, GLuint64 timeout)) \
579 F(void, WaitSync, (GLsync sync, GLbitfield flags, GLuint64 timeout)) \
580 F(void, GetInteger64v, (GLenum pname, GLint64 *data)) \
581 F(void, GetSynciv, (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)) \
582 F(void, GetInteger64i_v, (GLenum target, GLuint index, GLint64 *data)) \
583 F(void, GetBufferParameteri64v, (GLenum target, GLenum pname, GLint64 *params)) \
584 F(void, GenSamplers, (GLsizei count, GLuint *samplers)) \
585 F(void, DeleteSamplers, (GLsizei count, const GLuint *samplers)) \
586 F(GLboolean, IsSampler, (GLuint sampler)) \
587 F(void, BindSampler, (GLuint unit, GLuint sampler)) \
588 F(void, SamplerParameteri, (GLuint sampler, GLenum pname, GLint param)) \
589 F(void, SamplerParameteriv, (GLuint sampler, GLenum pname, const GLint *param)) \
590 F(void, SamplerParameterf, (GLuint sampler, GLenum pname, GLfloat param)) \
591 F(void, SamplerParameterfv, (GLuint sampler, GLenum pname, const GLfloat *param)) \
592 F(void, GetSamplerParameteriv, (GLuint sampler, GLenum pname, GLint *params)) \
593 F(void, GetSamplerParameterfv, (GLuint sampler, GLenum pname, GLfloat *params)) \
594 F(void, VertexAttribDivisor, (GLuint index, GLuint divisor)) \
595 F(void, BindTransformFeedback, (GLenum target, GLuint id)) \
596 F(void, DeleteTransformFeedbacks, (GLsizei n, const GLuint *ids)) \
597 F(void, GenTransformFeedbacks, (GLsizei n, GLuint *ids)) \
598 F(GLboolean, IsTransformFeedback, (GLuint id)) \
599 F(void, PauseTransformFeedback, (void)) \
600 F(void, ResumeTransformFeedback, (void)) \
601 F(void, GetProgramBinary, (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary)) \
602 F(void, ProgramBinary, (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length)) \
603 F(void, ProgramParameteri, (GLuint program, GLenum pname, GLint value)) \
604 F(void, InvalidateFramebuffer, (GLenum target, GLsizei numAttachments, const GLenum *attachments)) \
605 F(void, InvalidateSubFramebuffer, (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height)) \
606 F(void, TexStorage2D, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)) \
607 F(void, TexStorage3D, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)) \
608 F(void, GetInternalformativ, (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params)) \
609 F(void, DispatchCompute, (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z)) \
610 F(void, DispatchComputeIndirect, (GLintptr indirect)) \
611 F(void, DrawArraysIndirect, (GLenum mode, const void *indirect)) \
612 F(void, DrawElementsIndirect, (GLenum mode, GLenum type, const void *indirect)) \
613 F(void, FramebufferParameteri, (GLenum target, GLenum pname, GLint param)) \
614 F(void, GetFramebufferParameteriv, (GLenum target, GLenum pname, GLint *params)) \
615 F(void, GetProgramInterfaceiv, (GLuint program, GLenum programInterface, GLenum pname, GLint *params)) \
616 F(GLuint, GetProgramResourceIndex, (GLuint program, GLenum programInterface, const GLchar *name)) \
617 F(void, GetProgramResourceName, (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name)) \
618 F(void, GetProgramResourceiv, (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params)) \
619 F(GLint, GetProgramResourceLocation, (GLuint program, GLenum programInterface, const GLchar *name)) \
620 F(void, UseProgramStages, (GLuint pipeline, GLbitfield stages, GLuint program)) \
621 F(void, ActiveShaderProgram, (GLuint pipeline, GLuint program)) \
622 F(GLuint, CreateShaderProgramv, (GLenum type, GLsizei count, const GLchar *const*strings)) \
623 F(void, BindProgramPipeline, (GLuint pipeline)) \
624 F(void, DeleteProgramPipelines, (GLsizei n, const GLuint *pipelines)) \
625 F(void, GenProgramPipelines, (GLsizei n, GLuint *pipelines)) \
626 F(GLboolean, IsProgramPipeline, (GLuint pipeline)) \
627 F(void, GetProgramPipelineiv, (GLuint pipeline, GLenum pname, GLint *params)) \
628 F(void, ProgramUniform1i, (GLuint program, GLint location, GLint v0)) \
629 F(void, ProgramUniform2i, (GLuint program, GLint location, GLint v0, GLint v1)) \
630 F(void, ProgramUniform3i, (GLuint program, GLint location, GLint v0, GLint v1, GLint v2)) \
631 F(void, ProgramUniform4i, (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)) \
632 F(void, ProgramUniform1ui, (GLuint program, GLint location, GLuint v0)) \
633 F(void, ProgramUniform2ui, (GLuint program, GLint location, GLuint v0, GLuint v1)) \
634 F(void, ProgramUniform3ui, (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2)) \
635 F(void, ProgramUniform4ui, (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)) \
636 F(void, ProgramUniform1f, (GLuint program, GLint location, GLfloat v0)) \
637 F(void, ProgramUniform2f, (GLuint program, GLint location, GLfloat v0, GLfloat v1)) \
638 F(void, ProgramUniform3f, (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)) \
639 F(void, ProgramUniform4f, (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)) \
640 F(void, ProgramUniform1iv, (GLuint program, GLint location, GLsizei count, const GLint *value)) \
641 F(void, ProgramUniform2iv, (GLuint program, GLint location, GLsizei count, const GLint *value)) \
642 F(void, ProgramUniform3iv, (GLuint program, GLint location, GLsizei count, const GLint *value)) \
643 F(void, ProgramUniform4iv, (GLuint program, GLint location, GLsizei count, const GLint *value)) \
644 F(void, ProgramUniform1uiv, (GLuint program, GLint location, GLsizei count, const GLuint *value)) \
645 F(void, ProgramUniform2uiv, (GLuint program, GLint location, GLsizei count, const GLuint *value)) \
646 F(void, ProgramUniform3uiv, (GLuint program, GLint location, GLsizei count, const GLuint *value)) \
647 F(void, ProgramUniform4uiv, (GLuint program, GLint location, GLsizei count, const GLuint *value)) \
648 F(void, ProgramUniform1fv, (GLuint program, GLint location, GLsizei count, const GLfloat *value)) \
649 F(void, ProgramUniform2fv, (GLuint program, GLint location, GLsizei count, const GLfloat *value)) \
650 F(void, ProgramUniform3fv, (GLuint program, GLint location, GLsizei count, const GLfloat *value)) \
651 F(void, ProgramUniform4fv, (GLuint program, GLint location, GLsizei count, const GLfloat *value)) \
652 F(void, ProgramUniformMatrix2fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
653 F(void, ProgramUniformMatrix3fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
654 F(void, ProgramUniformMatrix4fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
655 F(void, ProgramUniformMatrix2x3fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
656 F(void, ProgramUniformMatrix3x2fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
657 F(void, ProgramUniformMatrix2x4fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
658 F(void, ProgramUniformMatrix4x2fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
659 F(void, ProgramUniformMatrix3x4fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
660 F(void, ProgramUniformMatrix4x3fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
661 F(void, ValidateProgramPipeline, (GLuint pipeline)) \
662 F(void, GetProgramPipelineInfoLog, (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog)) \
663 F(void, BindImageTexture, (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format)) \
664 F(void, GetBooleani_v, (GLenum target, GLuint index, GLboolean *data)) \
665 F(void, MemoryBarrier, (GLbitfield barriers)) \
666 F(void, MemoryBarrierByRegion, (GLbitfield barriers)) \
667 F(void, TexStorage2DMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)) \
668 F(void, GetMultisamplefv, (GLenum pname, GLuint index, GLfloat *val)) \
669 F(void, SampleMaski, (GLuint maskNumber, GLbitfield mask)) \
670 F(void, GetTexLevelParameteriv, (GLenum target, GLint level, GLenum pname, GLint *params)) \
671 F(void, GetTexLevelParameterfv, (GLenum target, GLint level, GLenum pname, GLfloat *params)) \
672 F(void, BindVertexBuffer, (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride)) \
673 F(void, VertexAttribFormat, (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset)) \
674 F(void, VertexAttribIFormat, (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset)) \
675 F(void, VertexAttribBinding, (GLuint attribindex, GLuint bindingindex)) \
676 F(void, VertexBindingDivisor, (GLuint bindingindex, GLuint divisor)) \
677 F(void, BlendBarrier, (void)) \
678 F(void, BlendEquationSeparatei, (GLuint buf, GLenum modeRGB, GLenum modeAlpha)) \
679 F(void, BlendEquationi, (GLuint buf, GLenum mode)) \
680 F(void, BlendFuncSeparatei, (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)) \
681 F(void, BlendFunci, (GLuint buf, GLenum src, GLenum dst)) \
682 F(void, ColorMaski, (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a)) \
683 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)) \
684 F(void, DebugMessageCallback, (GLDEBUGPROC callback, const void * userParam)) \
685 F(void, DebugMessageControl, (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled)) \
686 F(void, DebugMessageInsert, (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf)) \
687 F(void, Disablei, (GLenum target, GLuint index)) \
688 F(void, DrawElementsBaseVertex, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex)) \
689 F(void, DrawElementsInstancedBaseVertex, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex)) \
690 F(void, DrawRangeElementsBaseVertex, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex)) \
691 F(void, Enablei, (GLenum target, GLuint index)) \
692 F(void, FramebufferTexture, (GLenum target, GLenum attachment, GLuint texture, GLint level)) \
693 F(GLuint, GetDebugMessageLog, (GLuint count, GLsizei bufSize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog)) \
694 F(GLenum, GetGraphicsResetStatus, (void)) \
695 F(void, GetObjectLabel, (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei* length, GLchar* label)) \
696 F(void, GetObjectPtrLabel, (const void * ptr, GLsizei bufSize, GLsizei* length, GLchar* label)) \
697 F(void, GetPointerv, (GLenum pname, void ** params)) \
698 F(void, GetSamplerParameterIiv, (GLuint sampler, GLenum pname, GLint* params)) \
699 F(void, GetSamplerParameterIuiv, (GLuint sampler, GLenum pname, GLuint* params)) \
700 F(void, GetTexParameterIiv, (GLenum target, GLenum pname, GLint* params)) \
701 F(void, GetTexParameterIuiv, (GLenum target, GLenum pname, GLuint* params)) \
702 F(void, GetnUniformfv, (GLuint program, GLint location, GLsizei bufSize, GLfloat* params)) \
703 F(void, GetnUniformiv, (GLuint program, GLint location, GLsizei bufSize, GLint* params)) \
704 F(void, GetnUniformuiv, (GLuint program, GLint location, GLsizei bufSize, GLuint* params)) \
705 F(GLboolean, IsEnabledi, (GLenum target, GLuint index)) \
706 F(void, MinSampleShading, (GLfloat value)) \
707 F(void, ObjectLabel, (GLenum identifier, GLuint name, GLsizei length, const GLchar * label)) \
708 F(void, ObjectPtrLabel, (const void * ptr, GLsizei length, const GLchar * label)) \
709 F(void, PatchParameteri, (GLenum pname, GLint value)) \
710 F(void, PopDebugGroup, (void)) \
711 F(void, PrimitiveBoundingBox, (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW)) \
712 F(void, PushDebugGroup, (GLenum source, GLuint id, GLsizei length, const GLchar * message)) \
713 F(void, ReadnPixels, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data)) \
714 F(void, SamplerParameterIiv, (GLuint sampler, GLenum pname, const GLint * param)) \
715 F(void, SamplerParameterIuiv, (GLuint sampler, GLenum pname, const GLuint * param)) \
716 F(void, TexBuffer, (GLenum target, GLenum internalformat, GLuint buffer)) \
717 F(void, TexBufferRange, (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size)) \
718 F(void, TexParameterIiv, (GLenum target, GLenum pname, const GLint * params)) \
719 F(void, TexParameterIuiv, (GLenum target, GLenum pname, const GLuint * params)) \
720 F(void, TexStorage3DMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations)) \
721
722 QT_OPENGL_DECLARE(QT_OPENGL_EXTRA_FUNCTIONS)
723};
724
725// GLES 3.0 and 3.1
726
727inline void QOpenGLExtraFunctions::glBeginQuery(GLenum target, GLuint id)
728{
729 Q_D(QOpenGLExtraFunctions);
730 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
731 d->f.BeginQuery(target, id);
732 Q_OPENGL_FUNCTIONS_DEBUG
733}
734
735inline void QOpenGLExtraFunctions::glBeginTransformFeedback(GLenum primitiveMode)
736{
737 Q_D(QOpenGLExtraFunctions);
738 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
739 d->f.BeginTransformFeedback(primitiveMode);
740 Q_OPENGL_FUNCTIONS_DEBUG
741}
742
743inline void QOpenGLExtraFunctions::glBindBufferBase(GLenum target, GLuint index, GLuint buffer)
744{
745 Q_D(QOpenGLExtraFunctions);
746 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
747 d->f.BindBufferBase(target, index, buffer);
748 Q_OPENGL_FUNCTIONS_DEBUG
749}
750
751inline void QOpenGLExtraFunctions::glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
752{
753 Q_D(QOpenGLExtraFunctions);
754 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
755 d->f.BindBufferRange(target, index, buffer, offset, size);
756 Q_OPENGL_FUNCTIONS_DEBUG
757}
758
759inline void QOpenGLExtraFunctions::glBindSampler(GLuint unit, GLuint sampler)
760{
761 Q_D(QOpenGLExtraFunctions);
762 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
763 d->f.BindSampler(unit, sampler);
764 Q_OPENGL_FUNCTIONS_DEBUG
765}
766
767inline void QOpenGLExtraFunctions::glBindTransformFeedback(GLenum target, GLuint id)
768{
769 Q_D(QOpenGLExtraFunctions);
770 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
771 d->f.BindTransformFeedback(target, id);
772 Q_OPENGL_FUNCTIONS_DEBUG
773}
774
775inline void QOpenGLExtraFunctions::glBindVertexArray(GLuint array)
776{
777 Q_D(QOpenGLExtraFunctions);
778 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
779 d->f.BindVertexArray(array);
780 Q_OPENGL_FUNCTIONS_DEBUG
781}
782
783inline void QOpenGLExtraFunctions::glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
784{
785 Q_D(QOpenGLExtraFunctions);
786 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
787 d->f.BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
788 Q_OPENGL_FUNCTIONS_DEBUG
789}
790
791inline void QOpenGLExtraFunctions::glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
792{
793 Q_D(QOpenGLExtraFunctions);
794 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
795 d->f.ClearBufferfi(buffer, drawbuffer, depth, stencil);
796 Q_OPENGL_FUNCTIONS_DEBUG
797}
798
799inline void QOpenGLExtraFunctions::glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat * value)
800{
801 Q_D(QOpenGLExtraFunctions);
802 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
803 d->f.ClearBufferfv(buffer, drawbuffer, value);
804 Q_OPENGL_FUNCTIONS_DEBUG
805}
806
807inline void QOpenGLExtraFunctions::glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint * value)
808{
809 Q_D(QOpenGLExtraFunctions);
810 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
811 d->f.ClearBufferiv(buffer, drawbuffer, value);
812 Q_OPENGL_FUNCTIONS_DEBUG
813}
814
815inline void QOpenGLExtraFunctions::glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint * value)
816{
817 Q_D(QOpenGLExtraFunctions);
818 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
819 d->f.ClearBufferuiv(buffer, drawbuffer, value);
820 Q_OPENGL_FUNCTIONS_DEBUG
821}
822
823inline GLenum QOpenGLExtraFunctions::glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
824{
825 Q_D(QOpenGLExtraFunctions);
826 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
827 GLenum result = d->f.ClientWaitSync(sync, flags, timeout);
828 Q_OPENGL_FUNCTIONS_DEBUG
829 return result;
830}
831
832inline void QOpenGLExtraFunctions::glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data)
833{
834 Q_D(QOpenGLExtraFunctions);
835 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
836 d->f.CompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data);
837 Q_OPENGL_FUNCTIONS_DEBUG
838}
839
840inline 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)
841{
842 Q_D(QOpenGLExtraFunctions);
843 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
844 d->f.CompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
845 Q_OPENGL_FUNCTIONS_DEBUG
846}
847
848inline void QOpenGLExtraFunctions::glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
849{
850 Q_D(QOpenGLExtraFunctions);
851 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
852 d->f.CopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
853 Q_OPENGL_FUNCTIONS_DEBUG
854}
855
856inline void QOpenGLExtraFunctions::glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
857{
858 Q_D(QOpenGLExtraFunctions);
859 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
860 d->f.CopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
861 Q_OPENGL_FUNCTIONS_DEBUG
862}
863
864inline void QOpenGLExtraFunctions::glDeleteQueries(GLsizei n, const GLuint * ids)
865{
866 Q_D(QOpenGLExtraFunctions);
867 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
868 d->f.DeleteQueries(n, ids);
869 Q_OPENGL_FUNCTIONS_DEBUG
870}
871
872inline void QOpenGLExtraFunctions::glDeleteSamplers(GLsizei count, const GLuint * samplers)
873{
874 Q_D(QOpenGLExtraFunctions);
875 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
876 d->f.DeleteSamplers(count, samplers);
877 Q_OPENGL_FUNCTIONS_DEBUG
878}
879
880inline void QOpenGLExtraFunctions::glDeleteSync(GLsync sync)
881{
882 Q_D(QOpenGLExtraFunctions);
883 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
884 d->f.DeleteSync(sync);
885 Q_OPENGL_FUNCTIONS_DEBUG
886}
887
888inline void QOpenGLExtraFunctions::glDeleteTransformFeedbacks(GLsizei n, const GLuint * ids)
889{
890 Q_D(QOpenGLExtraFunctions);
891 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
892 d->f.DeleteTransformFeedbacks(n, ids);
893 Q_OPENGL_FUNCTIONS_DEBUG
894}
895
896inline void QOpenGLExtraFunctions::glDeleteVertexArrays(GLsizei n, const GLuint * arrays)
897{
898 Q_D(QOpenGLExtraFunctions);
899 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
900 d->f.DeleteVertexArrays(n, arrays);
901 Q_OPENGL_FUNCTIONS_DEBUG
902}
903
904inline void QOpenGLExtraFunctions::glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount)
905{
906 Q_D(QOpenGLExtraFunctions);
907 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
908 d->f.DrawArraysInstanced(mode, first, count, instancecount);
909 Q_OPENGL_FUNCTIONS_DEBUG
910}
911
912inline void QOpenGLExtraFunctions::glDrawBuffers(GLsizei n, const GLenum * bufs)
913{
914 Q_D(QOpenGLExtraFunctions);
915 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
916 d->f.DrawBuffers(n, bufs);
917 Q_OPENGL_FUNCTIONS_DEBUG
918}
919
920inline void QOpenGLExtraFunctions::glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount)
921{
922 Q_D(QOpenGLExtraFunctions);
923 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
924 d->f.DrawElementsInstanced(mode, count, type, indices, instancecount);
925 Q_OPENGL_FUNCTIONS_DEBUG
926}
927
928inline void QOpenGLExtraFunctions::glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices)
929{
930 Q_D(QOpenGLExtraFunctions);
931 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
932 d->f.DrawRangeElements(mode, start, end, count, type, indices);
933 Q_OPENGL_FUNCTIONS_DEBUG
934}
935
936inline void QOpenGLExtraFunctions::glEndQuery(GLenum target)
937{
938 Q_D(QOpenGLExtraFunctions);
939 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
940 d->f.EndQuery(target);
941 Q_OPENGL_FUNCTIONS_DEBUG
942}
943
944inline void QOpenGLExtraFunctions::glEndTransformFeedback()
945{
946 Q_D(QOpenGLExtraFunctions);
947 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
948 d->f.EndTransformFeedback();
949 Q_OPENGL_FUNCTIONS_DEBUG
950}
951
952inline GLsync QOpenGLExtraFunctions::glFenceSync(GLenum condition, GLbitfield flags)
953{
954 Q_D(QOpenGLExtraFunctions);
955 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
956 GLsync result = d->f.FenceSync(condition, flags);
957 Q_OPENGL_FUNCTIONS_DEBUG
958 return result;
959}
960
961inline void QOpenGLExtraFunctions::glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
962{
963 Q_D(QOpenGLExtraFunctions);
964 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
965 d->f.FlushMappedBufferRange(target, offset, length);
966 Q_OPENGL_FUNCTIONS_DEBUG
967}
968
969inline void QOpenGLExtraFunctions::glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
970{
971 Q_D(QOpenGLExtraFunctions);
972 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
973 d->f.FramebufferTextureLayer(target, attachment, texture, level, layer);
974 Q_OPENGL_FUNCTIONS_DEBUG
975}
976
977inline void QOpenGLExtraFunctions::glGenQueries(GLsizei n, GLuint* ids)
978{
979 Q_D(QOpenGLExtraFunctions);
980 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
981 d->f.GenQueries(n, ids);
982 Q_OPENGL_FUNCTIONS_DEBUG
983}
984
985inline void QOpenGLExtraFunctions::glGenSamplers(GLsizei count, GLuint* samplers)
986{
987 Q_D(QOpenGLExtraFunctions);
988 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
989 d->f.GenSamplers(count, samplers);
990 Q_OPENGL_FUNCTIONS_DEBUG
991}
992
993inline void QOpenGLExtraFunctions::glGenTransformFeedbacks(GLsizei n, GLuint* ids)
994{
995 Q_D(QOpenGLExtraFunctions);
996 Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
997 d->f.GenTransformFeedbacks(n, ids);
998 Q_OPENGL_FUNCTIONS_DEBUG
999}
1000
1001inline 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
1009inline 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
1017inline 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
1025inline 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
1033inline 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
1041inline 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
1049inline 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
1058inline 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
1066inline 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
1074inline 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
1082inline 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
1090inline 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
1098inline 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
1106inline 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
1114inline 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
1122inline 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
1130inline 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
1139inline 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
1147inline 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
1155inline 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
1164inline 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
1172inline 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
1180inline 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
1188inline 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
1196inline 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
1204inline 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
1212inline 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
1221inline 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
1230inline 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
1239inline 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
1248inline 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
1257inline 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
1266inline 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
1274inline 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
1282inline 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
1290inline 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
1298inline 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
1306inline 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
1314inline 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
1322inline 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
1330inline 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
1338inline 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
1346inline 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
1354inline 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
1362inline 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
1370inline 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
1378inline 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
1386inline 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
1394inline void