0027607: Visualization - Implement adaptive screen space sampling in path tracing
[occt.git] / src / OpenGl / OpenGl_GlFunctions.hxx
1 // Created on: 2014-03-17
2 // Created by: Kirill GAVRILOV
3 // Copyright (c) 2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 #ifndef _OpenGl_GlFunctions_Header
17 #define _OpenGl_GlFunctions_Header
18
19 // required for correct APIENTRY definition
20 #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
21   #define WIN32_LEAN_AND_MEAN
22   #include <windows.h>
23 #endif
24
25 #include <Standard_Macro.hxx>
26 #include <Standard_TypeDef.hxx>
27
28 #ifndef APIENTRY
29   #define APIENTRY
30 #endif
31 #ifndef APIENTRYP
32   #define APIENTRYP APIENTRY *
33 #endif
34 #ifndef GLAPI
35   #define GLAPI extern
36 #endif
37
38 // exclude modern definitions and system-provided glext.h, should be defined before gl.h inclusion
39 #define GL_GLEXT_LEGACY
40 #define GLX_GLXEXT_LEGACY
41
42 // include main OpenGL header provided with system
43 #if defined(__APPLE__)
44   #import <TargetConditionals.h>
45   #if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
46     #include <OpenGLES/ES2/gl.h>
47   #else
48     #include <OpenGL/gl.h>
49   #endif
50   #define __X_GL_H // prevent chaotic gl.h inclusions to avoid compile errors
51 #elif defined(HAVE_GLES2) || defined(OCCT_UWP) || defined(__ANDROID__) || defined(__QNX__)
52   #if defined(_WIN32)
53     // Angle OpenGL ES headers do not define function prototypes even for core functions,
54     // however OCCT is expected to be linked against libGLESv2
55     #define GL_GLEXT_PROTOTYPES
56   #endif
57   #include <GLES2/gl2.h>
58   //#include <GLES3/gl3.h>
59 #else
60   #include <GL/gl.h>
61 #endif
62
63 #if defined(GL_ES_VERSION_2_0)
64   // define items to unify code paths with desktop OpenGL
65   typedef double GLdouble;
66   typedef double GLclampd;
67   typedef uint64_t GLuint64;
68   #define GL_NONE 0
69
70   // OpenGL ES 3.0+ or GL_OES_element_index_uint extension
71   #define GL_UNSIGNED_INT 0x1405
72
73   // OpenGL ES 3.1+
74   #define GL_TEXTURE_2D_MULTISAMPLE 0x9100
75   #define GL_MAX_SAMPLES  0x8D57
76
77   // OpenGL ES 3.2+ or GL_EXT_texture_buffer for OpenGL ES 3.1+
78   #define GL_TEXTURE_BUFFER 0x8C2A
79
80   // in core since OpenGL ES 3.0, extension GL_EXT_texture_rg
81   #define GL_RED   0x1903
82   #define GL_R8    0x8229
83   // in core since OpenGL ES 3.0, extension GL_OES_rgb8_rgba8
84   #define GL_RGB8  0x8051
85   #define GL_RGBA8 0x8058
86   #define GL_LUMINANCE8 0x8040
87   // GL_EXT_texture_format_BGRA8888
88   #define GL_BGRA_EXT 0x80E1 // same as GL_BGRA on desktop
89
90   #define GL_R16      0x822A
91   #define GL_R16F     0x822D
92   #define GL_R32F     0x822E
93   #define GL_RGB16F   0x881B
94   #define GL_RGBA32F  0x8814
95   #define GL_RGB32F   0x8815
96   #define GL_RGBA16F  0x881A
97   #define GL_RGB16F   0x881B
98   #define GL_RGB4     0x804F
99   #define GL_RGB5     0x8050
100   #define GL_RGB8     0x8051
101   #define GL_RGB10    0x8052
102   #define GL_RGB12    0x8053
103   #define GL_RGB16    0x8054
104   #define GL_RGBA8    0x8058
105   #define GL_RGB10_A2 0x8059
106   #define GL_RGBA12   0x805A
107   #define GL_RGBA16   0x805B
108   #define GL_ALPHA8   0x803C
109   #define GL_ALPHA16  0x803E
110
111   #define GL_RG          0x8227
112   #define GL_RG8         0x822B
113   #define GL_RG16        0x822C
114   #define GL_RG16F       0x822F
115   #define GL_RG32F       0x8230
116   #define GL_RG_INTEGER  0x8228
117   #define GL_RED_INTEGER 0x8D94
118
119   #define GL_R8I      0x8231
120   #define GL_R8UI     0x8232
121   #define GL_R16I     0x8233
122   #define GL_R16UI    0x8234
123   #define GL_R32I     0x8235
124   #define GL_R32UI    0x8236
125   #define GL_RG8I     0x8237
126   #define GL_RG8UI    0x8238
127   #define GL_RG16I    0x8239
128   #define GL_RG16UI   0x823A
129   #define GL_RG32I    0x823B
130   #define GL_RG32UI   0x823C
131   #define GL_RGBA32UI 0x8D70
132   #define GL_RGB32UI  0x8D71
133   #define GL_RGBA16UI 0x8D76
134   #define GL_RGB16UI  0x8D77
135   #define GL_RGBA8UI  0x8D7C
136   #define GL_RGB8UI   0x8D7D
137   #define GL_RGBA32I  0x8D82
138   #define GL_RGB32I   0x8D83
139   #define GL_RGBA16I  0x8D88
140   #define GL_RGB16I   0x8D89
141   #define GL_RGBA8I   0x8D8E
142   #define GL_RGB8I    0x8D8F
143
144   // GL_OES_packed_depth_stencil
145   #define GL_DEPTH_STENCIL                  0x84F9
146   #define GL_UNSIGNED_INT_24_8              0x84FA
147   #define GL_DEPTH24_STENCIL8               0x88F0
148
149   // OpenGL ES 3.0+
150   #define GL_DEPTH_COMPONENT24              0x81A6
151   #define GL_DEPTH_COMPONENT32F             0x8CAC
152   #define GL_DEPTH32F_STENCIL8              0x8CAD
153   #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD
154
155   #define GL_READ_FRAMEBUFFER               0x8CA8
156   #define GL_DRAW_FRAMEBUFFER               0x8CA9
157
158   #define GL_TEXTURE_3D                     0x806F
159   #define GL_TEXTURE_WRAP_R                 0x8072
160
161   // GL_EXT_texture_filter_anisotropic
162   #define GL_TEXTURE_MAX_ANISOTROPY_EXT     0x84FE
163   #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
164
165   // debug ARB extension
166   #define GL_DEBUG_OUTPUT               0x92E0
167   #define GL_DEBUG_OUTPUT_SYNCHRONOUS   0x8242
168   #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243
169   #define GL_DEBUG_CALLBACK_FUNCTION    0x8244
170   #define GL_DEBUG_CALLBACK_USER_PARAM  0x8245
171   #define GL_DEBUG_SOURCE_API           0x8246
172   #define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247
173   #define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248
174   #define GL_DEBUG_SOURCE_THIRD_PARTY   0x8249
175   #define GL_DEBUG_SOURCE_APPLICATION   0x824A
176   #define GL_DEBUG_SOURCE_OTHER         0x824B
177   #define GL_DEBUG_TYPE_ERROR           0x824C
178   #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D
179   #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR  0x824E
180   #define GL_DEBUG_TYPE_PORTABILITY     0x824F
181   #define GL_DEBUG_TYPE_PERFORMANCE     0x8250
182   #define GL_DEBUG_TYPE_OTHER           0x8251
183   #define GL_MAX_DEBUG_MESSAGE_LENGTH   0x9143
184   #define GL_MAX_DEBUG_LOGGED_MESSAGES  0x9144
185   #define GL_DEBUG_LOGGED_MESSAGES      0x9145
186   #define GL_DEBUG_SEVERITY_HIGH        0x9146
187   #define GL_DEBUG_SEVERITY_MEDIUM      0x9147
188   #define GL_DEBUG_SEVERITY_LOW         0x9148
189 #endif
190
191 #if !defined(HAVE_EGL) && (defined(__ANDROID__) || defined(__QNX__) || defined(HAVE_GLES2) || defined(OCCT_UWP))
192   #define HAVE_EGL
193 #endif
194
195 #include <InterfaceGraphic.hxx>
196
197 // GL version can be defined by system gl.h header
198 #if !defined(GL_ES_VERSION_2_0)
199   #undef GL_VERSION_1_2
200   #undef GL_VERSION_1_3
201   #undef GL_VERSION_1_4
202   #undef GL_VERSION_1_5
203   #undef GL_VERSION_2_0
204   #undef GL_VERSION_2_1
205   #undef GL_VERSION_3_0
206   #undef GL_VERSION_3_1
207   #undef GL_VERSION_3_2
208   #undef GL_VERSION_3_3
209   #undef GL_VERSION_4_0
210   #undef GL_VERSION_4_1
211   #undef GL_VERSION_4_2
212   #undef GL_VERSION_4_3
213   #undef GL_VERSION_4_4
214   #undef GL_VERSION_4_5
215
216   // include glext.h provided by Khronos group
217   #include <glext.h>
218 #endif
219
220 //! Mega structure defines the complete list of OpenGL functions.
221 struct OpenGl_GlFunctions
222 {
223
224 public: //! @name OpenGL ES 1.1
225
226 #if defined(GL_ES_VERSION_2_0)
227
228   inline void glActiveTexture (GLenum texture)
229   {
230     ::glActiveTexture (texture);
231   }
232
233   inline void glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data)
234   {
235     ::glCompressedTexImage2D (target, level, internalformat, width, height, border, imageSize, data);
236   }
237
238   inline void glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data)
239   {
240     ::glCompressedTexSubImage2D (target, level, xoffset, yoffset, width, height, format, imageSize, data);
241   }
242
243   inline void glBindBuffer (GLenum target, GLuint buffer)
244   {
245     ::glBindBuffer (target, buffer);
246   }
247
248   inline void glBufferData (GLenum target, GLsizeiptr size, const void* data, GLenum usage)
249   {
250     ::glBufferData (target, size, data, usage);
251   }
252
253   inline void glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void* data)
254   {
255     ::glBufferSubData (target, offset, size, data);
256   }
257
258   inline void glDeleteBuffers (GLsizei n, const GLuint *buffers)
259   {
260     ::glDeleteBuffers (n, buffers);
261   }
262
263   inline void glDeleteTextures (GLsizei n, const GLuint *textures)
264   {
265     ::glDeleteTextures (n, textures);
266   }
267
268   inline void glDepthFunc (GLenum func)
269   {
270     ::glDepthFunc (func);
271   }
272
273   inline void glDepthMask (GLboolean flag)
274   {
275     ::glDepthMask (flag);
276   }
277
278   inline void glDepthRangef (GLfloat n, GLfloat f)
279   {
280     ::glDepthRangef (n, f);
281   }
282
283   inline void glGenBuffers (GLsizei n, GLuint *buffers)
284   {
285     ::glGenBuffers (n, buffers);
286   }
287
288   inline void glGenTextures (GLsizei n, GLuint *textures)
289   {
290     ::glGenTextures (n, textures);
291   }
292
293   inline void glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params)
294   {
295     ::glGetBufferParameteriv (target, pname, params);
296   }
297
298   inline GLboolean glIsBuffer (GLuint buffer)
299   {
300     return ::glIsBuffer (buffer);
301   }
302
303   inline void glSampleCoverage (GLfloat value, GLboolean invert)
304   {
305     ::glSampleCoverage (value, invert);
306   }
307
308   inline void glMultiDrawElements (GLenum theMode, const GLsizei* theCount, GLenum theType, const void* const* theIndices, GLsizei theDrawCount)
309   {
310     if (theCount   == NULL
311      || theIndices == NULL)
312     {
313       return;
314     }
315
316     for (GLsizei aBatchIter = 0; aBatchIter < theDrawCount; ++aBatchIter)
317     {
318       ::glDrawElements (theMode, theCount[aBatchIter], theType, theIndices[aBatchIter]);
319     }
320   }
321
322 #endif
323
324 public: //! @name OpenGL ES 2.0
325
326 #if defined(GL_ES_VERSION_2_0)
327   inline void glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
328   {
329     ::glBlendColor (red, green, blue, alpha);
330   }
331
332   inline void glBlendEquation (GLenum mode)
333   {
334     ::glBlendEquation (mode);
335   }
336
337   inline void glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
338   {
339     ::glBlendFuncSeparate (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
340   }
341
342   inline void glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha)
343   {
344     ::glBlendEquationSeparate (modeRGB, modeAlpha);
345   }
346
347   inline void glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass)
348   {
349     ::glStencilOpSeparate (face, sfail, dpfail, dppass);
350   }
351
352   inline void glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask)
353   {
354     ::glStencilFuncSeparate (face, func, ref, mask);
355   }
356
357   inline void glStencilMaskSeparate (GLenum face, GLuint mask)
358   {
359     ::glStencilMaskSeparate (face, mask);
360   }
361
362   inline void glAttachShader (GLuint program, GLuint shader)
363   {
364     ::glAttachShader (program, shader);
365   }
366
367   inline void glBindAttribLocation (GLuint program, GLuint index, const GLchar *name)
368   {
369     ::glBindAttribLocation (program, index, name);
370   }
371
372   inline void glBindFramebuffer (GLenum target, GLuint framebuffer)
373   {
374     ::glBindFramebuffer (target, framebuffer);
375   }
376
377   inline void glBindRenderbuffer (GLenum target, GLuint renderbuffer)
378   {
379     ::glBindRenderbuffer (target, renderbuffer);
380   }
381
382   inline GLenum glCheckFramebufferStatus (GLenum target)
383   {
384     return ::glCheckFramebufferStatus (target);
385   }
386
387   inline void glCompileShader (GLuint shader)
388   {
389     ::glCompileShader (shader);
390   }
391
392   inline GLuint glCreateProgram()
393   {
394     return ::glCreateProgram();
395   }
396
397   inline GLuint glCreateShader (GLenum type)
398   {
399     return ::glCreateShader (type);
400   }
401
402   inline void glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers)
403   {
404     ::glDeleteFramebuffers (n, framebuffers);
405   }
406
407   inline void glDeleteProgram (GLuint program)
408   {
409     ::glDeleteProgram (program);
410   }
411
412   inline void glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers)
413   {
414     ::glDeleteRenderbuffers (n, renderbuffers);
415   }
416
417   inline void glDeleteShader (GLuint shader)
418   {
419     ::glDeleteShader (shader);
420   }
421
422   inline void glDetachShader (GLuint program, GLuint shader)
423   {
424     ::glDetachShader (program, shader);
425   }
426
427   inline void glDisableVertexAttribArray (GLuint index)
428   {
429     ::glDisableVertexAttribArray (index);
430   }
431
432   inline void glEnableVertexAttribArray (GLuint index)
433   {
434     ::glEnableVertexAttribArray (index);
435   }
436
437   inline void glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
438   {
439     ::glFramebufferRenderbuffer (target, attachment, renderbuffertarget, renderbuffer);
440   }
441
442   inline void glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
443   {
444     ::glFramebufferTexture2D (target, attachment, textarget, texture, level);
445   }
446
447   inline void glGenerateMipmap (GLenum target)
448   {
449     ::glGenerateMipmap (target);
450   }
451
452   inline void glGenFramebuffers (GLsizei n, GLuint *framebuffers)
453   {
454     ::glGenFramebuffers (n, framebuffers);
455   }
456
457   inline void glGenRenderbuffers (GLsizei n, GLuint *renderbuffers)
458   {
459     ::glGenRenderbuffers (n, renderbuffers);
460   }
461
462   inline void glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint* size, GLenum *type, GLchar *name)
463   {
464     ::glGetActiveAttrib (program, index, bufSize, length, size, type, name);
465   }
466
467   inline void glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint* size, GLenum *type, GLchar *name)
468   {
469     ::glGetActiveUniform (program, index, bufSize, length, size, type, name);
470   }
471
472   inline void glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders)
473   {
474     ::glGetAttachedShaders (program, maxCount, count, shaders);
475   }
476
477   inline GLint glGetAttribLocation (GLuint program, const GLchar *name)
478   {
479     return ::glGetAttribLocation (program, name);
480   }
481
482   inline void glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params)
483   {
484     ::glGetFramebufferAttachmentParameteriv (target, attachment, pname, params);
485   }
486
487   inline void glGetProgramiv (GLuint program, GLenum pname, GLint* params)
488   {
489     ::glGetProgramiv (program, pname, params);
490   }
491
492   inline void glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog)
493   {
494     ::glGetProgramInfoLog (program, bufSize, length, infoLog);
495   }
496
497   inline void glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params)
498   {
499     ::glGetRenderbufferParameteriv (target, pname, params);
500   }
501
502   inline void glGetShaderiv (GLuint shader, GLenum pname, GLint* params)
503   {
504     ::glGetShaderiv (shader, pname, params);
505   }
506
507   inline void glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog)
508   {
509     ::glGetShaderInfoLog (shader, bufSize, length, infoLog);
510   }
511
512   inline void glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
513   {
514     ::glGetShaderPrecisionFormat (shadertype, precisiontype, range, precision);
515   }
516
517   inline void glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source)
518   {
519     ::glGetShaderSource (shader, bufSize, length, source);
520   }
521
522   inline void glGetUniformfv (GLuint program, GLint location, GLfloat* params)
523   {
524     ::glGetUniformfv (program, location, params);
525   }
526
527   inline void glGetUniformiv (GLuint program, GLint location, GLint* params)
528   {
529     ::glGetUniformiv (program, location, params);
530   }
531
532   GLint glGetUniformLocation (GLuint program, const GLchar *name)
533   {
534     return ::glGetUniformLocation (program, name);
535   }
536
537   inline void glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params)
538   {
539     ::glGetVertexAttribfv (index, pname, params);
540   }
541
542   inline void glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params)
543   {
544     ::glGetVertexAttribiv (index, pname, params);
545   }
546
547   inline void glGetVertexAttribPointerv (GLuint index, GLenum pname, void* *pointer)
548   {
549     ::glGetVertexAttribPointerv (index, pname, pointer);
550   }
551
552   inline GLboolean glIsFramebuffer (GLuint framebuffer)
553   {
554     return ::glIsFramebuffer (framebuffer);
555   }
556
557   inline GLboolean glIsProgram (GLuint program)
558   {
559     return ::glIsProgram (program);
560   }
561
562   inline GLboolean glIsRenderbuffer (GLuint renderbuffer)
563   {
564     return ::glIsRenderbuffer (renderbuffer);
565   }
566
567   inline GLboolean glIsShader (GLuint shader)
568   {
569     return ::glIsShader (shader);
570   }
571
572   inline void glLinkProgram (GLuint program)
573   {
574     ::glLinkProgram (program);
575   }
576
577   inline void glReleaseShaderCompiler()
578   {
579     ::glReleaseShaderCompiler();
580   }
581
582   inline void glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
583   {
584     ::glRenderbufferStorage (target, internalformat, width, height);
585   }
586
587   inline void glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void* binary, GLsizei length)
588   {
589     ::glShaderBinary (count, shaders, binaryformat, binary, length);
590   }
591
592   inline void glShaderSource (GLuint shader, GLsizei count, const GLchar** string, const GLint* length)
593   {
594     ::glShaderSource (shader, count, string, length);
595   }
596
597   inline void glUniform1f (GLint location, GLfloat v0)
598   {
599     ::glUniform1f (location, v0);
600   }
601
602   inline void glUniform1fv (GLint location, GLsizei count, const GLfloat* value)
603   {
604     ::glUniform1fv (location, count, value);
605   }
606
607   inline void glUniform1i (GLint location, GLint v0)
608   {
609     ::glUniform1i (location, v0);
610   }
611
612   inline void glUniform1iv (GLint location, GLsizei count, const GLint* value)
613   {
614     ::glUniform1iv (location, count, value);
615   }
616
617   inline void glUniform2f (GLint location, GLfloat v0, GLfloat v1)
618   {
619     ::glUniform2f (location, v0, v1);
620   }
621
622   inline void glUniform2fv (GLint location, GLsizei count, const GLfloat* value)
623   {
624     ::glUniform2fv (location, count, value);
625   }
626
627   inline void glUniform2i (GLint location, GLint v0, GLint v1)
628   {
629     ::glUniform2i (location, v0, v1);
630   }
631
632   inline void glUniform2iv (GLint location, GLsizei count, const GLint* value)
633   {
634     ::glUniform2iv (location, count, value);
635   }
636
637   inline void glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
638   {
639     ::glUniform3f (location, v0, v1, v2);
640   }
641
642   inline void glUniform3fv (GLint location, GLsizei count, const GLfloat* value)
643   {
644     ::glUniform3fv (location, count, value);
645   }
646
647   inline void glUniform3i (GLint location, GLint v0, GLint v1, GLint v2)
648   {
649     ::glUniform3i (location, v0, v1, v2);
650   }
651
652   inline void glUniform3iv (GLint location, GLsizei count, const GLint* value)
653   {
654     ::glUniform3iv (location, count, value);
655   }
656
657   inline void glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
658   {
659     ::glUniform4f (location, v0, v1, v2, v3);
660   }
661
662   inline void glUniform4fv (GLint location, GLsizei count, const GLfloat* value)
663   {
664     ::glUniform4fv (location, count, value);
665   }
666
667   inline void glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
668   {
669     ::glUniform4i (location, v0, v1, v2, v3);
670   }
671
672   inline void glUniform4iv (GLint location, GLsizei count, const GLint* value)
673   {
674     ::glUniform4iv (location, count, value);
675   }
676
677   inline void glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
678   {
679     ::glUniformMatrix2fv (location, count, transpose, value);
680   }
681
682   inline void glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
683   {
684     ::glUniformMatrix3fv (location, count, transpose, value);
685   }
686
687   inline void glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
688   {
689     ::glUniformMatrix4fv (location, count, transpose, value);
690   }
691
692   inline void glUseProgram (GLuint program)
693   {
694     ::glUseProgram (program);
695   }
696
697   inline void glValidateProgram (GLuint program)
698   {
699     ::glValidateProgram (program);
700   }
701
702   inline void glVertexAttrib1f (GLuint index, GLfloat x)
703   {
704     ::glVertexAttrib1f (index, x);
705   }
706
707   inline void glVertexAttrib1fv (GLuint index, const GLfloat* v)
708   {
709     ::glVertexAttrib1fv (index, v);
710   }
711
712   inline void glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y)
713   {
714     ::glVertexAttrib2f (index, x, y);
715   }
716
717   inline void glVertexAttrib2fv (GLuint index, const GLfloat* v)
718   {
719     ::glVertexAttrib2fv (index, v);
720   }
721
722   inline void glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z)
723   {
724     ::glVertexAttrib3f (index, x, y, z);
725   }
726
727   inline void glVertexAttrib3fv (GLuint index, const GLfloat* v)
728   {
729     ::glVertexAttrib3fv (index, v);
730   }
731
732   inline void glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
733   {
734     ::glVertexAttrib4f (index, x, y, z, w);
735   }
736
737   inline void glVertexAttrib4fv (GLuint index, const GLfloat* v)
738   {
739     ::glVertexAttrib4fv (index, v);
740   }
741
742   inline void glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer)
743   {
744     ::glVertexAttribPointer (index, size, type, normalized, stride, pointer);
745   }
746
747 public: //! @name OpenGL ES 3.0
748
749   typedef void (*glBlitFramebuffer_t)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
750   glBlitFramebuffer_t glBlitFramebuffer;
751
752   typedef void (*glTexImage3D_t)(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* data);
753   glTexImage3D_t glTexImage3D;
754
755 public: //! @name OpenGL ES 3.1
756
757   typedef void (*glTexStorage2DMultisample_t)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
758   glTexStorage2DMultisample_t glTexStorage2DMultisample;
759
760 public: //! @name OpenGL ES 3.2
761
762   typedef void (*glTexBuffer_t)(GLenum target, GLenum internalFormat, GLuint buffer);
763   glTexBuffer_t glTexBuffer;
764
765 public: //! @name GL_KHR_debug (optional)
766
767   typedef void   (APIENTRY  *GLDEBUGPROCARB)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam);
768
769   typedef void   (APIENTRYP glDebugMessageControl_t ) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled);
770   typedef void   (APIENTRYP glDebugMessageInsert_t  ) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf);
771   typedef void   (APIENTRYP glDebugMessageCallback_t) (GLDEBUGPROCARB callback, const void* userParam);
772   typedef GLuint (APIENTRYP glGetDebugMessageLog_t  ) (GLuint   count,
773                                                        GLsizei  bufSize,
774                                                        GLenum*  sources,
775                                                        GLenum*  types,
776                                                        GLuint*  ids,
777                                                        GLenum*  severities,
778                                                        GLsizei* lengths,
779                                                        GLchar*  messageLog);
780
781   glDebugMessageControl_t  glDebugMessageControl;
782   glDebugMessageInsert_t   glDebugMessageInsert;
783   glDebugMessageCallback_t glDebugMessageCallback;
784   glGetDebugMessageLog_t   glGetDebugMessageLog;
785
786 #else // OpenGL ES vs. desktop
787
788 public: //! @name OpenGL 1.2
789
790   PFNGLBLENDCOLORPROC               glBlendColor;
791   PFNGLBLENDEQUATIONPROC            glBlendEquation;
792   PFNGLDRAWRANGEELEMENTSPROC        glDrawRangeElements;
793   PFNGLTEXIMAGE3DPROC               glTexImage3D;
794   PFNGLTEXSUBIMAGE3DPROC            glTexSubImage3D;
795   PFNGLCOPYTEXSUBIMAGE3DPROC        glCopyTexSubImage3D;
796
797 public: //! @name OpenGL 1.3
798
799   PFNGLACTIVETEXTUREPROC            glActiveTexture;
800   PFNGLSAMPLECOVERAGEPROC           glSampleCoverage;
801   PFNGLCOMPRESSEDTEXIMAGE3DPROC     glCompressedTexImage3D;
802   PFNGLCOMPRESSEDTEXIMAGE2DPROC     glCompressedTexImage2D;
803   PFNGLCOMPRESSEDTEXIMAGE1DPROC     glCompressedTexImage1D;
804   PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC  glCompressedTexSubImage3D;
805   PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC  glCompressedTexSubImage2D;
806   PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC  glCompressedTexSubImage1D;
807   PFNGLGETCOMPRESSEDTEXIMAGEPROC    glGetCompressedTexImage;
808
809   PFNGLCLIENTACTIVETEXTUREPROC      glClientActiveTexture;
810   PFNGLMULTITEXCOORD1DPROC          glMultiTexCoord1d;
811   PFNGLMULTITEXCOORD1DVPROC         glMultiTexCoord1dv;
812   PFNGLMULTITEXCOORD1FPROC          glMultiTexCoord1f;
813   PFNGLMULTITEXCOORD1FVPROC         glMultiTexCoord1fv;
814   PFNGLMULTITEXCOORD1IPROC          glMultiTexCoord1i;
815   PFNGLMULTITEXCOORD1IVPROC         glMultiTexCoord1iv;
816   PFNGLMULTITEXCOORD1SPROC          glMultiTexCoord1s;
817   PFNGLMULTITEXCOORD1SVPROC         glMultiTexCoord1sv;
818   PFNGLMULTITEXCOORD2DPROC          glMultiTexCoord2d;
819   PFNGLMULTITEXCOORD2DVPROC         glMultiTexCoord2dv;
820   PFNGLMULTITEXCOORD2FPROC          glMultiTexCoord2f;
821   PFNGLMULTITEXCOORD2FVPROC         glMultiTexCoord2fv;
822   PFNGLMULTITEXCOORD2IPROC          glMultiTexCoord2i;
823   PFNGLMULTITEXCOORD2IVPROC         glMultiTexCoord2iv;
824   PFNGLMULTITEXCOORD2SPROC          glMultiTexCoord2s;
825   PFNGLMULTITEXCOORD2SVPROC         glMultiTexCoord2sv;
826   PFNGLMULTITEXCOORD3DPROC          glMultiTexCoord3d;
827   PFNGLMULTITEXCOORD3DVPROC         glMultiTexCoord3dv;
828   PFNGLMULTITEXCOORD3FPROC          glMultiTexCoord3f;
829   PFNGLMULTITEXCOORD3FVPROC         glMultiTexCoord3fv;
830   PFNGLMULTITEXCOORD3IPROC          glMultiTexCoord3i;
831   PFNGLMULTITEXCOORD3IVPROC         glMultiTexCoord3iv;
832   PFNGLMULTITEXCOORD3SPROC          glMultiTexCoord3s;
833   PFNGLMULTITEXCOORD3SVPROC         glMultiTexCoord3sv;
834   PFNGLMULTITEXCOORD4DPROC          glMultiTexCoord4d;
835   PFNGLMULTITEXCOORD4DVPROC         glMultiTexCoord4dv;
836   PFNGLMULTITEXCOORD4FPROC          glMultiTexCoord4f;
837   PFNGLMULTITEXCOORD4FVPROC         glMultiTexCoord4fv;
838   PFNGLMULTITEXCOORD4IPROC          glMultiTexCoord4i;
839   PFNGLMULTITEXCOORD4IVPROC         glMultiTexCoord4iv;
840   PFNGLMULTITEXCOORD4SPROC          glMultiTexCoord4s;
841   PFNGLMULTITEXCOORD4SVPROC         glMultiTexCoord4sv;
842   PFNGLLOADTRANSPOSEMATRIXFPROC     glLoadTransposeMatrixf;
843   PFNGLLOADTRANSPOSEMATRIXDPROC     glLoadTransposeMatrixd;
844   PFNGLMULTTRANSPOSEMATRIXFPROC     glMultTransposeMatrixf;
845   PFNGLMULTTRANSPOSEMATRIXDPROC     glMultTransposeMatrixd;
846
847 public: //! @name OpenGL 1.4
848
849   PFNGLBLENDFUNCSEPARATEPROC        glBlendFuncSeparate;
850   PFNGLMULTIDRAWARRAYSPROC          glMultiDrawArrays;
851   PFNGLMULTIDRAWELEMENTSPROC        glMultiDrawElements;
852   PFNGLPOINTPARAMETERFPROC          glPointParameterf;
853   PFNGLPOINTPARAMETERFVPROC         glPointParameterfv;
854   PFNGLPOINTPARAMETERIPROC          glPointParameteri;
855   PFNGLPOINTPARAMETERIVPROC         glPointParameteriv;
856
857 public: //! @name OpenGL 1.5
858
859   PFNGLGENQUERIESPROC               glGenQueries;
860   PFNGLDELETEQUERIESPROC            glDeleteQueries;
861   PFNGLISQUERYPROC                  glIsQuery;
862   PFNGLBEGINQUERYPROC               glBeginQuery;
863   PFNGLENDQUERYPROC                 glEndQuery;
864   PFNGLGETQUERYIVPROC               glGetQueryiv;
865   PFNGLGETQUERYOBJECTIVPROC         glGetQueryObjectiv;
866   PFNGLGETQUERYOBJECTUIVPROC        glGetQueryObjectuiv;
867   PFNGLBINDBUFFERPROC               glBindBuffer;
868   PFNGLDELETEBUFFERSPROC            glDeleteBuffers;
869   PFNGLGENBUFFERSPROC               glGenBuffers;
870   PFNGLISBUFFERPROC                 glIsBuffer;
871   PFNGLBUFFERDATAPROC               glBufferData;
872   PFNGLBUFFERSUBDATAPROC            glBufferSubData;
873   PFNGLGETBUFFERSUBDATAPROC         glGetBufferSubData;
874   PFNGLMAPBUFFERPROC                glMapBuffer;
875   PFNGLUNMAPBUFFERPROC              glUnmapBuffer;
876   PFNGLGETBUFFERPARAMETERIVPROC     glGetBufferParameteriv;
877   PFNGLGETBUFFERPOINTERVPROC        glGetBufferPointerv;
878
879 public: //! @name OpenGL 2.0
880
881   PFNGLBLENDEQUATIONSEPARATEPROC    glBlendEquationSeparate;
882   PFNGLDRAWBUFFERSPROC              glDrawBuffers;
883   PFNGLSTENCILOPSEPARATEPROC        glStencilOpSeparate;
884   PFNGLSTENCILFUNCSEPARATEPROC      glStencilFuncSeparate;
885   PFNGLSTENCILMASKSEPARATEPROC      glStencilMaskSeparate;
886   PFNGLATTACHSHADERPROC             glAttachShader;
887   PFNGLBINDATTRIBLOCATIONPROC       glBindAttribLocation;
888   PFNGLCOMPILESHADERPROC            glCompileShader;
889   PFNGLCREATEPROGRAMPROC            glCreateProgram;
890   PFNGLCREATESHADERPROC             glCreateShader;
891   PFNGLDELETEPROGRAMPROC            glDeleteProgram;
892   PFNGLDELETESHADERPROC             glDeleteShader;
893   PFNGLDETACHSHADERPROC             glDetachShader;
894   PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
895   PFNGLENABLEVERTEXATTRIBARRAYPROC  glEnableVertexAttribArray;
896   PFNGLGETACTIVEATTRIBPROC          glGetActiveAttrib;
897   PFNGLGETACTIVEUNIFORMPROC         glGetActiveUniform;
898   PFNGLGETATTACHEDSHADERSPROC       glGetAttachedShaders;
899   PFNGLGETATTRIBLOCATIONPROC        glGetAttribLocation;
900   PFNGLGETPROGRAMIVPROC             glGetProgramiv;
901   PFNGLGETPROGRAMINFOLOGPROC        glGetProgramInfoLog;
902   PFNGLGETSHADERIVPROC              glGetShaderiv;
903   PFNGLGETSHADERINFOLOGPROC         glGetShaderInfoLog;
904   PFNGLGETSHADERSOURCEPROC          glGetShaderSource;
905   PFNGLGETUNIFORMLOCATIONPROC       glGetUniformLocation;
906   PFNGLGETUNIFORMFVPROC             glGetUniformfv;
907   PFNGLGETUNIFORMIVPROC             glGetUniformiv;
908   PFNGLGETVERTEXATTRIBDVPROC        glGetVertexAttribdv;
909   PFNGLGETVERTEXATTRIBFVPROC        glGetVertexAttribfv;
910   PFNGLGETVERTEXATTRIBIVPROC        glGetVertexAttribiv;
911   PFNGLGETVERTEXATTRIBPOINTERVPROC  glGetVertexAttribPointerv;
912   PFNGLISPROGRAMPROC                glIsProgram;
913   PFNGLISSHADERPROC                 glIsShader;
914   PFNGLLINKPROGRAMPROC              glLinkProgram;
915   PFNGLSHADERSOURCEPROC             glShaderSource;
916   PFNGLUSEPROGRAMPROC               glUseProgram;
917   PFNGLUNIFORM1FPROC                glUniform1f;
918   PFNGLUNIFORM2FPROC                glUniform2f;
919   PFNGLUNIFORM3FPROC                glUniform3f;
920   PFNGLUNIFORM4FPROC                glUniform4f;
921   PFNGLUNIFORM1IPROC                glUniform1i;
922   PFNGLUNIFORM2IPROC                glUniform2i;
923   PFNGLUNIFORM3IPROC                glUniform3i;
924   PFNGLUNIFORM4IPROC                glUniform4i;
925   PFNGLUNIFORM1FVPROC               glUniform1fv;
926   PFNGLUNIFORM2FVPROC               glUniform2fv;
927   PFNGLUNIFORM3FVPROC               glUniform3fv;
928   PFNGLUNIFORM4FVPROC               glUniform4fv;
929   PFNGLUNIFORM1IVPROC               glUniform1iv;
930   PFNGLUNIFORM2IVPROC               glUniform2iv;
931   PFNGLUNIFORM3IVPROC               glUniform3iv;
932   PFNGLUNIFORM4IVPROC               glUniform4iv;
933   PFNGLUNIFORMMATRIX2FVPROC         glUniformMatrix2fv;
934   PFNGLUNIFORMMATRIX3FVPROC         glUniformMatrix3fv;
935   PFNGLUNIFORMMATRIX4FVPROC         glUniformMatrix4fv;
936   PFNGLVALIDATEPROGRAMPROC          glValidateProgram;
937   PFNGLVERTEXATTRIB1DPROC           glVertexAttrib1d;
938   PFNGLVERTEXATTRIB1DVPROC          glVertexAttrib1dv;
939   PFNGLVERTEXATTRIB1FPROC           glVertexAttrib1f;
940   PFNGLVERTEXATTRIB1FVPROC          glVertexAttrib1fv;
941   PFNGLVERTEXATTRIB1SPROC           glVertexAttrib1s;
942   PFNGLVERTEXATTRIB1SVPROC          glVertexAttrib1sv;
943   PFNGLVERTEXATTRIB2DPROC           glVertexAttrib2d;
944   PFNGLVERTEXATTRIB2DVPROC          glVertexAttrib2dv;
945   PFNGLVERTEXATTRIB2FPROC           glVertexAttrib2f;
946   PFNGLVERTEXATTRIB2FVPROC          glVertexAttrib2fv;
947   PFNGLVERTEXATTRIB2SPROC           glVertexAttrib2s;
948   PFNGLVERTEXATTRIB2SVPROC          glVertexAttrib2sv;
949   PFNGLVERTEXATTRIB3DPROC           glVertexAttrib3d;
950   PFNGLVERTEXATTRIB3DVPROC          glVertexAttrib3dv;
951   PFNGLVERTEXATTRIB3FPROC           glVertexAttrib3f;
952   PFNGLVERTEXATTRIB3FVPROC          glVertexAttrib3fv;
953   PFNGLVERTEXATTRIB3SPROC           glVertexAttrib3s;
954   PFNGLVERTEXATTRIB3SVPROC          glVertexAttrib3sv;
955   PFNGLVERTEXATTRIB4NBVPROC         glVertexAttrib4Nbv;
956   PFNGLVERTEXATTRIB4NIVPROC         glVertexAttrib4Niv;
957   PFNGLVERTEXATTRIB4NSVPROC         glVertexAttrib4Nsv;
958   PFNGLVERTEXATTRIB4NUBPROC         glVertexAttrib4Nub;
959   PFNGLVERTEXATTRIB4NUBVPROC        glVertexAttrib4Nubv;
960   PFNGLVERTEXATTRIB4NUIVPROC        glVertexAttrib4Nuiv;
961   PFNGLVERTEXATTRIB4NUSVPROC        glVertexAttrib4Nusv;
962   PFNGLVERTEXATTRIB4BVPROC          glVertexAttrib4bv;
963   PFNGLVERTEXATTRIB4DPROC           glVertexAttrib4d;
964   PFNGLVERTEXATTRIB4DVPROC          glVertexAttrib4dv;
965   PFNGLVERTEXATTRIB4FPROC           glVertexAttrib4f;
966   PFNGLVERTEXATTRIB4FVPROC          glVertexAttrib4fv;
967   PFNGLVERTEXATTRIB4IVPROC          glVertexAttrib4iv;
968   PFNGLVERTEXATTRIB4SPROC           glVertexAttrib4s;
969   PFNGLVERTEXATTRIB4SVPROC          glVertexAttrib4sv;
970   PFNGLVERTEXATTRIB4UBVPROC         glVertexAttrib4ubv;
971   PFNGLVERTEXATTRIB4UIVPROC         glVertexAttrib4uiv;
972   PFNGLVERTEXATTRIB4USVPROC         glVertexAttrib4usv;
973   PFNGLVERTEXATTRIBPOINTERPROC      glVertexAttribPointer;
974
975 public: //! @name OpenGL 2.1
976
977   PFNGLUNIFORMMATRIX2X3FVPROC       glUniformMatrix2x3fv;
978   PFNGLUNIFORMMATRIX3X2FVPROC       glUniformMatrix3x2fv;
979   PFNGLUNIFORMMATRIX2X4FVPROC       glUniformMatrix2x4fv;
980   PFNGLUNIFORMMATRIX4X2FVPROC       glUniformMatrix4x2fv;
981   PFNGLUNIFORMMATRIX3X4FVPROC       glUniformMatrix3x4fv;
982   PFNGLUNIFORMMATRIX4X3FVPROC       glUniformMatrix4x3fv;
983
984 public: //! @name GL_ARB_framebuffer_object (added to OpenGL 3.0 core)
985
986   PFNGLISRENDERBUFFERPROC                      glIsRenderbuffer;
987   PFNGLBINDRENDERBUFFERPROC                    glBindRenderbuffer;
988   PFNGLDELETERENDERBUFFERSPROC                 glDeleteRenderbuffers;
989   PFNGLGENRENDERBUFFERSPROC                    glGenRenderbuffers;
990   PFNGLRENDERBUFFERSTORAGEPROC                 glRenderbufferStorage;
991   PFNGLGETRENDERBUFFERPARAMETERIVPROC          glGetRenderbufferParameteriv;
992   PFNGLISFRAMEBUFFERPROC                       glIsFramebuffer;
993   PFNGLBINDFRAMEBUFFERPROC                     glBindFramebuffer;
994   PFNGLDELETEFRAMEBUFFERSPROC                  glDeleteFramebuffers;
995   PFNGLGENFRAMEBUFFERSPROC                     glGenFramebuffers;
996   PFNGLCHECKFRAMEBUFFERSTATUSPROC              glCheckFramebufferStatus;
997   PFNGLFRAMEBUFFERTEXTURE1DPROC                glFramebufferTexture1D;
998   PFNGLFRAMEBUFFERTEXTURE2DPROC                glFramebufferTexture2D;
999   PFNGLFRAMEBUFFERTEXTURE3DPROC                glFramebufferTexture3D;
1000   PFNGLFRAMEBUFFERRENDERBUFFERPROC             glFramebufferRenderbuffer;
1001   PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv;
1002   PFNGLGENERATEMIPMAPPROC                      glGenerateMipmap;
1003   PFNGLBLITFRAMEBUFFERPROC                     glBlitFramebuffer;
1004   PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC      glRenderbufferStorageMultisample;
1005   PFNGLFRAMEBUFFERTEXTURELAYERPROC             glFramebufferTextureLayer;
1006
1007 public: //! @name GL_ARB_vertex_array_object (added to OpenGL 3.0 core)
1008
1009   PFNGLBINDVERTEXARRAYPROC             glBindVertexArray;
1010   PFNGLDELETEVERTEXARRAYSPROC          glDeleteVertexArrays;
1011   PFNGLGENVERTEXARRAYSPROC             glGenVertexArrays;
1012   PFNGLISVERTEXARRAYPROC               glIsVertexArray;
1013
1014 public: //! @name GL_ARB_map_buffer_range (added to OpenGL 3.0 core)
1015
1016   PFNGLMAPBUFFERRANGEPROC              glMapBufferRange;
1017   PFNGLFLUSHMAPPEDBUFFERRANGEPROC      glFlushMappedBufferRange;
1018
1019 public: //! @name OpenGL 3.0
1020
1021   PFNGLCOLORMASKIPROC                  glColorMaski;
1022   PFNGLGETBOOLEANI_VPROC               glGetBooleani_v;
1023   PFNGLGETINTEGERI_VPROC               glGetIntegeri_v;
1024   PFNGLENABLEIPROC                     glEnablei;
1025   PFNGLDISABLEIPROC                    glDisablei;
1026   PFNGLISENABLEDIPROC                  glIsEnabledi;
1027   PFNGLBEGINTRANSFORMFEEDBACKPROC      glBeginTransformFeedback;
1028   PFNGLENDTRANSFORMFEEDBACKPROC        glEndTransformFeedback;
1029   PFNGLBINDBUFFERRANGEPROC             glBindBufferRange;
1030   PFNGLBINDBUFFERBASEPROC              glBindBufferBase;
1031   PFNGLTRANSFORMFEEDBACKVARYINGSPROC   glTransformFeedbackVaryings;
1032   PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glGetTransformFeedbackVarying;
1033   PFNGLCLAMPCOLORPROC                  glClampColor;
1034   PFNGLBEGINCONDITIONALRENDERPROC      glBeginConditionalRender;
1035   PFNGLENDCONDITIONALRENDERPROC        glEndConditionalRender;
1036   PFNGLVERTEXATTRIBIPOINTERPROC        glVertexAttribIPointer;
1037   PFNGLGETVERTEXATTRIBIIVPROC          glGetVertexAttribIiv;
1038   PFNGLGETVERTEXATTRIBIUIVPROC         glGetVertexAttribIuiv;
1039   PFNGLVERTEXATTRIBI1IPROC             glVertexAttribI1i;
1040   PFNGLVERTEXATTRIBI2IPROC             glVertexAttribI2i;
1041   PFNGLVERTEXATTRIBI3IPROC             glVertexAttribI3i;
1042   PFNGLVERTEXATTRIBI4IPROC             glVertexAttribI4i;
1043   PFNGLVERTEXATTRIBI1UIPROC            glVertexAttribI1ui;
1044   PFNGLVERTEXATTRIBI2UIPROC            glVertexAttribI2ui;
1045   PFNGLVERTEXATTRIBI3UIPROC            glVertexAttribI3ui;
1046   PFNGLVERTEXATTRIBI4UIPROC            glVertexAttribI4ui;
1047   PFNGLVERTEXATTRIBI1IVPROC            glVertexAttribI1iv;
1048   PFNGLVERTEXATTRIBI2IVPROC            glVertexAttribI2iv;
1049   PFNGLVERTEXATTRIBI3IVPROC            glVertexAttribI3iv;
1050   PFNGLVERTEXATTRIBI4IVPROC            glVertexAttribI4iv;
1051   PFNGLVERTEXATTRIBI1UIVPROC           glVertexAttribI1uiv;
1052   PFNGLVERTEXATTRIBI2UIVPROC           glVertexAttribI2uiv;
1053   PFNGLVERTEXATTRIBI3UIVPROC           glVertexAttribI3uiv;
1054   PFNGLVERTEXATTRIBI4UIVPROC           glVertexAttribI4uiv;
1055   PFNGLVERTEXATTRIBI4BVPROC            glVertexAttribI4bv;
1056   PFNGLVERTEXATTRIBI4SVPROC            glVertexAttribI4sv;
1057   PFNGLVERTEXATTRIBI4UBVPROC           glVertexAttribI4ubv;
1058   PFNGLVERTEXATTRIBI4USVPROC           glVertexAttribI4usv;
1059   PFNGLGETUNIFORMUIVPROC               glGetUniformuiv;
1060   PFNGLBINDFRAGDATALOCATIONPROC        glBindFragDataLocation;
1061   PFNGLGETFRAGDATALOCATIONPROC         glGetFragDataLocation;
1062   PFNGLUNIFORM1UIPROC                  glUniform1ui;
1063   PFNGLUNIFORM2UIPROC                  glUniform2ui;
1064   PFNGLUNIFORM3UIPROC                  glUniform3ui;
1065   PFNGLUNIFORM4UIPROC                  glUniform4ui;
1066   PFNGLUNIFORM1UIVPROC                 glUniform1uiv;
1067   PFNGLUNIFORM2UIVPROC                 glUniform2uiv;
1068   PFNGLUNIFORM3UIVPROC                 glUniform3uiv;
1069   PFNGLUNIFORM4UIVPROC                 glUniform4uiv;
1070   PFNGLTEXPARAMETERIIVPROC             glTexParameterIiv;
1071   PFNGLTEXPARAMETERIUIVPROC            glTexParameterIuiv;
1072   PFNGLGETTEXPARAMETERIIVPROC          glGetTexParameterIiv;
1073   PFNGLGETTEXPARAMETERIUIVPROC         glGetTexParameterIuiv;
1074   PFNGLCLEARBUFFERIVPROC               glClearBufferiv;
1075   PFNGLCLEARBUFFERUIVPROC              glClearBufferuiv;
1076   PFNGLCLEARBUFFERFVPROC               glClearBufferfv;
1077   PFNGLCLEARBUFFERFIPROC               glClearBufferfi;
1078   PFNGLGETSTRINGIPROC                  glGetStringi;
1079
1080 public: //! @name GL_ARB_uniform_buffer_object (added to OpenGL 3.1 core)
1081
1082   PFNGLGETUNIFORMINDICESPROC           glGetUniformIndices;
1083   PFNGLGETACTIVEUNIFORMSIVPROC         glGetActiveUniformsiv;
1084   PFNGLGETACTIVEUNIFORMNAMEPROC        glGetActiveUniformName;
1085   PFNGLGETUNIFORMBLOCKINDEXPROC        glGetUniformBlockIndex;
1086   PFNGLGETACTIVEUNIFORMBLOCKIVPROC     glGetActiveUniformBlockiv;
1087   PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC   glGetActiveUniformBlockName;
1088   PFNGLUNIFORMBLOCKBINDINGPROC         glUniformBlockBinding;
1089
1090 public: //! @name GL_ARB_copy_buffer (added to OpenGL 3.1 core)
1091
1092   PFNGLCOPYBUFFERSUBDATAPROC           glCopyBufferSubData;
1093
1094 public: //! @name OpenGL 3.1
1095
1096   PFNGLDRAWARRAYSINSTANCEDPROC         glDrawArraysInstanced;
1097   PFNGLDRAWELEMENTSINSTANCEDPROC       glDrawElementsInstanced;
1098   PFNGLTEXBUFFERPROC                   glTexBuffer;
1099   PFNGLPRIMITIVERESTARTINDEXPROC       glPrimitiveRestartIndex;
1100
1101 public: //! @name GL_ARB_draw_elements_base_vertex (added to OpenGL 3.2 core)
1102
1103   PFNGLDRAWELEMENTSBASEVERTEXPROC      glDrawElementsBaseVertex;
1104   PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glDrawRangeElementsBaseVertex;
1105   PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertex;
1106   PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glMultiDrawElementsBaseVertex;
1107
1108 public: //! @name GL_ARB_provoking_vertex (added to OpenGL 3.2 core)
1109
1110   PFNGLPROVOKINGVERTEXPROC             glProvokingVertex;
1111
1112 public: //! @name GL_ARB_sync (added to OpenGL 3.2 core)
1113
1114   PFNGLFENCESYNCPROC                   glFenceSync;
1115   PFNGLISSYNCPROC                      glIsSync;
1116   PFNGLDELETESYNCPROC                  glDeleteSync;
1117   PFNGLCLIENTWAITSYNCPROC              glClientWaitSync;
1118   PFNGLWAITSYNCPROC                    glWaitSync;
1119   PFNGLGETINTEGER64VPROC               glGetInteger64v;
1120   PFNGLGETSYNCIVPROC                   glGetSynciv;
1121
1122 public: //! @name GL_ARB_texture_multisample (added to OpenGL 3.2 core)
1123
1124   PFNGLTEXIMAGE2DMULTISAMPLEPROC       glTexImage2DMultisample;
1125   PFNGLTEXIMAGE3DMULTISAMPLEPROC       glTexImage3DMultisample;
1126   PFNGLGETMULTISAMPLEFVPROC            glGetMultisamplefv;
1127   PFNGLSAMPLEMASKIPROC                 glSampleMaski;
1128
1129 public: //! @name OpenGL 3.2
1130
1131   PFNGLGETINTEGER64I_VPROC             glGetInteger64i_v;
1132   PFNGLGETBUFFERPARAMETERI64VPROC      glGetBufferParameteri64v;
1133   PFNGLFRAMEBUFFERTEXTUREPROC          glFramebufferTexture;
1134
1135 public: //! @name GL_ARB_blend_func_extended (added to OpenGL 3.3 core)
1136
1137   PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glBindFragDataLocationIndexed;
1138   PFNGLGETFRAGDATAINDEXPROC            glGetFragDataIndex;
1139
1140 public: //! @name GL_ARB_sampler_objects (added to OpenGL 3.3 core)
1141
1142   PFNGLGENSAMPLERSPROC                 glGenSamplers;
1143   PFNGLDELETESAMPLERSPROC              glDeleteSamplers;
1144   PFNGLISSAMPLERPROC                   glIsSampler;
1145   PFNGLBINDSAMPLERPROC                 glBindSampler;
1146   PFNGLSAMPLERPARAMETERIPROC           glSamplerParameteri;
1147   PFNGLSAMPLERPARAMETERIVPROC          glSamplerParameteriv;
1148   PFNGLSAMPLERPARAMETERFPROC           glSamplerParameterf;
1149   PFNGLSAMPLERPARAMETERFVPROC          glSamplerParameterfv;
1150   PFNGLSAMPLERPARAMETERIIVPROC         glSamplerParameterIiv;
1151   PFNGLSAMPLERPARAMETERIUIVPROC        glSamplerParameterIuiv;
1152   PFNGLGETSAMPLERPARAMETERIVPROC       glGetSamplerParameteriv;
1153   PFNGLGETSAMPLERPARAMETERIIVPROC      glGetSamplerParameterIiv;
1154   PFNGLGETSAMPLERPARAMETERFVPROC       glGetSamplerParameterfv;
1155   PFNGLGETSAMPLERPARAMETERIUIVPROC     glGetSamplerParameterIuiv;
1156
1157 public: //! @name GL_ARB_timer_query (added to OpenGL 3.3 core)
1158
1159   PFNGLQUERYCOUNTERPROC                glQueryCounter;
1160   PFNGLGETQUERYOBJECTI64VPROC          glGetQueryObjecti64v;
1161   PFNGLGETQUERYOBJECTUI64VPROC         glGetQueryObjectui64v;
1162
1163 public: //! @name GL_ARB_vertex_type_2_10_10_10_rev (added to OpenGL 3.3 core)
1164
1165   PFNGLVERTEXP2UIPROC                  glVertexP2ui;
1166   PFNGLVERTEXP2UIVPROC                 glVertexP2uiv;
1167   PFNGLVERTEXP3UIPROC                  glVertexP3ui;
1168   PFNGLVERTEXP3UIVPROC                 glVertexP3uiv;
1169   PFNGLVERTEXP4UIPROC                  glVertexP4ui;
1170   PFNGLVERTEXP4UIVPROC                 glVertexP4uiv;
1171   PFNGLTEXCOORDP1UIPROC                glTexCoordP1ui;
1172   PFNGLTEXCOORDP1UIVPROC               glTexCoordP1uiv;
1173   PFNGLTEXCOORDP2UIPROC                glTexCoordP2ui;
1174   PFNGLTEXCOORDP2UIVPROC               glTexCoordP2uiv;
1175   PFNGLTEXCOORDP3UIPROC                glTexCoordP3ui;
1176   PFNGLTEXCOORDP3UIVPROC               glTexCoordP3uiv;
1177   PFNGLTEXCOORDP4UIPROC                glTexCoordP4ui;
1178   PFNGLTEXCOORDP4UIVPROC               glTexCoordP4uiv;
1179   PFNGLMULTITEXCOORDP1UIPROC           glMultiTexCoordP1ui;
1180   PFNGLMULTITEXCOORDP1UIVPROC          glMultiTexCoordP1uiv;
1181   PFNGLMULTITEXCOORDP2UIPROC           glMultiTexCoordP2ui;
1182   PFNGLMULTITEXCOORDP2UIVPROC          glMultiTexCoordP2uiv;
1183   PFNGLMULTITEXCOORDP3UIPROC           glMultiTexCoordP3ui;
1184   PFNGLMULTITEXCOORDP3UIVPROC          glMultiTexCoordP3uiv;
1185   PFNGLMULTITEXCOORDP4UIPROC           glMultiTexCoordP4ui;
1186   PFNGLMULTITEXCOORDP4UIVPROC          glMultiTexCoordP4uiv;
1187   PFNGLNORMALP3UIPROC                  glNormalP3ui;
1188   PFNGLNORMALP3UIVPROC                 glNormalP3uiv;
1189   PFNGLCOLORP3UIPROC                   glColorP3ui;
1190   PFNGLCOLORP3UIVPROC                  glColorP3uiv;
1191   PFNGLCOLORP4UIPROC                   glColorP4ui;
1192   PFNGLCOLORP4UIVPROC                  glColorP4uiv;
1193   PFNGLSECONDARYCOLORP3UIPROC          glSecondaryColorP3ui;
1194   PFNGLSECONDARYCOLORP3UIVPROC         glSecondaryColorP3uiv;
1195   PFNGLVERTEXATTRIBP1UIPROC            glVertexAttribP1ui;
1196   PFNGLVERTEXATTRIBP1UIVPROC           glVertexAttribP1uiv;
1197   PFNGLVERTEXATTRIBP2UIPROC            glVertexAttribP2ui;
1198   PFNGLVERTEXATTRIBP2UIVPROC           glVertexAttribP2uiv;
1199   PFNGLVERTEXATTRIBP3UIPROC            glVertexAttribP3ui;
1200   PFNGLVERTEXATTRIBP3UIVPROC           glVertexAttribP3uiv;
1201   PFNGLVERTEXATTRIBP4UIPROC            glVertexAttribP4ui;
1202   PFNGLVERTEXATTRIBP4UIVPROC           glVertexAttribP4uiv;
1203
1204 public: //! @name OpenGL 3.3
1205
1206   PFNGLVERTEXATTRIBDIVISORPROC         glVertexAttribDivisor;
1207
1208 public: //! @name GL_ARB_draw_indirect (added to OpenGL 4.0 core)
1209
1210   PFNGLDRAWARRAYSINDIRECTPROC          glDrawArraysIndirect;
1211   PFNGLDRAWELEMENTSINDIRECTPROC        glDrawElementsIndirect;
1212
1213 public: //! @name GL_ARB_gpu_shader_fp64 (added to OpenGL 4.0 core)
1214
1215   PFNGLUNIFORM1DPROC                   glUniform1d;
1216   PFNGLUNIFORM2DPROC                   glUniform2d;
1217   PFNGLUNIFORM3DPROC                   glUniform3d;
1218   PFNGLUNIFORM4DPROC                   glUniform4d;
1219   PFNGLUNIFORM1DVPROC                  glUniform1dv;
1220   PFNGLUNIFORM2DVPROC                  glUniform2dv;
1221   PFNGLUNIFORM3DVPROC                  glUniform3dv;
1222   PFNGLUNIFORM4DVPROC                  glUniform4dv;
1223   PFNGLUNIFORMMATRIX2DVPROC            glUniformMatrix2dv;
1224   PFNGLUNIFORMMATRIX3DVPROC            glUniformMatrix3dv;
1225   PFNGLUNIFORMMATRIX4DVPROC            glUniformMatrix4dv;
1226   PFNGLUNIFORMMATRIX2X3DVPROC          glUniformMatrix2x3dv;
1227   PFNGLUNIFORMMATRIX2X4DVPROC          glUniformMatrix2x4dv;
1228   PFNGLUNIFORMMATRIX3X2DVPROC          glUniformMatrix3x2dv;
1229   PFNGLUNIFORMMATRIX3X4DVPROC          glUniformMatrix3x4dv;
1230   PFNGLUNIFORMMATRIX4X2DVPROC          glUniformMatrix4x2dv;
1231   PFNGLUNIFORMMATRIX4X3DVPROC          glUniformMatrix4x3dv;
1232   PFNGLGETUNIFORMDVPROC                glGetUniformdv;
1233
1234 public: //! @name GL_ARB_shader_subroutine (added to OpenGL 4.0 core)
1235
1236   PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC   glGetSubroutineUniformLocation;
1237   PFNGLGETSUBROUTINEINDEXPROC             glGetSubroutineIndex;
1238   PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC   glGetActiveSubroutineUniformiv;
1239   PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glGetActiveSubroutineUniformName;
1240   PFNGLGETACTIVESUBROUTINENAMEPROC        glGetActiveSubroutineName;
1241   PFNGLUNIFORMSUBROUTINESUIVPROC          glUniformSubroutinesuiv;
1242   PFNGLGETUNIFORMSUBROUTINEUIVPROC        glGetUniformSubroutineuiv;
1243   PFNGLGETPROGRAMSTAGEIVPROC              glGetProgramStageiv;
1244
1245 public: //! @name GL_ARB_tessellation_shader (added to OpenGL 4.0 core)
1246
1247   PFNGLPATCHPARAMETERIPROC             glPatchParameteri;
1248   PFNGLPATCHPARAMETERFVPROC            glPatchParameterfv;
1249
1250 public: //! @name GL_ARB_transform_feedback2 (added to OpenGL 4.0 core)
1251
1252   PFNGLBINDTRANSFORMFEEDBACKPROC       glBindTransformFeedback;
1253   PFNGLDELETETRANSFORMFEEDBACKSPROC    glDeleteTransformFeedbacks;
1254   PFNGLGENTRANSFORMFEEDBACKSPROC       glGenTransformFeedbacks;
1255   PFNGLISTRANSFORMFEEDBACKPROC         glIsTransformFeedback;
1256   PFNGLPAUSETRANSFORMFEEDBACKPROC      glPauseTransformFeedback;
1257   PFNGLRESUMETRANSFORMFEEDBACKPROC     glResumeTransformFeedback;
1258   PFNGLDRAWTRANSFORMFEEDBACKPROC       glDrawTransformFeedback;
1259
1260 public: //! @name GL_ARB_transform_feedback3 (added to OpenGL 4.0 core)
1261
1262   PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glDrawTransformFeedbackStream;
1263   PFNGLBEGINQUERYINDEXEDPROC           glBeginQueryIndexed;
1264   PFNGLENDQUERYINDEXEDPROC             glEndQueryIndexed;
1265   PFNGLGETQUERYINDEXEDIVPROC           glGetQueryIndexediv;
1266
1267 public: //! @name OpenGL 4.0
1268
1269   PFNGLMINSAMPLESHADINGPROC            glMinSampleShading;
1270   PFNGLBLENDEQUATIONIPROC              glBlendEquationi;
1271   PFNGLBLENDEQUATIONSEPARATEIPROC      glBlendEquationSeparatei;
1272   PFNGLBLENDFUNCIPROC                  glBlendFunci;
1273   PFNGLBLENDFUNCSEPARATEIPROC          glBlendFuncSeparatei;
1274
1275 public: //! @name GL_ARB_ES2_compatibility (added to OpenGL 4.1 core)
1276
1277   PFNGLRELEASESHADERCOMPILERPROC       glReleaseShaderCompiler;
1278   PFNGLSHADERBINARYPROC                glShaderBinary;
1279   PFNGLGETSHADERPRECISIONFORMATPROC    glGetShaderPrecisionFormat;
1280   PFNGLDEPTHRANGEFPROC                 glDepthRangef;
1281   PFNGLCLEARDEPTHFPROC                 glClearDepthf;
1282
1283 public: //! @name GL_ARB_get_program_binary (added to OpenGL 4.1 core)
1284
1285   PFNGLGETPROGRAMBINARYPROC            glGetProgramBinary;
1286   PFNGLPROGRAMBINARYPROC               glProgramBinary;
1287   PFNGLPROGRAMPARAMETERIPROC           glProgramParameteri;
1288
1289 public: //! @name GL_ARB_separate_shader_objects (added to OpenGL 4.1 core)
1290
1291   PFNGLUSEPROGRAMSTAGESPROC            glUseProgramStages;
1292   PFNGLACTIVESHADERPROGRAMPROC         glActiveShaderProgram;
1293   PFNGLCREATESHADERPROGRAMVPROC        glCreateShaderProgramv;
1294   PFNGLBINDPROGRAMPIPELINEPROC         glBindProgramPipeline;
1295   PFNGLDELETEPROGRAMPIPELINESPROC      glDeleteProgramPipelines;
1296   PFNGLGENPROGRAMPIPELINESPROC         glGenProgramPipelines;
1297   PFNGLISPROGRAMPIPELINEPROC           glIsProgramPipeline;
1298   PFNGLGETPROGRAMPIPELINEIVPROC        glGetProgramPipelineiv;
1299   PFNGLPROGRAMUNIFORM1IPROC            glProgramUniform1i;
1300   PFNGLPROGRAMUNIFORM1IVPROC           glProgramUniform1iv;
1301   PFNGLPROGRAMUNIFORM1FPROC            glProgramUniform1f;
1302   PFNGLPROGRAMUNIFORM1FVPROC           glProgramUniform1fv;
1303   PFNGLPROGRAMUNIFORM1DPROC            glProgramUniform1d;
1304   PFNGLPROGRAMUNIFORM1DVPROC           glProgramUniform1dv;
1305   PFNGLPROGRAMUNIFORM1UIPROC           glProgramUniform1ui;
1306   PFNGLPROGRAMUNIFORM1UIVPROC          glProgramUniform1uiv;
1307   PFNGLPROGRAMUNIFORM2IPROC            glProgramUniform2i;
1308   PFNGLPROGRAMUNIFORM2IVPROC           glProgramUniform2iv;
1309   PFNGLPROGRAMUNIFORM2FPROC            glProgramUniform2f;
1310   PFNGLPROGRAMUNIFORM2FVPROC           glProgramUniform2fv;
1311   PFNGLPROGRAMUNIFORM2DPROC            glProgramUniform2d;
1312   PFNGLPROGRAMUNIFORM2DVPROC           glProgramUniform2dv;
1313   PFNGLPROGRAMUNIFORM2UIPROC           glProgramUniform2ui;
1314   PFNGLPROGRAMUNIFORM2UIVPROC          glProgramUniform2uiv;
1315   PFNGLPROGRAMUNIFORM3IPROC            glProgramUniform3i;
1316   PFNGLPROGRAMUNIFORM3IVPROC           glProgramUniform3iv;
1317   PFNGLPROGRAMUNIFORM3FPROC            glProgramUniform3f;
1318   PFNGLPROGRAMUNIFORM3FVPROC           glProgramUniform3fv;
1319   PFNGLPROGRAMUNIFORM3DPROC            glProgramUniform3d;
1320   PFNGLPROGRAMUNIFORM3DVPROC           glProgramUniform3dv;
1321   PFNGLPROGRAMUNIFORM3UIPROC           glProgramUniform3ui;
1322   PFNGLPROGRAMUNIFORM3UIVPROC          glProgramUniform3uiv;
1323   PFNGLPROGRAMUNIFORM4IPROC            glProgramUniform4i;
1324   PFNGLPROGRAMUNIFORM4IVPROC           glProgramUniform4iv;
1325   PFNGLPROGRAMUNIFORM4FPROC            glProgramUniform4f;
1326   PFNGLPROGRAMUNIFORM4FVPROC           glProgramUniform4fv;
1327   PFNGLPROGRAMUNIFORM4DPROC            glProgramUniform4d;
1328   PFNGLPROGRAMUNIFORM4DVPROC           glProgramUniform4dv;
1329   PFNGLPROGRAMUNIFORM4UIPROC           glProgramUniform4ui;
1330   PFNGLPROGRAMUNIFORM4UIVPROC          glProgramUniform4uiv;
1331   PFNGLPROGRAMUNIFORMMATRIX2FVPROC     glProgramUniformMatrix2fv;
1332   PFNGLPROGRAMUNIFORMMATRIX3FVPROC     glProgramUniformMatrix3fv;
1333   PFNGLPROGRAMUNIFORMMATRIX4FVPROC     glProgramUniformMatrix4fv;
1334   PFNGLPROGRAMUNIFORMMATRIX2DVPROC     glProgramUniformMatrix2dv;
1335   PFNGLPROGRAMUNIFORMMATRIX3DVPROC     glProgramUniformMatrix3dv;
1336   PFNGLPROGRAMUNIFORMMATRIX4DVPROC     glProgramUniformMatrix4dv;
1337   PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC   glProgramUniformMatrix2x3fv;
1338   PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC   glProgramUniformMatrix3x2fv;
1339   PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC   glProgramUniformMatrix2x4fv;
1340   PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC   glProgramUniformMatrix4x2fv;
1341   PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC   glProgramUniformMatrix3x4fv;
1342   PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC   glProgramUniformMatrix4x3fv;
1343   PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC   glProgramUniformMatrix2x3dv;
1344   PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC   glProgramUniformMatrix3x2dv;
1345   PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC   glProgramUniformMatrix2x4dv;
1346   PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC   glProgramUniformMatrix4x2dv;
1347   PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC   glProgramUniformMatrix3x4dv;
1348   PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC   glProgramUniformMatrix4x3dv;
1349   PFNGLVALIDATEPROGRAMPIPELINEPROC     glValidateProgramPipeline;
1350   PFNGLGETPROGRAMPIPELINEINFOLOGPROC   glGetProgramPipelineInfoLog;
1351
1352 public: //! @name GL_ARB_vertex_attrib_64bit (added to OpenGL 4.1 core)
1353
1354   PFNGLVERTEXATTRIBL1DPROC             glVertexAttribL1d;
1355   PFNGLVERTEXATTRIBL2DPROC             glVertexAttribL2d;
1356   PFNGLVERTEXATTRIBL3DPROC             glVertexAttribL3d;
1357   PFNGLVERTEXATTRIBL4DPROC             glVertexAttribL4d;
1358   PFNGLVERTEXATTRIBL1DVPROC            glVertexAttribL1dv;
1359   PFNGLVERTEXATTRIBL2DVPROC            glVertexAttribL2dv;
1360   PFNGLVERTEXATTRIBL3DVPROC            glVertexAttribL3dv;
1361   PFNGLVERTEXATTRIBL4DVPROC            glVertexAttribL4dv;
1362   PFNGLVERTEXATTRIBLPOINTERPROC        glVertexAttribLPointer;
1363   PFNGLGETVERTEXATTRIBLDVPROC          glGetVertexAttribLdv;
1364
1365 public: //! @name GL_ARB_viewport_array (added to OpenGL 4.1 core)
1366
1367   PFNGLVIEWPORTARRAYVPROC              glViewportArrayv;
1368   PFNGLVIEWPORTINDEXEDFPROC            glViewportIndexedf;
1369   PFNGLVIEWPORTINDEXEDFVPROC           glViewportIndexedfv;
1370   PFNGLSCISSORARRAYVPROC               glScissorArrayv;
1371   PFNGLSCISSORINDEXEDPROC              glScissorIndexed;
1372   PFNGLSCISSORINDEXEDVPROC             glScissorIndexedv;
1373   PFNGLDEPTHRANGEARRAYVPROC            glDepthRangeArrayv;
1374   PFNGLDEPTHRANGEINDEXEDPROC           glDepthRangeIndexed;
1375   PFNGLGETFLOATI_VPROC                 glGetFloati_v;
1376   PFNGLGETDOUBLEI_VPROC                glGetDoublei_v;
1377
1378 public: //! @name OpenGL 4.1
1379
1380   //
1381
1382 public: //! @name GL_ARB_base_instance (added to OpenGL 4.2 core)
1383
1384   PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC             glDrawArraysInstancedBaseInstance;
1385   PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC           glDrawElementsInstancedBaseInstance;
1386   PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glDrawElementsInstancedBaseVertexBaseInstance;
1387
1388 public: //! @name GL_ARB_transform_feedback_instanced (added to OpenGL 4.2 core)
1389
1390   PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC              glDrawTransformFeedbackInstanced;
1391   PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC        glDrawTransformFeedbackStreamInstanced;
1392
1393 public: //! @name GL_ARB_internalformat_query (added to OpenGL 4.2 core)
1394
1395   PFNGLGETINTERNALFORMATIVPROC                         glGetInternalformativ;
1396
1397 public: //! @name GL_ARB_shader_atomic_counters (added to OpenGL 4.2 core)
1398
1399   PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC              glGetActiveAtomicCounterBufferiv;
1400
1401 public: //! @name GL_ARB_shader_image_load_store (added to OpenGL 4.2 core)
1402
1403   PFNGLBINDIMAGETEXTUREPROC                            glBindImageTexture;
1404   PFNGLMEMORYBARRIERPROC                               glMemoryBarrier;
1405
1406 public: //! @name GL_ARB_texture_storage (added to OpenGL 4.2 core)
1407
1408   PFNGLTEXSTORAGE1DPROC                                glTexStorage1D;
1409   PFNGLTEXSTORAGE2DPROC                                glTexStorage2D;
1410   PFNGLTEXSTORAGE3DPROC                                glTexStorage3D;
1411
1412 public: //! @name OpenGL 4.2
1413
1414 public: //! @name OpenGL 4.3
1415
1416   PFNGLCLEARBUFFERDATAPROC                 glClearBufferData;
1417   PFNGLCLEARBUFFERSUBDATAPROC              glClearBufferSubData;
1418   PFNGLDISPATCHCOMPUTEPROC                 glDispatchCompute;
1419   PFNGLDISPATCHCOMPUTEINDIRECTPROC         glDispatchComputeIndirect;
1420   PFNGLCOPYIMAGESUBDATAPROC                glCopyImageSubData;
1421   PFNGLFRAMEBUFFERPARAMETERIPROC           glFramebufferParameteri;
1422   PFNGLGETFRAMEBUFFERPARAMETERIVPROC       glGetFramebufferParameteriv;
1423   PFNGLGETINTERNALFORMATI64VPROC           glGetInternalformati64v;
1424   PFNGLINVALIDATETEXSUBIMAGEPROC           glInvalidateTexSubImage;
1425   PFNGLINVALIDATETEXIMAGEPROC              glInvalidateTexImage;
1426   PFNGLINVALIDATEBUFFERSUBDATAPROC         glInvalidateBufferSubData;
1427   PFNGLINVALIDATEBUFFERDATAPROC            glInvalidateBufferData;
1428   PFNGLINVALIDATEFRAMEBUFFERPROC           glInvalidateFramebuffer;
1429   PFNGLINVALIDATESUBFRAMEBUFFERPROC        glInvalidateSubFramebuffer;
1430   PFNGLMULTIDRAWARRAYSINDIRECTPROC         glMultiDrawArraysIndirect;
1431   PFNGLMULTIDRAWELEMENTSINDIRECTPROC       glMultiDrawElementsIndirect;
1432   PFNGLGETPROGRAMINTERFACEIVPROC           glGetProgramInterfaceiv;
1433   PFNGLGETPROGRAMRESOURCEINDEXPROC         glGetProgramResourceIndex;
1434   PFNGLGETPROGRAMRESOURCENAMEPROC          glGetProgramResourceName;
1435   PFNGLGETPROGRAMRESOURCEIVPROC            glGetProgramResourceiv;
1436   PFNGLGETPROGRAMRESOURCELOCATIONPROC      glGetProgramResourceLocation;
1437   PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glGetProgramResourceLocationIndex;
1438   PFNGLSHADERSTORAGEBLOCKBINDINGPROC       glShaderStorageBlockBinding;
1439   PFNGLTEXBUFFERRANGEPROC                  glTexBufferRange;
1440   PFNGLTEXSTORAGE2DMULTISAMPLEPROC         glTexStorage2DMultisample;
1441   PFNGLTEXSTORAGE3DMULTISAMPLEPROC         glTexStorage3DMultisample;
1442   PFNGLTEXTUREVIEWPROC                     glTextureView;
1443   PFNGLBINDVERTEXBUFFERPROC                glBindVertexBuffer;
1444   PFNGLVERTEXATTRIBFORMATPROC              glVertexAttribFormat;
1445   PFNGLVERTEXATTRIBIFORMATPROC             glVertexAttribIFormat;
1446   PFNGLVERTEXATTRIBLFORMATPROC             glVertexAttribLFormat;
1447   PFNGLVERTEXATTRIBBINDINGPROC             glVertexAttribBinding;
1448   PFNGLVERTEXBINDINGDIVISORPROC            glVertexBindingDivisor;
1449   PFNGLDEBUGMESSAGECONTROLPROC             glDebugMessageControl;
1450   PFNGLDEBUGMESSAGEINSERTPROC              glDebugMessageInsert;
1451   PFNGLDEBUGMESSAGECALLBACKPROC            glDebugMessageCallback;
1452   PFNGLGETDEBUGMESSAGELOGPROC              glGetDebugMessageLog;
1453   PFNGLPUSHDEBUGGROUPPROC                  glPushDebugGroup;
1454   PFNGLPOPDEBUGGROUPPROC                   glPopDebugGroup;
1455   PFNGLOBJECTLABELPROC                     glObjectLabel;
1456   PFNGLGETOBJECTLABELPROC                  glGetObjectLabel;
1457   PFNGLOBJECTPTRLABELPROC                  glObjectPtrLabel;
1458   PFNGLGETOBJECTPTRLABELPROC               glGetObjectPtrLabel;
1459
1460 public: //! @name OpenGL 4.4
1461
1462   PFNGLBUFFERSTORAGEPROC     glBufferStorage;
1463   PFNGLCLEARTEXIMAGEPROC     glClearTexImage;
1464   PFNGLCLEARTEXSUBIMAGEPROC  glClearTexSubImage;
1465   PFNGLBINDBUFFERSBASEPROC   glBindBuffersBase;
1466   PFNGLBINDBUFFERSRANGEPROC  glBindBuffersRange;
1467   PFNGLBINDTEXTURESPROC      glBindTextures;
1468   PFNGLBINDSAMPLERSPROC      glBindSamplers;
1469   PFNGLBINDIMAGETEXTURESPROC glBindImageTextures;
1470   PFNGLBINDVERTEXBUFFERSPROC glBindVertexBuffers;
1471
1472 public: //! @name GL_EXT_geometry_shader4
1473
1474   PFNGLPROGRAMPARAMETERIEXTPROC glProgramParameteriEXT;
1475
1476 public: //! @name GL_ARB_bindless_texture
1477
1478   PFNGLGETTEXTUREHANDLEARBPROC             glGetTextureHandleARB;
1479   PFNGLGETTEXTURESAMPLERHANDLEARBPROC      glGetTextureSamplerHandleARB;
1480   PFNGLMAKETEXTUREHANDLERESIDENTARBPROC    glMakeTextureHandleResidentARB;
1481   PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC glMakeTextureHandleNonResidentARB;
1482   PFNGLGETIMAGEHANDLEARBPROC               glGetImageHandleARB;
1483   PFNGLMAKEIMAGEHANDLERESIDENTARBPROC      glMakeImageHandleResidentARB;
1484   PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC   glMakeImageHandleNonResidentARB;
1485   PFNGLUNIFORMHANDLEUI64ARBPROC            glUniformHandleui64ARB;
1486   PFNGLUNIFORMHANDLEUI64VARBPROC           glUniformHandleui64vARB;
1487   PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC     glProgramUniformHandleui64ARB;
1488   PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC    glProgramUniformHandleui64vARB;
1489   PFNGLISTEXTUREHANDLERESIDENTARBPROC      glIsTextureHandleResidentARB;
1490   PFNGLISIMAGEHANDLERESIDENTARBPROC        glIsImageHandleResidentARB;
1491   PFNGLVERTEXATTRIBL1UI64ARBPROC           glVertexAttribL1ui64ARB;
1492   PFNGLVERTEXATTRIBL1UI64VARBPROC          glVertexAttribL1ui64vARB;
1493   PFNGLGETVERTEXATTRIBLUI64VARBPROC        glGetVertexAttribLui64vARB;
1494
1495 #if defined(_WIN32)
1496 public: //! @name wgl extensions
1497
1498   typedef const char* (WINAPI *wglGetExtensionsStringARB_t)(HDC theDeviceContext);
1499   wglGetExtensionsStringARB_t wglGetExtensionsStringARB;
1500
1501   typedef BOOL        (WINAPI *wglSwapIntervalEXT_t)(int theInterval);
1502   wglSwapIntervalEXT_t wglSwapIntervalEXT;
1503
1504   // WGL_ARB_pixel_format
1505
1506 #ifndef WGL_NUMBER_PIXEL_FORMATS_ARB
1507   #define WGL_NUMBER_PIXEL_FORMATS_ARB            0x2000
1508   #define WGL_DRAW_TO_WINDOW_ARB                  0x2001
1509   #define WGL_DRAW_TO_BITMAP_ARB                  0x2002
1510   #define WGL_ACCELERATION_ARB                    0x2003
1511   #define WGL_NEED_PALETTE_ARB                    0x2004
1512   #define WGL_NEED_SYSTEM_PALETTE_ARB             0x2005
1513   #define WGL_SWAP_LAYER_BUFFERS_ARB              0x2006
1514   #define WGL_SWAP_METHOD_ARB                     0x2007
1515   #define WGL_NUMBER_OVERLAYS_ARB                 0x2008
1516   #define WGL_NUMBER_UNDERLAYS_ARB                0x2009
1517   #define WGL_TRANSPARENT_ARB                     0x200A
1518   #define WGL_TRANSPARENT_RED_VALUE_ARB           0x2037
1519   #define WGL_TRANSPARENT_GREEN_VALUE_ARB         0x2038
1520   #define WGL_TRANSPARENT_BLUE_VALUE_ARB          0x2039
1521   #define WGL_TRANSPARENT_ALPHA_VALUE_ARB         0x203A
1522   #define WGL_TRANSPARENT_INDEX_VALUE_ARB         0x203B
1523   #define WGL_SHARE_DEPTH_ARB                     0x200C
1524   #define WGL_SHARE_STENCIL_ARB                   0x200D
1525   #define WGL_SHARE_ACCUM_ARB                     0x200E
1526   #define WGL_SUPPORT_GDI_ARB                     0x200F
1527   #define WGL_SUPPORT_OPENGL_ARB                  0x2010
1528   #define WGL_DOUBLE_BUFFER_ARB                   0x2011
1529   #define WGL_STEREO_ARB                          0x2012
1530   #define WGL_PIXEL_TYPE_ARB                      0x2013
1531   #define WGL_COLOR_BITS_ARB                      0x2014
1532   #define WGL_RED_BITS_ARB                        0x2015
1533   #define WGL_RED_SHIFT_ARB                       0x2016
1534   #define WGL_GREEN_BITS_ARB                      0x2017
1535   #define WGL_GREEN_SHIFT_ARB                     0x2018
1536   #define WGL_BLUE_BITS_ARB                       0x2019
1537   #define WGL_BLUE_SHIFT_ARB                      0x201A
1538   #define WGL_ALPHA_BITS_ARB                      0x201B
1539   #define WGL_ALPHA_SHIFT_ARB                     0x201C
1540   #define WGL_ACCUM_BITS_ARB                      0x201D
1541   #define WGL_ACCUM_RED_BITS_ARB                  0x201E
1542   #define WGL_ACCUM_GREEN_BITS_ARB                0x201F
1543   #define WGL_ACCUM_BLUE_BITS_ARB                 0x2020
1544   #define WGL_ACCUM_ALPHA_BITS_ARB                0x2021
1545   #define WGL_DEPTH_BITS_ARB                      0x2022
1546   #define WGL_STENCIL_BITS_ARB                    0x2023
1547   #define WGL_AUX_BUFFERS_ARB                     0x2024
1548
1549   #define WGL_NO_ACCELERATION_ARB                 0x2025
1550   #define WGL_GENERIC_ACCELERATION_ARB            0x2026
1551   #define WGL_FULL_ACCELERATION_ARB               0x2027
1552
1553   #define WGL_SWAP_EXCHANGE_ARB                   0x2028
1554   #define WGL_SWAP_COPY_ARB                       0x2029
1555   #define WGL_SWAP_UNDEFINED_ARB                  0x202A
1556
1557   #define WGL_TYPE_RGBA_ARB                       0x202B
1558   #define WGL_TYPE_COLORINDEX_ARB                 0x202C
1559
1560 #endif // WGL_NUMBER_PIXEL_FORMATS_ARB
1561
1562       // WGL_ARB_multisample
1563 #ifndef WGL_SAMPLE_BUFFERS_ARB
1564   #define WGL_SAMPLE_BUFFERS_ARB               0x2041
1565   #define WGL_SAMPLES_ARB                      0x2042
1566 #endif
1567
1568       // WGL_ARB_create_context_robustness
1569 #ifndef WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB
1570   #define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
1571   #define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
1572   #define WGL_NO_RESET_NOTIFICATION_ARB               0x8261
1573   #define WGL_LOSE_CONTEXT_ON_RESET_ARB               0x8252
1574 #endif
1575
1576   typedef BOOL (WINAPI *wglChoosePixelFormatARB_t)
1577       (HDC           theDevCtx,
1578        const int*    theIntAttribs,
1579        const float*  theFloatAttribs,
1580        unsigned int  theMaxFormats,
1581        int*          theFormatsOut,
1582        unsigned int* theNumFormatsOut);
1583   wglChoosePixelFormatARB_t wglChoosePixelFormatARB;
1584
1585   // WGL_ARB_create_context_profile
1586
1587 #ifndef WGL_CONTEXT_MAJOR_VERSION_ARB
1588   #define WGL_CONTEXT_MAJOR_VERSION_ARB           0x2091
1589   #define WGL_CONTEXT_MINOR_VERSION_ARB           0x2092
1590   #define WGL_CONTEXT_LAYER_PLANE_ARB             0x2093
1591   #define WGL_CONTEXT_FLAGS_ARB                   0x2094
1592   #define WGL_CONTEXT_PROFILE_MASK_ARB            0x9126
1593
1594   // WGL_CONTEXT_FLAGS bits
1595   #define WGL_CONTEXT_DEBUG_BIT_ARB               0x0001
1596   #define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB  0x0002
1597
1598   // WGL_CONTEXT_PROFILE_MASK_ARB bits
1599   #define WGL_CONTEXT_CORE_PROFILE_BIT_ARB          0x00000001
1600   #define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
1601 #endif // WGL_CONTEXT_MAJOR_VERSION_ARB
1602
1603   typedef HGLRC (WINAPI *wglCreateContextAttribsARB_t)(HDC        theDevCtx,
1604                                                        HGLRC      theShareContext,
1605                                                        const int* theAttribs);
1606   wglCreateContextAttribsARB_t wglCreateContextAttribsARB;
1607
1608   // WGL_NV_DX_interop
1609
1610   typedef BOOL   (WINAPI *wglDXSetResourceShareHandleNV_t)(void* theObjectD3d, HANDLE theShareHandle);
1611   typedef HANDLE (WINAPI *wglDXOpenDeviceNV_t      )(void*   theDeviceD3d);
1612   typedef BOOL   (WINAPI *wglDXCloseDeviceNV_t     )(HANDLE  theDeviceIOP);
1613   typedef HANDLE (WINAPI *wglDXRegisterObjectNV_t  )(HANDLE  theDeviceIOP,
1614                                                      void*   theObjectD3d,
1615                                                      GLuint  theName,
1616                                                      GLenum  theType,
1617                                                      GLenum  theAccess);
1618   typedef BOOL   (WINAPI *wglDXUnregisterObjectNV_t)(HANDLE  theDeviceIOP,
1619                                                      HANDLE  theObject);
1620   typedef BOOL   (WINAPI *wglDXObjectAccessNV_t    )(HANDLE  theObject,
1621                                                      GLenum  theAccess);
1622   typedef BOOL   (WINAPI *wglDXLockObjectsNV_t     )(HANDLE  theDeviceIOP,
1623                                                      GLint   theCount,
1624                                                      HANDLE* theObjects);
1625   typedef BOOL   (WINAPI *wglDXUnlockObjectsNV_t   )(HANDLE  theDeviceIOP,
1626                                                      GLint   theCount,
1627                                                      HANDLE* theObjects);
1628
1629   wglDXSetResourceShareHandleNV_t wglDXSetResourceShareHandleNV;
1630   wglDXOpenDeviceNV_t       wglDXOpenDeviceNV;
1631   wglDXCloseDeviceNV_t      wglDXCloseDeviceNV;
1632   wglDXRegisterObjectNV_t   wglDXRegisterObjectNV;
1633   wglDXUnregisterObjectNV_t wglDXUnregisterObjectNV;
1634   wglDXObjectAccessNV_t     wglDXObjectAccessNV;
1635   wglDXLockObjectsNV_t      wglDXLockObjectsNV;
1636   wglDXUnlockObjectsNV_t    wglDXUnlockObjectsNV;
1637
1638 #ifndef WGL_ACCESS_READ_WRITE_NV
1639   #define WGL_ACCESS_READ_ONLY_NV     0x0000
1640   #define WGL_ACCESS_READ_WRITE_NV    0x0001
1641   #define WGL_ACCESS_WRITE_DISCARD_NV 0x0002
1642 #endif
1643
1644 #elif defined(__APPLE__)
1645 public: //! @name CGL extensions
1646
1647 #else
1648 public: //! @name glX extensions
1649
1650   // GLX_EXT_swap_control
1651   //typedef int         (*glXSwapIntervalEXT_t)(Display* theDisplay, GLXDrawable theDrawable, int theInterval);
1652   typedef int         (*glXSwapIntervalEXT_t)();
1653   glXSwapIntervalEXT_t glXSwapIntervalEXT;
1654
1655   typedef int         (*glXSwapIntervalSGI_t)(int theInterval);
1656   glXSwapIntervalSGI_t glXSwapIntervalSGI;
1657
1658   // GLX_MESA_query_renderer
1659 #ifndef GLX_RENDERER_VENDOR_ID_MESA
1660   // for glXQueryRendererIntegerMESA() and glXQueryCurrentRendererIntegerMESA()
1661   #define GLX_RENDERER_VENDOR_ID_MESA                      0x8183
1662   #define GLX_RENDERER_DEVICE_ID_MESA                      0x8184
1663   #define GLX_RENDERER_VERSION_MESA                        0x8185
1664   #define GLX_RENDERER_ACCELERATED_MESA                    0x8186
1665   #define GLX_RENDERER_VIDEO_MEMORY_MESA                   0x8187
1666   #define GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA    0x8188
1667   #define GLX_RENDERER_PREFERRED_PROFILE_MESA              0x8189
1668   #define GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA    0x818A
1669   #define GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA 0x818B
1670   #define GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA      0x818C
1671   #define GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA     0x818D
1672
1673   #define GLX_RENDERER_ID_MESA                             0x818E
1674 #endif // GLX_RENDERER_VENDOR_ID_MESA
1675
1676   typedef Bool (*glXQueryRendererIntegerMESA_t)(Display* theDisplay, int theScreen,
1677                                                 int theRenderer, int theAttribute,
1678                                                 unsigned int* theValue);
1679   typedef Bool (*glXQueryCurrentRendererIntegerMESA_t)(int theAttribute, unsigned int* theValue);
1680   typedef const char* (*glXQueryRendererStringMESA_t)(Display* theDisplay, int theScreen,
1681                                                       int theRenderer, int theAttribute);
1682   typedef const char* (*glXQueryCurrentRendererStringMESA_t)(int theAttribute);
1683
1684   glXQueryRendererIntegerMESA_t        glXQueryRendererIntegerMESA;
1685   glXQueryCurrentRendererIntegerMESA_t glXQueryCurrentRendererIntegerMESA;
1686   glXQueryRendererStringMESA_t         glXQueryRendererStringMESA;
1687   glXQueryCurrentRendererStringMESA_t  glXQueryCurrentRendererStringMESA;
1688 #endif
1689
1690 #endif // OpenGL ES vs. desktop
1691
1692 };
1693
1694 #endif // _OpenGl_GlFunctions_Header