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 QtOpenGL 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 "qglfunctions.h"
41 #include "qgl_p.h"
42 #include "QtGui/private/qopenglcontext_p.h"
43 #include <private/qopengl_p.h>
44 
45 QT_BEGIN_NAMESPACE
46 
47 /*!
48     \class QGLFunctions
49     \inmodule QtOpenGL
50     \brief The QGLFunctions class provides cross-platform access to the OpenGL ES 2.0 API.
51     \since 4.8
52     \obsolete
53     \ingroup painting-3D
54 
55     OpenGL ES 2.0 defines a subset of the OpenGL specification that is
56     common across many desktop and embedded OpenGL implementations.
57     However, it can be difficult to use the functions from that subset
58     because they need to be resolved manually on desktop systems.
59 
60     QGLFunctions provides a guaranteed API that is available on all
61     OpenGL systems and takes care of function resolution on systems
62     that need it.  The recommended way to use QGLFunctions is by
63     direct inheritance:
64 
65     \snippet code/src_opengl_qglfunctions.cpp 0
66 
67     The \c{paintGL()} function can then use any of the OpenGL ES 2.0
68     functions without explicit resolution, such as glActiveTexture()
69     in the following example:
70 
71     \snippet code/src_opengl_qglfunctions.cpp 1
72 
73     QGLFunctions can also be used directly for ad-hoc invocation
74     of OpenGL ES 2.0 functions on all platforms:
75 
76     \snippet code/src_opengl_qglfunctions.cpp 2
77 
78     QGLFunctions provides wrappers for all OpenGL ES 2.0 functions,
79     except those like \c{glDrawArrays()}, \c{glViewport()}, and
80     \c{glBindTexture()} that don't have portability issues.
81 
82     Including the header for QGLFunctions will also define all of
83     the OpenGL ES 2.0 macro constants that are not already defined by
84     the system's OpenGL headers, such as \c{GL_TEXTURE1} above.
85 
86     The hasOpenGLFeature() and openGLFeatures() functions can be used
87     to determine if the OpenGL implementation has a major OpenGL ES 2.0
88     feature.  For example, the following checks if non power of two
89     textures are available:
90 
91     \snippet code/src_opengl_qglfunctions.cpp 3
92 
93     \note This class has been deprecated in favor of QOpenGLFunctions.
94 */
95 
96 /*!
97     \enum QGLFunctions::OpenGLFeature
98     This enum defines OpenGL ES 2.0 features that may be optional
99     on other platforms.
100 
101     \value Multitexture glActiveTexture() function is available.
102     \value Shaders Shader functions are available.
103     \value Buffers Vertex and index buffer functions are available.
104     \value Framebuffers Framebuffer object functions are available.
105     \value BlendColor glBlendColor() is available.
106     \value BlendEquation glBlendEquation() is available.
107     \value BlendEquationSeparate glBlendEquationSeparate() is available.
108     \value BlendFuncSeparate glBlendFuncSeparate() is available.
109     \value BlendSubtract Blend subtract mode is available.
110     \value CompressedTextures Compressed texture functions are available.
111     \value Multisample glSampleCoverage() function is available.
112     \value StencilSeparate Separate stencil functions are available.
113     \value NPOTTextures Non power of two textures are available.
114 */
115 
116 // Hidden private fields for additional extension data.
117 struct QGLFunctionsPrivateEx : public QGLFunctionsPrivate, public QOpenGLSharedResource
118 {
QGLFunctionsPrivateExQGLFunctionsPrivateEx119     QGLFunctionsPrivateEx(QOpenGLContext *context)
120         : QGLFunctionsPrivate(QGLContext::fromOpenGLContext(context))
121         , QOpenGLSharedResource(context->shareGroup())
122         , m_features(-1)
123     {
124         funcs = new QOpenGLFunctions(context);
125         funcs->initializeOpenGLFunctions();
126     }
127 
~QGLFunctionsPrivateExQGLFunctionsPrivateEx128     ~QGLFunctionsPrivateEx()
129     {
130         delete funcs;
131     }
132 
invalidateResourceQGLFunctionsPrivateEx133     void invalidateResource() override
134     {
135         m_features = -1;
136     }
137 
freeResourceQGLFunctionsPrivateEx138     void freeResource(QOpenGLContext *) override
139     {
140         // no gl resources to free
141     }
142 
143     int m_features;
144 };
145 
Q_GLOBAL_STATIC(QOpenGLMultiGroupSharedResource,qt_gl_functions_resource)146 Q_GLOBAL_STATIC(QOpenGLMultiGroupSharedResource, qt_gl_functions_resource)
147 
148 static QGLFunctionsPrivateEx *qt_gl_functions(const QGLContext *context = 0)
149 {
150     if (!context)
151         context = QGLContext::currentContext();
152     Q_ASSERT(context);
153     QGLFunctionsPrivateEx *funcs =
154         reinterpret_cast<QGLFunctionsPrivateEx *>
155             (qt_gl_functions_resource()->value<QGLFunctionsPrivateEx>(context->contextHandle()));
156     return funcs;
157 }
158 
159 /*!
160     Constructs a default function resolver.  The resolver cannot
161     be used until initializeGLFunctions() is called to specify
162     the context.
163 
164     \sa initializeGLFunctions()
165 */
QGLFunctions()166 QGLFunctions::QGLFunctions()
167     : d_ptr(0)
168 {
169 }
170 
171 /*!
172     Constructs a function resolver for \a context.  If \a context
173     is \nullptr, then the resolver will be created for the current
174     QGLContext.
175 
176     An object constructed in this way can only be used with \a context
177     and other contexts that share with it.  Use initializeGLFunctions()
178     to change the object's context association.
179 
180     \sa initializeGLFunctions()
181 */
QGLFunctions(const QGLContext * context)182 QGLFunctions::QGLFunctions(const QGLContext *context)
183     : d_ptr(qt_gl_functions(context))
184 {
185 }
186 
187 /*!
188     \fn QGLFunctions::~QGLFunctions()
189 
190     Destroys this function resolver.
191 */
192 
qt_gl_resolve_features()193 static int qt_gl_resolve_features()
194 {
195     QOpenGLContext *ctx = QOpenGLContext::currentContext();
196     if (ctx->isOpenGLES()) {
197         // OpenGL ES 2
198         int features = QGLFunctions::Multitexture |
199             QGLFunctions::Shaders |
200             QGLFunctions::Buffers |
201             QGLFunctions::Framebuffers |
202             QGLFunctions::BlendColor |
203             QGLFunctions::BlendEquation |
204             QGLFunctions::BlendEquationSeparate |
205             QGLFunctions::BlendFuncSeparate |
206             QGLFunctions::BlendSubtract |
207             QGLFunctions::CompressedTextures |
208             QGLFunctions::Multisample |
209             QGLFunctions::StencilSeparate;
210         QOpenGLExtensionMatcher extensions;
211         if (extensions.match("GL_OES_texture_npot"))
212             features |= QGLFunctions::NPOTTextures;
213         if (extensions.match("GL_IMG_texture_npot"))
214             features |= QGLFunctions::NPOTTextures;
215         return features;
216     } else {
217         // OpenGL
218         int features = 0;
219         QGLFormat::OpenGLVersionFlags versions = QGLFormat::openGLVersionFlags();
220         QOpenGLExtensionMatcher extensions;
221 
222         // Recognize features by extension name.
223         if (extensions.match("GL_ARB_multitexture"))
224             features |= QGLFunctions::Multitexture;
225         if (extensions.match("GL_ARB_shader_objects"))
226             features |= QGLFunctions::Shaders;
227         if (extensions.match("GL_EXT_framebuffer_object") ||
228             extensions.match("GL_ARB_framebuffer_object"))
229             features |= QGLFunctions::Framebuffers;
230         if (extensions.match("GL_EXT_blend_color"))
231             features |= QGLFunctions::BlendColor;
232         if (extensions.match("GL_EXT_blend_equation_separate"))
233             features |= QGLFunctions::BlendEquationSeparate;
234         if (extensions.match("GL_EXT_blend_func_separate"))
235             features |= QGLFunctions::BlendFuncSeparate;
236         if (extensions.match("GL_EXT_blend_subtract"))
237             features |= QGLFunctions::BlendSubtract;
238         if (extensions.match("GL_ARB_texture_compression"))
239             features |= QGLFunctions::CompressedTextures;
240         if (extensions.match("GL_ARB_multisample"))
241             features |= QGLFunctions::Multisample;
242         if (extensions.match("GL_ARB_texture_non_power_of_two"))
243             features |= QGLFunctions::NPOTTextures;
244 
245         // Recognize features by minimum OpenGL version.
246         if (versions & QGLFormat::OpenGL_Version_1_2) {
247             features |= QGLFunctions::BlendColor |
248                 QGLFunctions::BlendEquation;
249         }
250         if (versions & QGLFormat::OpenGL_Version_1_3) {
251             features |= QGLFunctions::Multitexture |
252                 QGLFunctions::CompressedTextures |
253                 QGLFunctions::Multisample;
254         }
255         if (versions & QGLFormat::OpenGL_Version_1_4)
256             features |= QGLFunctions::BlendFuncSeparate;
257         if (versions & QGLFormat::OpenGL_Version_1_5)
258             features |= QGLFunctions::Buffers;
259         if (versions & QGLFormat::OpenGL_Version_2_0) {
260             features |= QGLFunctions::Shaders |
261                 QGLFunctions::StencilSeparate |
262                 QGLFunctions::BlendEquationSeparate |
263                 QGLFunctions::NPOTTextures;
264         }
265         return features;
266     }
267 }
268 
269 /*!
270     Returns the set of features that are present on this system's
271     OpenGL implementation.
272 
273     It is assumed that the QGLContext associated with this function
274     resolver is current.
275 
276     \sa hasOpenGLFeature()
277 */
openGLFeatures() const278 QGLFunctions::OpenGLFeatures QGLFunctions::openGLFeatures() const
279 {
280     QGLFunctionsPrivateEx *d = static_cast<QGLFunctionsPrivateEx *>(d_ptr);
281     if (!d)
282         return { };
283     if (d->m_features == -1)
284         d->m_features = qt_gl_resolve_features();
285     return QGLFunctions::OpenGLFeatures(d->m_features);
286 }
287 
288 /*!
289     Returns \c true if \a feature is present on this system's OpenGL
290     implementation; false otherwise.
291 
292     It is assumed that the QGLContext associated with this function
293     resolver is current.
294 
295     \sa openGLFeatures()
296 */
hasOpenGLFeature(QGLFunctions::OpenGLFeature feature) const297 bool QGLFunctions::hasOpenGLFeature(QGLFunctions::OpenGLFeature feature) const
298 {
299     QGLFunctionsPrivateEx *d = static_cast<QGLFunctionsPrivateEx *>(d_ptr);
300     if (!d)
301         return false;
302     if (d->m_features == -1)
303         d->m_features = qt_gl_resolve_features();
304     return (d->m_features & int(feature)) != 0;
305 }
306 
307 /*!
308     Initializes GL function resolution for \a context.  If \a context
309     is \nullptr, then the current QGLContext will be used.
310 
311     After calling this function, the QGLFunctions object can only be
312     used with \a context and other contexts that share with it.
313     Call initializeGLFunctions() again to change the object's context
314     association.
315 */
initializeGLFunctions(const QGLContext * context)316 void QGLFunctions::initializeGLFunctions(const QGLContext *context)
317 {
318     d_ptr = qt_gl_functions(context);
319 }
320 
321 /*!
322     \fn void QGLFunctions::glActiveTexture(GLenum texture)
323 
324     Convenience function that calls glActiveTexture(\a texture).
325 
326     For more information, see the OpenGL ES 2.0 documentation for
327     \l{http://www.khronos.org/opengles/sdk/docs/man/glActiveTexture.xml}{glActiveTexture()}.
328 */
329 
330 /*!
331     \fn void QGLFunctions::glAttachShader(GLuint program, GLuint shader)
332 
333     Convenience function that calls glAttachShader(\a program, \a shader).
334 
335     For more information, see the OpenGL ES 2.0 documentation for
336     \l{http://www.khronos.org/opengles/sdk/docs/man/glAttachShader.xml}{glAttachShader()}.
337 
338     This convenience function will do nothing on OpenGL ES 1.x systems.
339 */
340 
341 /*!
342     \fn void QGLFunctions::glBindAttribLocation(GLuint program, GLuint index, const char* name)
343 
344     Convenience function that calls glBindAttribLocation(\a program, \a index, \a name).
345 
346     For more information, see the OpenGL ES 2.0 documentation for
347     \l{http://www.khronos.org/opengles/sdk/docs/man/glBindAttribLocation.xml}{glBindAttribLocation()}.
348 
349     This convenience function will do nothing on OpenGL ES 1.x systems.
350 */
351 
352 /*!
353     \fn void QGLFunctions::glBindBuffer(GLenum target, GLuint buffer)
354 
355     Convenience function that calls glBindBuffer(\a target, \a buffer).
356 
357     For more information, see the OpenGL ES 2.0 documentation for
358     \l{http://www.khronos.org/opengles/sdk/docs/man/glBindBuffer.xml}{glBindBuffer()}.
359 */
360 
361 /*!
362     \fn void QGLFunctions::glBindFramebuffer(GLenum target, GLuint framebuffer)
363 
364     Convenience function that calls glBindFramebuffer(\a target, \a framebuffer).
365 
366     Note that Qt will translate a \a framebuffer argument of 0 to the currently
367     bound QOpenGLContext's defaultFramebufferObject().
368 
369     For more information, see the OpenGL ES 2.0 documentation for
370     \l{http://www.khronos.org/opengles/sdk/docs/man/glBindFramebuffer.xml}{glBindFramebuffer()}.
371 */
372 
373 /*!
374     \fn void QGLFunctions::glBindRenderbuffer(GLenum target, GLuint renderbuffer)
375 
376     Convenience function that calls glBindRenderbuffer(\a target, \a renderbuffer).
377 
378     For more information, see the OpenGL ES 2.0 documentation for
379     \l{http://www.khronos.org/opengles/sdk/docs/man/glBindRenderbuffer.xml}{glBindRenderbuffer()}.
380 */
381 
382 /*!
383     \fn void QGLFunctions::glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
384 
385     Convenience function that calls glBlendColor(\a red, \a green, \a blue, \a alpha).
386 
387     For more information, see the OpenGL ES 2.0 documentation for
388     \l{http://www.khronos.org/opengles/sdk/docs/man/glBlendColor.xml}{glBlendColor()}.
389 */
390 
391 /*!
392     \fn void QGLFunctions::glBlendEquation(GLenum mode)
393 
394     Convenience function that calls glBlendEquation(\a mode).
395 
396     For more information, see the OpenGL ES 2.0 documentation for
397     \l{http://www.khronos.org/opengles/sdk/docs/man/glBlendEquation.xml}{glBlendEquation()}.
398 */
399 
400 /*!
401     \fn void QGLFunctions::glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
402 
403     Convenience function that calls glBlendEquationSeparate(\a modeRGB, \a modeAlpha).
404 
405     For more information, see the OpenGL ES 2.0 documentation for
406     \l{http://www.khronos.org/opengles/sdk/docs/man/glBlendEquationSeparate.xml}{glBlendEquationSeparate()}.
407 */
408 
409 /*!
410     \fn void QGLFunctions::glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
411 
412     Convenience function that calls glBlendFuncSeparate(\a srcRGB, \a dstRGB, \a srcAlpha, \a dstAlpha).
413 
414     For more information, see the OpenGL ES 2.0 documentation for
415     \l{http://www.khronos.org/opengles/sdk/docs/man/glBlendFuncSeparate.xml}{glBlendFuncSeparate()}.
416 */
417 
418 /*!
419     \fn void QGLFunctions::glBufferData(GLenum target, qopengl_GLsizeiptr size, const void* data, GLenum usage)
420 
421     Convenience function that calls glBufferData(\a target, \a size, \a data, \a usage).
422 
423     For more information, see the OpenGL ES 2.0 documentation for
424     \l{http://www.khronos.org/opengles/sdk/docs/man/glBufferData.xml}{glBufferData()}.
425 */
426 
427 /*!
428     \fn void QGLFunctions::glBufferSubData(GLenum target, qopengl_GLintptr offset, qopengl_GLsizeiptr size, const void* data)
429 
430     Convenience function that calls glBufferSubData(\a target, \a offset, \a size, \a data).
431 
432     For more information, see the OpenGL ES 2.0 documentation for
433     \l{http://www.khronos.org/opengles/sdk/docs/man/glBufferSubData.xml}{glBufferSubData()}.
434 */
435 
436 /*!
437     \fn GLenum QGLFunctions::glCheckFramebufferStatus(GLenum target)
438 
439     Convenience function that calls glCheckFramebufferStatus(\a target).
440 
441     For more information, see the OpenGL ES 2.0 documentation for
442     \l{http://www.khronos.org/opengles/sdk/docs/man/glCheckFramebufferStatus.xml}{glCheckFramebufferStatus()}.
443 */
444 
445 /*!
446     \fn void QGLFunctions::glClearDepthf(GLclampf depth)
447 
448     Convenience function that calls glClearDepth(\a depth) on
449     desktop OpenGL systems and glClearDepthf(\a depth) on
450     embedded OpenGL ES systems.
451 
452     For more information, see the OpenGL ES 2.0 documentation for
453     \l{http://www.khronos.org/opengles/sdk/docs/man/glClearDepthf.xml}{glClearDepthf()}.
454 */
455 
456 /*!
457     \fn void QGLFunctions::glCompileShader(GLuint shader)
458 
459     Convenience function that calls glCompileShader(\a shader).
460 
461     For more information, see the OpenGL ES 2.0 documentation for
462     \l{http://www.khronos.org/opengles/sdk/docs/man/glCompileShader.xml}{glCompileShader()}.
463 
464     This convenience function will do nothing on OpenGL ES 1.x systems.
465 */
466 
467 /*!
468     \fn void QGLFunctions::glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data)
469 
470     Convenience function that calls glCompressedTexImage2D(\a target, \a level, \a internalformat, \a width, \a height, \a border, \a imageSize, \a data).
471 
472     For more information, see the OpenGL ES 2.0 documentation for
473     \l{http://www.khronos.org/opengles/sdk/docs/man/glCompressedTexImage2D.xml}{glCompressedTexImage2D()}.
474 */
475 
476 /*!
477     \fn void QGLFunctions::glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data)
478 
479     Convenience function that calls glCompressedTexSubImage2D(\a target, \a level, \a xoffset, \a yoffset, \a width, \a height, \a format, \a imageSize, \a data).
480 
481     For more information, see the OpenGL ES 2.0 documentation for
482     \l{http://www.khronos.org/opengles/sdk/docs/man/glCompressedTexSubImage2D.xml}{glCompressedTexSubImage2D()}.
483 */
484 
485 /*!
486     \fn GLuint QGLFunctions::glCreateProgram()
487 
488     Convenience function that calls glCreateProgram().
489 
490     For more information, see the OpenGL ES 2.0 documentation for
491     \l{http://www.khronos.org/opengles/sdk/docs/man/glCreateProgram.xml}{glCreateProgram()}.
492 
493     This convenience function will do nothing on OpenGL ES 1.x systems.
494 */
495 
496 /*!
497     \fn GLuint QGLFunctions::glCreateShader(GLenum type)
498 
499     Convenience function that calls glCreateShader(\a type).
500 
501     For more information, see the OpenGL ES 2.0 documentation for
502     \l{http://www.khronos.org/opengles/sdk/docs/man/glCreateShader.xml}{glCreateShader()}.
503 
504     This convenience function will do nothing on OpenGL ES 1.x systems.
505 */
506 
507 /*!
508     \fn void QGLFunctions::glDeleteBuffers(GLsizei n, const GLuint* buffers)
509 
510     Convenience function that calls glDeleteBuffers(\a n, \a buffers).
511 
512     For more information, see the OpenGL ES 2.0 documentation for
513     \l{http://www.khronos.org/opengles/sdk/docs/man/glDeleteBuffers.xml}{glDeleteBuffers()}.
514 */
515 
516 /*!
517     \fn void QGLFunctions::glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
518 
519     Convenience function that calls glDeleteFramebuffers(\a n, \a framebuffers).
520 
521     For more information, see the OpenGL ES 2.0 documentation for
522     \l{http://www.khronos.org/opengles/sdk/docs/man/glDeleteFramebuffers.xml}{glDeleteFramebuffers()}.
523 */
524 
525 /*!
526     \fn void QGLFunctions::glDeleteProgram(GLuint program)
527 
528     Convenience function that calls glDeleteProgram(\a program).
529 
530     For more information, see the OpenGL ES 2.0 documentation for
531     \l{http://www.khronos.org/opengles/sdk/docs/man/glDeleteProgram.xml}{glDeleteProgram()}.
532 
533     This convenience function will do nothing on OpenGL ES 1.x systems.
534 */
535 
536 /*!
537     \fn void QGLFunctions::glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
538 
539     Convenience function that calls glDeleteRenderbuffers(\a n, \a renderbuffers).
540 
541     For more information, see the OpenGL ES 2.0 documentation for
542     \l{http://www.khronos.org/opengles/sdk/docs/man/glDeleteRenderbuffers.xml}{glDeleteRenderbuffers()}.
543 */
544 
545 /*!
546     \fn void QGLFunctions::glDeleteShader(GLuint shader)
547 
548     Convenience function that calls glDeleteShader(\a shader).
549 
550     For more information, see the OpenGL ES 2.0 documentation for
551     \l{http://www.khronos.org/opengles/sdk/docs/man/glDeleteShader.xml}{glDeleteShader()}.
552 
553     This convenience function will do nothing on OpenGL ES 1.x systems.
554 */
555 
556 /*!
557     \fn void QGLFunctions::glDepthRangef(GLclampf zNear, GLclampf zFar)
558 
559     Convenience function that calls glDepthRange(\a zNear, \a zFar) on
560     desktop OpenGL systems and glDepthRangef(\a zNear, \a zFar) on
561     embedded OpenGL ES systems.
562 
563     For more information, see the OpenGL ES 2.0 documentation for
564     \l{http://www.khronos.org/opengles/sdk/docs/man/glDepthRangef.xml}{glDepthRangef()}.
565 */
566 
567 /*!
568     \fn void QGLFunctions::glDetachShader(GLuint program, GLuint shader)
569 
570     Convenience function that calls glDetachShader(\a program, \a shader).
571 
572     For more information, see the OpenGL ES 2.0 documentation for
573     \l{http://www.khronos.org/opengles/sdk/docs/man/glDetachShader.xml}{glDetachShader()}.
574 
575     This convenience function will do nothing on OpenGL ES 1.x systems.
576 */
577 
578 /*!
579     \fn void QGLFunctions::glDisableVertexAttribArray(GLuint index)
580 
581     Convenience function that calls glDisableVertexAttribArray(\a index).
582 
583     For more information, see the OpenGL ES 2.0 documentation for
584     \l{http://www.khronos.org/opengles/sdk/docs/man/glDisableVertexAttribArray.xml}{glDisableVertexAttribArray()}.
585 
586     This convenience function will do nothing on OpenGL ES 1.x systems.
587 */
588 
589 /*!
590     \fn void QGLFunctions::glEnableVertexAttribArray(GLuint index)
591 
592     Convenience function that calls glEnableVertexAttribArray(\a index).
593 
594     For more information, see the OpenGL ES 2.0 documentation for
595     \l{http://www.khronos.org/opengles/sdk/docs/man/glEnableVertexAttribArray.xml}{glEnableVertexAttribArray()}.
596 
597     This convenience function will do nothing on OpenGL ES 1.x systems.
598 */
599 
600 /*!
601     \fn void QGLFunctions::glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
602 
603     Convenience function that calls glFramebufferRenderbuffer(\a target, \a attachment, \a renderbuffertarget, \a renderbuffer).
604 
605     For more information, see the OpenGL ES 2.0 documentation for
606     \l{http://www.khronos.org/opengles/sdk/docs/man/glFramebufferRenderbuffer.xml}{glFramebufferRenderbuffer()}.
607 */
608 
609 /*!
610     \fn void QGLFunctions::glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
611 
612     Convenience function that calls glFramebufferTexture2D(\a target, \a attachment, \a textarget, \a texture, \a level).
613 
614     For more information, see the OpenGL ES 2.0 documentation for
615     \l{http://www.khronos.org/opengles/sdk/docs/man/glFramebufferTexture2D.xml}{glFramebufferTexture2D()}.
616 */
617 
618 /*!
619     \fn void QGLFunctions::glGenBuffers(GLsizei n, GLuint* buffers)
620 
621     Convenience function that calls glGenBuffers(\a n, \a buffers).
622 
623     For more information, see the OpenGL ES 2.0 documentation for
624     \l{http://www.khronos.org/opengles/sdk/docs/man/glGenBuffers.xml}{glGenBuffers()}.
625 */
626 
627 /*!
628     \fn void QGLFunctions::glGenerateMipmap(GLenum target)
629 
630     Convenience function that calls glGenerateMipmap(\a target).
631 
632     For more information, see the OpenGL ES 2.0 documentation for
633     \l{http://www.khronos.org/opengles/sdk/docs/man/glGenerateMipmap.xml}{glGenerateMipmap()}.
634 */
635 
636 /*!
637     \fn void QGLFunctions::glGenFramebuffers(GLsizei n, GLuint* framebuffers)
638 
639     Convenience function that calls glGenFramebuffers(\a n, \a framebuffers).
640 
641     For more information, see the OpenGL ES 2.0 documentation for
642     \l{http://www.khronos.org/opengles/sdk/docs/man/glGenFramebuffers.xml}{glGenFramebuffers()}.
643 */
644 
645 /*!
646     \fn void QGLFunctions::glGenRenderbuffers(GLsizei n, GLuint* renderbuffers)
647 
648     Convenience function that calls glGenRenderbuffers(\a n, \a renderbuffers).
649 
650     For more information, see the OpenGL ES 2.0 documentation for
651     \l{http://www.khronos.org/opengles/sdk/docs/man/glGenRenderbuffers.xml}{glGenRenderbuffers()}.
652 */
653 
654 /*!
655     \fn void QGLFunctions::glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
656 
657     Convenience function that calls glGetActiveAttrib(\a program, \a index, \a bufsize, \a length, \a size, \a type, \a name).
658 
659     For more information, see the OpenGL ES 2.0 documentation for
660     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetActiveAttrib.xml}{glGetActiveAttrib()}.
661 
662     This convenience function will do nothing on OpenGL ES 1.x systems.
663 */
664 
665 /*!
666     \fn void QGLFunctions::glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
667 
668     Convenience function that calls glGetActiveUniform(\a program, \a index, \a bufsize, \a length, \a size, \a type, \a name).
669 
670     For more information, see the OpenGL ES 2.0 documentation for
671     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetActiveUniform.xml}{glGetActiveUniform()}.
672 
673     This convenience function will do nothing on OpenGL ES 1.x systems.
674 */
675 
676 /*!
677     \fn void QGLFunctions::glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
678 
679     Convenience function that calls glGetAttachedShaders(\a program, \a maxcount, \a count, \a shaders).
680 
681     For more information, see the OpenGL ES 2.0 documentation for
682     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetAttachedShaders.xml}{glGetAttachedShaders()}.
683 
684     This convenience function will do nothing on OpenGL ES 1.x systems.
685 */
686 
687 /*!
688     \fn int QGLFunctions::glGetAttribLocation(GLuint program, const char* name)
689 
690     Convenience function that calls glGetAttribLocation(\a program, \a name).
691 
692     For more information, see the OpenGL ES 2.0 documentation for
693     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetAttribLocation.xml}{glGetAttribLocation()}.
694 
695     This convenience function will do nothing on OpenGL ES 1.x systems.
696 */
697 
698 /*!
699     \fn void QGLFunctions::glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
700 
701     Convenience function that calls glGetBufferParameteriv(\a target, \a pname, \a params).
702 
703     For more information, see the OpenGL ES 2.0 documentation for
704     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetBufferParameteriv.xml}{glGetBufferParameteriv()}.
705 */
706 
707 /*!
708     \fn void QGLFunctions::glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
709 
710     Convenience function that calls glGetFramebufferAttachmentParameteriv(\a target, \a attachment, \a pname, \a params).
711 
712     For more information, see the OpenGL ES 2.0 documentation for
713     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetFramebufferAttachmentParameteriv.xml}{glGetFramebufferAttachmentParameteriv()}.
714 */
715 
716 /*!
717     \fn void QGLFunctions::glGetProgramiv(GLuint program, GLenum pname, GLint* params)
718 
719     Convenience function that calls glGetProgramiv(\a program, \a pname, \a params).
720 
721     For more information, see the OpenGL ES 2.0 documentation for
722     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetProgramiv.xml}{glGetProgramiv()}.
723 
724     This convenience function will do nothing on OpenGL ES 1.x systems.
725 */
726 
727 /*!
728     \fn void QGLFunctions::glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog)
729 
730     Convenience function that calls glGetProgramInfoLog(\a program, \a bufsize, \a length, \a infolog).
731 
732     For more information, see the OpenGL ES 2.0 documentation for
733     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetProgramInfoLog.xml}{glGetProgramInfoLog()}.
734 
735     This convenience function will do nothing on OpenGL ES 1.x systems.
736 */
737 
738 /*!
739     \fn void QGLFunctions::glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
740 
741     Convenience function that calls glGetRenderbufferParameteriv(\a target, \a pname, \a params).
742 
743     For more information, see the OpenGL ES 2.0 documentation for
744     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetRenderbufferParameteriv.xml}{glGetRenderbufferParameteriv()}.
745 */
746 
747 /*!
748     \fn void QGLFunctions::glGetShaderiv(GLuint shader, GLenum pname, GLint* params)
749 
750     Convenience function that calls glGetShaderiv(\a shader, \a pname, \a params).
751 
752     For more information, see the OpenGL ES 2.0 documentation for
753     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetShaderiv.xml}{glGetShaderiv()}.
754 
755     This convenience function will do nothing on OpenGL ES 1.x systems.
756 */
757 
758 /*!
759     \fn void QGLFunctions::glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog)
760 
761     Convenience function that calls glGetShaderInfoLog(\a shader, \a bufsize, \a length, \a infolog).
762 
763     For more information, see the OpenGL ES 2.0 documentation for
764     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetShaderInfoLog.xml}{glGetShaderInfoLog()}.
765 
766     This convenience function will do nothing on OpenGL ES 1.x systems.
767 */
768 
769 /*!
770     \fn void QGLFunctions::glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
771 
772     Convenience function that calls glGetShaderPrecisionFormat(\a shadertype, \a precisiontype, \a range, \a precision).
773 
774     For more information, see the OpenGL ES 2.0 documentation for
775     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetShaderPrecisionFormat.xml}{glGetShaderPrecisionFormat()}.
776 
777     This convenience function will do nothing on OpenGL ES 1.x systems.
778 */
779 
780 /*!
781     \fn void QGLFunctions::glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source)
782 
783     Convenience function that calls glGetShaderSource(\a shader, \a bufsize, \a length, \a source).
784 
785     For more information, see the OpenGL ES 2.0 documentation for
786     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetShaderSource.xml}{glGetShaderSource()}.
787 
788     This convenience function will do nothing on OpenGL ES 1.x systems.
789 */
790 
791 /*!
792     \fn void QGLFunctions::glGetUniformfv(GLuint program, GLint location, GLfloat* params)
793 
794     Convenience function that calls glGetUniformfv(\a program, \a location, \a params).
795 
796     For more information, see the OpenGL ES 2.0 documentation for
797     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetUniformfv.xml}{glGetUniformfv()}.
798 
799     This convenience function will do nothing on OpenGL ES 1.x systems.
800 */
801 
802 /*!
803     \fn void QGLFunctions::glGetUniformiv(GLuint program, GLint location, GLint* params)
804 
805     Convenience function that calls glGetUniformiv(\a program, \a location, \a params).
806 
807     For more information, see the OpenGL ES 2.0 documentation for
808     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetUniformiv.xml}{glGetUniformiv()}.
809 
810     This convenience function will do nothing on OpenGL ES 1.x systems.
811 */
812 
813 /*!
814     \fn int QGLFunctions::glGetUniformLocation(GLuint program, const char* name)
815 
816     Convenience function that calls glGetUniformLocation(\a program, \a name).
817 
818     For more information, see the OpenGL ES 2.0 documentation for
819     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetUniformLocation.xml}{glGetUniformLocation()}.
820 
821     This convenience function will do nothing on OpenGL ES 1.x systems.
822 */
823 
824 /*!
825     \fn void QGLFunctions::glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
826 
827     Convenience function that calls glGetVertexAttribfv(\a index, \a pname, \a params).
828 
829     For more information, see the OpenGL ES 2.0 documentation for
830     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetVertexAttribfv.xml}{glGetVertexAttribfv()}.
831 
832     This convenience function will do nothing on OpenGL ES 1.x systems.
833 */
834 
835 /*!
836     \fn void QGLFunctions::glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
837 
838     Convenience function that calls glGetVertexAttribiv(\a index, \a pname, \a params).
839 
840     For more information, see the OpenGL ES 2.0 documentation for
841     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetVertexAttribiv.xml}{glGetVertexAttribiv()}.
842 
843     This convenience function will do nothing on OpenGL ES 1.x systems.
844 */
845 
846 /*!
847     \fn void QGLFunctions::glGetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer)
848 
849     Convenience function that calls glGetVertexAttribPointerv(\a index, \a pname, \a pointer).
850 
851     For more information, see the OpenGL ES 2.0 documentation for
852     \l{http://www.khronos.org/opengles/sdk/docs/man/glGetVertexAttribPointerv.xml}{glGetVertexAttribPointerv()}.
853 
854     This convenience function will do nothing on OpenGL ES 1.x systems.
855 */
856 
857 /*!
858     \fn GLboolean QGLFunctions::glIsBuffer(GLuint buffer)
859 
860     Convenience function that calls glIsBuffer(\a buffer).
861 
862     For more information, see the OpenGL ES 2.0 documentation for
863     \l{http://www.khronos.org/opengles/sdk/docs/man/glIsBuffer.xml}{glIsBuffer()}.
864 */
865 
866 /*!
867     \fn GLboolean QGLFunctions::glIsFramebuffer(GLuint framebuffer)
868 
869     Convenience function that calls glIsFramebuffer(\a framebuffer).
870 
871     For more information, see the OpenGL ES 2.0 documentation for
872     \l{http://www.khronos.org/opengles/sdk/docs/man/glIsFramebuffer.xml}{glIsFramebuffer()}.
873 */
874 
875 /*!
876     \fn GLboolean QGLFunctions::glIsProgram(GLuint program)
877 
878     Convenience function that calls glIsProgram(\a program).
879 
880     For more information, see the OpenGL ES 2.0 documentation for
881     \l{http://www.khronos.org/opengles/sdk/docs/man/glIsProgram.xml}{glIsProgram()}.
882 
883     This convenience function will do nothing on OpenGL ES 1.x systems.
884 */
885 
886 /*!
887     \fn GLboolean QGLFunctions::glIsRenderbuffer(GLuint renderbuffer)
888 
889     Convenience function that calls glIsRenderbuffer(\a renderbuffer).
890 
891     For more information, see the OpenGL ES 2.0 documentation for
892     \l{http://www.khronos.org/opengles/sdk/docs/man/glIsRenderbuffer.xml}{glIsRenderbuffer()}.
893 */
894 
895 /*!
896     \fn GLboolean QGLFunctions::glIsShader(GLuint shader)
897 
898     Convenience function that calls glIsShader(\a shader).
899 
900     For more information, see the OpenGL ES 2.0 documentation for
901     \l{http://www.khronos.org/opengles/sdk/docs/man/glIsShader.xml}{glIsShader()}.
902 
903     This convenience function will do nothing on OpenGL ES 1.x systems.
904 */
905 
906 /*!
907     \fn void QGLFunctions::glLinkProgram(GLuint program)
908 
909     Convenience function that calls glLinkProgram(\a program).
910 
911     For more information, see the OpenGL ES 2.0 documentation for
912     \l{http://www.khronos.org/opengles/sdk/docs/man/glLinkProgram.xml}{glLinkProgram()}.
913 
914     This convenience function will do nothing on OpenGL ES 1.x systems.
915 */
916 
917 /*!
918     \fn void QGLFunctions::glReleaseShaderCompiler()
919 
920     Convenience function that calls glReleaseShaderCompiler().
921 
922     For more information, see the OpenGL ES 2.0 documentation for
923     \l{http://www.khronos.org/opengles/sdk/docs/man/glReleaseShaderCompiler.xml}{glReleaseShaderCompiler()}.
924 
925     This convenience function will do nothing on OpenGL ES 1.x systems.
926 */
927 
928 /*!
929     \fn void QGLFunctions::glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
930 
931     Convenience function that calls glRenderbufferStorage(\a target, \a internalformat, \a width, \a height).
932 
933     For more information, see the OpenGL ES 2.0 documentation for
934     \l{http://www.khronos.org/opengles/sdk/docs/man/glRenderbufferStorage.xml}{glRenderbufferStorage()}.
935 */
936 
937 /*!
938     \fn void QGLFunctions::glSampleCoverage(GLclampf value, GLboolean invert)
939 
940     Convenience function that calls glSampleCoverage(\a value, \a invert).
941 
942     For more information, see the OpenGL ES 2.0 documentation for
943     \l{http://www.khronos.org/opengles/sdk/docs/man/glSampleCoverage.xml}{glSampleCoverage()}.
944 */
945 
946 /*!
947     \fn void QGLFunctions::glShaderBinary(GLint n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLint length)
948 
949     Convenience function that calls glShaderBinary(\a n, \a shaders, \a binaryformat, \a binary, \a length).
950 
951     For more information, see the OpenGL ES 2.0 documentation for
952     \l{http://www.khronos.org/opengles/sdk/docs/man/glShaderBinary.xml}{glShaderBinary()}.
953 
954     This convenience function will do nothing on OpenGL ES 1.x systems.
955 */
956 
957 /*!
958     \fn void QGLFunctions::glShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length)
959 
960     Convenience function that calls glShaderSource(\a shader, \a count, \a string, \a length).
961 
962     For more information, see the OpenGL ES 2.0 documentation for
963     \l{http://www.khronos.org/opengles/sdk/docs/man/glShaderSource.xml}{glShaderSource()}.
964 
965     This convenience function will do nothing on OpenGL ES 1.x systems.
966 */
967 
968 /*!
969     \fn void QGLFunctions::glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
970 
971     Convenience function that calls glStencilFuncSeparate(\a face, \a func, \a ref, \a mask).
972 
973     For more information, see the OpenGL ES 2.0 documentation for
974     \l{http://www.khronos.org/opengles/sdk/docs/man/glStencilFuncSeparate.xml}{glStencilFuncSeparate()}.
975 */
976 
977 /*!
978     \fn void QGLFunctions::glStencilMaskSeparate(GLenum face, GLuint mask)
979 
980     Convenience function that calls glStencilMaskSeparate(\a face, \a mask).
981 
982     For more information, see the OpenGL ES 2.0 documentation for
983     \l{http://www.khronos.org/opengles/sdk/docs/man/glStencilMaskSeparate.xml}{glStencilMaskSeparate()}.
984 */
985 
986 /*!
987     \fn void QGLFunctions::glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
988 
989     Convenience function that calls glStencilOpSeparate(\a face, \a fail, \a zfail, \a zpass).
990 
991     For more information, see the OpenGL ES 2.0 documentation for
992     \l{http://www.khronos.org/opengles/sdk/docs/man/glStencilOpSeparate.xml}{glStencilOpSeparate()}.
993 */
994 
995 /*!
996     \fn void QGLFunctions::glUniform1f(GLint location, GLfloat x)
997 
998     Convenience function that calls glUniform1f(\a location, \a x).
999 
1000     For more information, see the OpenGL ES 2.0 documentation for
1001     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniform1f.xml}{glUniform1f()}.
1002 
1003     This convenience function will do nothing on OpenGL ES 1.x systems.
1004 */
1005 
1006 /*!
1007     \fn void QGLFunctions::glUniform1fv(GLint location, GLsizei count, const GLfloat* v)
1008 
1009     Convenience function that calls glUniform1fv(\a location, \a count, \a v).
1010 
1011     For more information, see the OpenGL ES 2.0 documentation for
1012     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniform1fv.xml}{glUniform1fv()}.
1013 
1014     This convenience function will do nothing on OpenGL ES 1.x systems.
1015 */
1016 
1017 /*!
1018     \fn void QGLFunctions::glUniform1i(GLint location, GLint x)
1019 
1020     Convenience function that calls glUniform1i(\a location, \a x).
1021 
1022     For more information, see the OpenGL ES 2.0 documentation for
1023     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniform1i.xml}{glUniform1i()}.
1024 
1025     This convenience function will do nothing on OpenGL ES 1.x systems.
1026 */
1027 
1028 /*!
1029     \fn void QGLFunctions::glUniform1iv(GLint location, GLsizei count, const GLint* v)
1030 
1031     Convenience function that calls glUniform1iv(\a location, \a count, \a v).
1032 
1033     For more information, see the OpenGL ES 2.0 documentation for
1034     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniform1iv.xml}{glUniform1iv()}.
1035 
1036     This convenience function will do nothing on OpenGL ES 1.x systems.
1037 */
1038 
1039 /*!
1040     \fn void QGLFunctions::glUniform2f(GLint location, GLfloat x, GLfloat y)
1041 
1042     Convenience function that calls glUniform2f(\a location, \a x, \a y).
1043 
1044     For more information, see the OpenGL ES 2.0 documentation for
1045     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniform2f.xml}{glUniform2f()}.
1046 
1047     This convenience function will do nothing on OpenGL ES 1.x systems.
1048 */
1049 
1050 /*!
1051     \fn void QGLFunctions::glUniform2fv(GLint location, GLsizei count, const GLfloat* v)
1052 
1053     Convenience function that calls glUniform2fv(\a location, \a count, \a v).
1054 
1055     For more information, see the OpenGL ES 2.0 documentation for
1056     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniform2fv.xml}{glUniform2fv()}.
1057 
1058     This convenience function will do nothing on OpenGL ES 1.x systems.
1059 */
1060 
1061 /*!
1062     \fn void QGLFunctions::glUniform2i(GLint location, GLint x, GLint y)
1063 
1064     Convenience function that calls glUniform2i(\a location, \a x, \a y).
1065 
1066     For more information, see the OpenGL ES 2.0 documentation for
1067     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniform2i.xml}{glUniform2i()}.
1068 
1069     This convenience function will do nothing on OpenGL ES 1.x systems.
1070 */
1071 
1072 /*!
1073     \fn void QGLFunctions::glUniform2iv(GLint location, GLsizei count, const GLint* v)
1074 
1075     Convenience function that calls glUniform2iv(\a location, \a count, \a v).
1076 
1077     For more information, see the OpenGL ES 2.0 documentation for
1078     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniform2iv.xml}{glUniform2iv()}.
1079 
1080     This convenience function will do nothing on OpenGL ES 1.x systems.
1081 */
1082 
1083 /*!
1084     \fn void QGLFunctions::glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
1085 
1086     Convenience function that calls glUniform3f(\a location, \a x, \a y, \a z).
1087 
1088     For more information, see the OpenGL ES 2.0 documentation for
1089     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniform3f.xml}{glUniform3f()}.
1090 
1091     This convenience function will do nothing on OpenGL ES 1.x systems.
1092 */
1093 
1094 /*!
1095     \fn void QGLFunctions::glUniform3fv(GLint location, GLsizei count, const GLfloat* v)
1096 
1097     Convenience function that calls glUniform3fv(\a location, \a count, \a v).
1098 
1099     For more information, see the OpenGL ES 2.0 documentation for
1100     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniform3fv.xml}{glUniform3fv()}.
1101 
1102     This convenience function will do nothing on OpenGL ES 1.x systems.
1103 */
1104 
1105 /*!
1106     \fn void QGLFunctions::glUniform3i(GLint location, GLint x, GLint y, GLint z)
1107 
1108     Convenience function that calls glUniform3i(\a location, \a x, \a y, \a z).
1109 
1110     For more information, see the OpenGL ES 2.0 documentation for
1111     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniform3i.xml}{glUniform3i()}.
1112 
1113     This convenience function will do nothing on OpenGL ES 1.x systems.
1114 */
1115 
1116 /*!
1117     \fn void QGLFunctions::glUniform3iv(GLint location, GLsizei count, const GLint* v)
1118 
1119     Convenience function that calls glUniform3iv(\a location, \a count, \a v).
1120 
1121     For more information, see the OpenGL ES 2.0 documentation for
1122     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniform3iv.xml}{glUniform3iv()}.
1123 
1124     This convenience function will do nothing on OpenGL ES 1.x systems.
1125 */
1126 
1127 /*!
1128     \fn void QGLFunctions::glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1129 
1130     Convenience function that calls glUniform4f(\a location, \a x, \a y, \a z, \a w).
1131 
1132     For more information, see the OpenGL ES 2.0 documentation for
1133     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniform4f.xml}{glUniform4f()}.
1134 
1135     This convenience function will do nothing on OpenGL ES 1.x systems.
1136 */
1137 
1138 /*!
1139     \fn void QGLFunctions::glUniform4fv(GLint location, GLsizei count, const GLfloat* v)
1140 
1141     Convenience function that calls glUniform4fv(\a location, \a count, \a v).
1142 
1143     For more information, see the OpenGL ES 2.0 documentation for
1144     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniform4fv.xml}{glUniform4fv()}.
1145 
1146     This convenience function will do nothing on OpenGL ES 1.x systems.
1147 */
1148 
1149 /*!
1150     \fn void QGLFunctions::glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
1151 
1152     Convenience function that calls glUniform4i(\a location, \a x, \a y, \a z, \a w).
1153 
1154     For more information, see the OpenGL ES 2.0 documentation for
1155     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniform4i.xml}{glUniform4i()}.
1156 
1157     This convenience function will do nothing on OpenGL ES 1.x systems.
1158 */
1159 
1160 /*!
1161     \fn void QGLFunctions::glUniform4iv(GLint location, GLsizei count, const GLint* v)
1162 
1163     Convenience function that calls glUniform4iv(\a location, \a count, \a v).
1164 
1165     For more information, see the OpenGL ES 2.0 documentation for
1166     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniform4iv.xml}{glUniform4iv()}.
1167 
1168     This convenience function will do nothing on OpenGL ES 1.x systems.
1169 */
1170 
1171 /*!
1172     \fn void QGLFunctions::glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1173 
1174     Convenience function that calls glUniformMatrix2fv(\a location, \a count, \a transpose, \a value).
1175 
1176     For more information, see the OpenGL ES 2.0 documentation for
1177     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniformMatrix2fv.xml}{glUniformMatrix2fv()}.
1178 
1179     This convenience function will do nothing on OpenGL ES 1.x systems.
1180 */
1181 
1182 /*!
1183     \fn void QGLFunctions::glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1184 
1185     Convenience function that calls glUniformMatrix3fv(\a location, \a count, \a transpose, \a value).
1186 
1187     For more information, see the OpenGL ES 2.0 documentation for
1188     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniformMatrix3fv.xml}{glUniformMatrix3fv()}.
1189 
1190     This convenience function will do nothing on OpenGL ES 1.x systems.
1191 */
1192 
1193 /*!
1194     \fn void QGLFunctions::glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1195 
1196     Convenience function that calls glUniformMatrix4fv(\a location, \a count, \a transpose, \a value).
1197 
1198     For more information, see the OpenGL ES 2.0 documentation for
1199     \l{http://www.khronos.org/opengles/sdk/docs/man/glUniformMatrix4fv.xml}{glUniformMatrix4fv()}.
1200 
1201     This convenience function will do nothing on OpenGL ES 1.x systems.
1202 */
1203 
1204 /*!
1205     \fn void QGLFunctions::glUseProgram(GLuint program)
1206 
1207     Convenience function that calls glUseProgram(\a program).
1208 
1209     For more information, see the OpenGL ES 2.0 documentation for
1210     \l{http://www.khronos.org/opengles/sdk/docs/man/glUseProgram.xml}{glUseProgram()}.
1211 
1212     This convenience function will do nothing on OpenGL ES 1.x systems.
1213 */
1214 
1215 /*!
1216     \fn void QGLFunctions::glValidateProgram(GLuint program)
1217 
1218     Convenience function that calls glValidateProgram(\a program).
1219 
1220     For more information, see the OpenGL ES 2.0 documentation for
1221     \l{http://www.khronos.org/opengles/sdk/docs/man/glValidateProgram.xml}{glValidateProgram()}.
1222 
1223     This convenience function will do nothing on OpenGL ES 1.x systems.
1224 */
1225 
1226 /*!
1227     \fn void QGLFunctions::glVertexAttrib1f(GLuint indx, GLfloat x)
1228 
1229     Convenience function that calls glVertexAttrib1f(\a indx, \a x).
1230 
1231     For more information, see the OpenGL ES 2.0 documentation for
1232     \l{http://www.khronos.org/opengles/sdk/docs/man/glVertexAttrib1f.xml}{glVertexAttrib1f()}.
1233 
1234     This convenience function will do nothing on OpenGL ES 1.x systems.
1235 */
1236 
1237 /*!
1238     \fn void QGLFunctions::glVertexAttrib1fv(GLuint indx, const GLfloat* values)
1239 
1240     Convenience function that calls glVertexAttrib1fv(\a indx, \a values).
1241 
1242     For more information, see the OpenGL ES 2.0 documentation for
1243     \l{http://www.khronos.org/opengles/sdk/docs/man/glVertexAttrib1fv.xml}{glVertexAttrib1fv()}.
1244 
1245     This convenience function will do nothing on OpenGL ES 1.x systems.
1246 */
1247 
1248 /*!
1249     \fn void QGLFunctions::glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
1250 
1251     Convenience function that calls glVertexAttrib2f(\a indx, \a x, \a y).
1252 
1253     For more information, see the OpenGL ES 2.0 documentation for
1254     \l{http://www.khronos.org/opengles/sdk/docs/man/glVertexAttrib2f.xml}{glVertexAttrib2f()}.
1255 
1256     This convenience function will do nothing on OpenGL ES 1.x systems.
1257 */
1258 
1259 /*!
1260     \fn void QGLFunctions::glVertexAttrib2fv(GLuint indx, const GLfloat* values)
1261 
1262     Convenience function that calls glVertexAttrib2fv(\a indx, \a values).
1263 
1264     For more information, see the OpenGL ES 2.0 documentation for
1265     \l{http://www.khronos.org/opengles/sdk/docs/man/glVertexAttrib2fv.xml}{glVertexAttrib2fv()}.
1266 
1267     This convenience function will do nothing on OpenGL ES 1.x systems.
1268 */
1269 
1270 /*!
1271     \fn void QGLFunctions::glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
1272 
1273     Convenience function that calls glVertexAttrib3f(\a indx, \a x, \a y, \a z).
1274 
1275     For more information, see the OpenGL ES 2.0 documentation for
1276     \l{http://www.khronos.org/opengles/sdk/docs/man/glVertexAttrib3f.xml}{glVertexAttrib3f()}.
1277 
1278     This convenience function will do nothing on OpenGL ES 1.x systems.
1279 */
1280 
1281 /*!
1282     \fn void QGLFunctions::glVertexAttrib3fv(GLuint indx, const GLfloat* values)
1283 
1284     Convenience function that calls glVertexAttrib3fv(\a indx, \a values).
1285 
1286     For more information, see the OpenGL ES 2.0 documentation for
1287     \l{http://www.khronos.org/opengles/sdk/docs/man/glVertexAttrib3fv.xml}{glVertexAttrib3fv()}.
1288 
1289     This convenience function will do nothing on OpenGL ES 1.x systems.
1290 */
1291 
1292 /*!
1293     \fn void QGLFunctions::glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1294 
1295     Convenience function that calls glVertexAttrib4f(\a indx, \a x, \a y, \a z, \a w).
1296 
1297     For more information, see the OpenGL ES 2.0 documentation for
1298     \l{http://www.khronos.org/opengles/sdk/docs/man/glVertexAttrib4f.xml}{glVertexAttrib4f()}.
1299 
1300     This convenience function will do nothing on OpenGL ES 1.x systems.
1301 */
1302 
1303 /*!
1304     \fn void QGLFunctions::glVertexAttrib4fv(GLuint indx, const GLfloat* values)
1305 
1306     Convenience function that calls glVertexAttrib4fv(\a indx, \a values).
1307 
1308     For more information, see the OpenGL ES 2.0 documentation for
1309     \l{http://www.khronos.org/opengles/sdk/docs/man/glVertexAttrib4fv.xml}{glVertexAttrib4fv()}.
1310 
1311     This convenience function will do nothing on OpenGL ES 1.x systems.
1312 */
1313 
1314 /*!
1315     \fn void QGLFunctions::glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr)
1316 
1317     Convenience function that calls glVertexAttribPointer(\a indx, \a size, \a type, \a normalized, \a stride, \a ptr).
1318 
1319     For more information, see the OpenGL ES 2.0 documentation for
1320     \l{http://www.khronos.org/opengles/sdk/docs/man/glVertexAttribPointer.xml}{glVertexAttribPointer()}.
1321 
1322     This convenience function will do nothing on OpenGL ES 1.x systems.
1323 */
1324 
QGLFunctionsPrivate(const QGLContext *)1325 QGLFunctionsPrivate::QGLFunctionsPrivate(const QGLContext *)
1326     : funcs(0)
1327 {
1328 }
1329 
1330 QT_END_NAMESPACE
1331