1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the QtGui module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or (at your option) the GNU General
28 ** Public license version 3 or any later version approved by the KDE Free
29 ** Qt Foundation. The licenses are as published by the Free Software
30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31 ** included in the packaging of this file. Please review the following
32 ** information to ensure the GNU General Public License requirements will
33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34 ** https://www.gnu.org/licenses/gpl-3.0.html.
35 **
36 ** $QT_END_LICENSE$
37 **
38 ****************************************************************************/
39 
40 #include "qopenglfunctions.h"
41 #include "qopenglextrafunctions.h"
42 #include "qopenglextensions_p.h"
43 #include "qdebug.h"
44 #include <QtGui/private/qopenglcontext_p.h>
45 #include <QtGui/private/qopengl_p.h>
46 #include <QtGui/private/qguiapplication_p.h>
47 #include <qpa/qplatformintegration.h>
48 #include <qpa/qplatformnativeinterface.h>
49 
50 #ifdef Q_OS_INTEGRITY
51 #include <EGL/egl.h>
52 #endif
53 
54 #ifndef GL_FRAMEBUFFER_SRGB_CAPABLE_EXT
55 #define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT   0x8DBA
56 #endif
57 
58 QT_BEGIN_NAMESPACE
59 
60 #define QT_OPENGL_COUNT_FUNCTIONS(ret, name, args) +1
61 #define QT_OPENGL_FUNCTION_NAMES(ret, name, args) \
62     "gl"#name"\0"
63 #define QT_OPENGL_FLAGS(ret, name, args) \
64     0,
65 #define QT_OPENGL_IMPLEMENT(CLASS, FUNCTIONS) \
66 void CLASS::init(QOpenGLContext *context) \
67 { \
68     const char *names = FUNCTIONS(QT_OPENGL_FUNCTION_NAMES); \
69     const char *name = names; \
70     for (int i = 0; i < FUNCTIONS(QT_OPENGL_COUNT_FUNCTIONS); ++i) { \
71         functions[i] = QT_PREPEND_NAMESPACE(getProcAddress(context, name)); \
72         name += strlen(name) + 1; \
73     } \
74 }
75 
76 /*!
77     \class QOpenGLFunctions
78     \brief The QOpenGLFunctions class provides cross-platform access to the OpenGL ES 2.0 API.
79     \since 5.0
80     \ingroup painting-3D
81     \inmodule QtGui
82 
83     OpenGL ES 2.0 defines a subset of the OpenGL specification that is
84     common across many desktop and embedded OpenGL implementations.
85     However, it can be difficult to use the functions from that subset
86     because they need to be resolved manually on desktop systems.
87 
88     QOpenGLFunctions provides a guaranteed API that is available on all
89     OpenGL systems and takes care of function resolution on systems
90     that need it.  The recommended way to use QOpenGLFunctions is by
91     direct inheritance:
92 
93     \snippet code/src_gui_opengl_qopenglfunctions.cpp 0
94 
95     The \c{paintGL()} function can then use any of the OpenGL ES 2.0
96     functions without explicit resolution, such as glActiveTexture()
97     in the following example:
98 
99     \snippet code/src_gui_opengl_qopenglfunctions.cpp 1
100 
101     QOpenGLFunctions can also be used directly for ad-hoc invocation
102     of OpenGL ES 2.0 functions on all platforms:
103 
104     \snippet code/src_gui_opengl_qopenglfunctions.cpp 2
105 
106     An alternative approach is to query the context's associated
107     QOpenGLFunctions instance. This is somewhat faster than the previous
108     approach due to avoiding the creation of a new instance, but the difference
109     is fairly small since the internal data structures are shared, and function
110     resolving happens only once for a given context, regardless of the number of
111     QOpenGLFunctions instances initialized for it.
112 
113     \snippet code/src_gui_opengl_qopenglfunctions.cpp 3
114 
115     QOpenGLFunctions provides wrappers for all OpenGL ES 2.0
116     functions, including the common subset of OpenGL 1.x and ES
117     2.0. While such functions, for example glClear() or
118     glDrawArrays(), can be called also directly, as long as the
119     application links to the platform-specific OpenGL library, calling
120     them via QOpenGLFunctions enables the possibility of dynamically
121     loading the OpenGL implementation.
122 
123     The hasOpenGLFeature() and openGLFeatures() functions can be used
124     to determine if the OpenGL implementation has a major OpenGL ES 2.0
125     feature.  For example, the following checks if non power of two
126     textures are available:
127 
128     \snippet code/src_gui_opengl_qopenglfunctions.cpp 4
129 
130     \sa QOpenGLContext, QSurfaceFormat
131 */
132 
133 /*!
134     \enum QOpenGLFunctions::OpenGLFeature
135     This enum defines OpenGL and OpenGL ES features whose presence
136     may depend on the implementation.
137 
138     \value Multitexture glActiveTexture() function is available.
139     \value Shaders Shader functions are available.
140     \value Buffers Vertex and index buffer functions are available.
141     \value Framebuffers Framebuffer object functions are available.
142     \value BlendColor glBlendColor() is available.
143     \value BlendEquation glBlendEquation() is available.
144     \value BlendEquationSeparate glBlendEquationSeparate() is available.
145     \value BlendEquationAdvanced Advanced blend equations are available.
146     \value BlendFuncSeparate glBlendFuncSeparate() is available.
147     \value BlendSubtract Blend subtract mode is available.
148     \value CompressedTextures Compressed texture functions are available.
149     \value Multisample glSampleCoverage() function is available.
150     \value StencilSeparate Separate stencil functions are available.
151     \value NPOTTextures Non power of two textures are available.
152     \value NPOTTextureRepeat Non power of two textures can use GL_REPEAT as wrap parameter.
153     \value FixedFunctionPipeline The fixed function pipeline is available.
154     \value TextureRGFormats The GL_RED and GL_RG texture formats are available.
155     \value MultipleRenderTargets Multiple color attachments to framebuffer objects are available.
156 */
157 
158 // Hidden private fields for additional extension data.
159 struct QOpenGLFunctionsPrivateEx : public QOpenGLExtensionsPrivate, public QOpenGLSharedResource
160 {
QOpenGLFunctionsPrivateExQOpenGLFunctionsPrivateEx161     QOpenGLFunctionsPrivateEx(QOpenGLContext *context)
162         : QOpenGLExtensionsPrivate(context)
163         , QOpenGLSharedResource(context->shareGroup())
164         , m_features(-1)
165         , m_extensions(-1)
166     {}
167 
invalidateResourceQOpenGLFunctionsPrivateEx168     void invalidateResource() override
169     {
170         m_features = -1;
171         m_extensions = -1;
172     }
173 
freeResourceQOpenGLFunctionsPrivateEx174     void freeResource(QOpenGLContext *) override
175     {
176         // no gl resources to free
177     }
178 
179     int m_features;
180     int m_extensions;
181 };
182 
Q_GLOBAL_STATIC(QOpenGLMultiGroupSharedResource,qt_gl_functions_resource)183 Q_GLOBAL_STATIC(QOpenGLMultiGroupSharedResource, qt_gl_functions_resource)
184 
185 static QOpenGLFunctionsPrivateEx *qt_gl_functions(QOpenGLContext *context = nullptr)
186 {
187     if (!context)
188         context = QOpenGLContext::currentContext();
189     Q_ASSERT(context);
190     QOpenGLFunctionsPrivateEx *funcs =
191         qt_gl_functions_resource()->value<QOpenGLFunctionsPrivateEx>(context);
192     return funcs;
193 }
194 
195 /*!
196     Constructs a default function resolver. The resolver cannot
197     be used until initializeOpenGLFunctions() is called to specify
198     the context.
199 
200     \sa initializeOpenGLFunctions()
201 */
QOpenGLFunctions()202 QOpenGLFunctions::QOpenGLFunctions()
203     : d_ptr(nullptr)
204 {
205 }
206 
207 /*!
208     Constructs a function resolver for \a context.  If \a context
209     is \nullptr, then the resolver will be created for the current
210     QOpenGLContext.
211 
212     The context or another context in the group must be current.
213 
214     An object constructed in this way can only be used with \a context
215     and other contexts that share with it.  Use initializeOpenGLFunctions()
216     to change the object's context association.
217 
218     \sa initializeOpenGLFunctions()
219 */
QOpenGLFunctions(QOpenGLContext * context)220 QOpenGLFunctions::QOpenGLFunctions(QOpenGLContext *context)
221     : d_ptr(nullptr)
222 {
223     if (context && QOpenGLContextGroup::currentContextGroup() == context->shareGroup())
224         d_ptr = qt_gl_functions(context);
225     else
226         qWarning("QOpenGLFunctions created with non-current context");
227 }
228 
QOpenGLExtensions()229 QOpenGLExtensions::QOpenGLExtensions()
230 {
231 }
232 
QOpenGLExtensions(QOpenGLContext * context)233 QOpenGLExtensions::QOpenGLExtensions(QOpenGLContext *context)
234     : QOpenGLExtraFunctions(context)
235 {
236 }
237 
238 /*!
239     \fn QOpenGLFunctions::~QOpenGLFunctions()
240 
241     Destroys this function resolver.
242 */
243 
qt_gl_resolve_features()244 static int qt_gl_resolve_features()
245 {
246     QOpenGLContext *ctx = QOpenGLContext::currentContext();
247     QOpenGLExtensionMatcher extensions;
248     int features = 0;
249     if ((extensions.match("GL_KHR_blend_equation_advanced")
250         || extensions.match("GL_NV_blend_equation_advanced")) &&
251         (extensions.match("GL_KHR_blend_equation_advanced_coherent")
252         || extensions.match("GL_NV_blend_equation_advanced_coherent"))) {
253         // We need both the advanced equations and the coherency for us
254         // to be able to easily use the new blend equations
255         features |= QOpenGLFunctions::BlendEquationAdvanced;
256     }
257     if (ctx->isOpenGLES()) {
258         // OpenGL ES
259         features |= QOpenGLFunctions::Multitexture |
260             QOpenGLFunctions::Shaders |
261             QOpenGLFunctions::Buffers |
262             QOpenGLFunctions::Framebuffers |
263             QOpenGLFunctions::BlendColor |
264             QOpenGLFunctions::BlendEquation |
265             QOpenGLFunctions::BlendEquationSeparate |
266             QOpenGLFunctions::BlendFuncSeparate |
267             QOpenGLFunctions::BlendSubtract |
268             QOpenGLFunctions::CompressedTextures |
269             QOpenGLFunctions::Multisample |
270             QOpenGLFunctions::StencilSeparate;
271         if (extensions.match("GL_IMG_texture_npot"))
272             features |= QOpenGLFunctions::NPOTTextures;
273         if (extensions.match("GL_OES_texture_npot"))
274             features |= QOpenGLFunctions::NPOTTextures |
275                 QOpenGLFunctions::NPOTTextureRepeat;
276         if (ctx->format().majorVersion() >= 3 || extensions.match("GL_EXT_texture_rg")) {
277             // Mesa's GLES implementation (as of 10.6.0) is unable to handle this, even though it provides 3.0.
278             const char *renderer = reinterpret_cast<const char *>(ctx->functions()->glGetString(GL_RENDERER));
279             if (!(renderer && strstr(renderer, "Mesa")))
280                 features |= QOpenGLFunctions::TextureRGFormats;
281         }
282         if (ctx->format().majorVersion() >= 3) {
283             features |= QOpenGLFunctions::MultipleRenderTargets;
284             if (ctx->format().minorVersion() >= 2 && extensions.match("GL_KHR_blend_equation_advanced_coherent")) {
285                 // GL_KHR_blend_equation_advanced is included in OpenGL ES/3.2
286                 features |= QOpenGLFunctions::BlendEquationAdvanced;
287             }
288         }
289         return features;
290     } else {
291         // OpenGL
292         features |= QOpenGLFunctions::TextureRGFormats;
293         QSurfaceFormat format = QOpenGLContext::currentContext()->format();
294 
295         if (format.majorVersion() >= 3)
296             features |= QOpenGLFunctions::Framebuffers | QOpenGLFunctions::MultipleRenderTargets;
297         else if (extensions.match("GL_EXT_framebuffer_object") || extensions.match("GL_ARB_framebuffer_object"))
298             features |= QOpenGLFunctions::Framebuffers | QOpenGLFunctions::MultipleRenderTargets;
299 
300         if (format.majorVersion() >= 2) {
301             features |= QOpenGLFunctions::BlendColor |
302                 QOpenGLFunctions::BlendEquation |
303                 QOpenGLFunctions::BlendSubtract |
304                 QOpenGLFunctions::Multitexture |
305                 QOpenGLFunctions::CompressedTextures |
306                 QOpenGLFunctions::Multisample |
307                 QOpenGLFunctions::BlendFuncSeparate |
308                 QOpenGLFunctions::Buffers |
309                 QOpenGLFunctions::Shaders |
310                 QOpenGLFunctions::StencilSeparate |
311                 QOpenGLFunctions::BlendEquationSeparate |
312                 QOpenGLFunctions::NPOTTextures |
313                 QOpenGLFunctions::NPOTTextureRepeat;
314         } else {
315             // Recognize features by extension name.
316             if (extensions.match("GL_ARB_multitexture"))
317                 features |= QOpenGLFunctions::Multitexture;
318             if (extensions.match("GL_ARB_shader_objects"))
319                 features |= QOpenGLFunctions::Shaders;
320             if (extensions.match("GL_EXT_blend_color"))
321                 features |= QOpenGLFunctions::BlendColor;
322             if (extensions.match("GL_EXT_blend_equation_separate"))
323                 features |= QOpenGLFunctions::BlendEquationSeparate;
324             if (extensions.match("GL_EXT_blend_subtract"))
325                 features |= QOpenGLFunctions::BlendSubtract;
326             if (extensions.match("GL_EXT_blend_func_separate"))
327                 features |= QOpenGLFunctions::BlendFuncSeparate;
328             if (extensions.match("GL_ARB_texture_compression"))
329                 features |= QOpenGLFunctions::CompressedTextures;
330             if (extensions.match("GL_ARB_multisample"))
331                 features |= QOpenGLFunctions::Multisample;
332             if (extensions.match("GL_ARB_texture_non_power_of_two"))
333                 features |= QOpenGLFunctions::NPOTTextures |
334                     QOpenGLFunctions::NPOTTextureRepeat;
335         }
336 
337         const QPair<int, int> version = format.version();
338         if (version < qMakePair(3, 0)
339             || (version == qMakePair(3, 0) && format.testOption(QSurfaceFormat::DeprecatedFunctions))
340             || (version == qMakePair(3, 1) && extensions.match("GL_ARB_compatibility"))
341             || (version >= qMakePair(3, 2) && format.profile() == QSurfaceFormat::CompatibilityProfile)) {
342             features |= QOpenGLFunctions::FixedFunctionPipeline;
343         }
344         return features;
345     }
346 }
347 
qt_gl_resolve_extensions()348 static int qt_gl_resolve_extensions()
349 {
350     int extensions = 0;
351     QOpenGLExtensionMatcher extensionMatcher;
352     QOpenGLContext *ctx = QOpenGLContext::currentContext();
353     QSurfaceFormat format = ctx->format();
354 
355     if (extensionMatcher.match("GL_EXT_bgra"))
356         extensions |= QOpenGLExtensions::BGRATextureFormat;
357     if (extensionMatcher.match("GL_ARB_texture_rectangle"))
358         extensions |= QOpenGLExtensions::TextureRectangle;
359     if (extensionMatcher.match("GL_ARB_texture_compression"))
360         extensions |= QOpenGLExtensions::TextureCompression;
361     if (extensionMatcher.match("GL_EXT_texture_compression_s3tc"))
362         extensions |= QOpenGLExtensions::DDSTextureCompression;
363     if (extensionMatcher.match("GL_OES_compressed_ETC1_RGB8_texture"))
364         extensions |= QOpenGLExtensions::ETC1TextureCompression;
365     if (extensionMatcher.match("GL_IMG_texture_compression_pvrtc"))
366         extensions |= QOpenGLExtensions::PVRTCTextureCompression;
367     if (extensionMatcher.match("GL_ARB_texture_mirrored_repeat"))
368         extensions |= QOpenGLExtensions::MirroredRepeat;
369     if (extensionMatcher.match("GL_EXT_stencil_two_side"))
370         extensions |= QOpenGLExtensions::StencilTwoSide;
371     if (extensionMatcher.match("GL_EXT_stencil_wrap"))
372         extensions |= QOpenGLExtensions::StencilWrap;
373     if (extensionMatcher.match("GL_NV_float_buffer"))
374         extensions |= QOpenGLExtensions::NVFloatBuffer;
375     if (extensionMatcher.match("GL_ARB_pixel_buffer_object"))
376         extensions |= QOpenGLExtensions::PixelBufferObject;
377     if (extensionMatcher.match("GL_ARB_texture_swizzle") || extensionMatcher.match("GL_EXT_texture_swizzle"))
378         extensions |= QOpenGLExtensions::TextureSwizzle;
379 
380     if (ctx->isOpenGLES()) {
381         if (format.majorVersion() >= 2)
382             extensions |= QOpenGLExtensions::GenerateMipmap;
383 
384         if (format.majorVersion() >= 3) {
385             extensions |= QOpenGLExtensions::PackedDepthStencil
386                 | QOpenGLExtensions::Depth24
387                 | QOpenGLExtensions::ElementIndexUint
388                 | QOpenGLExtensions::MapBufferRange
389                 | QOpenGLExtensions::FramebufferBlit
390                 | QOpenGLExtensions::FramebufferMultisample
391                 | QOpenGLExtensions::Sized8Formats;
392 #ifndef Q_OS_WASM
393             // WebGL 2.0 specification explicitly does not support texture swizzles
394             // https://www.khronos.org/registry/webgl/specs/latest/2.0/#5.19
395             extensions |= QOpenGLExtensions::TextureSwizzle;
396 #endif
397         } else {
398             // Recognize features by extension name.
399             if (extensionMatcher.match("GL_OES_packed_depth_stencil"))
400                 extensions |= QOpenGLExtensions::PackedDepthStencil;
401             if (extensionMatcher.match("GL_OES_depth24"))
402                 extensions |= QOpenGLExtensions::Depth24;
403             if (extensionMatcher.match("GL_ANGLE_framebuffer_blit"))
404                 extensions |= QOpenGLExtensions::FramebufferBlit;
405             if (extensionMatcher.match("GL_ANGLE_framebuffer_multisample"))
406                 extensions |= QOpenGLExtensions::FramebufferMultisample;
407             if (extensionMatcher.match("GL_NV_framebuffer_blit"))
408                 extensions |= QOpenGLExtensions::FramebufferBlit;
409             if (extensionMatcher.match("GL_NV_framebuffer_multisample"))
410                 extensions |= QOpenGLExtensions::FramebufferMultisample;
411             if (extensionMatcher.match("GL_OES_rgb8_rgba8"))
412                 extensions |= QOpenGLExtensions::Sized8Formats;
413         }
414 
415         if (extensionMatcher.match("GL_OES_mapbuffer"))
416             extensions |= QOpenGLExtensions::MapBuffer;
417         if (extensionMatcher.match("GL_OES_element_index_uint"))
418             extensions |= QOpenGLExtensions::ElementIndexUint;
419         // We don't match GL_APPLE_texture_format_BGRA8888 here because it has different semantics.
420         if (extensionMatcher.match("GL_IMG_texture_format_BGRA8888") || extensionMatcher.match("GL_EXT_texture_format_BGRA8888"))
421             extensions |= QOpenGLExtensions::BGRATextureFormat;
422 #if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED)
423         QString *deviceName =
424                 static_cast<QString *>(QGuiApplication::platformNativeInterface()->nativeResourceForIntegration("AndroidDeviceName"));
425         static bool wrongfullyReportsBgra8888Support = deviceName != 0
426                                                         && (deviceName->compare(QLatin1String("samsung SM-T211"), Qt::CaseInsensitive) == 0
427                                                             || deviceName->compare(QLatin1String("samsung SM-T210"), Qt::CaseInsensitive) == 0
428                                                             || deviceName->compare(QLatin1String("samsung SM-T215"), Qt::CaseInsensitive) == 0);
429         if (wrongfullyReportsBgra8888Support)
430             extensions &= ~QOpenGLExtensions::BGRATextureFormat;
431 #endif
432 
433         if (extensionMatcher.match("GL_EXT_discard_framebuffer"))
434             extensions |= QOpenGLExtensions::DiscardFramebuffer;
435         if (extensionMatcher.match("GL_EXT_texture_norm16"))
436             extensions |= QOpenGLExtensions::Sized16Formats;
437     } else {
438         extensions |= QOpenGLExtensions::ElementIndexUint
439             | QOpenGLExtensions::MapBuffer
440             | QOpenGLExtensions::Sized16Formats;
441 
442         if (format.version() >= qMakePair(1, 2))
443             extensions |= QOpenGLExtensions::BGRATextureFormat;
444 
445         if (format.version() >= qMakePair(1, 4) || extensionMatcher.match("GL_SGIS_generate_mipmap"))
446             extensions |= QOpenGLExtensions::GenerateMipmap;
447 
448         if (format.majorVersion() >= 3 || extensionMatcher.match("GL_ARB_framebuffer_object")) {
449             extensions |= QOpenGLExtensions::FramebufferMultisample
450                 | QOpenGLExtensions::FramebufferBlit
451                 | QOpenGLExtensions::PackedDepthStencil
452                 | QOpenGLExtensions::Sized8Formats;
453         } else {
454             // Recognize features by extension name.
455             if (extensionMatcher.match("GL_EXT_framebuffer_multisample"))
456                 extensions |= QOpenGLExtensions::FramebufferMultisample;
457             if (extensionMatcher.match("GL_EXT_framebuffer_blit"))
458                 extensions |= QOpenGLExtensions::FramebufferBlit;
459             if (extensionMatcher.match("GL_EXT_packed_depth_stencil"))
460                 extensions |= QOpenGLExtensions::PackedDepthStencil;
461         }
462 
463         if (format.version() >= qMakePair(3, 2) || extensionMatcher.match("GL_ARB_geometry_shader4"))
464             extensions |= QOpenGLExtensions::GeometryShaders;
465 
466         if (format.version() >= qMakePair(3, 3))
467             extensions |= QOpenGLExtensions::TextureSwizzle;
468 
469         if (extensionMatcher.match("GL_ARB_map_buffer_range"))
470             extensions |= QOpenGLExtensions::MapBufferRange;
471 
472         if (extensionMatcher.match("GL_EXT_framebuffer_sRGB")) {
473             GLboolean srgbCapableFramebuffers = false;
474             ctx->functions()->glGetBooleanv(GL_FRAMEBUFFER_SRGB_CAPABLE_EXT, &srgbCapableFramebuffers);
475             if (srgbCapableFramebuffers)
476                 extensions |= QOpenGLExtensions::SRGBFrameBuffer;
477         }
478     }
479 
480     return extensions;
481 }
482 
483 /*!
484     Returns the set of features that are present on this system's
485     OpenGL implementation.
486 
487     It is assumed that the QOpenGLContext associated with this function
488     resolver is current.
489 
490     \sa hasOpenGLFeature()
491 */
openGLFeatures() const492 QOpenGLFunctions::OpenGLFeatures QOpenGLFunctions::openGLFeatures() const
493 {
494     QOpenGLFunctionsPrivateEx *d = static_cast<QOpenGLFunctionsPrivateEx *>(d_ptr);
495     if (!d)
496         return { };
497     if (d->m_features == -1)
498         d->m_features = qt_gl_resolve_features();
499     return QOpenGLFunctions::OpenGLFeatures(d->m_features);
500 }
501 
502 /*!
503     Returns \c true if \a feature is present on this system's OpenGL
504     implementation; false otherwise.
505 
506     It is assumed that the QOpenGLContext associated with this function
507     resolver is current.
508 
509     \sa openGLFeatures()
510 */
hasOpenGLFeature(QOpenGLFunctions::OpenGLFeature feature) const511 bool QOpenGLFunctions::hasOpenGLFeature(QOpenGLFunctions::OpenGLFeature feature) const
512 {
513     QOpenGLFunctionsPrivateEx *d = static_cast<QOpenGLFunctionsPrivateEx *>(d_ptr);
514     if (!d)
515         return false;
516     if (d->m_features == -1)
517         d->m_features = qt_gl_resolve_features();
518     return (d->m_features & int(feature)) != 0;
519 }
520 
521 /*!
522     Returns the set of extensions that are present on this system's
523     OpenGL implementation.
524 
525     It is assumed that the QOpenGLContext associated with this extension
526     resolver is current.
527 
528     \sa hasOpenGLExtensions()
529 */
openGLExtensions()530 QOpenGLExtensions::OpenGLExtensions QOpenGLExtensions::openGLExtensions()
531 {
532     QOpenGLFunctionsPrivateEx *d = static_cast<QOpenGLFunctionsPrivateEx *>(d_ptr);
533     if (!d)
534         return { };
535     if (d->m_extensions == -1)
536         d->m_extensions = qt_gl_resolve_extensions();
537     return QOpenGLExtensions::OpenGLExtensions(d->m_extensions);
538 }
539 
540 /*!
541     Returns \c true if \a extension is present on this system's OpenGL
542     implementation; false otherwise.
543 
544     It is assumed that the QOpenGLContext associated with this extension
545     resolver is current.
546 
547     \sa openGLFeatures()
548 */
hasOpenGLExtension(QOpenGLExtensions::OpenGLExtension extension) const549 bool QOpenGLExtensions::hasOpenGLExtension(QOpenGLExtensions::OpenGLExtension extension) const
550 {
551     QOpenGLFunctionsPrivateEx *d = static_cast<QOpenGLFunctionsPrivateEx *>(d_ptr);
552     if (!d)
553         return false;
554     if (d->m_extensions == -1)
555         d->m_extensions = qt_gl_resolve_extensions();
556     return (d->m_extensions & int(extension)) != 0;
557 }
558 
559 /*!
560     \fn void QOpenGLFunctions::initializeGLFunctions()
561     \obsolete
562 
563     Use initializeOpenGLFunctions() instead.
564 */
565 
566 /*!
567     Initializes OpenGL function resolution for the current context.
568 
569     After calling this function, the QOpenGLFunctions object can only be
570     used with the current context and other contexts that share with it.
571     Call initializeOpenGLFunctions() again to change the object's context
572     association.
573 */
initializeOpenGLFunctions()574 void QOpenGLFunctions::initializeOpenGLFunctions()
575 {
576     d_ptr = qt_gl_functions();
577 }
578 
579 /*!
580     \fn void QOpenGLFunctions::glBindTexture(GLenum target, GLuint texture)
581 
582     Convenience function that calls glBindTexture(\a target, \a texture).
583 
584     For more information, see the OpenGL ES 2.0 documentation for
585     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBindTexture.xhtml}{glBindTexture()}.
586 
587     \since 5.3
588 */
589 
590 /*!
591     \fn void QOpenGLFunctions::glBlendFunc(GLenum sfactor, GLenum dfactor)
592 
593     Convenience function that calls glBlendFunc(\a sfactor, \a dfactor).
594 
595     For more information, see the OpenGL ES 2.0 documentation for
596     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBlendFunc.xhtml}{glBlendFunc()}.
597 
598     \since 5.3
599 */
600 
601 /*!
602     \fn void QOpenGLFunctions::glClear(GLbitfield mask)
603 
604     Convenience function that calls glClear(\a mask).
605 
606     For more information, see the OpenGL ES 2.0 documentation for
607     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glClear.xhtml}{glClear()}.
608 
609     \since 5.3
610 */
611 
612 /*!
613     \fn void QOpenGLFunctions::glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
614 
615     Convenience function that calls glClearColor(\a red, \a green, \a blue, \a alpha).
616 
617     For more information, see the OpenGL ES 2.0 documentation for
618     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glClearColor.xhtml}{glClearColor()}.
619 
620     \since 5.3
621 */
622 
623 /*!
624     \fn void QOpenGLFunctions::glClearStencil(GLint s)
625 
626     Convenience function that calls glClearStencil(\a s).
627 
628     For more information, see the OpenGL ES 2.0 documentation for
629     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glClearStencil.xhtml}{glClearStencil()}.
630 
631     \since 5.3
632 */
633 
634 /*!
635     \fn void QOpenGLFunctions::glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
636 
637     Convenience function that calls glColorMask(\a red, \a green, \a blue, \a alpha).
638 
639     For more information, see the OpenGL ES 2.0 documentation for
640     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glColorMask.xhtml}{glColorMask()}.
641 
642     \since 5.3
643 */
644 
645 /*!
646     \fn void QOpenGLFunctions::glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
647 
648     Convenience function that calls glCopyTexImage2D(\a target, \a level, \a internalformat, \a x, \a y, \a width, \a height, \a border).
649 
650     For more information, see the OpenGL ES 2.0 documentation for
651     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glCopyTexImage2D.xhtml}{glCopyTexImage2D()}.
652 
653     \since 5.3
654 */
655 
656 /*!
657     \fn void QOpenGLFunctions::glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
658 
659     Convenience function that calls glCopyTexSubImage2D(\a target, \a level, \a xoffset, \a yoffset, \a x, \a y, \a width, \a height).
660 
661     For more information, see the OpenGL ES 2.0 documentation for
662     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glCopyTexSubImage2D.xhtml}{glCopyTexSubImage2D()}.
663 
664     \since 5.3
665 */
666 
667 /*!
668     \fn void QOpenGLFunctions::glCullFace(GLenum mode)
669 
670     Convenience function that calls glCullFace(\a mode).
671 
672     For more information, see the OpenGL ES 2.0 documentation for
673     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glCullFace.xhtml}{glCullFace()}.
674 
675     \since 5.3
676 */
677 
678 /*!
679     \fn void QOpenGLFunctions::glDeleteTextures(GLsizei n, const GLuint* textures)
680 
681     Convenience function that calls glDeleteTextures(\a n, \a textures).
682 
683     For more information, see the OpenGL ES 2.0 documentation for
684     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDeleteTextures.xhtml}{glDeleteTextures()}.
685 
686     \since 5.3
687 */
688 
689 /*!
690     \fn void QOpenGLFunctions::glDepthFunc(GLenum func)
691 
692     Convenience function that calls glDepthFunc(\a func).
693 
694     For more information, see the OpenGL ES 2.0 documentation for
695     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDepthFunc.xhtml}{glDepthFunc()}.
696 
697     \since 5.3
698 */
699 
700 /*!
701     \fn void QOpenGLFunctions::glDepthMask(GLboolean flag)
702 
703     Convenience function that calls glDepthMask(\a flag).
704 
705     For more information, see the OpenGL ES 2.0 documentation for
706     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDepthMask.xhtml}{glDepthMask()}.
707 
708     \since 5.3
709 */
710 
711 /*!
712     \fn void QOpenGLFunctions::glDisable(GLenum cap)
713 
714     Convenience function that calls glDisable(\a cap).
715 
716     For more information, see the OpenGL ES 2.0 documentation for
717     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDisable.xhtml}{glDisable()}.
718 
719     \since 5.3
720 */
721 
722 /*!
723     \fn void QOpenGLFunctions::glDrawArrays(GLenum mode, GLint first, GLsizei count)
724 
725     Convenience function that calls glDrawArrays(\a mode, \a first, \a count).
726 
727     For more information, see the OpenGL ES 2.0 documentation for
728     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDrawArrays.xhtml}{glDrawArrays()}.
729 
730     \since 5.3
731 */
732 
733 /*!
734     \fn void QOpenGLFunctions::glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
735 
736     Convenience function that calls glDrawElements(\a mode, \a count, \a type, \a indices).
737 
738     For more information, see the OpenGL ES 2.0 documentation for
739     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDrawElements.xhtml}{glDrawElements()}.
740 
741     \since 5.3
742 */
743 
744 /*!
745     \fn void QOpenGLFunctions::glEnable(GLenum cap)
746 
747     Convenience function that calls glEnable(\a cap).
748 
749     For more information, see the OpenGL ES 2.0 documentation for
750     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glEnable.xhtml}{glEnable()}.
751 
752     \since 5.3
753 */
754 
755 /*!
756     \fn void QOpenGLFunctions::glFinish()
757 
758     Convenience function that calls glFinish().
759 
760     For more information, see the OpenGL ES 2.0 documentation for
761     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glFinish.xhtml}{glFinish()}.
762 
763     \since 5.3
764 */
765 
766 /*!
767     \fn void QOpenGLFunctions::glFlush()
768 
769     Convenience function that calls glFlush().
770 
771     For more information, see the OpenGL ES 2.0 documentation for
772     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glFlush.xhtml}{glFlush()}.
773 
774     \since 5.3
775 */
776 
777 /*!
778     \fn void QOpenGLFunctions::glFrontFace(GLenum mode)
779 
780     Convenience function that calls glFrontFace(\a mode).
781 
782     For more information, see the OpenGL ES 2.0 documentation for
783     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glFrontFace.xhtml}{glFrontFace()}.
784 
785     \since 5.3
786 */
787 
788 /*!
789     \fn void QOpenGLFunctions::glGenTextures(GLsizei n, GLuint* textures)
790 
791     Convenience function that calls glGenTextures(\a n, \a textures).
792 
793     For more information, see the OpenGL ES 2.0 documentation for
794     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGenTextures.xhtml}{glGenTextures()}.
795 
796     \since 5.3
797 */
798 
799 /*!
800     \fn void QOpenGLFunctions::glGetBooleanv(GLenum pname, GLboolean* params)
801 
802     Convenience function that calls glGetBooleanv(\a pname, \a params).
803 
804     For more information, see the OpenGL ES 2.0 documentation for
805     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGet.xhtml}{glGetBooleanv()}.
806 
807     \since 5.3
808 */
809 
810 /*!
811     \fn GLenum QOpenGLFunctions::glGetError()
812 
813     Convenience function that calls glGetError().
814 
815     For more information, see the OpenGL ES 2.0 documentation for
816     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetError.xhtml}{glGetError()}.
817 
818     \since 5.3
819 */
820 
821 /*!
822     \fn void QOpenGLFunctions::glGetFloatv(GLenum pname, GLfloat* params)
823 
824     Convenience function that calls glGetFloatv(\a pname, \a params).
825 
826     For more information, see the OpenGL ES 2.0 documentation for
827     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGet.xhtml}{glGetFloatv()}.
828 
829     \since 5.3
830 */
831 
832 /*!
833     \fn void QOpenGLFunctions::glGetIntegerv(GLenum pname, GLint* params)
834 
835     Convenience function that calls glGetIntegerv(\a pname, \a params).
836 
837     For more information, see the OpenGL ES 2.0 documentation for
838     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGet.xhtml}{glGetIntegerv()}.
839 
840     \since 5.3
841 */
842 
843 /*!
844     \fn const GLubyte *QOpenGLFunctions::glGetString(GLenum name)
845 
846     Convenience function that calls glGetString(\a name).
847 
848     For more information, see the OpenGL ES 2.0 documentation for
849     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetString.xhtml}{glGetString()}.
850 
851     \since 5.3
852 */
853 
854 /*!
855     \fn void QOpenGLFunctions::glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
856 
857     Convenience function that calls glGetTexParameterfv(\a target, \a pname, \a params).
858 
859     For more information, see the OpenGL ES 2.0 documentation for
860     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetTexParameter.xhtml}{glGetTexParameterfv()}.
861 
862     \since 5.3
863 */
864 
865 /*!
866     \fn void QOpenGLFunctions::glGetTexParameteriv(GLenum target, GLenum pname, GLint* params)
867 
868     Convenience function that calls glGetTexParameteriv(\a target, \a pname, \a params).
869 
870     For more information, see the OpenGL ES 2.0 documentation for
871     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetTexParameter.xhtml}{glGetTexParameteriv()}.
872 
873     \since 5.3
874 */
875 
876 /*!
877     \fn void QOpenGLFunctions::glHint(GLenum target, GLenum mode)
878 
879     Convenience function that calls glHint(\a target, \a mode).
880 
881     For more information, see the OpenGL ES 2.0 documentation for
882     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glHint.xhtml}{glHint()}.
883 
884     \since 5.3
885 */
886 
887 /*!
888     \fn GLboolean QOpenGLFunctions::glIsEnabled(GLenum cap)
889 
890     Convenience function that calls glIsEnabled(\a cap).
891 
892     For more information, see the OpenGL ES 2.0 documentation for
893     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glIsEnabled.xhtml}{glIsEnabled()}.
894 
895     \since 5.3
896 */
897 
898 /*!
899     \fn GLboolean QOpenGLFunctions::glIsTexture(GLuint texture)
900 
901     Convenience function that calls glIsTexture(\a texture).
902 
903     For more information, see the OpenGL ES 2.0 documentation for
904     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glIsTexture.xhtml}{glIsTexture()}.
905 
906     \since 5.3
907 */
908 
909 /*!
910     \fn void QOpenGLFunctions::glLineWidth(GLfloat width)
911 
912     Convenience function that calls glLineWidth(\a width).
913 
914     For more information, see the OpenGL ES 2.0 documentation for
915     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glLineWidth.xhtml}{glLineWidth()}.
916 
917     \since 5.3
918 */
919 
920 /*!
921     \fn void QOpenGLFunctions::glPixelStorei(GLenum pname, GLint param)
922 
923     Convenience function that calls glPixelStorei(\a pname, \a param).
924 
925     For more information, see the OpenGL ES 2.0 documentation for
926     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glPixelStorei.xhtml}{glPixelStorei()}.
927 
928     \since 5.3
929 */
930 
931 /*!
932     \fn void QOpenGLFunctions::glPolygonOffset(GLfloat factor, GLfloat units)
933 
934     Convenience function that calls glPolygonOffset(\a factor, \a units).
935 
936     For more information, see the OpenGL ES 2.0 documentation for
937     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glPolygonOffset.xhtml}{glPolygonOffset()}.
938 
939     \since 5.3
940 */
941 
942 /*!
943     \fn void QOpenGLFunctions::glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)
944 
945     Convenience function that calls glReadPixels(\a x, \a y, \a width, \a height, \a format, \a type, \a pixels).
946 
947     For more information, see the OpenGL ES 2.0 documentation for
948     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glReadPixels.xhtml}{glReadPixels()}.
949 
950     \since 5.3
951 */
952 
953 /*!
954     \fn void QOpenGLFunctions::glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
955 
956     Convenience function that calls glScissor(\a x, \a y, \a width, \a height).
957 
958     For more information, see the OpenGL ES 2.0 documentation for
959     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glScissor.xhtml}{glScissor()}.
960 
961     \since 5.3
962 */
963 
964 /*!
965     \fn void QOpenGLFunctions::glStencilFunc(GLenum func, GLint ref, GLuint mask)
966 
967     Convenience function that calls glStencilFunc(\a func, \a ref, \a mask).
968 
969     For more information, see the OpenGL ES 2.0 documentation for
970     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glStencilFunc.xhtml}{glStencilFunc()}.
971 
972     \since 5.3
973 */
974 
975 /*!
976     \fn void QOpenGLFunctions::glStencilMask(GLuint mask)
977 
978     Convenience function that calls glStencilMask(\a mask).
979 
980     For more information, see the OpenGL ES 2.0 documentation for
981     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glStencilMask.xhtml}{glStencilMask()}.
982 
983     \since 5.3
984 */
985 
986 /*!
987     \fn void QOpenGLFunctions::glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
988 
989     Convenience function that calls glStencilOp(\a fail, \a zfail, \a zpass).
990 
991     For more information, see the OpenGL ES 2.0 documentation for
992     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glStencilOp.xhtml}{glStencilOp()}.
993 
994     \since 5.3
995 */
996 
997 /*!
998     \fn void QOpenGLFunctions::glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
999 
1000     Convenience function that calls glTexImage2D(\a target, \a level, \a internalformat, \a width, \a height, \a border, \a format, \a type, \a pixels).
1001 
1002     For more information, see the OpenGL ES 2.0 documentation for
1003     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glTexImage2D.xhtml}{glTexImage2D()}.
1004 
1005     \since 5.3
1006 */
1007 
1008 /*!
1009     \fn void QOpenGLFunctions::glTexParameterf(GLenum target, GLenum pname, GLfloat param)
1010 
1011     Convenience function that calls glTexParameterf(\a target, \a pname, \a param).
1012 
1013     For more information, see the OpenGL ES 2.0 documentation for
1014     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glTexParameter.xhtml}{glTexParameterf()}.
1015 
1016     \since 5.3
1017 */
1018 
1019 /*!
1020     \fn void QOpenGLFunctions::glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
1021 
1022     Convenience function that calls glTexParameterfv(\a target, \a pname, \a params).
1023 
1024     For more information, see the OpenGL ES 2.0 documentation for
1025     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glTexParameter.xhtml}{glTexParameterfv()}.
1026 
1027     \since 5.3
1028 */
1029 
1030 /*!
1031     \fn void QOpenGLFunctions::glTexParameteri(GLenum target, GLenum pname, GLint param)
1032 
1033     Convenience function that calls glTexParameteri(\a target, \a pname, \a param).
1034 
1035     For more information, see the OpenGL ES 2.0 documentation for
1036     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glTexParameter.xhtml}{glTexParameteri()}.
1037 
1038     \since 5.3
1039 */
1040 
1041 /*!
1042     \fn void QOpenGLFunctions::glTexParameteriv(GLenum target, GLenum pname, const GLint* params)
1043 
1044     Convenience function that calls glTexParameteriv(\a target, \a pname, \a params).
1045 
1046     For more information, see the OpenGL ES 2.0 documentation for
1047     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glTexParameter.xhtml}{glTexParameteriv()}.
1048 
1049     \since 5.3
1050 */
1051 
1052 /*!
1053     \fn void QOpenGLFunctions::glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels)
1054 
1055     Convenience function that calls glTexSubImage2D(\a target, \a level, \a xoffset, \a yoffset, \a width, \a height, \a format, \a type, \a pixels).
1056 
1057     For more information, see the OpenGL ES 2.0 documentation for
1058     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glTexSubImage2D.xhtml}{glTexSubImage2D()}.
1059 
1060     \since 5.3
1061 */
1062 
1063 /*!
1064     \fn void QOpenGLFunctions::glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
1065 
1066     Convenience function that calls glViewport(\a x, \a y, \a width, \a height).
1067 
1068     For more information, see the OpenGL ES 2.0 documentation for
1069     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glViewport.xhtml}{glViewport()}.
1070 
1071     \since 5.3
1072 */
1073 
1074 /*!
1075     \fn void QOpenGLFunctions::glActiveTexture(GLenum texture)
1076 
1077     Convenience function that calls glActiveTexture(\a texture).
1078 
1079     For more information, see the OpenGL ES 2.0 documentation for
1080     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glActiveTexture.xhtml}{glActiveTexture()}.
1081 */
1082 
1083 /*!
1084     \fn void QOpenGLFunctions::glAttachShader(GLuint program, GLuint shader)
1085 
1086     Convenience function that calls glAttachShader(\a program, \a shader).
1087 
1088     For more information, see the OpenGL ES 2.0 documentation for
1089     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glAttachShader.xhtml}{glAttachShader()}.
1090 
1091     This convenience function will do nothing on OpenGL ES 1.x systems.
1092 */
1093 
1094 /*!
1095     \fn void QOpenGLFunctions::glBindAttribLocation(GLuint program, GLuint index, const char* name)
1096 
1097     Convenience function that calls glBindAttribLocation(\a program, \a index, \a name).
1098 
1099     For more information, see the OpenGL ES 2.0 documentation for
1100     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBindAttribLocation.xhtml}{glBindAttribLocation()}.
1101 
1102     This convenience function will do nothing on OpenGL ES 1.x systems.
1103 */
1104 
1105 /*!
1106     \fn void QOpenGLFunctions::glBindBuffer(GLenum target, GLuint buffer)
1107 
1108     Convenience function that calls glBindBuffer(\a target, \a buffer).
1109 
1110     For more information, see the OpenGL ES 2.0 documentation for
1111     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBindBuffer.xhtml}{glBindBuffer()}.
1112 */
1113 
1114 /*!
1115     \fn void QOpenGLFunctions::glBindFramebuffer(GLenum target, GLuint framebuffer)
1116 
1117     Convenience function that calls glBindFramebuffer(\a target, \a framebuffer).
1118 
1119     Note that Qt will translate a \a framebuffer argument of 0 to the currently
1120     bound QOpenGLContext's defaultFramebufferObject().
1121 
1122     For more information, see the OpenGL ES 2.0 documentation for
1123     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBindFramebuffer.xhtml}{glBindFramebuffer()}.
1124 */
1125 
1126 /*!
1127     \fn void QOpenGLFunctions::glBindRenderbuffer(GLenum target, GLuint renderbuffer)
1128 
1129     Convenience function that calls glBindRenderbuffer(\a target, \a renderbuffer).
1130 
1131     For more information, see the OpenGL ES 2.0 documentation for
1132     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBindRenderbuffer.xhtml}{glBindRenderbuffer()}.
1133 */
1134 
1135 /*!
1136     \fn void QOpenGLFunctions::glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
1137 
1138     Convenience function that calls glBlendColor(\a red, \a green, \a blue, \a alpha).
1139 
1140     For more information, see the OpenGL ES 2.0 documentation for
1141     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBlendColor.xhtml}{glBlendColor()}.
1142 */
1143 
1144 /*!
1145     \fn void QOpenGLFunctions::glBlendEquation(GLenum mode)
1146 
1147     Convenience function that calls glBlendEquation(\a mode).
1148 
1149     For more information, see the OpenGL ES 2.0 documentation for
1150     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBlendEquation.xhtml}{glBlendEquation()}.
1151 */
1152 
1153 /*!
1154     \fn void QOpenGLFunctions::glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
1155 
1156     Convenience function that calls glBlendEquationSeparate(\a modeRGB, \a modeAlpha).
1157 
1158     For more information, see the OpenGL ES 2.0 documentation for
1159     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBlendEquationSeparate.xhtml}{glBlendEquationSeparate()}.
1160 */
1161 
1162 /*!
1163     \fn void QOpenGLFunctions::glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
1164 
1165     Convenience function that calls glBlendFuncSeparate(\a srcRGB, \a dstRGB, \a srcAlpha, \a dstAlpha).
1166 
1167     For more information, see the OpenGL ES 2.0 documentation for
1168     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBlendFuncSeparate.xhtml}{glBlendFuncSeparate()}.
1169 */
1170 
1171 /*!
1172     \fn void QOpenGLFunctions::glBufferData(GLenum target, qopengl_GLsizeiptr size, const void* data, GLenum usage)
1173 
1174     Convenience function that calls glBufferData(\a target, \a size, \a data, \a usage).
1175 
1176     For more information, see the OpenGL ES 2.0 documentation for
1177     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBufferData.xhtml}{glBufferData()}.
1178 */
1179 
1180 /*!
1181     \fn void QOpenGLFunctions::glBufferSubData(GLenum target, qopengl_GLintptr offset, qopengl_GLsizeiptr size, const void* data)
1182 
1183     Convenience function that calls glBufferSubData(\a target, \a offset, \a size, \a data).
1184 
1185     For more information, see the OpenGL ES 2.0 documentation for
1186     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBufferSubData.xhtml}{glBufferSubData()}.
1187 */
1188 
1189 /*!
1190     \fn GLenum QOpenGLFunctions::glCheckFramebufferStatus(GLenum target)
1191 
1192     Convenience function that calls glCheckFramebufferStatus(\a target).
1193 
1194     For more information, see the OpenGL ES 2.0 documentation for
1195     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glCheckFramebufferStatus.xhtml}{glCheckFramebufferStatus()}.
1196 */
1197 
1198 /*!
1199     \fn void QOpenGLFunctions::glClearDepthf(GLclampf depth)
1200 
1201     Convenience function that calls glClearDepth(\a depth) on
1202     desktop OpenGL systems and glClearDepthf(\a depth) on
1203     embedded OpenGL ES systems.
1204 
1205     For more information, see the OpenGL ES 2.0 documentation for
1206     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glClearDepthf.xhtml}{glClearDepthf()}.
1207 */
1208 
1209 /*!
1210     \fn void QOpenGLFunctions::glCompileShader(GLuint shader)
1211 
1212     Convenience function that calls glCompileShader(\a shader).
1213 
1214     For more information, see the OpenGL ES 2.0 documentation for
1215     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glCompileShader.xhtml}{glCompileShader()}.
1216 
1217     This convenience function will do nothing on OpenGL ES 1.x systems.
1218 */
1219 
1220 /*!
1221     \fn void QOpenGLFunctions::glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data)
1222 
1223     Convenience function that calls glCompressedTexImage2D(\a target, \a level, \a internalformat, \a width, \a height, \a border, \a imageSize, \a data).
1224 
1225     For more information, see the OpenGL ES 2.0 documentation for
1226     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glCompressedTexImage2D.xhtml}{glCompressedTexImage2D()}.
1227 */
1228 
1229 /*!
1230     \fn void QOpenGLFunctions::glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data)
1231 
1232     Convenience function that calls glCompressedTexSubImage2D(\a target, \a level, \a xoffset, \a yoffset, \a width, \a height, \a format, \a imageSize, \a data).
1233 
1234     For more information, see the OpenGL ES 2.0 documentation for
1235     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glCompressedTexSubImage2D.xhtml}{glCompressedTexSubImage2D()}.
1236 */
1237 
1238 /*!
1239     \fn GLuint QOpenGLFunctions::glCreateProgram()
1240 
1241     Convenience function that calls glCreateProgram().
1242 
1243     For more information, see the OpenGL ES 2.0 documentation for
1244     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glCreateProgram.xhtml}{glCreateProgram()}.
1245 
1246     This convenience function will do nothing on OpenGL ES 1.x systems.
1247 */
1248 
1249 /*!
1250     \fn GLuint QOpenGLFunctions::glCreateShader(GLenum type)
1251 
1252     Convenience function that calls glCreateShader(\a type).
1253 
1254     For more information, see the OpenGL ES 2.0 documentation for
1255     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glCreateShader.xhtml}{glCreateShader()}.
1256 
1257     This convenience function will do nothing on OpenGL ES 1.x systems.
1258 */
1259 
1260 /*!
1261     \fn void QOpenGLFunctions::glDeleteBuffers(GLsizei n, const GLuint* buffers)
1262 
1263     Convenience function that calls glDeleteBuffers(\a n, \a buffers).
1264 
1265     For more information, see the OpenGL ES 2.0 documentation for
1266     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDeleteBuffers.xhtml}{glDeleteBuffers()}.
1267 */
1268 
1269 /*!
1270     \fn void QOpenGLFunctions::glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
1271 
1272     Convenience function that calls glDeleteFramebuffers(\a n, \a framebuffers).
1273 
1274     For more information, see the OpenGL ES 2.0 documentation for
1275     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDeleteFramebuffers.xhtml}{glDeleteFramebuffers()}.
1276 */
1277 
1278 /*!
1279     \fn void QOpenGLFunctions::glDeleteProgram(GLuint program)
1280 
1281     Convenience function that calls glDeleteProgram(\a program).
1282 
1283     For more information, see the OpenGL ES 2.0 documentation for
1284     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDeleteProgram.xhtml}{glDeleteProgram()}.
1285 
1286     This convenience function will do nothing on OpenGL ES 1.x systems.
1287 */
1288 
1289 /*!
1290     \fn void QOpenGLFunctions::glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
1291 
1292     Convenience function that calls glDeleteRenderbuffers(\a n, \a renderbuffers).
1293 
1294     For more information, see the OpenGL ES 2.0 documentation for
1295     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDeleteRenderbuffers.xhtml}{glDeleteRenderbuffers()}.
1296 */
1297 
1298 /*!
1299     \fn void QOpenGLFunctions::glDeleteShader(GLuint shader)
1300 
1301     Convenience function that calls glDeleteShader(\a shader).
1302 
1303     For more information, see the OpenGL ES 2.0 documentation for
1304     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDeleteShader.xhtml}{glDeleteShader()}.
1305 
1306     This convenience function will do nothing on OpenGL ES 1.x systems.
1307 */
1308 
1309 /*!
1310     \fn void QOpenGLFunctions::glDepthRangef(GLclampf zNear, GLclampf zFar)
1311 
1312     Convenience function that calls glDepthRange(\a zNear, \a zFar) on
1313     desktop OpenGL systems and glDepthRangef(\a zNear, \a zFar) on
1314     embedded OpenGL ES systems.
1315 
1316     For more information, see the OpenGL ES 2.0 documentation for
1317     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDepthRangef.xhtml}{glDepthRangef()}.
1318 */
1319 
1320 /*!
1321     \fn void QOpenGLFunctions::glDetachShader(GLuint program, GLuint shader)
1322 
1323     Convenience function that calls glDetachShader(\a program, \a shader).
1324 
1325     For more information, see the OpenGL ES 2.0 documentation for
1326     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDetachShader.xhtml}{glDetachShader()}.
1327 
1328     This convenience function will do nothing on OpenGL ES 1.x systems.
1329 */
1330 
1331 /*!
1332     \fn void QOpenGLFunctions::glDisableVertexAttribArray(GLuint index)
1333 
1334     Convenience function that calls glDisableVertexAttribArray(\a index).
1335 
1336     For more information, see the OpenGL ES 2.0 documentation for
1337     \l{https://www.khronos.org/registry/OpenGL-Refpages/es2.0/html/glDisableVertexAttribArray.xhtml}{glDisableVertexAttribArray()}.
1338 
1339     This convenience function will do nothing on OpenGL ES 1.x systems.
1340 */
1341 
1342 /*!
1343     \fn void QOpenGLFunctions::glEnableVertexAttribArray(GLuint index)
1344 
1345     Convenience function that calls glEnableVertexAttribArray(\a index).
1346 
1347     For more information, see the OpenGL ES 2.0 documentation for
1348     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glEnableVertexAttribArray.xhtml}{glEnableVertexAttribArray()}.
1349 
1350     This convenience function will do nothing on OpenGL ES 1.x systems.
1351 */
1352 
1353 /*!
1354     \fn void QOpenGLFunctions::glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
1355 
1356     Convenience function that calls glFramebufferRenderbuffer(\a target, \a attachment, \a renderbuffertarget, \a renderbuffer).
1357 
1358     For more information, see the OpenGL ES 2.0 documentation for
1359     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glFramebufferRenderbuffer.xhtml}{glFramebufferRenderbuffer()}.
1360 */
1361 
1362 /*!
1363     \fn void QOpenGLFunctions::glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
1364 
1365     Convenience function that calls glFramebufferTexture2D(\a target, \a attachment, \a textarget, \a texture, \a level).
1366 
1367     For more information, see the OpenGL ES 2.0 documentation for
1368     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glFramebufferTexture2D.xhtml}{glFramebufferTexture2D()}.
1369 */
1370 
1371 /*!
1372     \fn void QOpenGLFunctions::glGenBuffers(GLsizei n, GLuint* buffers)
1373 
1374     Convenience function that calls glGenBuffers(\a n, \a buffers).
1375 
1376     For more information, see the OpenGL ES 2.0 documentation for
1377     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGenBuffers.xhtml}{glGenBuffers()}.
1378 */
1379 
1380 /*!
1381     \fn void QOpenGLFunctions::glGenerateMipmap(GLenum target)
1382 
1383     Convenience function that calls glGenerateMipmap(\a target).
1384 
1385     For more information, see the OpenGL ES 2.0 documentation for
1386     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGenerateMipmap.xhtml}{glGenerateMipmap()}.
1387 */
1388 
1389 /*!
1390     \fn void QOpenGLFunctions::glGenFramebuffers(GLsizei n, GLuint* framebuffers)
1391 
1392     Convenience function that calls glGenFramebuffers(\a n, \a framebuffers).
1393 
1394     For more information, see the OpenGL ES 2.0 documentation for
1395     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGenFramebuffers.xhtml}{glGenFramebuffers()}.
1396 */
1397 
1398 /*!
1399     \fn void QOpenGLFunctions::glGenRenderbuffers(GLsizei n, GLuint* renderbuffers)
1400 
1401     Convenience function that calls glGenRenderbuffers(\a n, \a renderbuffers).
1402 
1403     For more information, see the OpenGL ES 2.0 documentation for
1404     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGenRenderbuffers.xhtml}{glGenRenderbuffers()}.
1405 */
1406 
1407 /*!
1408     \fn void QOpenGLFunctions::glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
1409 
1410     Convenience function that calls glGetActiveAttrib(\a program, \a index, \a bufsize, \a length, \a size, \a type, \a name).
1411 
1412     For more information, see the OpenGL ES 2.0 documentation for
1413     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetActiveAttrib.xhtml}{glGetActiveAttrib()}.
1414 
1415     This convenience function will do nothing on OpenGL ES 1.x systems.
1416 */
1417 
1418 /*!
1419     \fn void QOpenGLFunctions::glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
1420 
1421     Convenience function that calls glGetActiveUniform(\a program, \a index, \a bufsize, \a length, \a size, \a type, \a name).
1422 
1423     For more information, see the OpenGL ES 2.0 documentation for
1424     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetActiveUniform.xhtml}{glGetActiveUniform()}.
1425 
1426     This convenience function will do nothing on OpenGL ES 1.x systems.
1427 */
1428 
1429 /*!
1430     \fn void QOpenGLFunctions::glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
1431 
1432     Convenience function that calls glGetAttachedShaders(\a program, \a maxcount, \a count, \a shaders).
1433 
1434     For more information, see the OpenGL ES 2.0 documentation for
1435     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetAttachedShaders.xhtml}{glGetAttachedShaders()}.
1436 
1437     This convenience function will do nothing on OpenGL ES 1.x systems.
1438 */
1439 
1440 /*!
1441     \fn GLint QOpenGLFunctions::glGetAttribLocation(GLuint program, const char* name)
1442 
1443     Convenience function that calls glGetAttribLocation(\a program, \a name).
1444 
1445     For more information, see the OpenGL ES 2.0 documentation for
1446     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetAttribLocation.xhtml}{glGetAttribLocation()}.
1447 
1448     This convenience function will do nothing on OpenGL ES 1.x systems.
1449 */
1450 
1451 /*!
1452     \fn void QOpenGLFunctions::glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
1453 
1454     Convenience function that calls glGetBufferParameteriv(\a target, \a pname, \a params).
1455 
1456     For more information, see the OpenGL ES 2.0 documentation for
1457     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetBufferParameteriv.xhtml}{glGetBufferParameteriv()}.
1458 */
1459 
1460 /*!
1461     \fn void QOpenGLFunctions::glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
1462 
1463     Convenience function that calls glGetFramebufferAttachmentParameteriv(\a target, \a attachment, \a pname, \a params).
1464 
1465     For more information, see the OpenGL ES 2.0 documentation for
1466     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetFramebufferAttachmentParameteriv.xhtml}{glGetFramebufferAttachmentParameteriv()}.
1467 */
1468 
1469 /*!
1470     \fn void QOpenGLFunctions::glGetProgramiv(GLuint program, GLenum pname, GLint* params)
1471 
1472     Convenience function that calls glGetProgramiv(\a program, \a pname, \a params).
1473 
1474     For more information, see the OpenGL ES 2.0 documentation for
1475     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetProgramiv.xhtml}{glGetProgramiv()}.
1476 
1477     This convenience function will do nothing on OpenGL ES 1.x systems.
1478 */
1479 
1480 /*!
1481     \fn void QOpenGLFunctions::glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog)
1482 
1483     Convenience function that calls glGetProgramInfoLog(\a program, \a bufsize, \a length, \a infolog).
1484 
1485     For more information, see the OpenGL ES 2.0 documentation for
1486     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetProgramInfoLog.xhtml}{glGetProgramInfoLog()}.
1487 
1488     This convenience function will do nothing on OpenGL ES 1.x systems.
1489 */
1490 
1491 /*!
1492     \fn void QOpenGLFunctions::glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
1493 
1494     Convenience function that calls glGetRenderbufferParameteriv(\a target, \a pname, \a params).
1495 
1496     For more information, see the OpenGL ES 2.0 documentation for
1497     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetRenderbufferParameteriv.xhtml}{glGetRenderbufferParameteriv()}.
1498 */
1499 
1500 /*!
1501     \fn void QOpenGLFunctions::glGetShaderiv(GLuint shader, GLenum pname, GLint* params)
1502 
1503     Convenience function that calls glGetShaderiv(\a shader, \a pname, \a params).
1504 
1505     For more information, see the OpenGL ES 2.0 documentation for
1506     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetShaderiv.xhtml}{glGetShaderiv()}.
1507 
1508     This convenience function will do nothing on OpenGL ES 1.x systems.
1509 */
1510 
1511 /*!
1512     \fn void QOpenGLFunctions::glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog)
1513 
1514     Convenience function that calls glGetShaderInfoLog(\a shader, \a bufsize, \a length, \a infolog).
1515 
1516     For more information, see the OpenGL ES 2.0 documentation for
1517     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetShaderInfoLog.xhtml}{glGetShaderInfoLog()}.
1518 
1519     This convenience function will do nothing on OpenGL ES 1.x systems.
1520 */
1521 
1522 /*!
1523     \fn void QOpenGLFunctions::glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
1524 
1525     Convenience function that calls glGetShaderPrecisionFormat(\a shadertype, \a precisiontype, \a range, \a precision).
1526 
1527     For more information, see the OpenGL ES 2.0 documentation for
1528     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetShaderPrecisionFormat.xhtml}{glGetShaderPrecisionFormat()}.
1529 
1530     This convenience function will do nothing on OpenGL ES 1.x systems.
1531 */
1532 
1533 /*!
1534     \fn void QOpenGLFunctions::glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source)
1535 
1536     Convenience function that calls glGetShaderSource(\a shader, \a bufsize, \a length, \a source).
1537 
1538     For more information, see the OpenGL ES 2.0 documentation for
1539     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetShaderSource.xhtml}{glGetShaderSource()}.
1540 
1541     This convenience function will do nothing on OpenGL ES 1.x systems.
1542 */
1543 
1544 /*!
1545     \fn void QOpenGLFunctions::glGetUniformfv(GLuint program, GLint location, GLfloat* params)
1546 
1547     Convenience function that calls glGetUniformfv(\a program, \a location, \a params).
1548 
1549     For more information, see the OpenGL ES 2.0 documentation for
1550     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetUniform.xhtml}{glGetUniformfv()}.
1551 
1552     This convenience function will do nothing on OpenGL ES 1.x systems.
1553 */
1554 
1555 /*!
1556     \fn void QOpenGLFunctions::glGetUniformiv(GLuint program, GLint location, GLint* params)
1557 
1558     Convenience function that calls glGetUniformiv(\a program, \a location, \a params).
1559 
1560     For more information, see the OpenGL ES 2.0 documentation for
1561     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetUniform.xhtml}{glGetUniformiv()}.
1562 
1563     This convenience function will do nothing on OpenGL ES 1.x systems.
1564 */
1565 
1566 /*!
1567     \fn GLint QOpenGLFunctions::glGetUniformLocation(GLuint program, const char* name)
1568 
1569     Convenience function that calls glGetUniformLocation(\a program, \a name).
1570 
1571     For more information, see the OpenGL ES 2.0 documentation for
1572     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetUniformLocation.xhtml}{glGetUniformLocation()}.
1573 
1574     This convenience function will do nothing on OpenGL ES 1.x systems.
1575 */
1576 
1577 /*!
1578     \fn void QOpenGLFunctions::glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
1579 
1580     Convenience function that calls glGetVertexAttribfv(\a index, \a pname, \a params).
1581 
1582     For more information, see the OpenGL ES 2.0 documentation for
1583     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetVertexAttribfv.xhtml}{glGetVertexAttribfv()}.
1584 
1585     This convenience function will do nothing on OpenGL ES 1.x systems.
1586 */
1587 
1588 /*!
1589     \fn void QOpenGLFunctions::glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
1590 
1591     Convenience function that calls glGetVertexAttribiv(\a index, \a pname, \a params).
1592 
1593     For more information, see the OpenGL ES 2.0 documentation for
1594     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetVertexAttribiv.xhtml}{glGetVertexAttribiv()}.
1595 
1596     This convenience function will do nothing on OpenGL ES 1.x systems.
1597 */
1598 
1599 /*!
1600     \fn void QOpenGLFunctions::glGetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer)
1601 
1602     Convenience function that calls glGetVertexAttribPointerv(\a index, \a pname, \a pointer).
1603 
1604     For more information, see the OpenGL ES 2.0 documentation for
1605     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetVertexAttribPointerv.xhtml}{glGetVertexAttribPointerv()}.
1606 
1607     This convenience function will do nothing on OpenGL ES 1.x systems.
1608 */
1609 
1610 /*!
1611     \fn GLboolean QOpenGLFunctions::glIsBuffer(GLuint buffer)
1612 
1613     Convenience function that calls glIsBuffer(\a buffer).
1614 
1615     For more information, see the OpenGL ES 2.0 documentation for
1616     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glIsBuffer.xhtml}{glIsBuffer()}.
1617 */
1618 
1619 /*!
1620     \fn GLboolean QOpenGLFunctions::glIsFramebuffer(GLuint framebuffer)
1621 
1622     Convenience function that calls glIsFramebuffer(\a framebuffer).
1623 
1624     For more information, see the OpenGL ES 2.0 documentation for
1625     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glIsFramebuffer.xhtml}{glIsFramebuffer()}.
1626 */
1627 
1628 /*!
1629     \fn GLboolean QOpenGLFunctions::glIsProgram(GLuint program)
1630 
1631     Convenience function that calls glIsProgram(\a program).
1632 
1633     For more information, see the OpenGL ES 2.0 documentation for
1634     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glIsProgram.xhtml}{glIsProgram()}.
1635 
1636     This convenience function will do nothing on OpenGL ES 1.x systems.
1637 */
1638 
1639 /*!
1640     \fn GLboolean QOpenGLFunctions::glIsRenderbuffer(GLuint renderbuffer)
1641 
1642     Convenience function that calls glIsRenderbuffer(\a renderbuffer).
1643 
1644     For more information, see the OpenGL ES 2.0 documentation for
1645     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glIsRenderbuffer.xhtml}{glIsRenderbuffer()}.
1646 */
1647 
1648 /*!
1649     \fn GLboolean QOpenGLFunctions::glIsShader(GLuint shader)
1650 
1651     Convenience function that calls glIsShader(\a shader).
1652 
1653     For more information, see the OpenGL ES 2.0 documentation for
1654     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glIsShader.xhtml}{glIsShader()}.
1655 
1656     This convenience function will do nothing on OpenGL ES 1.x systems.
1657 */
1658 
1659 /*!
1660     \fn void QOpenGLFunctions::glLinkProgram(GLuint program)
1661 
1662     Convenience function that calls glLinkProgram(\a program).
1663 
1664     For more information, see the OpenGL ES 2.0 documentation for
1665     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glLinkProgram.xhtml}{glLinkProgram()}.
1666 
1667     This convenience function will do nothing on OpenGL ES 1.x systems.
1668 */
1669 
1670 /*!
1671     \fn void QOpenGLFunctions::glReleaseShaderCompiler()
1672 
1673     Convenience function that calls glReleaseShaderCompiler().
1674 
1675     For more information, see the OpenGL ES 2.0 documentation for
1676     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glReleaseShaderCompiler.xhtml}{glReleaseShaderCompiler()}.
1677 
1678     This convenience function will do nothing on OpenGL ES 1.x systems.
1679 */
1680 
1681 /*!
1682     \fn void QOpenGLFunctions::glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
1683 
1684     Convenience function that calls glRenderbufferStorage(\a target, \a internalformat, \a width, \a height).
1685 
1686     For more information, see the OpenGL ES 2.0 documentation for
1687     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glRenderbufferStorage.xhtml}{glRenderbufferStorage()}.
1688 */
1689 
1690 /*!
1691     \fn void QOpenGLFunctions::glSampleCoverage(GLclampf value, GLboolean invert)
1692 
1693     Convenience function that calls glSampleCoverage(\a value, \a invert).
1694 
1695     For more information, see the OpenGL ES 2.0 documentation for
1696     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glSampleCoverage.xhtml}{glSampleCoverage()}.
1697 */
1698 
1699 /*!
1700     \fn void QOpenGLFunctions::glShaderBinary(GLint n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLint length)
1701 
1702     Convenience function that calls glShaderBinary(\a n, \a shaders, \a binaryformat, \a binary, \a length).
1703 
1704     For more information, see the OpenGL ES 2.0 documentation for
1705     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glShaderBinary.xhtml}{glShaderBinary()}.
1706 
1707     This convenience function will do nothing on OpenGL ES 1.x systems.
1708 */
1709 
1710 /*!
1711     \fn void QOpenGLFunctions::glShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length)
1712 
1713     Convenience function that calls glShaderSource(\a shader, \a count, \a string, \a length).
1714 
1715     For more information, see the OpenGL ES 2.0 documentation for
1716     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glShaderSource.xhtml}{glShaderSource()}.
1717 
1718     This convenience function will do nothing on OpenGL ES 1.x systems.
1719 */
1720 
1721 /*!
1722     \fn void QOpenGLFunctions::glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
1723 
1724     Convenience function that calls glStencilFuncSeparate(\a face, \a func, \a ref, \a mask).
1725 
1726     For more information, see the OpenGL ES 2.0 documentation for
1727     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glStencilFuncSeparate.xhtml}{glStencilFuncSeparate()}.
1728 */
1729 
1730 /*!
1731     \fn void QOpenGLFunctions::glStencilMaskSeparate(GLenum face, GLuint mask)
1732 
1733     Convenience function that calls glStencilMaskSeparate(\a face, \a mask).
1734 
1735     For more information, see the OpenGL ES 2.0 documentation for
1736     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glStencilMaskSeparate.xhtml}{glStencilMaskSeparate()}.
1737 */
1738 
1739 /*!
1740     \fn void QOpenGLFunctions::glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
1741 
1742     Convenience function that calls glStencilOpSeparate(\a face, \a fail, \a zfail, \a zpass).
1743 
1744     For more information, see the OpenGL ES 2.0 documentation for
1745     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glStencilOpSeparate.xhtml}{glStencilOpSeparate()}.
1746 */
1747 
1748 /*!
1749     \fn void QOpenGLFunctions::glUniform1f(GLint location, GLfloat x)
1750 
1751     Convenience function that calls glUniform1f(\a location, \a x).
1752 
1753     For more information, see the OpenGL ES 2.0 documentation for
1754     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform1f()}.
1755 
1756     This convenience function will do nothing on OpenGL ES 1.x systems.
1757 */
1758 
1759 /*!
1760     \fn void QOpenGLFunctions::glUniform1fv(GLint location, GLsizei count, const GLfloat* v)
1761 
1762     Convenience function that calls glUniform1fv(\a location, \a count, \a v).
1763 
1764     For more information, see the OpenGL ES 2.0 documentation for
1765     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform1fv()}.
1766 
1767     This convenience function will do nothing on OpenGL ES 1.x systems.
1768 */
1769 
1770 /*!
1771     \fn void QOpenGLFunctions::glUniform1i(GLint location, GLint x)
1772 
1773     Convenience function that calls glUniform1i(\a location, \a x).
1774 
1775     For more information, see the OpenGL ES 2.0 documentation for
1776     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform1i()}.
1777 
1778     This convenience function will do nothing on OpenGL ES 1.x systems.
1779 */
1780 
1781 /*!
1782     \fn void QOpenGLFunctions::glUniform1iv(GLint location, GLsizei count, const GLint* v)
1783 
1784     Convenience function that calls glUniform1iv(\a location, \a count, \a v).
1785 
1786     For more information, see the OpenGL ES 2.0 documentation for
1787     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform1iv()}.
1788 
1789     This convenience function will do nothing on OpenGL ES 1.x systems.
1790 */
1791 
1792 /*!
1793     \fn void QOpenGLFunctions::glUniform2f(GLint location, GLfloat x, GLfloat y)
1794 
1795     Convenience function that calls glUniform2f(\a location, \a x, \a y).
1796 
1797     For more information, see the OpenGL ES 2.0 documentation for
1798     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform2f()}.
1799 
1800     This convenience function will do nothing on OpenGL ES 1.x systems.
1801 */
1802 
1803 /*!
1804     \fn void QOpenGLFunctions::glUniform2fv(GLint location, GLsizei count, const GLfloat* v)
1805 
1806     Convenience function that calls glUniform2fv(\a location, \a count, \a v).
1807 
1808     For more information, see the OpenGL ES 2.0 documentation for
1809     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform2fv()}.
1810 
1811     This convenience function will do nothing on OpenGL ES 1.x systems.
1812 */
1813 
1814 /*!
1815     \fn void QOpenGLFunctions::glUniform2i(GLint location, GLint x, GLint y)
1816 
1817     Convenience function that calls glUniform2i(\a location, \a x, \a y).
1818 
1819     For more information, see the OpenGL ES 2.0 documentation for
1820     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform2i()}.
1821 
1822     This convenience function will do nothing on OpenGL ES 1.x systems.
1823 */
1824 
1825 /*!
1826     \fn void QOpenGLFunctions::glUniform2iv(GLint location, GLsizei count, const GLint* v)
1827 
1828     Convenience function that calls glUniform2iv(\a location, \a count, \a v).
1829 
1830     For more information, see the OpenGL ES 2.0 documentation for
1831     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform2iv()}.
1832 
1833     This convenience function will do nothing on OpenGL ES 1.x systems.
1834 */
1835 
1836 /*!
1837     \fn void QOpenGLFunctions::glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
1838 
1839     Convenience function that calls glUniform3f(\a location, \a x, \a y, \a z).
1840 
1841     For more information, see the OpenGL ES 2.0 documentation for
1842     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform3f()}.
1843 
1844     This convenience function will do nothing on OpenGL ES 1.x systems.
1845 */
1846 
1847 /*!
1848     \fn void QOpenGLFunctions::glUniform3fv(GLint location, GLsizei count, const GLfloat* v)
1849 
1850     Convenience function that calls glUniform3fv(\a location, \a count, \a v).
1851 
1852     For more information, see the OpenGL ES 2.0 documentation for
1853     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform3fv()}.
1854 
1855     This convenience function will do nothing on OpenGL ES 1.x systems.
1856 */
1857 
1858 /*!
1859     \fn void QOpenGLFunctions::glUniform3i(GLint location, GLint x, GLint y, GLint z)
1860 
1861     Convenience function that calls glUniform3i(\a location, \a x, \a y, \a z).
1862 
1863     For more information, see the OpenGL ES 2.0 documentation for
1864     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform3i()}.
1865 
1866     This convenience function will do nothing on OpenGL ES 1.x systems.
1867 */
1868 
1869 /*!
1870     \fn void QOpenGLFunctions::glUniform3iv(GLint location, GLsizei count, const GLint* v)
1871 
1872     Convenience function that calls glUniform3iv(\a location, \a count, \a v).
1873 
1874     For more information, see the OpenGL ES 2.0 documentation for
1875     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform3iv()}.
1876 
1877     This convenience function will do nothing on OpenGL ES 1.x systems.
1878 */
1879 
1880 /*!
1881     \fn void QOpenGLFunctions::glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1882 
1883     Convenience function that calls glUniform4f(\a location, \a x, \a y, \a z, \a w).
1884 
1885     For more information, see the OpenGL ES 2.0 documentation for
1886     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform4f()}.
1887 
1888     This convenience function will do nothing on OpenGL ES 1.x systems.
1889 */
1890 
1891 /*!
1892     \fn void QOpenGLFunctions::glUniform4fv(GLint location, GLsizei count, const GLfloat* v)
1893 
1894     Convenience function that calls glUniform4fv(\a location, \a count, \a v).
1895 
1896     For more information, see the OpenGL ES 2.0 documentation for
1897     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform4fv()}.
1898 
1899     This convenience function will do nothing on OpenGL ES 1.x systems.
1900 */
1901 
1902 /*!
1903     \fn void QOpenGLFunctions::glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
1904 
1905     Convenience function that calls glUniform4i(\a location, \a x, \a y, \a z, \a w).
1906 
1907     For more information, see the OpenGL ES 2.0 documentation for
1908     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform4i()}.
1909 
1910     This convenience function will do nothing on OpenGL ES 1.x systems.
1911 */
1912 
1913 /*!
1914     \fn void QOpenGLFunctions::glUniform4iv(GLint location, GLsizei count, const GLint* v)
1915 
1916     Convenience function that calls glUniform4iv(\a location, \a count, \a v).
1917 
1918     For more information, see the OpenGL ES 2.0 documentation for
1919     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform4iv()}.
1920 
1921     This convenience function will do nothing on OpenGL ES 1.x systems.
1922 */
1923 
1924 /*!
1925     \fn void QOpenGLFunctions::glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1926 
1927     Convenience function that calls glUniformMatrix2fv(\a location, \a count, \a transpose, \a value).
1928 
1929     For more information, see the OpenGL ES 2.0 documentation for
1930     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniformMatrix2fv()}.
1931 
1932     This convenience function will do nothing on OpenGL ES 1.x systems.
1933 */
1934 
1935 /*!
1936     \fn void QOpenGLFunctions::glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1937 
1938     Convenience function that calls glUniformMatrix3fv(\a location, \a count, \a transpose, \a value).
1939 
1940     For more information, see the OpenGL ES 2.0 documentation for
1941     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniformMatrix3fv()}.
1942 
1943     This convenience function will do nothing on OpenGL ES 1.x systems.
1944 */
1945 
1946 /*!
1947     \fn void QOpenGLFunctions::glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1948 
1949     Convenience function that calls glUniformMatrix4fv(\a location, \a count, \a transpose, \a value).
1950 
1951     For more information, see the OpenGL ES 2.0 documentation for
1952     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniformMatrix4fv()}.
1953 
1954     This convenience function will do nothing on OpenGL ES 1.x systems.
1955 */
1956 
1957 /*!
1958     \fn void QOpenGLFunctions::glUseProgram(GLuint program)
1959 
1960     Convenience function that calls glUseProgram(\a program).
1961 
1962     For more information, see the OpenGL ES 2.0 documentation for
1963     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUseProgram.xhtml}{glUseProgram()}.
1964 
1965     This convenience function will do nothing on OpenGL ES 1.x systems.
1966 */
1967 
1968 /*!
1969     \fn void QOpenGLFunctions::glValidateProgram(GLuint program)
1970 
1971     Convenience function that calls glValidateProgram(\a program).
1972 
1973     For more information, see the OpenGL ES 2.0 documentation for
1974     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glValidateProgram.xhtml}{glValidateProgram()}.
1975 
1976     This convenience function will do nothing on OpenGL ES 1.x systems.
1977 */
1978 
1979 /*!
1980     \fn void QOpenGLFunctions::glVertexAttrib1f(GLuint indx, GLfloat x)
1981 
1982     Convenience function that calls glVertexAttrib1f(\a indx, \a x).
1983 
1984     For more information, see the OpenGL ES 2.0 documentation for
1985     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexAttrib.xhtml}{glVertexAttrib1f()}.
1986 
1987     This convenience function will do nothing on OpenGL ES 1.x systems.
1988 */
1989 
1990 /*!
1991     \fn void QOpenGLFunctions::glVertexAttrib1fv(GLuint indx, const GLfloat* values)
1992 
1993     Convenience function that calls glVertexAttrib1fv(\a indx, \a values).
1994 
1995     For more information, see the OpenGL ES 2.0 documentation for
1996     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexAttrib.xhtml}{glVertexAttrib1fv()}.
1997 
1998     This convenience function will do nothing on OpenGL ES 1.x systems.
1999 */
2000 
2001 /*!
2002     \fn void QOpenGLFunctions::glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
2003 
2004     Convenience function that calls glVertexAttrib2f(\a indx, \a x, \a y).
2005 
2006     For more information, see the OpenGL ES 2.0 documentation for
2007     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexAttrib.xhtml}{glVertexAttrib2f()}.
2008 
2009     This convenience function will do nothing on OpenGL ES 1.x systems.
2010 */
2011 
2012 /*!
2013     \fn void QOpenGLFunctions::glVertexAttrib2fv(GLuint indx, const GLfloat* values)
2014 
2015     Convenience function that calls glVertexAttrib2fv(\a indx, \a values).
2016 
2017     For more information, see the OpenGL ES 2.0 documentation for
2018     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexAttrib.xhtml}{glVertexAttrib2fv()}.
2019 
2020     This convenience function will do nothing on OpenGL ES 1.x systems.
2021 */
2022 
2023 /*!
2024     \fn void QOpenGLFunctions::glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
2025 
2026     Convenience function that calls glVertexAttrib3f(\a indx, \a x, \a y, \a z).
2027 
2028     For more information, see the OpenGL ES 2.0 documentation for
2029     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexAttrib.xhtml}{glVertexAttrib3f()}.
2030 
2031     This convenience function will do nothing on OpenGL ES 1.x systems.
2032 */
2033 
2034 /*!
2035     \fn void QOpenGLFunctions::glVertexAttrib3fv(GLuint indx, const GLfloat* values)
2036 
2037     Convenience function that calls glVertexAttrib3fv(\a indx, \a values).
2038 
2039     For more information, see the OpenGL ES 2.0 documentation for
2040     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexAttrib.xhtml}{glVertexAttrib3fv()}.
2041 
2042     This convenience function will do nothing on OpenGL ES 1.x systems.
2043 */
2044 
2045 /*!
2046     \fn void QOpenGLFunctions::glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
2047 
2048     Convenience function that calls glVertexAttrib4f(\a indx, \a x, \a y, \a z, \a w).
2049 
2050     For more information, see the OpenGL ES 2.0 documentation for
2051     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexAttrib.xhtml}{glVertexAttrib4f()}.
2052 
2053     This convenience function will do nothing on OpenGL ES 1.x systems.
2054 */
2055 
2056 /*!
2057     \fn void QOpenGLFunctions::glVertexAttrib4fv(GLuint indx, const GLfloat* values)
2058 
2059     Convenience function that calls glVertexAttrib4fv(\a indx, \a values).
2060 
2061     For more information, see the OpenGL ES 2.0 documentation for
2062     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexAttrib.xhtml}{glVertexAttrib4fv()}.
2063 
2064     This convenience function will do nothing on OpenGL ES 1.x systems.
2065 */
2066 
2067 /*!
2068     \fn void QOpenGLFunctions::glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr)
2069 
2070     Convenience function that calls glVertexAttribPointer(\a indx, \a size, \a type, \a normalized, \a stride, \a ptr).
2071 
2072     For more information, see the OpenGL ES 2.0 documentation for
2073     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexAttribPointer.xhtml}{glVertexAttribPointer()}.
2074 
2075     This convenience function will do nothing on OpenGL ES 1.x systems.
2076 */
2077 
2078 /*!
2079     \fn bool QOpenGLFunctions::isInitialized(const QOpenGLFunctionsPrivate *d)
2080     \internal
2081 */
2082 
2083 namespace {
2084 
2085 // this function tries hard to get the opengl function we're looking for by also
2086 // trying to resolve it with some of the common extensions if the generic name
2087 // can't be found.
getProcAddress(QOpenGLContext * context,const char * funcName)2088 static QFunctionPointer getProcAddress(QOpenGLContext *context, const char *funcName)
2089 {
2090     QFunctionPointer function = context->getProcAddress(funcName);
2091 
2092     static const struct {
2093         const char *name;
2094         int len; // includes trailing \0
2095     } extensions[] = {
2096         { "ARB", 4 },
2097         { "OES", 4 },
2098         { "EXT", 4 },
2099         { "ANGLE", 6 },
2100         { "NV", 3 },
2101     };
2102 
2103     if (!function) {
2104         char fn[512];
2105         size_t size = strlen(funcName);
2106         Q_ASSERT(size < 500);
2107         memcpy(fn, funcName, size);
2108         char *ext = fn + size;
2109 
2110         for (const auto &e : extensions) {
2111             memcpy(ext, e.name, e.len);
2112             function = context->getProcAddress(fn);
2113             if (function)
2114                 break;
2115         }
2116     }
2117 
2118     return function;
2119 }
2120 
2121 template <typename Func>
resolve(QOpenGLContext * context,const char * name,Func)2122 Func resolve(QOpenGLContext *context, const char *name, Func)
2123 {
2124     return reinterpret_cast<Func>(getProcAddress(context, name));
2125 }
2126 
2127 }
2128 
2129 #define RESOLVE(name) \
2130     resolve(context, "gl"#name, name)
2131 
2132 #ifndef QT_OPENGL_ES_2
2133 
2134 // some fallback functions
qopenglfSpecialClearDepthf(GLclampf depth)2135 static void QOPENGLF_APIENTRY qopenglfSpecialClearDepthf(GLclampf depth)
2136 {
2137     QOpenGLContext *context = QOpenGLContext::currentContext();
2138     QOpenGLFunctionsPrivate *funcs = qt_gl_functions(context);
2139     funcs->f.ClearDepth((GLdouble) depth);
2140 }
2141 
qopenglfSpecialDepthRangef(GLclampf zNear,GLclampf zFar)2142 static void QOPENGLF_APIENTRY qopenglfSpecialDepthRangef(GLclampf zNear, GLclampf zFar)
2143 {
2144     QOpenGLContext *context = QOpenGLContext::currentContext();
2145     QOpenGLFunctionsPrivate *funcs = qt_gl_functions(context);
2146     funcs->f.DepthRange((GLdouble) zNear, (GLdouble) zFar);
2147 }
2148 
qopenglfSpecialGetShaderPrecisionFormat(GLenum shadertype,GLenum precisiontype,GLint * range,GLint * precision)2149 static void QOPENGLF_APIENTRY qopenglfSpecialGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
2150 {
2151     Q_UNUSED(shadertype);
2152     Q_UNUSED(precisiontype);
2153     range[0] = range[1] = precision[0] = 0;
2154 }
2155 
qopenglfSpecialIsProgram(GLuint program)2156 static GLboolean QOPENGLF_APIENTRY qopenglfSpecialIsProgram(GLuint program)
2157 {
2158     return program != 0;
2159 }
2160 
qopenglfSpecialIsShader(GLuint shader)2161 static GLboolean QOPENGLF_APIENTRY qopenglfSpecialIsShader(GLuint shader)
2162 {
2163     return shader != 0;
2164 }
2165 
qopenglfSpecialReleaseShaderCompiler()2166 static void QOPENGLF_APIENTRY qopenglfSpecialReleaseShaderCompiler()
2167 {
2168 }
2169 
2170 #endif // !QT_OPENGL_ES_2
2171 
2172 
QOpenGLFunctionsPrivate(QOpenGLContext * c)2173 QOpenGLFunctionsPrivate::QOpenGLFunctionsPrivate(QOpenGLContext *c)
2174 {
2175     init(c);
2176 
2177 #ifndef QT_OPENGL_ES_2
2178     // setup fallbacks in case some methods couldn't get resolved
2179     bool es = QOpenGLContext::currentContext()->isOpenGLES();
2180     if (!f.ClearDepthf || !es)
2181         f.ClearDepthf = qopenglfSpecialClearDepthf;
2182     if (!f.DepthRangef || !es)
2183         f.DepthRangef = qopenglfSpecialDepthRangef;
2184     if (!f.GetShaderPrecisionFormat)
2185         f.GetShaderPrecisionFormat = qopenglfSpecialGetShaderPrecisionFormat;
2186     if (!f.IsProgram)
2187         f.IsProgram = qopenglfSpecialIsProgram;
2188     if (!f.IsShader)
2189         f.IsShader = qopenglfSpecialIsShader;
2190     if (!f.ReleaseShaderCompiler)
2191         f.ReleaseShaderCompiler = qopenglfSpecialReleaseShaderCompiler;
2192 #endif
2193 }
2194 
2195 
QT_OPENGL_IMPLEMENT(QOpenGLFunctionsPrivate,QT_OPENGL_FUNCTIONS)2196 QT_OPENGL_IMPLEMENT(QOpenGLFunctionsPrivate, QT_OPENGL_FUNCTIONS)
2197 
2198 /*!
2199     \class QOpenGLExtraFunctions
2200     \brief The QOpenGLExtraFunctions class provides cross-platform access to the OpenGL ES 3.0, 3.1 and 3.2 API.
2201     \since 5.6
2202     \ingroup painting-3D
2203     \inmodule QtGui
2204 
2205     This subclass of QOpenGLFunctions includes the OpenGL ES 3.0, 3.1 and 3.2
2206     functions. These will only work when an OpenGL ES 3.x context, or an
2207     OpenGL context of a version containing the functions in question either in
2208     core or as extension, is in use. This allows developing GLES 3.x
2209     applications in a cross-platform manner: development can happen on a desktop
2210     platform with OpenGL 3.x or 4.x, deploying to a true GLES 3.x device later
2211     on will require no or minimal changes to the application.
2212 
2213     \note This class is different from the versioned OpenGL wrappers, for
2214     instance QOpenGLFunctions_3_2_Core. The versioned function wrappers target a
2215     given version and profile of OpenGL. They are therefore not suitable for
2216     cross-OpenGL-OpenGLES development.
2217  */
2218 
2219 /*!
2220     \fn void QOpenGLExtraFunctions::glBeginQuery(GLenum target, GLuint id)
2221 
2222     Convenience function that calls glBeginQuery(\a target, \a id).
2223 
2224     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2225     with plain OpenGL, the function is only usable when the given profile and version contains the
2226     function either in core or as an extension.
2227 
2228     For more information, see the OpenGL ES 3.x documentation for
2229     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBeginQuery.xhtml}{glBeginQuery()}.
2230 */
2231 
2232 /*!
2233     \fn void QOpenGLExtraFunctions::glBeginTransformFeedback(GLenum primitiveMode)
2234 
2235     Convenience function that calls glBeginTransformFeedback(\a primitiveMode).
2236 
2237     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2238     with plain OpenGL, the function is only usable when the given profile and version contains the
2239     function either in core or as an extension.
2240 
2241     For more information, see the OpenGL ES 3.x documentation for
2242     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBeginTransformFeedback.xhtml}{glBeginTransformFeedback()}.
2243 */
2244 
2245 /*!
2246     \fn void QOpenGLExtraFunctions::glBindBufferBase(GLenum target, GLuint index, GLuint buffer)
2247 
2248     Convenience function that calls glBindBufferBase(\a target, \a index, \a buffer).
2249 
2250     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2251     with plain OpenGL, the function is only usable when the given profile and version contains the
2252     function either in core or as an extension.
2253 
2254     For more information, see the OpenGL ES 3.x documentation for
2255     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBindBufferBase.xhtml}{glBindBufferBase()}.
2256 */
2257 
2258 /*!
2259     \fn void QOpenGLExtraFunctions::glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
2260 
2261     Convenience function that calls glBindBufferRange(\a target, \a index, \a buffer, \a offset, \a size).
2262 
2263     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2264     with plain OpenGL, the function is only usable when the given profile and version contains the
2265     function either in core or as an extension.
2266 
2267     For more information, see the OpenGL ES 3.x documentation for
2268     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBindBufferRange.xhtml}{glBindBufferRange()}.
2269 */
2270 
2271 /*!
2272     \fn void QOpenGLExtraFunctions::glBindSampler(GLuint unit, GLuint sampler)
2273 
2274     Convenience function that calls glBindSampler(\a unit, \a sampler).
2275 
2276     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2277     with plain OpenGL, the function is only usable when the given profile and version contains the
2278     function either in core or as an extension.
2279 
2280     For more information, see the OpenGL ES 3.x documentation for
2281     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBindSampler.xhtml}{glBindSampler()}.
2282 */
2283 
2284 /*!
2285     \fn void QOpenGLExtraFunctions::glBindTransformFeedback(GLenum target, GLuint id)
2286 
2287     Convenience function that calls glBindTransformFeedback(\a target, \a id).
2288 
2289     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2290     with plain OpenGL, the function is only usable when the given profile and version contains the
2291     function either in core or as an extension.
2292 
2293     For more information, see the OpenGL ES 3.x documentation for
2294     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBindTransformFeedback.xhtml}{glBindTransformFeedback()}.
2295 */
2296 
2297 /*!
2298     \fn void QOpenGLExtraFunctions::glBindVertexArray(GLuint array)
2299 
2300     Convenience function that calls glBindVertexArray(\a array).
2301 
2302     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2303     with plain OpenGL, the function is only usable when the given profile and version contains the
2304     function either in core or as an extension.
2305 
2306     For more information, see the OpenGL ES 3.x documentation for
2307     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBindVertexArray.xhtml}{glBindVertexArray()}.
2308 */
2309 
2310 /*!
2311     \fn void QOpenGLExtraFunctions::glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
2312 
2313     Convenience function that calls glBlitFramebuffer(\a srcX0, \a srcY0, \a srcX1, \a srcY1, \a dstX0, \a dstY0, \a dstX1, \a dstY1, \a mask, \a filter).
2314 
2315     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2316     with plain OpenGL, the function is only usable when the given profile and version contains the
2317     function either in core or as an extension.
2318 
2319     For more information, see the OpenGL ES 3.x documentation for
2320     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBlitFramebuffer.xhtml}{glBlitFramebuffer()}.
2321 */
2322 
2323 /*!
2324     \fn void QOpenGLExtraFunctions::glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
2325 
2326     Convenience function that calls glClearBufferfi(\a buffer, \a drawbuffer, \a depth, \a stencil).
2327 
2328     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2329     with plain OpenGL, the function is only usable when the given profile and version contains the
2330     function either in core or as an extension.
2331 
2332     For more information, see the OpenGL ES 3.x documentation for
2333     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glClearBuffer.xhtml}{glClearBufferfi()}.
2334 */
2335 
2336 /*!
2337     \fn void QOpenGLExtraFunctions::glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat * value)
2338 
2339     Convenience function that calls glClearBufferfv(\a buffer, \a drawbuffer, \a value).
2340 
2341     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2342     with plain OpenGL, the function is only usable when the given profile and version contains the
2343     function either in core or as an extension.
2344 
2345     For more information, see the OpenGL ES 3.x documentation for
2346     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glClearBuffer.xhtml}{glClearBufferfv()}.
2347 */
2348 
2349 /*!
2350     \fn void QOpenGLExtraFunctions::glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint * value)
2351 
2352     Convenience function that calls glClearBufferiv(\a buffer, \a drawbuffer, \a value).
2353 
2354     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2355     with plain OpenGL, the function is only usable when the given profile and version contains the
2356     function either in core or as an extension.
2357 
2358     For more information, see the OpenGL ES 3.x documentation for
2359     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glClearBuffer.xhtml}{glClearBufferiv()}.
2360 */
2361 
2362 /*!
2363     \fn void QOpenGLExtraFunctions::glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint * value)
2364 
2365     Convenience function that calls glClearBufferuiv(\a buffer, \a drawbuffer, \a value).
2366 
2367     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2368     with plain OpenGL, the function is only usable when the given profile and version contains the
2369     function either in core or as an extension.
2370 
2371     For more information, see the OpenGL ES 3.x documentation for
2372     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glClearBuffer.xhtml}{glClearBufferuiv()}.
2373 */
2374 
2375 /*!
2376     \fn GLenum QOpenGLExtraFunctions::glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
2377 
2378     Convenience function that calls glClientWaitSync(\a sync, \a flags, \a timeout).
2379 
2380     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2381     with plain OpenGL, the function is only usable when the given profile and version contains the
2382     function either in core or as an extension.
2383 
2384     For more information, see the OpenGL ES 3.x documentation for
2385     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glClientWaitSync.xhtml}{glClientWaitSync()}.
2386 */
2387 
2388 /*!
2389     \fn void QOpenGLExtraFunctions::glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data)
2390 
2391     Convenience function that calls glCompressedTexImage3D(\a target, \a level, \a internalformat, \a width, \a height, \a depth, \a border, \a imageSize, \a data).
2392 
2393     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2394     with plain OpenGL, the function is only usable when the given profile and version contains the
2395     function either in core or as an extension.
2396 
2397     For more information, see the OpenGL ES 3.x documentation for
2398     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glCompressedTexImage3D.xhtml}{glCompressedTexImage3D()}.
2399 */
2400 
2401 /*!
2402     \fn 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)
2403 
2404     Convenience function that calls glCompressedTexSubImage3D(\a target, \a level, \a xoffset, \a yoffset, \a zoffset, \a width, \a height, \a depth, \a format, \a imageSize, \a data).
2405 
2406     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2407     with plain OpenGL, the function is only usable when the given profile and version contains the
2408     function either in core or as an extension.
2409 
2410     For more information, see the OpenGL ES 3.x documentation for
2411     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glCompressedTexSubImage3D.xhtml}{glCompressedTexSubImage3D()}.
2412 */
2413 
2414 /*!
2415     \fn void QOpenGLExtraFunctions::glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
2416 
2417     Convenience function that calls glCopyBufferSubData(\a readTarget, \a writeTarget, \a readOffset, \a writeOffset, \a size).
2418 
2419     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2420     with plain OpenGL, the function is only usable when the given profile and version contains the
2421     function either in core or as an extension.
2422 
2423     For more information, see the OpenGL ES 3.x documentation for
2424     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glCopyBufferSubData.xhtml}{glCopyBufferSubData()}.
2425 */
2426 
2427 /*!
2428     \fn void QOpenGLExtraFunctions::glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
2429 
2430     Convenience function that calls glCopyTexSubImage3D(\a target, \a level, \a xoffset, \a yoffset, \a zoffset, \a x, \a y, \a width, \a height).
2431 
2432     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2433     with plain OpenGL, the function is only usable when the given profile and version contains the
2434     function either in core or as an extension.
2435 
2436     For more information, see the OpenGL ES 3.x documentation for
2437     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glCopyTexSubImage3D.xhtml}{glCopyTexSubImage3D()}.
2438 */
2439 
2440 /*!
2441     \fn void QOpenGLExtraFunctions::glDeleteQueries(GLsizei n, const GLuint * ids)
2442 
2443     Convenience function that calls glDeleteQueries(\a n, \a ids).
2444 
2445     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2446     with plain OpenGL, the function is only usable when the given profile and version contains the
2447     function either in core or as an extension.
2448 
2449     For more information, see the OpenGL ES 3.x documentation for
2450     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDeleteQueries.xhtml}{glDeleteQueries()}.
2451 */
2452 
2453 /*!
2454     \fn void QOpenGLExtraFunctions::glDeleteSamplers(GLsizei count, const GLuint * samplers)
2455 
2456     Convenience function that calls glDeleteSamplers(\a count, \a samplers).
2457 
2458     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2459     with plain OpenGL, the function is only usable when the given profile and version contains the
2460     function either in core or as an extension.
2461 
2462     For more information, see the OpenGL ES 3.x documentation for
2463     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDeleteSamplers.xhtml}{glDeleteSamplers()}.
2464 */
2465 
2466 /*!
2467     \fn void QOpenGLExtraFunctions::glDeleteSync(GLsync sync)
2468 
2469     Convenience function that calls glDeleteSync(\a sync).
2470 
2471     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2472     with plain OpenGL, the function is only usable when the given profile and version contains the
2473     function either in core or as an extension.
2474 
2475     For more information, see the OpenGL ES 3.x documentation for
2476     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDeleteSync.xhtml}{glDeleteSync()}.
2477 */
2478 
2479 /*!
2480     \fn void QOpenGLExtraFunctions::glDeleteTransformFeedbacks(GLsizei n, const GLuint * ids)
2481 
2482     Convenience function that calls glDeleteTransformFeedbacks(\a n, \a ids).
2483 
2484     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2485     with plain OpenGL, the function is only usable when the given profile and version contains the
2486     function either in core or as an extension.
2487 
2488     For more information, see the OpenGL ES 3.x documentation for
2489     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDeleteTransformFeedbacks.xhtml}{glDeleteTransformFeedbacks()}.
2490 */
2491 
2492 /*!
2493     \fn void QOpenGLExtraFunctions::glDeleteVertexArrays(GLsizei n, const GLuint * arrays)
2494 
2495     Convenience function that calls glDeleteVertexArrays(\a n, \a arrays).
2496 
2497     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2498     with plain OpenGL, the function is only usable when the given profile and version contains the
2499     function either in core or as an extension.
2500 
2501     For more information, see the OpenGL ES 3.x documentation for
2502     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDeleteVertexArrays.xhtml}{glDeleteVertexArrays()}.
2503 */
2504 
2505 /*!
2506     \fn void QOpenGLExtraFunctions::glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount)
2507 
2508     Convenience function that calls glDrawArraysInstanced(\a mode, \a first, \a count, \a instancecount).
2509 
2510     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2511     with plain OpenGL, the function is only usable when the given profile and version contains the
2512     function either in core or as an extension.
2513 
2514     For more information, see the OpenGL ES 3.x documentation for
2515     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDrawArraysInstanced.xhtml}{glDrawArraysInstanced()}.
2516 */
2517 
2518 /*!
2519     \fn void QOpenGLExtraFunctions::glDrawBuffers(GLsizei n, const GLenum * bufs)
2520 
2521     Convenience function that calls glDrawBuffers(\a n, \a bufs).
2522 
2523     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2524     with plain OpenGL, the function is only usable when the given profile and version contains the
2525     function either in core or as an extension.
2526 
2527     For more information, see the OpenGL ES 3.x documentation for
2528     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDrawBuffers.xhtml}{glDrawBuffers()}.
2529 */
2530 
2531 /*!
2532     \fn void QOpenGLExtraFunctions::glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount)
2533 
2534     Convenience function that calls glDrawElementsInstanced(\a mode, \a count, \a type, \a indices, \a instancecount).
2535 
2536     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2537     with plain OpenGL, the function is only usable when the given profile and version contains the
2538     function either in core or as an extension.
2539 
2540     For more information, see the OpenGL ES 3.x documentation for
2541     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDrawElementsInstanced.xhtml}{glDrawElementsInstanced()}.
2542 */
2543 
2544 /*!
2545     \fn void QOpenGLExtraFunctions::glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices)
2546 
2547     Convenience function that calls glDrawRangeElements(\a mode, \a start, \a end, \a count, \a type, \a indices).
2548 
2549     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2550     with plain OpenGL, the function is only usable when the given profile and version contains the
2551     function either in core or as an extension.
2552 
2553     For more information, see the OpenGL ES 3.x documentation for
2554     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDrawRangeElements.xhtml}{glDrawRangeElements()}.
2555 */
2556 
2557 /*!
2558     \fn void QOpenGLExtraFunctions::glEndQuery(GLenum target)
2559 
2560     Convenience function that calls glEndQuery(\a target).
2561 
2562     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2563     with plain OpenGL, the function is only usable when the given profile and version contains the
2564     function either in core or as an extension.
2565 
2566     For more information, see the OpenGL ES 3.x documentation for
2567     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glEndQuery.xhtml}{glEndQuery()}.
2568 */
2569 
2570 /*!
2571     \fn void QOpenGLExtraFunctions::glEndTransformFeedback()
2572 
2573     Convenience function that calls glEndTransformFeedback().
2574 
2575     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2576     with plain OpenGL, the function is only usable when the given profile and version contains the
2577     function either in core or as an extension.
2578 
2579     For more information, see the OpenGL ES 3.x documentation for
2580     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glEndTransformFeedback.xhtml}{glEndTransformFeedback()}.
2581 */
2582 
2583 /*!
2584     \fn GLsync QOpenGLExtraFunctions::glFenceSync(GLenum condition, GLbitfield flags)
2585 
2586     Convenience function that calls glFenceSync(\a condition, \a flags).
2587 
2588     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2589     with plain OpenGL, the function is only usable when the given profile and version contains the
2590     function either in core or as an extension.
2591 
2592     For more information, see the OpenGL ES 3.x documentation for
2593     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glFenceSync.xhtml}{glFenceSync()}.
2594 */
2595 
2596 /*!
2597     \fn void QOpenGLExtraFunctions::glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
2598 
2599     Convenience function that calls glFlushMappedBufferRange(\a target, \a offset, \a length).
2600 
2601     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2602     with plain OpenGL, the function is only usable when the given profile and version contains the
2603     function either in core or as an extension.
2604 
2605     For more information, see the OpenGL ES 3.x documentation for
2606     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glFlushMappedBufferRange.xhtml}{glFlushMappedBufferRange()}.
2607 */
2608 
2609 /*!
2610     \fn void QOpenGLExtraFunctions::glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
2611 
2612     Convenience function that calls glFramebufferTextureLayer(\a target, \a attachment, \a texture, \a level, \a layer).
2613 
2614     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2615     with plain OpenGL, the function is only usable when the given profile and version contains the
2616     function either in core or as an extension.
2617 
2618     For more information, see the OpenGL ES 3.x documentation for
2619     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glFramebufferTextureLayer.xhtml}{glFramebufferTextureLayer()}.
2620 */
2621 
2622 /*!
2623     \fn void QOpenGLExtraFunctions::glGenQueries(GLsizei n, GLuint* ids)
2624 
2625     Convenience function that calls glGenQueries(\a n, \a ids).
2626 
2627     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2628     with plain OpenGL, the function is only usable when the given profile and version contains the
2629     function either in core or as an extension.
2630 
2631     For more information, see the OpenGL ES 3.x documentation for
2632     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGenQueries.xhtml}{glGenQueries()}.
2633 */
2634 
2635 /*!
2636     \fn void QOpenGLExtraFunctions::glGenSamplers(GLsizei count, GLuint* samplers)
2637 
2638     Convenience function that calls glGenSamplers(\a count, \a samplers).
2639 
2640     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2641     with plain OpenGL, the function is only usable when the given profile and version contains the
2642     function either in core or as an extension.
2643 
2644     For more information, see the OpenGL ES 3.x documentation for
2645     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGenSamplers.xhtml}{glGenSamplers()}.
2646 */
2647 
2648 /*!
2649     \fn void QOpenGLExtraFunctions::glGenTransformFeedbacks(GLsizei n, GLuint* ids)
2650 
2651     Convenience function that calls glGenTransformFeedbacks(\a n, \a ids).
2652 
2653     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2654     with plain OpenGL, the function is only usable when the given profile and version contains the
2655     function either in core or as an extension.
2656 
2657     For more information, see the OpenGL ES 3.x documentation for
2658     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGenTransformFeedbacks.xhtml}{glGenTransformFeedbacks()}.
2659 */
2660 
2661 /*!
2662     \fn void QOpenGLExtraFunctions::glGenVertexArrays(GLsizei n, GLuint* arrays)
2663 
2664     Convenience function that calls glGenVertexArrays(\a n, \a arrays).
2665 
2666     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2667     with plain OpenGL, the function is only usable when the given profile and version contains the
2668     function either in core or as an extension.
2669 
2670     For more information, see the OpenGL ES 3.x documentation for
2671     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGenVertexArrays.xhtml}{glGenVertexArrays()}.
2672 */
2673 
2674 /*!
2675     \fn void QOpenGLExtraFunctions::glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName)
2676 
2677     Convenience function that calls glGetActiveUniformBlockName(\a program, \a uniformBlockIndex, \a bufSize, \a length, \a uniformBlockName).
2678 
2679     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2680     with plain OpenGL, the function is only usable when the given profile and version contains the
2681     function either in core or as an extension.
2682 
2683     For more information, see the OpenGL ES 3.x documentation for
2684     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetActiveUniformBlockName.xhtml}{glGetActiveUniformBlockName()}.
2685 */
2686 
2687 /*!
2688     \fn void QOpenGLExtraFunctions::glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params)
2689 
2690     Convenience function that calls glGetActiveUniformBlockiv(\a program, \a uniformBlockIndex, \a pname, \a params).
2691 
2692     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2693     with plain OpenGL, the function is only usable when the given profile and version contains the
2694     function either in core or as an extension.
2695 
2696     For more information, see the OpenGL ES 3.x documentation for
2697     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetActiveUniformBlockiv.xhtml}{glGetActiveUniformBlockiv()}.
2698 */
2699 
2700 /*!
2701     \fn void QOpenGLExtraFunctions::glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint * uniformIndices, GLenum pname, GLint* params)
2702 
2703     Convenience function that calls glGetActiveUniformsiv(\a program, \a uniformCount, \a uniformIndices, \a pname, \a params).
2704 
2705     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2706     with plain OpenGL, the function is only usable when the given profile and version contains the
2707     function either in core or as an extension.
2708 
2709     For more information, see the OpenGL ES 3.x documentation for
2710     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetActiveUniformsiv.xhtml}{glGetActiveUniformsiv()}.
2711 */
2712 
2713 /*!
2714     \fn void QOpenGLExtraFunctions::glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params)
2715 
2716     Convenience function that calls glGetBufferParameteri64v(\a target, \a pname, \a params).
2717 
2718     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2719     with plain OpenGL, the function is only usable when the given profile and version contains the
2720     function either in core or as an extension.
2721 
2722     For more information, see the OpenGL ES 3.x documentation for
2723     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetBufferParameter.xhtml}{glGetBufferParameteri64v()}.
2724 */
2725 
2726 /*!
2727     \fn void QOpenGLExtraFunctions::glGetBufferPointerv(GLenum target, GLenum pname, void ** params)
2728 
2729     Convenience function that calls glGetBufferPointerv(\a target, \a pname, \a params).
2730 
2731     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2732     with plain OpenGL, the function is only usable when the given profile and version contains the
2733     function either in core or as an extension.
2734 
2735     For more information, see the OpenGL ES 3.x documentation for
2736     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetBufferPointerv.xhtml}{glGetBufferPointerv()}.
2737 */
2738 
2739 /*!
2740     \fn GLint QOpenGLExtraFunctions::glGetFragDataLocation(GLuint program, const GLchar * name)
2741 
2742     Convenience function that calls glGetFragDataLocation(\a program, \a name).
2743 
2744     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2745     with plain OpenGL, the function is only usable when the given profile and version contains the
2746     function either in core or as an extension.
2747 
2748     For more information, see the OpenGL ES 3.x documentation for
2749     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetFragDataLocation.xhtml}{glGetFragDataLocation()}.
2750 */
2751 
2752 /*!
2753     \fn void QOpenGLExtraFunctions::glGetInteger64i_v(GLenum target, GLuint index, GLint64* data)
2754 
2755     Convenience function that calls glGetInteger64i_v(\a target, \a index, \a data).
2756 
2757     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2758     with plain OpenGL, the function is only usable when the given profile and version contains the
2759     function either in core or as an extension.
2760 
2761     For more information, see the OpenGL ES 3.x documentation for
2762     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGet.xhtml}{glGetInteger64i_v()}.
2763 */
2764 
2765 /*!
2766     \fn void QOpenGLExtraFunctions::glGetInteger64v(GLenum pname, GLint64* data)
2767 
2768     Convenience function that calls glGetInteger64v(\a pname, \a data).
2769 
2770     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2771     with plain OpenGL, the function is only usable when the given profile and version contains the
2772     function either in core or as an extension.
2773 
2774     For more information, see the OpenGL ES 3.x documentation for
2775     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGet.xhtml}{glGetInteger64v()}.
2776 */
2777 
2778 /*!
2779     \fn void QOpenGLExtraFunctions::glGetIntegeri_v(GLenum target, GLuint index, GLint* data)
2780 
2781     Convenience function that calls glGetIntegeri_v(\a target, \a index, \a data).
2782 
2783     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2784     with plain OpenGL, the function is only usable when the given profile and version contains the
2785     function either in core or as an extension.
2786 
2787     For more information, see the OpenGL ES 3.x documentation for
2788     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGet.xhtml}{glGetIntegeri_v()}.
2789 */
2790 
2791 /*!
2792     \fn void QOpenGLExtraFunctions::glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params)
2793 
2794     Convenience function that calls glGetInternalformativ(\a target, \a internalformat, \a pname, \a bufSize, \a params).
2795 
2796     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2797     with plain OpenGL, the function is only usable when the given profile and version contains the
2798     function either in core or as an extension.
2799 
2800     For more information, see the OpenGL ES 3.x documentation for
2801     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetInternalformativ.xhtml}{glGetInternalformativ()}.
2802 */
2803 
2804 /*!
2805     \fn void QOpenGLExtraFunctions::glGetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, void * binary)
2806 
2807     Convenience function that calls glGetProgramBinary(\a program, \a bufSize, \a length, \a binaryFormat, \a binary).
2808 
2809     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2810     with plain OpenGL, the function is only usable when the given profile and version contains the
2811     function either in core or as an extension.
2812 
2813     For more information, see the OpenGL ES 3.x documentation for
2814     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetProgramBinary.xhtml}{glGetProgramBinary()}.
2815 */
2816 
2817 /*!
2818     \fn void QOpenGLExtraFunctions::glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params)
2819 
2820     Convenience function that calls glGetQueryObjectuiv(\a id, \a pname, \a params).
2821 
2822     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2823     with plain OpenGL, the function is only usable when the given profile and version contains the
2824     function either in core or as an extension.
2825 
2826     For more information, see the OpenGL ES 3.x documentation for
2827     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetQueryObjectuiv.xhtml}{glGetQueryObjectuiv()}.
2828 */
2829 
2830 /*!
2831     \fn void QOpenGLExtraFunctions::glGetQueryiv(GLenum target, GLenum pname, GLint* params)
2832 
2833     Convenience function that calls glGetQueryiv(\a target, \a pname, \a params).
2834 
2835     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2836     with plain OpenGL, the function is only usable when the given profile and version contains the
2837     function either in core or as an extension.
2838 
2839     For more information, see the OpenGL ES 3.x documentation for
2840     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetQueryiv.xhtml}{glGetQueryiv()}.
2841 */
2842 
2843 /*!
2844     \fn void QOpenGLExtraFunctions::glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params)
2845 
2846     Convenience function that calls glGetSamplerParameterfv(\a sampler, \a pname, \a params).
2847 
2848     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2849     with plain OpenGL, the function is only usable when the given profile and version contains the
2850     function either in core or as an extension.
2851 
2852     For more information, see the OpenGL ES 3.x documentation for
2853     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetSamplerParameter.xhtml}{glGetSamplerParameterfv()}.
2854 */
2855 
2856 /*!
2857     \fn void QOpenGLExtraFunctions::glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params)
2858 
2859     Convenience function that calls glGetSamplerParameteriv(\a sampler, \a pname, \a params).
2860 
2861     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2862     with plain OpenGL, the function is only usable when the given profile and version contains the
2863     function either in core or as an extension.
2864 
2865     For more information, see the OpenGL ES 3.x documentation for
2866     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetSamplerParameter.xhtml}{glGetSamplerParameteriv()}.
2867 */
2868 
2869 /*!
2870     \fn const GLubyte * QOpenGLExtraFunctions::glGetStringi(GLenum name, GLuint index)
2871 
2872     Convenience function that calls glGetStringi(\a name, \a index).
2873 
2874     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2875     with plain OpenGL, the function is only usable when the given profile and version contains the
2876     function either in core or as an extension.
2877 
2878     For more information, see the OpenGL ES 3.x documentation for
2879     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetString.xhtml}{glGetStringi()}.
2880 */
2881 
2882 /*!
2883     \fn void QOpenGLExtraFunctions::glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values)
2884 
2885     Convenience function that calls glGetSynciv(\a sync, \a pname, \a bufSize, \a length, \a values).
2886 
2887     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2888     with plain OpenGL, the function is only usable when the given profile and version contains the
2889     function either in core or as an extension.
2890 
2891     For more information, see the OpenGL ES 3.x documentation for
2892     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetSynciv.xhtml}{glGetSynciv()}.
2893 */
2894 
2895 /*!
2896     \fn void QOpenGLExtraFunctions::glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name)
2897 
2898     Convenience function that calls glGetTransformFeedbackVarying(\a program, \a index, \a bufSize, \a length, \a size, \a type, \a name).
2899 
2900     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2901     with plain OpenGL, the function is only usable when the given profile and version contains the
2902     function either in core or as an extension.
2903 
2904     For more information, see the OpenGL ES 3.x documentation for
2905     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetTransformFeedbackVarying.xhtml}{glGetTransformFeedbackVarying()}.
2906 */
2907 
2908 /*!
2909     \fn GLuint QOpenGLExtraFunctions::glGetUniformBlockIndex(GLuint program, const GLchar * uniformBlockName)
2910 
2911     Convenience function that calls glGetUniformBlockIndex(\a program, \a uniformBlockName).
2912 
2913     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2914     with plain OpenGL, the function is only usable when the given profile and version contains the
2915     function either in core or as an extension.
2916 
2917     For more information, see the OpenGL ES 3.x documentation for
2918     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetUniformBlockIndex.xhtml}{glGetUniformBlockIndex()}.
2919 */
2920 
2921 /*!
2922     \fn void QOpenGLExtraFunctions::glGetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar *const* uniformNames, GLuint* uniformIndices)
2923 
2924     Convenience function that calls glGetUniformIndices(\a program, \a uniformCount, \a uniformNames, \a uniformIndices).
2925 
2926     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2927     with plain OpenGL, the function is only usable when the given profile and version contains the
2928     function either in core or as an extension.
2929 
2930     For more information, see the OpenGL ES 3.x documentation for
2931     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetUniformIndices.xhtml}{glGetUniformIndices()}.
2932 */
2933 
2934 /*!
2935     \fn void QOpenGLExtraFunctions::glGetUniformuiv(GLuint program, GLint location, GLuint* params)
2936 
2937     Convenience function that calls glGetUniformuiv(\a program, \a location, \a params).
2938 
2939     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2940     with plain OpenGL, the function is only usable when the given profile and version contains the
2941     function either in core or as an extension.
2942 
2943     For more information, see the OpenGL ES 3.x documentation for
2944     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetUniform.xhtml}{glGetUniformuiv()}.
2945 */
2946 
2947 /*!
2948     \fn void QOpenGLExtraFunctions::glGetVertexAttribIiv(GLuint index, GLenum pname, GLint* params)
2949 
2950     Convenience function that calls glGetVertexAttribIiv(\a index, \a pname, \a params).
2951 
2952     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2953     with plain OpenGL, the function is only usable when the given profile and version contains the
2954     function either in core or as an extension.
2955 
2956     For more information, see the OpenGL ES 3.x documentation for
2957     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetVertexAttrib.xhtml}{glGetVertexAttribIiv()}.
2958 */
2959 
2960 /*!
2961     \fn void QOpenGLExtraFunctions::glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params)
2962 
2963     Convenience function that calls glGetVertexAttribIuiv(\a index, \a pname, \a params).
2964 
2965     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2966     with plain OpenGL, the function is only usable when the given profile and version contains the
2967     function either in core or as an extension.
2968 
2969     For more information, see the OpenGL ES 3.x documentation for
2970     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetVertexAttrib.xhtml}{glGetVertexAttribIuiv()}.
2971 */
2972 
2973 /*!
2974     \fn void QOpenGLExtraFunctions::glInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum * attachments)
2975 
2976     Convenience function that calls glInvalidateFramebuffer(\a target, \a numAttachments, \a attachments).
2977 
2978     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2979     with plain OpenGL, the function is only usable when the given profile and version contains the
2980     function either in core or as an extension.
2981 
2982     For more information, see the OpenGL ES 3.x documentation for
2983     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glInvalidateFramebuffer.xhtml}{glInvalidateFramebuffer()}.
2984 */
2985 
2986 /*!
2987     \fn void QOpenGLExtraFunctions::glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height)
2988 
2989     Convenience function that calls glInvalidateSubFramebuffer(\a target, \a numAttachments, \a attachments, \a x, \a y, \a width, \a height).
2990 
2991     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
2992     with plain OpenGL, the function is only usable when the given profile and version contains the
2993     function either in core or as an extension.
2994 
2995     For more information, see the OpenGL ES 3.x documentation for
2996     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glInvalidateSubFramebuffer.xhtml}{glInvalidateSubFramebuffer()}.
2997 */
2998 
2999 /*!
3000     \fn GLboolean QOpenGLExtraFunctions::glIsQuery(GLuint id)
3001 
3002     Convenience function that calls glIsQuery(\a id).
3003 
3004     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3005     with plain OpenGL, the function is only usable when the given profile and version contains the
3006     function either in core or as an extension.
3007 
3008     For more information, see the OpenGL ES 3.x documentation for
3009     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glIsQuery.xhtml}{glIsQuery()}.
3010 */
3011 
3012 /*!
3013     \fn GLboolean QOpenGLExtraFunctions::glIsSampler(GLuint sampler)
3014 
3015     Convenience function that calls glIsSampler(\a sampler).
3016 
3017     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3018     with plain OpenGL, the function is only usable when the given profile and version contains the
3019     function either in core or as an extension.
3020 
3021     For more information, see the OpenGL ES 3.x documentation for
3022     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glIsSampler.xhtml}{glIsSampler()}.
3023 */
3024 
3025 /*!
3026     \fn GLboolean QOpenGLExtraFunctions::glIsSync(GLsync sync)
3027 
3028     Convenience function that calls glIsSync(\a sync).
3029 
3030     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3031     with plain OpenGL, the function is only usable when the given profile and version contains the
3032     function either in core or as an extension.
3033 
3034     For more information, see the OpenGL ES 3.x documentation for
3035     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glIsSync.xhtml}{glIsSync()}.
3036 */
3037 
3038 /*!
3039     \fn GLboolean QOpenGLExtraFunctions::glIsTransformFeedback(GLuint id)
3040 
3041     Convenience function that calls glIsTransformFeedback(\a id).
3042 
3043     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3044     with plain OpenGL, the function is only usable when the given profile and version contains the
3045     function either in core or as an extension.
3046 
3047     For more information, see the OpenGL ES 3.x documentation for
3048     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glIsTransformFeedback.xhtml}{glIsTransformFeedback()}.
3049 */
3050 
3051 /*!
3052     \fn GLboolean QOpenGLExtraFunctions::glIsVertexArray(GLuint array)
3053 
3054     Convenience function that calls glIsVertexArray(\a array).
3055 
3056     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3057     with plain OpenGL, the function is only usable when the given profile and version contains the
3058     function either in core or as an extension.
3059 
3060     For more information, see the OpenGL ES 3.x documentation for
3061     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glIsVertexArray.xhtml}{glIsVertexArray()}.
3062 */
3063 
3064 /*!
3065     \fn void * QOpenGLExtraFunctions::glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
3066 
3067     Convenience function that calls glMapBufferRange(\a target, \a offset, \a length, \a access).
3068 
3069     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3070     with plain OpenGL, the function is only usable when the given profile and version contains the
3071     function either in core or as an extension.
3072 
3073     For more information, see the OpenGL ES 3.x documentation for
3074     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glMapBufferRange.xhtml}{glMapBufferRange()}.
3075 */
3076 
3077 /*!
3078     \fn void QOpenGLExtraFunctions::glPauseTransformFeedback()
3079 
3080     Convenience function that calls glPauseTransformFeedback().
3081 
3082     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3083     with plain OpenGL, the function is only usable when the given profile and version contains the
3084     function either in core or as an extension.
3085 
3086     For more information, see the OpenGL ES 3.x documentation for
3087     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glPauseTransformFeedback.xhtml}{glPauseTransformFeedback()}.
3088 */
3089 
3090 /*!
3091     \fn void QOpenGLExtraFunctions::glProgramBinary(GLuint program, GLenum binaryFormat, const void * binary, GLsizei length)
3092 
3093     Convenience function that calls glProgramBinary(\a program, \a binaryFormat, \a binary, \a length).
3094 
3095     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3096     with plain OpenGL, the function is only usable when the given profile and version contains the
3097     function either in core or as an extension.
3098 
3099     For more information, see the OpenGL ES 3.x documentation for
3100     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramBinary.xhtml}{glProgramBinary()}.
3101 */
3102 
3103 /*!
3104     \fn void QOpenGLExtraFunctions::glProgramParameteri(GLuint program, GLenum pname, GLint value)
3105 
3106     Convenience function that calls glProgramParameteri(\a program, \a pname, \a value).
3107 
3108     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3109     with plain OpenGL, the function is only usable when the given profile and version contains the
3110     function either in core or as an extension.
3111 
3112     For more information, see the OpenGL ES 3.x documentation for
3113     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramParameteri.xhtml}{glProgramParameteri()}.
3114 */
3115 
3116 /*!
3117     \fn void QOpenGLExtraFunctions::glReadBuffer(GLenum src)
3118 
3119     Convenience function that calls glReadBuffer(\a src).
3120 
3121     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3122     with plain OpenGL, the function is only usable when the given profile and version contains the
3123     function either in core or as an extension.
3124 
3125     For more information, see the OpenGL ES 3.x documentation for
3126     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glReadBuffer.xhtml}{glReadBuffer()}.
3127 */
3128 
3129 /*!
3130     \fn void QOpenGLExtraFunctions::glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
3131 
3132     Convenience function that calls glRenderbufferStorageMultisample(\a target, \a samples, \a internalformat, \a width, \a height).
3133 
3134     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3135     with plain OpenGL, the function is only usable when the given profile and version contains the
3136     function either in core or as an extension.
3137 
3138     For more information, see the OpenGL ES 3.x documentation for
3139     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glRenderbufferStorageMultisample.xhtml}{glRenderbufferStorageMultisample()}.
3140 */
3141 
3142 /*!
3143     \fn void QOpenGLExtraFunctions::glResumeTransformFeedback()
3144 
3145     Convenience function that calls glResumeTransformFeedback().
3146 
3147     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3148     with plain OpenGL, the function is only usable when the given profile and version contains the
3149     function either in core or as an extension.
3150 
3151     For more information, see the OpenGL ES 3.x documentation for
3152     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glResumeTransformFeedback.xhtml}{glResumeTransformFeedback()}.
3153 */
3154 
3155 /*!
3156     \fn void QOpenGLExtraFunctions::glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
3157 
3158     Convenience function that calls glSamplerParameterf(\a sampler, \a pname, \a param).
3159 
3160     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3161     with plain OpenGL, the function is only usable when the given profile and version contains the
3162     function either in core or as an extension.
3163 
3164     For more information, see the OpenGL ES 3.x documentation for
3165     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glSamplerParameter.xhtml}{glSamplerParameterf()}.
3166 */
3167 
3168 /*!
3169     \fn void QOpenGLExtraFunctions::glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat * param)
3170 
3171     Convenience function that calls glSamplerParameterfv(\a sampler, \a pname, \a param).
3172 
3173     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3174     with plain OpenGL, the function is only usable when the given profile and version contains the
3175     function either in core or as an extension.
3176 
3177     For more information, see the OpenGL ES 3.x documentation for
3178     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glSamplerParameter.xhtml}{glSamplerParameterfv()}.
3179 */
3180 
3181 /*!
3182     \fn void QOpenGLExtraFunctions::glSamplerParameteri(GLuint sampler, GLenum pname, GLint param)
3183 
3184     Convenience function that calls glSamplerParameteri(\a sampler, \a pname, \a param).
3185 
3186     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3187     with plain OpenGL, the function is only usable when the given profile and version contains the
3188     function either in core or as an extension.
3189 
3190     For more information, see the OpenGL ES 3.x documentation for
3191     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glSamplerParameter.xhtml}{glSamplerParameteri()}.
3192 */
3193 
3194 /*!
3195     \fn void QOpenGLExtraFunctions::glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint * param)
3196 
3197     Convenience function that calls glSamplerParameteriv(\a sampler, \a pname, \a param).
3198 
3199     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3200     with plain OpenGL, the function is only usable when the given profile and version contains the
3201     function either in core or as an extension.
3202 
3203     For more information, see the OpenGL ES 3.x documentation for
3204     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glSamplerParameter.xhtml}{glSamplerParameteriv()}.
3205 */
3206 
3207 /*!
3208     \fn void QOpenGLExtraFunctions::glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels)
3209 
3210     Convenience function that calls glTexImage3D(\a target, \a level, \a internalformat, \a width, \a height, \a depth, \a border, \a format, \a type, \a pixels).
3211 
3212     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3213     with plain OpenGL, the function is only usable when the given profile and version contains the
3214     function either in core or as an extension.
3215 
3216     For more information, see the OpenGL ES 3.x documentation for
3217     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glTexImage3D.xhtml}{glTexImage3D()}.
3218 */
3219 
3220 /*!
3221     \fn void QOpenGLExtraFunctions::glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
3222 
3223     Convenience function that calls glTexStorage2D(\a target, \a levels, \a internalformat, \a width, \a height).
3224 
3225     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3226     with plain OpenGL, the function is only usable when the given profile and version contains the
3227     function either in core or as an extension.
3228 
3229     For more information, see the OpenGL ES 3.x documentation for
3230     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glTexStorage2D.xhtml}{glTexStorage2D()}.
3231 */
3232 
3233 /*!
3234     \fn void QOpenGLExtraFunctions::glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
3235 
3236     Convenience function that calls glTexStorage3D(\a target, \a levels, \a internalformat, \a width, \a height, \a depth).
3237 
3238     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3239     with plain OpenGL, the function is only usable when the given profile and version contains the
3240     function either in core or as an extension.
3241 
3242     For more information, see the OpenGL ES 3.x documentation for
3243     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glTexStorage3D.xhtml}{glTexStorage3D()}.
3244 */
3245 
3246 /*!
3247     \fn 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)
3248 
3249     Convenience function that calls glTexSubImage3D(\a target, \a level, \a xoffset, \a yoffset, \a zoffset, \a width, \a height, \a depth, \a format, \a type, \a pixels).
3250 
3251     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3252     with plain OpenGL, the function is only usable when the given profile and version contains the
3253     function either in core or as an extension.
3254 
3255     For more information, see the OpenGL ES 3.x documentation for
3256     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glTexSubImage3D.xhtml}{glTexSubImage3D()}.
3257 */
3258 
3259 /*!
3260     \fn void QOpenGLExtraFunctions::glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode)
3261 
3262     Convenience function that calls glTransformFeedbackVaryings(\a program, \a count, \a varyings, \a bufferMode).
3263 
3264     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3265     with plain OpenGL, the function is only usable when the given profile and version contains the
3266     function either in core or as an extension.
3267 
3268     For more information, see the OpenGL ES 3.x documentation for
3269     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glTransformFeedbackVaryings.xhtml}{glTransformFeedbackVaryings()}.
3270 */
3271 
3272 /*!
3273     \fn void QOpenGLExtraFunctions::glUniform1ui(GLint location, GLuint v0)
3274 
3275     Convenience function that calls glUniform1ui(\a location, \a v0).
3276 
3277     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3278     with plain OpenGL, the function is only usable when the given profile and version contains the
3279     function either in core or as an extension.
3280 
3281     For more information, see the OpenGL ES 3.x documentation for
3282     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform1ui()}.
3283 */
3284 
3285 /*!
3286     \fn void QOpenGLExtraFunctions::glUniform1uiv(GLint location, GLsizei count, const GLuint * value)
3287 
3288     Convenience function that calls glUniform1uiv(\a location, \a count, \a value).
3289 
3290     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3291     with plain OpenGL, the function is only usable when the given profile and version contains the
3292     function either in core or as an extension.
3293 
3294     For more information, see the OpenGL ES 3.x documentation for
3295     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform1uiv()}.
3296 */
3297 
3298 /*!
3299     \fn void QOpenGLExtraFunctions::glUniform2ui(GLint location, GLuint v0, GLuint v1)
3300 
3301     Convenience function that calls glUniform2ui(\a location, \a v0, \a v1).
3302 
3303     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3304     with plain OpenGL, the function is only usable when the given profile and version contains the
3305     function either in core or as an extension.
3306 
3307     For more information, see the OpenGL ES 3.x documentation for
3308     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform2ui()}.
3309 */
3310 
3311 /*!
3312     \fn void QOpenGLExtraFunctions::glUniform2uiv(GLint location, GLsizei count, const GLuint * value)
3313 
3314     Convenience function that calls glUniform2uiv(\a location, \a count, \a value).
3315 
3316     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3317     with plain OpenGL, the function is only usable when the given profile and version contains the
3318     function either in core or as an extension.
3319 
3320     For more information, see the OpenGL ES 3.x documentation for
3321     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform2uiv()}.
3322 */
3323 
3324 /*!
3325     \fn void QOpenGLExtraFunctions::glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
3326 
3327     Convenience function that calls glUniform3ui(\a location, \a v0, \a v1, \a v2).
3328 
3329     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3330     with plain OpenGL, the function is only usable when the given profile and version contains the
3331     function either in core or as an extension.
3332 
3333     For more information, see the OpenGL ES 3.x documentation for
3334     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform3ui()}.
3335 */
3336 
3337 /*!
3338     \fn void QOpenGLExtraFunctions::glUniform3uiv(GLint location, GLsizei count, const GLuint * value)
3339 
3340     Convenience function that calls glUniform3uiv(\a location, \a count, \a value).
3341 
3342     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3343     with plain OpenGL, the function is only usable when the given profile and version contains the
3344     function either in core or as an extension.
3345 
3346     For more information, see the OpenGL ES 3.x documentation for
3347     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform3uiv()}.
3348 */
3349 
3350 /*!
3351     \fn void QOpenGLExtraFunctions::glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
3352 
3353     Convenience function that calls glUniform4ui(\a location, \a v0, \a v1, \a v2, \a v3).
3354 
3355     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3356     with plain OpenGL, the function is only usable when the given profile and version contains the
3357     function either in core or as an extension.
3358 
3359     For more information, see the OpenGL ES 3.x documentation for
3360     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform4ui()}.
3361 */
3362 
3363 /*!
3364     \fn void QOpenGLExtraFunctions::glUniform4uiv(GLint location, GLsizei count, const GLuint * value)
3365 
3366     Convenience function that calls glUniform4uiv(\a location, \a count, \a value).
3367 
3368     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3369     with plain OpenGL, the function is only usable when the given profile and version contains the
3370     function either in core or as an extension.
3371 
3372     For more information, see the OpenGL ES 3.x documentation for
3373     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniform4uiv()}.
3374 */
3375 
3376 /*!
3377     \fn void QOpenGLExtraFunctions::glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
3378 
3379     Convenience function that calls glUniformBlockBinding(\a program, \a uniformBlockIndex, \a uniformBlockBinding).
3380 
3381     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3382     with plain OpenGL, the function is only usable when the given profile and version contains the
3383     function either in core or as an extension.
3384 
3385     For more information, see the OpenGL ES 3.x documentation for
3386     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniformBlockBinding.xhtml}{glUniformBlockBinding()}.
3387 */
3388 
3389 /*!
3390     \fn void QOpenGLExtraFunctions::glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
3391 
3392     Convenience function that calls glUniformMatrix2x3fv(\a location, \a count, \a transpose, \a value).
3393 
3394     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3395     with plain OpenGL, the function is only usable when the given profile and version contains the
3396     function either in core or as an extension.
3397 
3398     For more information, see the OpenGL ES 3.x documentation for
3399     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniformMatrix2x3fv()}.
3400 */
3401 
3402 /*!
3403     \fn void QOpenGLExtraFunctions::glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
3404 
3405     Convenience function that calls glUniformMatrix2x4fv(\a location, \a count, \a transpose, \a value).
3406 
3407     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3408     with plain OpenGL, the function is only usable when the given profile and version contains the
3409     function either in core or as an extension.
3410 
3411     For more information, see the OpenGL ES 3.x documentation for
3412     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniformMatrix2x4fv()}.
3413 */
3414 
3415 /*!
3416     \fn void QOpenGLExtraFunctions::glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
3417 
3418     Convenience function that calls glUniformMatrix3x2fv(\a location, \a count, \a transpose, \a value).
3419 
3420     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3421     with plain OpenGL, the function is only usable when the given profile and version contains the
3422     function either in core or as an extension.
3423 
3424     For more information, see the OpenGL ES 3.x documentation for
3425     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniformMatrix3x2fv()}.
3426 */
3427 
3428 /*!
3429     \fn void QOpenGLExtraFunctions::glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
3430 
3431     Convenience function that calls glUniformMatrix3x4fv(\a location, \a count, \a transpose, \a value).
3432 
3433     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3434     with plain OpenGL, the function is only usable when the given profile and version contains the
3435     function either in core or as an extension.
3436 
3437     For more information, see the OpenGL ES 3.x documentation for
3438     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniformMatrix3x4fv()}.
3439 */
3440 
3441 /*!
3442     \fn void QOpenGLExtraFunctions::glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
3443 
3444     Convenience function that calls glUniformMatrix4x2fv(\a location, \a count, \a transpose, \a value).
3445 
3446     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3447     with plain OpenGL, the function is only usable when the given profile and version contains the
3448     function either in core or as an extension.
3449 
3450     For more information, see the OpenGL ES 3.x documentation for
3451     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniformMatrix4x2fv()}.
3452 */
3453 
3454 /*!
3455     \fn void QOpenGLExtraFunctions::glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
3456 
3457     Convenience function that calls glUniformMatrix4x3fv(\a location, \a count, \a transpose, \a value).
3458 
3459     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3460     with plain OpenGL, the function is only usable when the given profile and version contains the
3461     function either in core or as an extension.
3462 
3463     For more information, see the OpenGL ES 3.x documentation for
3464     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUniform.xhtml}{glUniformMatrix4x3fv()}.
3465 */
3466 
3467 /*!
3468     \fn GLboolean QOpenGLExtraFunctions::glUnmapBuffer(GLenum target)
3469 
3470     Convenience function that calls glUnmapBuffer(\a target).
3471 
3472     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3473     with plain OpenGL, the function is only usable when the given profile and version contains the
3474     function either in core or as an extension.
3475 
3476     For more information, see the OpenGL ES 3.x documentation for
3477     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUnmapBuffer.xhtml}{glUnmapBuffer()}.
3478 */
3479 
3480 /*!
3481     \fn void QOpenGLExtraFunctions::glVertexAttribDivisor(GLuint index, GLuint divisor)
3482 
3483     Convenience function that calls glVertexAttribDivisor(\a index, \a divisor).
3484 
3485     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3486     with plain OpenGL, the function is only usable when the given profile and version contains the
3487     function either in core or as an extension.
3488 
3489     For more information, see the OpenGL ES 3.x documentation for
3490     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexAttribDivisor.xhtml}{glVertexAttribDivisor()}.
3491 */
3492 
3493 /*!
3494     \fn void QOpenGLExtraFunctions::glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
3495 
3496     Convenience function that calls glVertexAttribI4i(\a index, \a x, \a y, \a z, \a w).
3497 
3498     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3499     with plain OpenGL, the function is only usable when the given profile and version contains the
3500     function either in core or as an extension.
3501 
3502     For more information, see the OpenGL ES 3.x documentation for
3503     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexAttrib.xhtml}{glVertexAttribI4i()}.
3504 */
3505 
3506 /*!
3507     \fn void QOpenGLExtraFunctions::glVertexAttribI4iv(GLuint index, const GLint * v)
3508 
3509     Convenience function that calls glVertexAttribI4iv(\a index, \a v).
3510 
3511     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3512     with plain OpenGL, the function is only usable when the given profile and version contains the
3513     function either in core or as an extension.
3514 
3515     For more information, see the OpenGL ES 3.x documentation for
3516     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexAttrib.xhtml}{glVertexAttribI4iv()}.
3517 */
3518 
3519 /*!
3520     \fn void QOpenGLExtraFunctions::glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
3521 
3522     Convenience function that calls glVertexAttribI4ui(\a index, \a x, \a y, \a z, \a w).
3523 
3524     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3525     with plain OpenGL, the function is only usable when the given profile and version contains the
3526     function either in core or as an extension.
3527 
3528     For more information, see the OpenGL ES 3.x documentation for
3529     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexAttrib.xhtml}{glVertexAttribI4ui()}.
3530 */
3531 
3532 /*!
3533     \fn void QOpenGLExtraFunctions::glVertexAttribI4uiv(GLuint index, const GLuint * v)
3534 
3535     Convenience function that calls glVertexAttribI4uiv(\a index, \a v).
3536 
3537     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3538     with plain OpenGL, the function is only usable when the given profile and version contains the
3539     function either in core or as an extension.
3540 
3541     For more information, see the OpenGL ES 3.x documentation for
3542     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexAttrib.xhtml}{glVertexAttribI4uiv()}.
3543 */
3544 
3545 /*!
3546     \fn void QOpenGLExtraFunctions::glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer)
3547 
3548     Convenience function that calls glVertexAttribIPointer(\a index, \a size, \a type, \a stride, \a pointer).
3549 
3550     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3551     with plain OpenGL, the function is only usable when the given profile and version contains the
3552     function either in core or as an extension.
3553 
3554     For more information, see the OpenGL ES 3.x documentation for
3555     \l{https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glVertexAttribPointer.xhtml}{glVertexAttribIPointer()}.
3556 */
3557 
3558 /*!
3559     \fn void QOpenGLExtraFunctions::glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
3560 
3561     Convenience function that calls glWaitSync(\a sync, \a flags, \a timeout).
3562 
3563     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3564     with plain OpenGL, the function is only usable when the given profile and version contains the
3565     function either in core or as an extension.
3566 
3567     For more information, see the OpenGL ES 3.x documentation for
3568     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glWaitSync.xhtml}{glWaitSync()}.
3569 */
3570 
3571 /*!
3572     \fn void QOpenGLExtraFunctions::glActiveShaderProgram(GLuint pipeline, GLuint program)
3573 
3574     Convenience function that calls glActiveShaderProgram(\a pipeline, \a program).
3575 
3576     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3577     with plain OpenGL, the function is only usable when the given profile and version contains the
3578     function either in core or as an extension.
3579 
3580     For more information, see the OpenGL ES 3.x documentation for
3581     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glActiveShaderProgram.xhtml}{glActiveShaderProgram()}.
3582 */
3583 
3584 /*!
3585     \fn void QOpenGLExtraFunctions::glBindImageTexture(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format)
3586 
3587     Convenience function that calls glBindImageTexture(\a unit, \a texture, \a level, \a layered, \a layer, \a access, \a format).
3588 
3589     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3590     with plain OpenGL, the function is only usable when the given profile and version contains the
3591     function either in core or as an extension.
3592 
3593     For more information, see the OpenGL ES 3.x documentation for
3594     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBindImageTexture.xhtml}{glBindImageTexture()}.
3595 */
3596 
3597 /*!
3598     \fn void QOpenGLExtraFunctions::glBindProgramPipeline(GLuint pipeline)
3599 
3600     Convenience function that calls glBindProgramPipeline(\a pipeline).
3601 
3602     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3603     with plain OpenGL, the function is only usable when the given profile and version contains the
3604     function either in core or as an extension.
3605 
3606     For more information, see the OpenGL ES 3.x documentation for
3607     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBindProgramPipeline.xhtml}{glBindProgramPipeline()}.
3608 */
3609 
3610 /*!
3611     \fn void QOpenGLExtraFunctions::glBindVertexBuffer(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride)
3612 
3613     Convenience function that calls glBindVertexBuffer(\a bindingindex, \a buffer, \a offset, \a stride).
3614 
3615     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3616     with plain OpenGL, the function is only usable when the given profile and version contains the
3617     function either in core or as an extension.
3618 
3619     For more information, see the OpenGL ES 3.x documentation for
3620     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBindVertexBuffer.xhtml}{glBindVertexBuffer()}.
3621 */
3622 
3623 /*!
3624     \fn GLuint QOpenGLExtraFunctions::glCreateShaderProgramv(GLenum type, GLsizei count, const GLchar *const* strings)
3625 
3626     Convenience function that calls glCreateShaderProgramv(\a type, \a count, \a strings).
3627 
3628     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3629     with plain OpenGL, the function is only usable when the given profile and version contains the
3630     function either in core or as an extension.
3631 
3632     For more information, see the OpenGL ES 3.x documentation for
3633     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glCreateShaderProgramv.xhtml}{glCreateShaderProgramv()}.
3634 */
3635 
3636 /*!
3637     \fn void QOpenGLExtraFunctions::glDeleteProgramPipelines(GLsizei n, const GLuint * pipelines)
3638 
3639     Convenience function that calls glDeleteProgramPipelines(\a n, \a pipelines).
3640 
3641     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3642     with plain OpenGL, the function is only usable when the given profile and version contains the
3643     function either in core or as an extension.
3644 
3645     For more information, see the OpenGL ES 3.x documentation for
3646     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDeleteProgramPipelines.xhtml}{glDeleteProgramPipelines()}.
3647 */
3648 
3649 /*!
3650     \fn void QOpenGLExtraFunctions::glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z)
3651 
3652     Convenience function that calls glDispatchCompute(\a num_groups_x, \a num_groups_y, \a num_groups_z).
3653 
3654     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3655     with plain OpenGL, the function is only usable when the given profile and version contains the
3656     function either in core or as an extension.
3657 
3658     For more information, see the OpenGL ES 3.x documentation for
3659     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDispatchCompute.xhtml}{glDispatchCompute()}.
3660 */
3661 
3662 /*!
3663     \fn void QOpenGLExtraFunctions::glDispatchComputeIndirect(GLintptr indirect)
3664 
3665     Convenience function that calls glDispatchComputeIndirect(\a indirect).
3666 
3667     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3668     with plain OpenGL, the function is only usable when the given profile and version contains the
3669     function either in core or as an extension.
3670 
3671     For more information, see the OpenGL ES 3.x documentation for
3672     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDispatchComputeIndirect.xhtml}{glDispatchComputeIndirect()}.
3673 */
3674 
3675 /*!
3676     \fn void QOpenGLExtraFunctions::glDrawArraysIndirect(GLenum mode, const void * indirect)
3677 
3678     Convenience function that calls glDrawArraysIndirect(\a mode, \a indirect).
3679 
3680     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3681     with plain OpenGL, the function is only usable when the given profile and version contains the
3682     function either in core or as an extension.
3683 
3684     For more information, see the OpenGL ES 3.x documentation for
3685     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDrawArraysIndirect.xhtml}{glDrawArraysIndirect()}.
3686 */
3687 
3688 /*!
3689     \fn void QOpenGLExtraFunctions::glDrawElementsIndirect(GLenum mode, GLenum type, const void * indirect)
3690 
3691     Convenience function that calls glDrawElementsIndirect(\a mode, \a type, \a indirect).
3692 
3693     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3694     with plain OpenGL, the function is only usable when the given profile and version contains the
3695     function either in core or as an extension.
3696 
3697     For more information, see the OpenGL ES 3.x documentation for
3698     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDrawElementsIndirect.xhtml}{glDrawElementsIndirect()}.
3699 */
3700 
3701 /*!
3702     \fn void QOpenGLExtraFunctions::glFramebufferParameteri(GLenum target, GLenum pname, GLint param)
3703 
3704     Convenience function that calls glFramebufferParameteri(\a target, \a pname, \a param).
3705 
3706     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3707     with plain OpenGL, the function is only usable when the given profile and version contains the
3708     function either in core or as an extension.
3709 
3710     For more information, see the OpenGL ES 3.x documentation for
3711     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glFramebufferParameteri.xhtml}{glFramebufferParameteri()}.
3712 */
3713 
3714 /*!
3715     \fn void QOpenGLExtraFunctions::glGenProgramPipelines(GLsizei n, GLuint* pipelines)
3716 
3717     Convenience function that calls glGenProgramPipelines(\a n, \a pipelines).
3718 
3719     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3720     with plain OpenGL, the function is only usable when the given profile and version contains the
3721     function either in core or as an extension.
3722 
3723     For more information, see the OpenGL ES 3.x documentation for
3724     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGenProgramPipelines.xhtml}{glGenProgramPipelines()}.
3725 */
3726 
3727 /*!
3728     \fn void QOpenGLExtraFunctions::glGetBooleani_v(GLenum target, GLuint index, GLboolean* data)
3729 
3730     Convenience function that calls glGetBooleani_v(\a target, \a index, \a data).
3731 
3732     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3733     with plain OpenGL, the function is only usable when the given profile and version contains the
3734     function either in core or as an extension.
3735 
3736     For more information, see the OpenGL ES 3.x documentation for
3737     \l{https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glGet.xhtml}{glGetBooleani_v()}.
3738 */
3739 
3740 /*!
3741     \fn void QOpenGLExtraFunctions::glGetFramebufferParameteriv(GLenum target, GLenum pname, GLint* params)
3742 
3743     Convenience function that calls glGetFramebufferParameteriv(\a target, \a pname, \a params).
3744 
3745     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3746     with plain OpenGL, the function is only usable when the given profile and version contains the
3747     function either in core or as an extension.
3748 
3749     For more information, see the OpenGL ES 3.x documentation for
3750     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetFramebufferParameteriv.xhtml}{glGetFramebufferParameteriv()}.
3751 */
3752 
3753 /*!
3754     \fn void QOpenGLExtraFunctions::glGetMultisamplefv(GLenum pname, GLuint index, GLfloat* val)
3755 
3756     Convenience function that calls glGetMultisamplefv(\a pname, \a index, \a val).
3757 
3758     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3759     with plain OpenGL, the function is only usable when the given profile and version contains the
3760     function either in core or as an extension.
3761 
3762     For more information, see the OpenGL ES 3.x documentation for
3763     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetMultisamplefv.xhtml}{glGetMultisamplefv()}.
3764 */
3765 
3766 /*!
3767     \fn void QOpenGLExtraFunctions::glGetProgramInterfaceiv(GLuint program, GLenum programInterface, GLenum pname, GLint* params)
3768 
3769     Convenience function that calls glGetProgramInterfaceiv(\a program, \a programInterface, \a pname, \a params).
3770 
3771     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3772     with plain OpenGL, the function is only usable when the given profile and version contains the
3773     function either in core or as an extension.
3774 
3775     For more information, see the OpenGL ES 3.x documentation for
3776     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetProgramInterface.xhtml}{glGetProgramInterfaceiv()}.
3777 */
3778 
3779 /*!
3780     \fn void QOpenGLExtraFunctions::glGetProgramPipelineInfoLog(GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog)
3781 
3782     Convenience function that calls glGetProgramPipelineInfoLog(\a pipeline, \a bufSize, \a length, \a infoLog).
3783 
3784     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3785     with plain OpenGL, the function is only usable when the given profile and version contains the
3786     function either in core or as an extension.
3787 
3788     For more information, see the OpenGL ES 3.x documentation for
3789     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetProgramPipelineInfoLog.xhtml}{glGetProgramPipelineInfoLog()}.
3790 */
3791 
3792 /*!
3793     \fn void QOpenGLExtraFunctions::glGetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint* params)
3794 
3795     Convenience function that calls glGetProgramPipelineiv(\a pipeline, \a pname, \a params).
3796 
3797     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3798     with plain OpenGL, the function is only usable when the given profile and version contains the
3799     function either in core or as an extension.
3800 
3801     For more information, see the OpenGL ES 3.x documentation for
3802     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetProgramPipeline.xhtml}{glGetProgramPipelineiv()}.
3803 */
3804 
3805 /*!
3806     \fn GLuint QOpenGLExtraFunctions::glGetProgramResourceIndex(GLuint program, GLenum programInterface, const GLchar * name)
3807 
3808     Convenience function that calls glGetProgramResourceIndex(\a program, \a programInterface, \a name).
3809 
3810     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3811     with plain OpenGL, the function is only usable when the given profile and version contains the
3812     function either in core or as an extension.
3813 
3814     For more information, see the OpenGL ES 3.x documentation for
3815     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetProgramResourceIndex.xhtml}{glGetProgramResourceIndex()}.
3816 */
3817 
3818 /*!
3819     \fn GLint QOpenGLExtraFunctions::glGetProgramResourceLocation(GLuint program, GLenum programInterface, const GLchar * name)
3820 
3821     Convenience function that calls glGetProgramResourceLocation(\a program, \a programInterface, \a name).
3822 
3823     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3824     with plain OpenGL, the function is only usable when the given profile and version contains the
3825     function either in core or as an extension.
3826 
3827     For more information, see the OpenGL ES 3.x documentation for
3828     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetProgramResourceLocation.xhtml}{glGetProgramResourceLocation()}.
3829 */
3830 
3831 /*!
3832     \fn void QOpenGLExtraFunctions::glGetProgramResourceName(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name)
3833 
3834     Convenience function that calls glGetProgramResourceName(\a program, \a programInterface, \a index, \a bufSize, \a length, \a name).
3835 
3836     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3837     with plain OpenGL, the function is only usable when the given profile and version contains the
3838     function either in core or as an extension.
3839 
3840     For more information, see the OpenGL ES 3.x documentation for
3841     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetProgramResourceName.xhtml}{glGetProgramResourceName()}.
3842 */
3843 
3844 /*!
3845     \fn void QOpenGLExtraFunctions::glGetProgramResourceiv(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei* length, GLint* params)
3846 
3847     Convenience function that calls glGetProgramResourceiv(\a program, \a programInterface, \a index, \a propCount, \a props, \a bufSize, \a length, \a params).
3848 
3849     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3850     with plain OpenGL, the function is only usable when the given profile and version contains the
3851     function either in core or as an extension.
3852 
3853     For more information, see the OpenGL ES 3.x documentation for
3854     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetProgramResource.xhtml}{glGetProgramResourceiv()}.
3855 */
3856 
3857 /*!
3858     \fn void QOpenGLExtraFunctions::glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat* params)
3859 
3860     Convenience function that calls glGetTexLevelParameterfv(\a target, \a level, \a pname, \a params).
3861 
3862     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3863     with plain OpenGL, the function is only usable when the given profile and version contains the
3864     function either in core or as an extension.
3865 
3866     For more information, see the OpenGL ES 3.x documentation for
3867     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetTexLevelParameter.xhtml}{glGetTexLevelParameterfv()}.
3868 */
3869 
3870 /*!
3871     \fn void QOpenGLExtraFunctions::glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint* params)
3872 
3873     Convenience function that calls glGetTexLevelParameteriv(\a target, \a level, \a pname, \a params).
3874 
3875     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3876     with plain OpenGL, the function is only usable when the given profile and version contains the
3877     function either in core or as an extension.
3878 
3879     For more information, see the OpenGL ES 3.x documentation for
3880     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetTexLevelParameter.xhtml}{glGetTexLevelParameteriv()}.
3881 */
3882 
3883 /*!
3884     \fn GLboolean QOpenGLExtraFunctions::glIsProgramPipeline(GLuint pipeline)
3885 
3886     Convenience function that calls glIsProgramPipeline(\a pipeline).
3887 
3888     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3889     with plain OpenGL, the function is only usable when the given profile and version contains the
3890     function either in core or as an extension.
3891 
3892     For more information, see the OpenGL ES 3.x documentation for
3893     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glIsProgramPipeline.xhtml}{glIsProgramPipeline()}.
3894 */
3895 
3896 /*!
3897     \fn void QOpenGLExtraFunctions::glMemoryBarrier(GLbitfield barriers)
3898 
3899     Convenience function that calls glMemoryBarrier(\a barriers).
3900 
3901     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3902     with plain OpenGL, the function is only usable when the given profile and version contains the
3903     function either in core or as an extension.
3904 
3905     For more information, see the OpenGL ES 3.x documentation for
3906     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3.1/html/glMemoryBarrier.xhtml}{glMemoryBarrier()}.
3907 */
3908 
3909 /*!
3910     \fn void QOpenGLExtraFunctions::glMemoryBarrierByRegion(GLbitfield barriers)
3911 
3912     Convenience function that calls glMemoryBarrierByRegion(\a barriers).
3913 
3914     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3915     with plain OpenGL, the function is only usable when the given profile and version contains the
3916     function either in core or as an extension.
3917 
3918     For more information, see the OpenGL ES 3.x documentation for
3919     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3.1/html/glMemoryBarrier.xhtml}{glMemoryBarrierByRegion()}.
3920 */
3921 
3922 /*!
3923     \fn void QOpenGLExtraFunctions::glProgramUniform1f(GLuint program, GLint location, GLfloat v0)
3924 
3925     Convenience function that calls glProgramUniform1f(\a program, \a location, \a v0).
3926 
3927     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3928     with plain OpenGL, the function is only usable when the given profile and version contains the
3929     function either in core or as an extension.
3930 
3931     For more information, see the OpenGL ES 3.x documentation for
3932     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform1f()}.
3933 */
3934 
3935 /*!
3936     \fn void QOpenGLExtraFunctions::glProgramUniform1fv(GLuint program, GLint location, GLsizei count, const GLfloat * value)
3937 
3938     Convenience function that calls glProgramUniform1fv(\a program, \a location, \a count, \a value).
3939 
3940     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3941     with plain OpenGL, the function is only usable when the given profile and version contains the
3942     function either in core or as an extension.
3943 
3944     For more information, see the OpenGL ES 3.x documentation for
3945     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform1fv()}.
3946 */
3947 
3948 /*!
3949     \fn void QOpenGLExtraFunctions::glProgramUniform1i(GLuint program, GLint location, GLint v0)
3950 
3951     Convenience function that calls glProgramUniform1i(\a program, \a location, \a v0).
3952 
3953     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3954     with plain OpenGL, the function is only usable when the given profile and version contains the
3955     function either in core or as an extension.
3956 
3957     For more information, see the OpenGL ES 3.x documentation for
3958     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform1i()}.
3959 */
3960 
3961 /*!
3962     \fn void QOpenGLExtraFunctions::glProgramUniform1iv(GLuint program, GLint location, GLsizei count, const GLint * value)
3963 
3964     Convenience function that calls glProgramUniform1iv(\a program, \a location, \a count, \a value).
3965 
3966     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3967     with plain OpenGL, the function is only usable when the given profile and version contains the
3968     function either in core or as an extension.
3969 
3970     For more information, see the OpenGL ES 3.x documentation for
3971     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform1iv()}.
3972 */
3973 
3974 /*!
3975     \fn void QOpenGLExtraFunctions::glProgramUniform1ui(GLuint program, GLint location, GLuint v0)
3976 
3977     Convenience function that calls glProgramUniform1ui(\a program, \a location, \a v0).
3978 
3979     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3980     with plain OpenGL, the function is only usable when the given profile and version contains the
3981     function either in core or as an extension.
3982 
3983     For more information, see the OpenGL ES 3.x documentation for
3984     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform1ui()}.
3985 */
3986 
3987 /*!
3988     \fn void QOpenGLExtraFunctions::glProgramUniform1uiv(GLuint program, GLint location, GLsizei count, const GLuint * value)
3989 
3990     Convenience function that calls glProgramUniform1uiv(\a program, \a location, \a count, \a value).
3991 
3992     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
3993     with plain OpenGL, the function is only usable when the given profile and version contains the
3994     function either in core or as an extension.
3995 
3996     For more information, see the OpenGL ES 3.x documentation for
3997     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform1uiv()}.
3998 */
3999 
4000 /*!
4001     \fn void QOpenGLExtraFunctions::glProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1)
4002 
4003     Convenience function that calls glProgramUniform2f(\a program, \a location, \a v0, \a v1).
4004 
4005     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4006     with plain OpenGL, the function is only usable when the given profile and version contains the
4007     function either in core or as an extension.
4008 
4009     For more information, see the OpenGL ES 3.x documentation for
4010     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform2f()}.
4011 */
4012 
4013 /*!
4014     \fn void QOpenGLExtraFunctions::glProgramUniform2fv(GLuint program, GLint location, GLsizei count, const GLfloat * value)
4015 
4016     Convenience function that calls glProgramUniform2fv(\a program, \a location, \a count, \a value).
4017 
4018     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4019     with plain OpenGL, the function is only usable when the given profile and version contains the
4020     function either in core or as an extension.
4021 
4022     For more information, see the OpenGL ES 3.x documentation for
4023     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform2fv()}.
4024 */
4025 
4026 /*!
4027     \fn void QOpenGLExtraFunctions::glProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1)
4028 
4029     Convenience function that calls glProgramUniform2i(\a program, \a location, \a v0, \a v1).
4030 
4031     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4032     with plain OpenGL, the function is only usable when the given profile and version contains the
4033     function either in core or as an extension.
4034 
4035     For more information, see the OpenGL ES 3.x documentation for
4036     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform2i()}.
4037 */
4038 
4039 /*!
4040     \fn void QOpenGLExtraFunctions::glProgramUniform2iv(GLuint program, GLint location, GLsizei count, const GLint * value)
4041 
4042     Convenience function that calls glProgramUniform2iv(\a program, \a location, \a count, \a value).
4043 
4044     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4045     with plain OpenGL, the function is only usable when the given profile and version contains the
4046     function either in core or as an extension.
4047 
4048     For more information, see the OpenGL ES 3.x documentation for
4049     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform2iv()}.
4050 */
4051 
4052 /*!
4053     \fn void QOpenGLExtraFunctions::glProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1)
4054 
4055     Convenience function that calls glProgramUniform2ui(\a program, \a location, \a v0, \a v1).
4056 
4057     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4058     with plain OpenGL, the function is only usable when the given profile and version contains the
4059     function either in core or as an extension.
4060 
4061     For more information, see the OpenGL ES 3.x documentation for
4062     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform2ui()}.
4063 */
4064 
4065 /*!
4066     \fn void QOpenGLExtraFunctions::glProgramUniform2uiv(GLuint program, GLint location, GLsizei count, const GLuint * value)
4067 
4068     Convenience function that calls glProgramUniform2uiv(\a program, \a location, \a count, \a value).
4069 
4070     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4071     with plain OpenGL, the function is only usable when the given profile and version contains the
4072     function either in core or as an extension.
4073 
4074     For more information, see the OpenGL ES 3.x documentation for
4075     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform2uiv()}.
4076 */
4077 
4078 /*!
4079     \fn void QOpenGLExtraFunctions::glProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
4080 
4081     Convenience function that calls glProgramUniform3f(\a program, \a location, \a v0, \a v1, \a v2).
4082 
4083     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4084     with plain OpenGL, the function is only usable when the given profile and version contains the
4085     function either in core or as an extension.
4086 
4087     For more information, see the OpenGL ES 3.x documentation for
4088     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform3f()}.
4089 */
4090 
4091 /*!
4092     \fn void QOpenGLExtraFunctions::glProgramUniform3fv(GLuint program, GLint location, GLsizei count, const GLfloat * value)
4093 
4094     Convenience function that calls glProgramUniform3fv(\a program, \a location, \a count, \a value).
4095 
4096     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4097     with plain OpenGL, the function is only usable when the given profile and version contains the
4098     function either in core or as an extension.
4099 
4100     For more information, see the OpenGL ES 3.x documentation for
4101     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform3fv()}.
4102 */
4103 
4104 /*!
4105     \fn void QOpenGLExtraFunctions::glProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2)
4106 
4107     Convenience function that calls glProgramUniform3i(\a program, \a location, \a v0, \a v1, \a v2).
4108 
4109     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4110     with plain OpenGL, the function is only usable when the given profile and version contains the
4111     function either in core or as an extension.
4112 
4113     For more information, see the OpenGL ES 3.x documentation for
4114     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform3i()}.
4115 */
4116 
4117 /*!
4118     \fn void QOpenGLExtraFunctions::glProgramUniform3iv(GLuint program, GLint location, GLsizei count, const GLint * value)
4119 
4120     Convenience function that calls glProgramUniform3iv(\a program, \a location, \a count, \a value).
4121 
4122     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4123     with plain OpenGL, the function is only usable when the given profile and version contains the
4124     function either in core or as an extension.
4125 
4126     For more information, see the OpenGL ES 3.x documentation for
4127     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform3iv()}.
4128 */
4129 
4130 /*!
4131     \fn void QOpenGLExtraFunctions::glProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2)
4132 
4133     Convenience function that calls glProgramUniform3ui(\a program, \a location, \a v0, \a v1, \a v2).
4134 
4135     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4136     with plain OpenGL, the function is only usable when the given profile and version contains the
4137     function either in core or as an extension.
4138 
4139     For more information, see the OpenGL ES 3.x documentation for
4140     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform3ui()}.
4141 */
4142 
4143 /*!
4144     \fn void QOpenGLExtraFunctions::glProgramUniform3uiv(GLuint program, GLint location, GLsizei count, const GLuint * value)
4145 
4146     Convenience function that calls glProgramUniform3uiv(\a program, \a location, \a count, \a value).
4147 
4148     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4149     with plain OpenGL, the function is only usable when the given profile and version contains the
4150     function either in core or as an extension.
4151 
4152     For more information, see the OpenGL ES 3.x documentation for
4153     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform3uiv()}.
4154 */
4155 
4156 /*!
4157     \fn void QOpenGLExtraFunctions::glProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
4158 
4159     Convenience function that calls glProgramUniform4f(\a program, \a location, \a v0, \a v1, \a v2, \a v3).
4160 
4161     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4162     with plain OpenGL, the function is only usable when the given profile and version contains the
4163     function either in core or as an extension.
4164 
4165     For more information, see the OpenGL ES 3.x documentation for
4166     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform4f()}.
4167 */
4168 
4169 /*!
4170     \fn void QOpenGLExtraFunctions::glProgramUniform4fv(GLuint program, GLint location, GLsizei count, const GLfloat * value)
4171 
4172     Convenience function that calls glProgramUniform4fv(\a program, \a location, \a count, \a value).
4173 
4174     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4175     with plain OpenGL, the function is only usable when the given profile and version contains the
4176     function either in core or as an extension.
4177 
4178     For more information, see the OpenGL ES 3.x documentation for
4179     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform4fv()}.
4180 */
4181 
4182 /*!
4183     \fn void QOpenGLExtraFunctions::glProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
4184 
4185     Convenience function that calls glProgramUniform4i(\a program, \a location, \a v0, \a v1, \a v2, \a v3).
4186 
4187     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4188     with plain OpenGL, the function is only usable when the given profile and version contains the
4189     function either in core or as an extension.
4190 
4191     For more information, see the OpenGL ES 3.x documentation for
4192     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform4i()}.
4193 */
4194 
4195 /*!
4196     \fn void QOpenGLExtraFunctions::glProgramUniform4iv(GLuint program, GLint location, GLsizei count, const GLint * value)
4197 
4198     Convenience function that calls glProgramUniform4iv(\a program, \a location, \a count, \a value).
4199 
4200     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4201     with plain OpenGL, the function is only usable when the given profile and version contains the
4202     function either in core or as an extension.
4203 
4204     For more information, see the OpenGL ES 3.x documentation for
4205     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform4iv()}.
4206 */
4207 
4208 /*!
4209     \fn void QOpenGLExtraFunctions::glProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
4210 
4211     Convenience function that calls glProgramUniform4ui(\a program, \a location, \a v0, \a v1, \a v2, \a v3).
4212 
4213     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4214     with plain OpenGL, the function is only usable when the given profile and version contains the
4215     function either in core or as an extension.
4216 
4217     For more information, see the OpenGL ES 3.x documentation for
4218     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform4ui()}.
4219 */
4220 
4221 /*!
4222     \fn void QOpenGLExtraFunctions::glProgramUniform4uiv(GLuint program, GLint location, GLsizei count, const GLuint * value)
4223 
4224     Convenience function that calls glProgramUniform4uiv(\a program, \a location, \a count, \a value).
4225 
4226     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4227     with plain OpenGL, the function is only usable when the given profile and version contains the
4228     function either in core or as an extension.
4229 
4230     For more information, see the OpenGL ES 3.x documentation for
4231     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniform4uiv()}.
4232 */
4233 
4234 /*!
4235     \fn void QOpenGLExtraFunctions::glProgramUniformMatrix2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
4236 
4237     Convenience function that calls glProgramUniformMatrix2fv(\a program, \a location, \a count, \a transpose, \a value).
4238 
4239     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4240     with plain OpenGL, the function is only usable when the given profile and version contains the
4241     function either in core or as an extension.
4242 
4243     For more information, see the OpenGL ES 3.x documentation for
4244     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniformMatrix2fv()}.
4245 */
4246 
4247 /*!
4248     \fn void QOpenGLExtraFunctions::glProgramUniformMatrix2x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
4249 
4250     Convenience function that calls glProgramUniformMatrix2x3fv(\a program, \a location, \a count, \a transpose, \a value).
4251 
4252     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4253     with plain OpenGL, the function is only usable when the given profile and version contains the
4254     function either in core or as an extension.
4255 
4256     For more information, see the OpenGL ES 3.x documentation for
4257     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniformMatrix2x3fv()}.
4258 */
4259 
4260 /*!
4261     \fn void QOpenGLExtraFunctions::glProgramUniformMatrix2x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
4262 
4263     Convenience function that calls glProgramUniformMatrix2x4fv(\a program, \a location, \a count, \a transpose, \a value).
4264 
4265     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4266     with plain OpenGL, the function is only usable when the given profile and version contains the
4267     function either in core or as an extension.
4268 
4269     For more information, see the OpenGL ES 3.x documentation for
4270     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniformMatrix2x4fv()}.
4271 */
4272 
4273 /*!
4274     \fn void QOpenGLExtraFunctions::glProgramUniformMatrix3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
4275 
4276     Convenience function that calls glProgramUniformMatrix3fv(\a program, \a location, \a count, \a transpose, \a value).
4277 
4278     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4279     with plain OpenGL, the function is only usable when the given profile and version contains the
4280     function either in core or as an extension.
4281 
4282     For more information, see the OpenGL ES 3.x documentation for
4283     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniformMatrix3fv()}.
4284 */
4285 
4286 /*!
4287     \fn void QOpenGLExtraFunctions::glProgramUniformMatrix3x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
4288 
4289     Convenience function that calls glProgramUniformMatrix3x2fv(\a program, \a location, \a count, \a transpose, \a value).
4290 
4291     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4292     with plain OpenGL, the function is only usable when the given profile and version contains the
4293     function either in core or as an extension.
4294 
4295     For more information, see the OpenGL ES 3.x documentation for
4296     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniformMatrix3x2fv()}.
4297 */
4298 
4299 /*!
4300     \fn void QOpenGLExtraFunctions::glProgramUniformMatrix3x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
4301 
4302     Convenience function that calls glProgramUniformMatrix3x4fv(\a program, \a location, \a count, \a transpose, \a value).
4303 
4304     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4305     with plain OpenGL, the function is only usable when the given profile and version contains the
4306     function either in core or as an extension.
4307 
4308     For more information, see the OpenGL ES 3.x documentation for
4309     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniformMatrix3x4fv()}.
4310 */
4311 
4312 /*!
4313     \fn void QOpenGLExtraFunctions::glProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
4314 
4315     Convenience function that calls glProgramUniformMatrix4fv(\a program, \a location, \a count, \a transpose, \a value).
4316 
4317     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4318     with plain OpenGL, the function is only usable when the given profile and version contains the
4319     function either in core or as an extension.
4320 
4321     For more information, see the OpenGL ES 3.x documentation for
4322     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniformMatrix4fv()}.
4323 */
4324 
4325 /*!
4326     \fn void QOpenGLExtraFunctions::glProgramUniformMatrix4x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
4327 
4328     Convenience function that calls glProgramUniformMatrix4x2fv(\a program, \a location, \a count, \a transpose, \a value).
4329 
4330     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4331     with plain OpenGL, the function is only usable when the given profile and version contains the
4332     function either in core or as an extension.
4333 
4334     For more information, see the OpenGL ES 3.x documentation for
4335     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniformMatrix4x2fv()}.
4336 */
4337 
4338 /*!
4339     \fn void QOpenGLExtraFunctions::glProgramUniformMatrix4x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value)
4340 
4341     Convenience function that calls glProgramUniformMatrix4x3fv(\a program, \a location, \a count, \a transpose, \a value).
4342 
4343     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4344     with plain OpenGL, the function is only usable when the given profile and version contains the
4345     function either in core or as an extension.
4346 
4347     For more information, see the OpenGL ES 3.x documentation for
4348     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glProgramUniform.xhtml}{glProgramUniformMatrix4x3fv()}.
4349 */
4350 
4351 /*!
4352     \fn void QOpenGLExtraFunctions::glSampleMaski(GLuint maskNumber, GLbitfield mask)
4353 
4354     Convenience function that calls glSampleMaski(\a maskNumber, \a mask).
4355 
4356     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4357     with plain OpenGL, the function is only usable when the given profile and version contains the
4358     function either in core or as an extension.
4359 
4360     For more information, see the OpenGL ES 3.x documentation for
4361     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glSampleMaski.xhtml}{glSampleMaski()}.
4362 */
4363 
4364 /*!
4365     \fn void QOpenGLExtraFunctions::glTexStorage2DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)
4366 
4367     Convenience function that calls glTexStorage2DMultisample(\a target, \a samples, \a internalformat, \a width, \a height, \a fixedsamplelocations).
4368 
4369     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4370     with plain OpenGL, the function is only usable when the given profile and version contains the
4371     function either in core or as an extension.
4372 
4373     For more information, see the OpenGL ES 3.x documentation for
4374     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glTexStorage2DMultisample.xhtml}{glTexStorage2DMultisample()}.
4375 */
4376 
4377 /*!
4378     \fn void QOpenGLExtraFunctions::glUseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program)
4379 
4380     Convenience function that calls glUseProgramStages(\a pipeline, \a stages, \a program).
4381 
4382     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4383     with plain OpenGL, the function is only usable when the given profile and version contains the
4384     function either in core or as an extension.
4385 
4386     For more information, see the OpenGL ES 3.x documentation for
4387     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glUseProgramStages.xhtml}{glUseProgramStages()}.
4388 */
4389 
4390 /*!
4391     \fn void QOpenGLExtraFunctions::glValidateProgramPipeline(GLuint pipeline)
4392 
4393     Convenience function that calls glValidateProgramPipeline(\a pipeline).
4394 
4395     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4396     with plain OpenGL, the function is only usable when the given profile and version contains the
4397     function either in core or as an extension.
4398 
4399     For more information, see the OpenGL ES 3.x documentation for
4400     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glValidateProgramPipeline.xhtml}{glValidateProgramPipeline()}.
4401 */
4402 
4403 /*!
4404     \fn void QOpenGLExtraFunctions::glVertexAttribBinding(GLuint attribindex, GLuint bindingindex)
4405 
4406     Convenience function that calls glVertexAttribBinding(\a attribindex, \a bindingindex).
4407 
4408     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4409     with plain OpenGL, the function is only usable when the given profile and version contains the
4410     function either in core or as an extension.
4411 
4412     For more information, see the OpenGL ES 3.x documentation for
4413     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexAttribBinding.xhtml}{glVertexAttribBinding()}.
4414 */
4415 
4416 /*!
4417     \fn void QOpenGLExtraFunctions::glVertexAttribFormat(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset)
4418 
4419     Convenience function that calls glVertexAttribFormat(\a attribindex, \a size, \a type, \a normalized, \a relativeoffset).
4420 
4421     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4422     with plain OpenGL, the function is only usable when the given profile and version contains the
4423     function either in core or as an extension.
4424 
4425     For more information, see the OpenGL ES 3.x documentation for
4426     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexAttribFormat.xhtml}{glVertexAttribFormat()}.
4427 */
4428 
4429 /*!
4430     \fn void QOpenGLExtraFunctions::glVertexAttribIFormat(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset)
4431 
4432     Convenience function that calls glVertexAttribIFormat(\a attribindex, \a size, \a type, \a relativeoffset).
4433 
4434     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4435     with plain OpenGL, the function is only usable when the given profile and version contains the
4436     function either in core or as an extension.
4437 
4438     For more information, see the OpenGL ES 3.x documentation for
4439     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexAttribIFormat.xhtml}{glVertexAttribIFormat()}.
4440 */
4441 
4442 /*!
4443     \fn void QOpenGLExtraFunctions::glVertexBindingDivisor(GLuint bindingindex, GLuint divisor)
4444 
4445     Convenience function that calls glVertexBindingDivisor(\a bindingindex, \a divisor).
4446 
4447     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4448     with plain OpenGL, the function is only usable when the given profile and version contains the
4449     function either in core or as an extension.
4450 
4451     For more information, see the OpenGL ES 3.x documentation for
4452     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glVertexBindingDivisor.xhtml}{glVertexBindingDivisor()}.
4453 */
4454 
4455 /*!
4456     \fn void QOpenGLExtraFunctions::glBlendBarrier(void)
4457 
4458     Convenience function that calls glBlendBarrier().
4459 
4460     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4461     with plain OpenGL, the function is only usable when the given profile and version contains the
4462     function either in core or as an extension.
4463 
4464     For more information, see the OpenGL ES 3.2 documentation for
4465     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBlendBarrier.xhtml}{glBlendBarrier()}.
4466 */
4467 
4468 /*!
4469     \fn void QOpenGLExtraFunctions::glBlendEquationSeparatei(GLuint buf, GLenum modeRGB, GLenum modeAlpha)
4470 
4471     Convenience function that calls glBlendEquationSeparatei(\a buf, \a modeRGB, \a modeAlpha).
4472 
4473     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4474     with plain OpenGL, the function is only usable when the given profile and version contains the
4475     function either in core or as an extension.
4476 
4477     For more information, see the OpenGL ES 3.2 documentation for
4478     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBlendEquationSeparate.xhtml}{glBlendEquationSeparatei()}.
4479 */
4480 
4481 /*!
4482     \fn void QOpenGLExtraFunctions::glBlendEquationi(GLuint buf, GLenum mode)
4483 
4484     Convenience function that calls glBlendEquationi(\a buf, \a mode).
4485 
4486     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4487     with plain OpenGL, the function is only usable when the given profile and version contains the
4488     function either in core or as an extension.
4489 
4490     For more information, see the OpenGL ES 3.2 documentation for
4491     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBlendEquationi.xhtml}{glBlendEquationi()}.
4492 */
4493 
4494 /*!
4495     \fn void QOpenGLExtraFunctions::glBlendFuncSeparatei(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
4496 
4497     Convenience function that calls glBlendFuncSeparatei(\a buf, \a srcRGB, \a dstRGB, \a srcAlpha, \a dstAlpha).
4498 
4499     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4500     with plain OpenGL, the function is only usable when the given profile and version contains the
4501     function either in core or as an extension.
4502 
4503     For more information, see the OpenGL ES 3.2 documentation for
4504     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBlendFuncSeparate.xhtml}{glBlendFuncSeparatei()}.
4505 */
4506 
4507 /*!
4508     \fn void QOpenGLExtraFunctions::glBlendFunci(GLuint buf, GLenum src, GLenum dst)
4509 
4510     Convenience function that calls glBlendFunci(\a buf, \a src, \a dst).
4511 
4512     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4513     with plain OpenGL, the function is only usable when the given profile and version contains the
4514     function either in core or as an extension.
4515 
4516     For more information, see the OpenGL ES 3.2 documentation for
4517     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glBlendFunci.xhtml}{glBlendFunci()}.
4518 */
4519 
4520 /*!
4521     \fn void QOpenGLExtraFunctions::glColorMaski(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
4522 
4523     Convenience function that calls glColorMaski(\a index, \a r, \a g, \a b, \a a).
4524 
4525     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4526     with plain OpenGL, the function is only usable when the given profile and version contains the
4527     function either in core or as an extension.
4528 
4529     For more information, see the OpenGL ES 3.2 documentation for
4530     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glColorMask.xhtml}{glColorMaski()}.
4531 */
4532 
4533 /*!
4534     \fn 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)
4535 
4536     Convenience function that calls glCopyImageSubData(\a srcName, \a srcTarget, \a srcLevel, \a srcX, \a srcY, \a srcZ, \a dstName, \a dstTarget, \a dstLevel, \a dstX, \a dstY, \a dstZ, \a srcWidth, \a srcHeight, \a srcDepth).
4537 
4538     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4539     with plain OpenGL, the function is only usable when the given profile and version contains the
4540     function either in core or as an extension.
4541 
4542     For more information, see the OpenGL ES 3.2 documentation for
4543     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glCopyImageSubData.xhtml}{glCopyImageSubData()}.
4544 */
4545 
4546 /*!
4547     \fn void QOpenGLExtraFunctions::glDebugMessageCallback(GLDEBUGPROC callback, const void * userParam)
4548 
4549     Convenience function that calls glDebugMessageCallback(\a callback, \a userParam).
4550 
4551     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4552     with plain OpenGL, the function is only usable when the given profile and version contains the
4553     function either in core or as an extension.
4554 
4555     For more information, see the OpenGL ES 3.2 documentation for
4556     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDebugMessageCallback.xhtml}{glDebugMessageCallback()}.
4557 */
4558 
4559 /*!
4560     \fn void QOpenGLExtraFunctions::glDebugMessageControl(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled)
4561 
4562     Convenience function that calls glDebugMessageControl(\a source, \a type, \a severity, \a count, \a ids, \a enabled).
4563 
4564     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4565     with plain OpenGL, the function is only usable when the given profile and version contains the
4566     function either in core or as an extension.
4567 
4568     For more information, see the OpenGL ES 3.2 documentation for
4569     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDebugMessageControl.xhtml}{glDebugMessageContro()}.
4570 */
4571 
4572 /*!
4573     \fn void QOpenGLExtraFunctions::glDebugMessageInsert(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf)
4574 
4575     Convenience function that calls glDebugMessageInsert(\a source, \a type, \a id, \a severity, \a length, \a buf).
4576 
4577     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4578     with plain OpenGL, the function is only usable when the given profile and version contains the
4579     function either in core or as an extension.
4580 
4581     For more information, see the OpenGL ES 3.2 documentation for
4582     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDebugMessageInsert.xhtml}{glDebugMessageInsert()}.
4583 */
4584 
4585 /*!
4586     \fn void QOpenGLExtraFunctions::glDisablei(GLenum target, GLuint index)
4587 
4588     Convenience function that calls glDisablei(\a target, \a index).
4589 
4590     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4591     with plain OpenGL, the function is only usable when the given profile and version contains the
4592     function either in core or as an extension.
4593 
4594     For more information, see the OpenGL ES 3.2 documentation for
4595     \l{https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glEnable.xhtml}{glDisablei()}.
4596 */
4597 
4598 /*!
4599     \fn void QOpenGLExtraFunctions::glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex)
4600 
4601     Convenience function that calls glDrawElementsBaseVertex(\a mode, \a count, \a type, \a indices, \a basevertex).
4602 
4603     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4604     with plain OpenGL, the function is only usable when the given profile and version contains the
4605     function either in core or as an extension.
4606 
4607     For more information, see the OpenGL ES 3.2 documentation for
4608     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDrawElementsBaseVertex.xhtml}{glDrawElementsBaseVerte()}.
4609 */
4610 
4611 /*!
4612     \fn void QOpenGLExtraFunctions::glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex)
4613 
4614     Convenience function that calls glDrawElementsInstancedBaseVertex(\a mode, \a count, \a type, \a indices, \a instancecount, \a basevertex).
4615 
4616     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4617     with plain OpenGL, the function is only usable when the given profile and version contains the
4618     function either in core or as an extension.
4619 
4620     For more information, see the OpenGL ES 3.2 documentation for
4621     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDrawElementsInstancedBaseVertex.xhtml}{glDrawElementsInstancedBaseVerte()}.
4622 */
4623 
4624 /*!
4625     \fn void QOpenGLExtraFunctions::glDrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex)
4626 
4627     Convenience function that calls glDrawRangeElementsBaseVertex(\a mode, \a start, \a end, \a count, \a type, \a indices, \a basevertex).
4628 
4629     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4630     with plain OpenGL, the function is only usable when the given profile and version contains the
4631     function either in core or as an extension.
4632 
4633     For more information, see the OpenGL ES 3.2 documentation for
4634     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDrawRangeElementsBaseVertex.xhtml}{glDrawRangeElementsBaseVerte()}.
4635 */
4636 
4637 /*!
4638     \fn void QOpenGLExtraFunctions::glEnablei(GLenum target, GLuint index)
4639 
4640     Convenience function that calls glEnablei(\a target, \a index).
4641 
4642     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4643     with plain OpenGL, the function is only usable when the given profile and version contains the
4644     function either in core or as an extension.
4645 
4646     For more information, see the OpenGL ES 3.2 documentation for
4647     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glEnablei.xhtml}{glEnablei()}.
4648 */
4649 
4650 /*!
4651     \fn void QOpenGLExtraFunctions::glFramebufferTexture(GLenum target, GLenum attachment, GLuint texture, GLint level)
4652 
4653     Convenience function that calls glFramebufferTexture(\a target, \a attachment, \a texture, \a level).
4654 
4655     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4656     with plain OpenGL, the function is only usable when the given profile and version contains the
4657     function either in core or as an extension.
4658 
4659     For more information, see the OpenGL ES 3.2 documentation for
4660     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glFramebufferTexture.xhtml}{glFramebufferTexture()}.
4661 */
4662 
4663 /*!
4664     \fn void QOpenGLExtraFunctions::glGetDebugMessageLog(GLuint count, GLsizei bufSize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog)
4665 
4666     Convenience function that calls glGetDebugMessageLog(\a count, \a bufSize, \a sources, \a types, \a ids, \a severities, \a lengths, \a messageLog).
4667 
4668     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4669     with plain OpenGL, the function is only usable when the given profile and version contains the
4670     function either in core or as an extension.
4671 
4672     For more information, see the OpenGL ES 3.2 documentation for
4673     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetDebugMessageLog.xhtml}{glGetDebugMessageLog()}.
4674 */
4675 
4676 /*!
4677     \fn void QOpenGLExtraFunctions::glGetGraphicsResetStatus(void)
4678 
4679     Convenience function that calls glGetGraphicsResetStatus().
4680 
4681     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4682     with plain OpenGL, the function is only usable when the given profile and version contains the
4683     function either in core or as an extension.
4684 
4685     For more information, see the OpenGL ES 3.2 documentation for
4686     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetGraphicsResetStatus.xhtml}{glGetGraphicsResetStatus()}.
4687 */
4688 
4689 /*!
4690     \fn void QOpenGLExtraFunctions::glGetObjectLabel(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei* length, GLchar* label)
4691 
4692     Convenience function that calls glGetObjectLabel(\a identifier, \a name, \a bufSize, \a length, \a label).
4693 
4694     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4695     with plain OpenGL, the function is only usable when the given profile and version contains the
4696     function either in core or as an extension.
4697 
4698     For more information, see the OpenGL ES 3.2 documentation for
4699     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetObjectLabel.xhtml}{glGetObjectLabe()}.
4700 */
4701 
4702 /*!
4703     \fn void QOpenGLExtraFunctions::glGetObjectPtrLabel(const void * ptr, GLsizei bufSize, GLsizei* length, GLchar* label)
4704 
4705     Convenience function that calls glGetObjectPtrLabel(\a ptr, \a bufSize, \a length, \a label).
4706 
4707     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4708     with plain OpenGL, the function is only usable when the given profile and version contains the
4709     function either in core or as an extension.
4710 
4711     For more information, see the OpenGL ES 3.2 documentation for
4712     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetObjectPtrLabel.xhtml}{glGetObjectPtrLabe()}.
4713 */
4714 
4715 /*!
4716     \fn void QOpenGLExtraFunctions::glGetPointerv(GLenum pname, void ** params)
4717 
4718     Convenience function that calls glGetPointerv(\a pname, \a params).
4719 
4720     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4721     with plain OpenGL, the function is only usable when the given profile and version contains the
4722     function either in core or as an extension.
4723 
4724     For more information, see the OpenGL ES 3.2 documentation for
4725     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetPointerv.xhtml}{glGetPointerv()}.
4726 */
4727 
4728 /*!
4729     \fn void QOpenGLExtraFunctions::glGetSamplerParameterIiv(GLuint sampler, GLenum pname, GLint* params)
4730 
4731     Convenience function that calls glGetSamplerParameterIiv(\a sampler, \a pname, \a params).
4732 
4733     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4734     with plain OpenGL, the function is only usable when the given profile and version contains the
4735     function either in core or as an extension.
4736 
4737     For more information, see the OpenGL ES 3.2 documentation for
4738     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetSamplerParameter.xhtml}{glGetSamplerParameterIiv()}.
4739 */
4740 
4741 /*!
4742     \fn void QOpenGLExtraFunctions::glGetSamplerParameterIuiv(GLuint sampler, GLenum pname, GLuint* params)
4743 
4744     Convenience function that calls glGetSamplerParameterIuiv(\a sampler, \a pname, \a params).
4745 
4746     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4747     with plain OpenGL, the function is only usable when the given profile and version contains the
4748     function either in core or as an extension.
4749 
4750     For more information, see the OpenGL ES 3.2 documentation for
4751     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetSamplerParameter.xhtml}{glGetSamplerParameterIuiv()}.
4752 */
4753 
4754 /*!
4755     \fn void QOpenGLExtraFunctions::glGetTexParameterIiv(GLenum target, GLenum pname, GLint* params)
4756 
4757     Convenience function that calls glGetTexParameterIiv(\a target, \a pname, \a params).
4758 
4759     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4760     with plain OpenGL, the function is only usable when the given profile and version contains the
4761     function either in core or as an extension.
4762 
4763     For more information, see the OpenGL ES 3.2 documentation for
4764     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetTexParameter.xhtml}{glGetTexParameterIiv()}.
4765 */
4766 
4767 /*!
4768     \fn void QOpenGLExtraFunctions::glGetTexParameterIuiv(GLenum target, GLenum pname, GLuint* params)
4769 
4770     Convenience function that calls glGetTexParameterIuiv(\a target, \a pname, \a params).
4771 
4772     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4773     with plain OpenGL, the function is only usable when the given profile and version contains the
4774     function either in core or as an extension.
4775 
4776     For more information, see the OpenGL ES 3.2 documentation for
4777     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetTexParameter.xhtml}{glGetTexParameterIuiv()}.
4778 */
4779 
4780 /*!
4781     \fn void QOpenGLExtraFunctions::glGetnUniformfv(GLuint program, GLint location, GLsizei bufSize, GLfloat* params)
4782 
4783     Convenience function that calls glGetnUniformfv(\a program, \a location, \a bufSize, \a params).
4784 
4785     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4786     with plain OpenGL, the function is only usable when the given profile and version contains the
4787     function either in core or as an extension.
4788 
4789     For more information, see the OpenGL ES 3.2 documentation for
4790     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetUniform.xhtml}{glGetnUniformfv()}.
4791 */
4792 
4793 /*!
4794     \fn void QOpenGLExtraFunctions::glGetnUniformiv(GLuint program, GLint location, GLsizei bufSize, GLint* params)
4795 
4796     Convenience function that calls glGetnUniformiv(\a program, \a location, \a bufSize, \a params).
4797 
4798     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4799     with plain OpenGL, the function is only usable when the given profile and version contains the
4800     function either in core or as an extension.
4801 
4802     For more information, see the OpenGL ES 3.2 documentation for
4803     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetUniform.xhtml}{glGetnUniformiv()}.
4804 */
4805 
4806 /*!
4807     \fn void QOpenGLExtraFunctions::glGetnUniformuiv(GLuint program, GLint location, GLsizei bufSize, GLuint* params)
4808 
4809     Convenience function that calls glGetnUniformuiv(\a program, \a location, \a bufSize, \a params).
4810 
4811     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4812     with plain OpenGL, the function is only usable when the given profile and version contains the
4813     function either in core or as an extension.
4814 
4815     For more information, see the OpenGL ES 3.2 documentation for
4816     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glGetUniform.xhtml}{glGetnUniformuiv()}.
4817 */
4818 
4819 /*!
4820     \fn void QOpenGLExtraFunctions::glIsEnabledi(GLenum target, GLuint index)
4821 
4822     Convenience function that calls glIsEnabledi(\a target, \a index).
4823 
4824     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4825     with plain OpenGL, the function is only usable when the given profile and version contains the
4826     function either in core or as an extension.
4827 
4828     For more information, see the OpenGL ES 3.2 documentation for
4829     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glIsEnabled.xhtml}{glIsEnabledi()}.
4830 */
4831 
4832 /*!
4833     \fn void QOpenGLExtraFunctions::glMinSampleShading(GLfloat value)
4834 
4835     Convenience function that calls glMinSampleShading(\a value).
4836 
4837     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4838     with plain OpenGL, the function is only usable when the given profile and version contains the
4839     function either in core or as an extension.
4840 
4841     For more information, see the OpenGL ES 3.2 documentation for
4842     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glMinSampleShading.xhtml}{glMinSampleShading()}.
4843 */
4844 
4845 /*!
4846     \fn void QOpenGLExtraFunctions::glObjectLabel(GLenum identifier, GLuint name, GLsizei length, const GLchar * label)
4847 
4848     Convenience function that calls glObjectLabel(\a identifier, \a name, \a length, \a label).
4849 
4850     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4851     with plain OpenGL, the function is only usable when the given profile and version contains the
4852     function either in core or as an extension.
4853 
4854     For more information, see the OpenGL ES 3.2 documentation for
4855     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glObjectLabel.xhtml}{glObjectLabe()}.
4856 */
4857 
4858 /*!
4859     \fn void QOpenGLExtraFunctions::glObjectPtrLabel(const void * ptr, GLsizei length, const GLchar * label)
4860 
4861     Convenience function that calls glObjectPtrLabel(\a ptr, \a length, \a label).
4862 
4863     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4864     with plain OpenGL, the function is only usable when the given profile and version contains the
4865     function either in core or as an extension.
4866 
4867     For more information, see the OpenGL ES 3.2 documentation for
4868     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glObjectPtrLabel.xhtml}{glObjectPtrLabe()}.
4869 */
4870 
4871 /*!
4872     \fn void QOpenGLExtraFunctions::glPatchParameteri(GLenum pname, GLint value)
4873 
4874     Convenience function that calls glPatchParameteri(\a pname, \a value).
4875 
4876     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4877     with plain OpenGL, the function is only usable when the given profile and version contains the
4878     function either in core or as an extension.
4879 
4880     For more information, see the OpenGL ES 3.2 documentation for
4881     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glPatchParameteri.xhtml}{glPatchParameteri()}.
4882 */
4883 
4884 /*!
4885     \fn void QOpenGLExtraFunctions::glPopDebugGroup(void)
4886 
4887     Convenience function that calls glPopDebugGroup().
4888 
4889     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4890     with plain OpenGL, the function is only usable when the given profile and version contains the
4891     function either in core or as an extension.
4892 
4893     For more information, see the OpenGL ES 3.2 documentation for
4894     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glPopDebugGroup.xhtml}{glPopDebugGroup()}.
4895 */
4896 
4897 /*!
4898     \fn void QOpenGLExtraFunctions::glPrimitiveBoundingBox(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW)
4899 
4900     Convenience function that calls glPrimitiveBoundingBox(\a minX, \a minY, \a minZ, \a minW, \a maxX, \a maxY, \a maxZ, \a maxW).
4901 
4902     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4903     with plain OpenGL, the function is only usable when the given profile and version contains the
4904     function either in core or as an extension.
4905 
4906     For more information, see the OpenGL ES 3.2 documentation for
4907     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glPrimitiveBoundingBox.xhtml}{glPrimitiveBoundingBo()}.
4908 */
4909 
4910 /*!
4911     \fn void QOpenGLExtraFunctions::glPushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar * message)
4912 
4913     Convenience function that calls glPushDebugGroup(\a source, \a id, \a length, \a message).
4914 
4915     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4916     with plain OpenGL, the function is only usable when the given profile and version contains the
4917     function either in core or as an extension.
4918 
4919     For more information, see the OpenGL ES 3.2 documentation for
4920     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glPushDebugGroup.xhtml}{glPushDebugGroup()}.
4921 */
4922 
4923 /*!
4924     \fn void QOpenGLExtraFunctions::glReadnPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data)
4925 
4926     Convenience function that calls glReadnPixels(\a x, \a y, \a width, \a height, \a format, \a type, \a bufSize, \a data).
4927 
4928     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4929     with plain OpenGL, the function is only usable when the given profile and version contains the
4930     function either in core or as an extension.
4931 
4932     For more information, see the OpenGL ES 3.2 documentation for
4933     \l{https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glReadPixels.xhtml}{glReadnPixels()}.
4934 */
4935 
4936 /*!
4937     \fn void QOpenGLExtraFunctions::glSamplerParameterIiv(GLuint sampler, GLenum pname, const GLint * param)
4938 
4939     Convenience function that calls glSamplerParameterIiv(\a sampler, \a pname, \a param).
4940 
4941     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4942     with plain OpenGL, the function is only usable when the given profile and version contains the
4943     function either in core or as an extension.
4944 
4945     For more information, see the OpenGL ES 3.2 documentation for
4946     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glSamplerParameter.xhtml}{glSamplerParameterIiv()}.
4947 */
4948 
4949 /*!
4950     \fn void QOpenGLExtraFunctions::glSamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint * param)
4951 
4952     Convenience function that calls glSamplerParameterIuiv(\a sampler, \a pname, \a param).
4953 
4954     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4955     with plain OpenGL, the function is only usable when the given profile and version contains the
4956     function either in core or as an extension.
4957 
4958     For more information, see the OpenGL ES 3.2 documentation for
4959     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glSamplerParameter.xhtml}{glSamplerParameterIuiv()}.
4960 */
4961 
4962 /*!
4963     \fn void QOpenGLExtraFunctions::glTexBuffer(GLenum target, GLenum internalformat, GLuint buffer)
4964 
4965     Convenience function that calls glTexBuffer(\a target, \a internalformat, \a buffer).
4966 
4967     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4968     with plain OpenGL, the function is only usable when the given profile and version contains the
4969     function either in core or as an extension.
4970 
4971     For more information, see the OpenGL ES 3.2 documentation for
4972     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glTexBuffer.xhtml}{glTexBuffer()}.
4973 */
4974 
4975 /*!
4976     \fn void QOpenGLExtraFunctions::glTexBufferRange(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size)
4977 
4978     Convenience function that calls glTexBufferRange(\a target, \a internalformat, \a buffer, \a offset, \a size).
4979 
4980     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4981     with plain OpenGL, the function is only usable when the given profile and version contains the
4982     function either in core or as an extension.
4983 
4984     For more information, see the OpenGL ES 3.2 documentation for
4985     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glTexBufferRange.xhtml}{glTexBufferRange()}.
4986 */
4987 
4988 /*!
4989     \fn void QOpenGLExtraFunctions::glTexParameterIiv(GLenum target, GLenum pname, const GLint * params)
4990 
4991     Convenience function that calls glTexParameterIiv(\a target, \a pname, \a params).
4992 
4993     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
4994     with plain OpenGL, the function is only usable when the given profile and version contains the
4995     function either in core or as an extension.
4996 
4997     For more information, see the OpenGL ES 3.2 documentation for
4998     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glTexParameter.xhtml}{glTexParameterIiv()}.
4999 */
5000 
5001 /*!
5002     \fn void QOpenGLExtraFunctions::glTexParameterIuiv(GLenum target, GLenum pname, const GLuint * params)
5003 
5004     Convenience function that calls glTexParameterIuiv(\a target, \a pname, \a params).
5005 
5006     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
5007     with plain OpenGL, the function is only usable when the given profile and version contains the
5008     function either in core or as an extension.
5009 
5010     For more information, see the OpenGL ES 3.2 documentation for
5011     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glTexParameter.xhtml}{glTexParameterIuiv()}.
5012 */
5013 
5014 /*!
5015     \fn void QOpenGLExtraFunctions::glTexStorage3DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations)
5016 
5017     Convenience function that calls glTexStorage3DMultisample(\a target, \a samples, \a internalformat, \a width, \a height, \a depth, \a fixedsamplelocations).
5018 
5019     This function is only available in OpenGL ES 3.x, or OpenGL 3.x or 4.x contexts. When running
5020     with plain OpenGL, the function is only usable when the given profile and version contains the
5021     function either in core or as an extension.
5022 
5023     For more information, see the OpenGL ES 3.2 documentation for
5024     \l{https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glTexStorage3DMultisample.xhtml}{glTexStorage3DMultisample()}.
5025 */
5026 
5027 /*!
5028     \fn bool QOpenGLExtraFunctions::isInitialized(const QOpenGLExtraFunctionsPrivate *d)
5029     \internal
5030 */
5031 
5032 
5033 /*!
5034     Constructs a default function resolver. The resolver cannot be used until
5035     \l {QOpenGLFunctions::}{initializeOpenGLFunctions()} is called to specify
5036     the context.
5037 */
5038 QOpenGLExtraFunctions::QOpenGLExtraFunctions()
5039 {
5040 }
5041 
5042 /*!
5043     Constructs a function resolver for context. If \a context is \nullptr,
5044     then the resolver will be created for the current QOpenGLContext.
5045 
5046     The context or another context in the group must be current.
5047 
5048     An object constructed in this way can only be used with context and other
5049     contexts that share with it. Use \l {QOpenGLFunctions::}
5050     {initializeOpenGLFunctions()} to change the object's context association.
5051 */
QOpenGLExtraFunctions(QOpenGLContext * context)5052 QOpenGLExtraFunctions::QOpenGLExtraFunctions(QOpenGLContext *context)
5053     : QOpenGLFunctions(context)
5054 {
5055 }
5056 
QOpenGLExtraFunctionsPrivate(QOpenGLContext * ctx)5057 QOpenGLExtraFunctionsPrivate::QOpenGLExtraFunctionsPrivate(QOpenGLContext *ctx)
5058     : QOpenGLFunctionsPrivate(ctx)
5059 {
5060     init(ctx);
5061 }
5062 
QT_OPENGL_IMPLEMENT(QOpenGLExtraFunctionsPrivate,QT_OPENGL_EXTRA_FUNCTIONS)5063 QT_OPENGL_IMPLEMENT(QOpenGLExtraFunctionsPrivate, QT_OPENGL_EXTRA_FUNCTIONS)
5064 
5065 QOpenGLExtensionsPrivate::QOpenGLExtensionsPrivate(QOpenGLContext *ctx)
5066     : QOpenGLExtraFunctionsPrivate(ctx),
5067       flushVendorChecked(false)
5068 {
5069     QOpenGLContext *context = QOpenGLContext::currentContext();
5070 
5071     MapBuffer = RESOLVE(MapBuffer);
5072     GetBufferSubData = RESOLVE(GetBufferSubData);
5073     DiscardFramebuffer = RESOLVE(DiscardFramebuffer);
5074  }
5075 
flushShared()5076 void QOpenGLExtensions::flushShared()
5077 {
5078     Q_D(QOpenGLExtensions);
5079 
5080     if (!d->flushVendorChecked) {
5081         d->flushVendorChecked = true;
5082         // It is not quite clear if glFlush() is sufficient to synchronize access to
5083         // resources between sharing contexts in the same thread. On most platforms this
5084         // is enough (e.g. iOS explicitly documents it), while certain drivers only work
5085         // properly when doing glFinish().
5086         d->flushIsSufficientToSyncContexts = false; // default to false, not guaranteed by the spec
5087         const char *vendor = (const char *) glGetString(GL_VENDOR);
5088         if (vendor) {
5089             static const char *const flushEnough[] = { "Apple", "ATI", "Intel", "NVIDIA" };
5090             for (size_t i = 0; i < sizeof(flushEnough) / sizeof(const char *); ++i) {
5091                 if (strstr(vendor, flushEnough[i])) {
5092                     d->flushIsSufficientToSyncContexts = true;
5093                     break;
5094                 }
5095             }
5096         }
5097     }
5098 
5099     if (d->flushIsSufficientToSyncContexts)
5100         glFlush();
5101     else
5102         glFinish();
5103 }
5104 
5105 QT_END_NAMESPACE
5106