0031583: Visualization, OpenGl_Context - load OpenGL ES 3.0 functions
[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 #ifndef GL_GLEXT_LEGACY
40   #define GL_GLEXT_LEGACY
41 #endif
42 #ifndef GLX_GLXEXT_LEGACY
43   #define GLX_GLXEXT_LEGACY
44 #endif
45
46 // include main OpenGL header provided with system
47 #if defined(__APPLE__)
48   #import <TargetConditionals.h>
49   // macOS 10.4 deprecated OpenGL framework - suppress useless warnings
50   #define GL_SILENCE_DEPRECATION
51   #if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
52     #include <OpenGLES/ES3/gl.h>
53   #else
54     #include <OpenGL/gl.h>
55   #endif
56   #define __X_GL_H // prevent chaotic gl.h inclusions to avoid compile errors
57 #elif defined(HAVE_GLES2) || defined(OCCT_UWP) || defined(__ANDROID__) || defined(__QNX__) || defined(__EMSCRIPTEN__)
58   #if defined(_WIN32)
59     // Angle OpenGL ES headers do not define function prototypes even for core functions,
60     // however OCCT is expected to be linked against libGLESv2
61     #define GL_GLEXT_PROTOTYPES
62   #endif
63   #include <GLES3/gl3.h>
64 #else
65   #include <GL/gl.h>
66 #endif
67
68 #if !defined(HAVE_EGL) && (defined(__ANDROID__) || defined(__QNX__) || defined(__EMSCRIPTEN__) || defined(HAVE_GLES2) || defined(OCCT_UWP))
69   #define HAVE_EGL
70 #endif
71
72 #include <InterfaceGraphic.hxx>
73
74 #if defined(GL_ES_VERSION_2_0)
75   #include <OpenGl_GLESExtensions.hxx>
76 #else
77   // GL version can be defined by system gl.h header
78   #undef GL_VERSION_1_2
79   #undef GL_VERSION_1_3
80   #undef GL_VERSION_1_4
81   #undef GL_VERSION_1_5
82   #undef GL_VERSION_2_0
83   #undef GL_VERSION_2_1
84   #undef GL_VERSION_3_0
85   #undef GL_VERSION_3_1
86   #undef GL_VERSION_3_2
87   #undef GL_VERSION_3_3
88   #undef GL_VERSION_4_0
89   #undef GL_VERSION_4_1
90   #undef GL_VERSION_4_2
91   #undef GL_VERSION_4_3
92   #undef GL_VERSION_4_4
93   #undef GL_VERSION_4_5
94
95   // include glext.h provided by Khronos group
96   #include <glext.h>
97 #endif
98
99 //! Mega structure defines the complete list of OpenGL functions.
100 struct OpenGl_GlFunctions
101 {
102
103 public: //! @name OpenGL ES 1.1
104
105 #if defined(GL_ES_VERSION_2_0)
106
107   inline void glActiveTexture (GLenum texture) const
108   {
109     ::glActiveTexture (texture);
110   }
111
112   inline void glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) const
113   {
114     ::glCompressedTexImage2D (target, level, internalformat, width, height, border, imageSize, data);
115   }
116
117   inline void glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) const
118   {
119     ::glCompressedTexSubImage2D (target, level, xoffset, yoffset, width, height, format, imageSize, data);
120   }
121
122   inline void glBindBuffer (GLenum target, GLuint buffer) const
123   {
124     ::glBindBuffer (target, buffer);
125   }
126
127   inline void glBufferData (GLenum target, GLsizeiptr size, const void* data, GLenum usage) const
128   {
129     ::glBufferData (target, size, data, usage);
130   }
131
132   inline void glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void* data) const
133   {
134     ::glBufferSubData (target, offset, size, data);
135   }
136
137   inline void glDeleteBuffers (GLsizei n, const GLuint *buffers) const
138   {
139     ::glDeleteBuffers (n, buffers);
140   }
141
142   inline void glDeleteTextures (GLsizei n, const GLuint *textures) const
143   {
144     ::glDeleteTextures (n, textures);
145   }
146
147   inline void glDepthFunc (GLenum func) const
148   {
149     ::glDepthFunc (func);
150   }
151
152   inline void glDepthMask (GLboolean flag) const
153   {
154     ::glDepthMask (flag);
155   }
156
157   inline void glDepthRangef (GLfloat n, GLfloat f) const
158   {
159     ::glDepthRangef (n, f);
160   }
161
162   inline void glGenBuffers (GLsizei n, GLuint *buffers) const
163   {
164     ::glGenBuffers (n, buffers);
165   }
166
167   inline void glGenTextures (GLsizei n, GLuint *textures) const
168   {
169     ::glGenTextures (n, textures);
170   }
171
172   inline void glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params) const
173   {
174     ::glGetBufferParameteriv (target, pname, params);
175   }
176
177   inline GLboolean glIsBuffer (GLuint buffer) const
178   {
179     return ::glIsBuffer (buffer);
180   }
181
182   inline void glSampleCoverage (GLfloat value, GLboolean invert) const
183   {
184     ::glSampleCoverage (value, invert);
185   }
186
187   inline void glMultiDrawElements (GLenum theMode, const GLsizei* theCount, GLenum theType, const void* const* theIndices, GLsizei theDrawCount) const
188   {
189     if (theCount   == NULL
190      || theIndices == NULL)
191     {
192       return;
193     }
194
195     for (GLsizei aBatchIter = 0; aBatchIter < theDrawCount; ++aBatchIter)
196     {
197       ::glDrawElements (theMode, theCount[aBatchIter], theType, theIndices[aBatchIter]);
198     }
199   }
200
201 #endif
202
203 public: //! @name OpenGL ES 2.0
204
205 #if defined(GL_ES_VERSION_2_0)
206   inline void glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) const
207   {
208     ::glBlendColor (red, green, blue, alpha);
209   }
210
211   inline void glBlendEquation (GLenum mode) const
212   {
213     ::glBlendEquation (mode);
214   }
215
216   inline void glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) const
217   {
218     ::glBlendFuncSeparate (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
219   }
220
221   inline void glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha) const
222   {
223     ::glBlendEquationSeparate (modeRGB, modeAlpha);
224   }
225
226   inline void glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) const
227   {
228     ::glStencilOpSeparate (face, sfail, dpfail, dppass);
229   }
230
231   inline void glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask) const
232   {
233     ::glStencilFuncSeparate (face, func, ref, mask);
234   }
235
236   inline void glStencilMaskSeparate (GLenum face, GLuint mask) const
237   {
238     ::glStencilMaskSeparate (face, mask);
239   }
240
241   inline void glAttachShader (GLuint program, GLuint shader) const
242   {
243     ::glAttachShader (program, shader);
244   }
245
246   inline void glBindAttribLocation (GLuint program, GLuint index, const GLchar *name) const
247   {
248     ::glBindAttribLocation (program, index, name);
249   }
250
251   inline void glBindFramebuffer (GLenum target, GLuint framebuffer) const
252   {
253     ::glBindFramebuffer (target, framebuffer);
254   }
255
256   inline void glBindRenderbuffer (GLenum target, GLuint renderbuffer) const
257   {
258     ::glBindRenderbuffer (target, renderbuffer);
259   }
260
261   inline GLenum glCheckFramebufferStatus (GLenum target) const
262   {
263     return ::glCheckFramebufferStatus (target);
264   }
265
266   inline void glCompileShader (GLuint shader) const
267   {
268     ::glCompileShader (shader);
269   }
270
271   inline GLuint glCreateProgram() const
272   {
273     return ::glCreateProgram();
274   }
275
276   inline GLuint glCreateShader (GLenum type) const
277   {
278     return ::glCreateShader (type);
279   }
280
281   inline void glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers) const
282   {
283     ::glDeleteFramebuffers (n, framebuffers);
284   }
285
286   inline void glDeleteProgram (GLuint program) const
287   {
288     ::glDeleteProgram (program);
289   }
290
291   inline void glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers) const
292   {
293     ::glDeleteRenderbuffers (n, renderbuffers);
294   }
295
296   inline void glDeleteShader (GLuint shader) const
297   {
298     ::glDeleteShader (shader);
299   }
300
301   inline void glDetachShader (GLuint program, GLuint shader) const
302   {
303     ::glDetachShader (program, shader);
304   }
305
306   inline void glDisableVertexAttribArray (GLuint index) const
307   {
308     ::glDisableVertexAttribArray (index);
309   }
310
311   inline void glEnableVertexAttribArray (GLuint index) const
312   {
313     ::glEnableVertexAttribArray (index);
314   }
315
316   inline void glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) const
317   {
318     ::glFramebufferRenderbuffer (target, attachment, renderbuffertarget, renderbuffer);
319   }
320
321   inline void glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) const
322   {
323     ::glFramebufferTexture2D (target, attachment, textarget, texture, level);
324   }
325
326   inline void glGenerateMipmap (GLenum target) const
327   {
328     ::glGenerateMipmap (target);
329   }
330
331   inline void glGenFramebuffers (GLsizei n, GLuint *framebuffers) const
332   {
333     ::glGenFramebuffers (n, framebuffers);
334   }
335
336   inline void glGenRenderbuffers (GLsizei n, GLuint *renderbuffers) const
337   {
338     ::glGenRenderbuffers (n, renderbuffers);
339   }
340
341   inline void glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint* size, GLenum *type, GLchar *name) const
342   {
343     ::glGetActiveAttrib (program, index, bufSize, length, size, type, name);
344   }
345
346   inline void glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint* size, GLenum *type, GLchar *name) const
347   {
348     ::glGetActiveUniform (program, index, bufSize, length, size, type, name);
349   }
350
351   inline void glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders) const
352   {
353     ::glGetAttachedShaders (program, maxCount, count, shaders);
354   }
355
356   inline GLint glGetAttribLocation (GLuint program, const GLchar *name) const
357   {
358     return ::glGetAttribLocation (program, name);
359   }
360
361   inline void glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params) const
362   {
363     ::glGetFramebufferAttachmentParameteriv (target, attachment, pname, params);
364   }
365
366   inline void glGetProgramiv (GLuint program, GLenum pname, GLint* params) const
367   {
368     ::glGetProgramiv (program, pname, params);
369   }
370
371   inline void glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog) const
372   {
373     ::glGetProgramInfoLog (program, bufSize, length, infoLog);
374   }
375
376   inline void glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params) const
377   {
378     ::glGetRenderbufferParameteriv (target, pname, params);
379   }
380
381   inline void glGetShaderiv (GLuint shader, GLenum pname, GLint* params) const
382   {
383     ::glGetShaderiv (shader, pname, params);
384   }
385
386   inline void glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog) const
387   {
388     ::glGetShaderInfoLog (shader, bufSize, length, infoLog);
389   }
390
391   inline void glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) const
392   {
393     ::glGetShaderPrecisionFormat (shadertype, precisiontype, range, precision);
394   }
395
396   inline void glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source) const
397   {
398     ::glGetShaderSource (shader, bufSize, length, source);
399   }
400
401   inline void glGetUniformfv (GLuint program, GLint location, GLfloat* params) const
402   {
403     ::glGetUniformfv (program, location, params);
404   }
405
406   inline void glGetUniformiv (GLuint program, GLint location, GLint* params) const
407   {
408     ::glGetUniformiv (program, location, params);
409   }
410
411   GLint glGetUniformLocation (GLuint program, const GLchar *name) const
412   {
413     return ::glGetUniformLocation (program, name);
414   }
415
416   inline void glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params) const
417   {
418     ::glGetVertexAttribfv (index, pname, params);
419   }
420
421   inline void glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params) const
422   {
423     ::glGetVertexAttribiv (index, pname, params);
424   }
425
426   inline void glGetVertexAttribPointerv (GLuint index, GLenum pname, void* *pointer) const
427   {
428     ::glGetVertexAttribPointerv (index, pname, pointer);
429   }
430
431   inline GLboolean glIsFramebuffer (GLuint framebuffer) const
432   {
433     return ::glIsFramebuffer (framebuffer);
434   }
435
436   inline GLboolean glIsProgram (GLuint program) const
437   {
438     return ::glIsProgram (program);
439   }
440
441   inline GLboolean glIsRenderbuffer (GLuint renderbuffer) const
442   {
443     return ::glIsRenderbuffer (renderbuffer);
444   }
445
446   inline GLboolean glIsShader (GLuint shader) const
447   {
448     return ::glIsShader (shader);
449   }
450
451   inline void glLinkProgram (GLuint program) const
452   {
453     ::glLinkProgram (program);
454   }
455
456   inline void glReleaseShaderCompiler() const
457   {
458     ::glReleaseShaderCompiler();
459   }
460
461   inline void glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height) const
462   {
463     ::glRenderbufferStorage (target, internalformat, width, height);
464   }
465
466   inline void glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void* binary, GLsizei length) const
467   {
468     ::glShaderBinary (count, shaders, binaryformat, binary, length);
469   }
470
471   inline void glShaderSource (GLuint shader, GLsizei count, const GLchar** string, const GLint* length) const
472   {
473     ::glShaderSource (shader, count, string, length);
474   }
475
476   inline void glUniform1f (GLint location, GLfloat v0) const
477   {
478     ::glUniform1f (location, v0);
479   }
480
481   inline void glUniform1fv (GLint location, GLsizei count, const GLfloat* value) const
482   {
483     ::glUniform1fv (location, count, value);
484   }
485
486   inline void glUniform1i (GLint location, GLint v0) const
487   {
488     ::glUniform1i (location, v0);
489   }
490
491   inline void glUniform1iv (GLint location, GLsizei count, const GLint* value) const
492   {
493     ::glUniform1iv (location, count, value);
494   }
495
496   inline void glUniform2f (GLint location, GLfloat v0, GLfloat v1) const
497   {
498     ::glUniform2f (location, v0, v1);
499   }
500
501   inline void glUniform2fv (GLint location, GLsizei count, const GLfloat* value) const
502   {
503     ::glUniform2fv (location, count, value);
504   }
505
506   inline void glUniform2i (GLint location, GLint v0, GLint v1) const
507   {
508     ::glUniform2i (location, v0, v1);
509   }
510
511   inline void glUniform2iv (GLint location, GLsizei count, const GLint* value) const
512   {
513     ::glUniform2iv (location, count, value);
514   }
515
516   inline void glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2) const
517   {
518     ::glUniform3f (location, v0, v1, v2);
519   }
520
521   inline void glUniform3fv (GLint location, GLsizei count, const GLfloat* value) const
522   {
523     ::glUniform3fv (location, count, value);
524   }
525
526   inline void glUniform3i (GLint location, GLint v0, GLint v1, GLint v2) const
527   {
528     ::glUniform3i (location, v0, v1, v2);
529   }
530
531   inline void glUniform3iv (GLint location, GLsizei count, const GLint* value) const
532   {
533     ::glUniform3iv (location, count, value);
534   }
535
536   inline void glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) const
537   {
538     ::glUniform4f (location, v0, v1, v2, v3);
539   }
540
541   inline void glUniform4fv (GLint location, GLsizei count, const GLfloat* value) const
542   {
543     ::glUniform4fv (location, count, value);
544   }
545
546   inline void glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3) const
547   {
548     ::glUniform4i (location, v0, v1, v2, v3);
549   }
550
551   inline void glUniform4iv (GLint location, GLsizei count, const GLint* value) const
552   {
553     ::glUniform4iv (location, count, value);
554   }
555
556   inline void glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) const
557   {
558     ::glUniformMatrix2fv (location, count, transpose, value);
559   }
560
561   inline void glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) const
562   {
563     ::glUniformMatrix3fv (location, count, transpose, value);
564   }
565
566   inline void glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) const
567   {
568     ::glUniformMatrix4fv (location, count, transpose, value);
569   }
570
571   inline void glUseProgram (GLuint program) const
572   {
573     ::glUseProgram (program);
574   }
575
576   inline void glValidateProgram (GLuint program) const
577   {
578     ::glValidateProgram (program);
579   }
580
581   inline void glVertexAttrib1f (GLuint index, GLfloat x) const
582   {
583     ::glVertexAttrib1f (index, x);
584   }
585
586   inline void glVertexAttrib1fv (GLuint index, const GLfloat* v) const
587   {
588     ::glVertexAttrib1fv (index, v);
589   }
590
591   inline void glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y) const
592   {
593     ::glVertexAttrib2f (index, x, y);
594   }
595
596   inline void glVertexAttrib2fv (GLuint index, const GLfloat* v) const
597   {
598     ::glVertexAttrib2fv (index, v);
599   }
600
601   inline void glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z) const
602   {
603     ::glVertexAttrib3f (index, x, y, z);
604   }
605
606   inline void glVertexAttrib3fv (GLuint index, const GLfloat* v) const
607   {
608     ::glVertexAttrib3fv (index, v);
609   }
610
611   inline void glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) const
612   {
613     ::glVertexAttrib4f (index, x, y, z, w);
614   }
615
616   inline void glVertexAttrib4fv (GLuint index, const GLfloat* v) const
617   {
618     ::glVertexAttrib4fv (index, v);
619   }
620
621   inline void glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer) const
622   {
623     ::glVertexAttribPointer (index, size, type, normalized, stride, pointer);
624   }
625
626 public: //! @name OpenGL ES 3.0
627
628   opencascade::PFNGLREADBUFFERPROC glReadBuffer;
629   opencascade::PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements;
630   opencascade::PFNGLTEXIMAGE3DPROC glTexImage3D;
631   opencascade::PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D;
632   opencascade::PFNGLCOPYTEXSUBIMAGE3DPROC glCopyTexSubImage3D;
633   opencascade::PFNGLCOMPRESSEDTEXIMAGE3DPROC glCompressedTexImage3D;
634   opencascade::PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glCompressedTexSubImage3D;
635   opencascade::PFNGLGENQUERIESPROC glGenQueries;
636   opencascade::PFNGLDELETEQUERIESPROC glDeleteQueries;
637   opencascade::PFNGLISQUERYPROC    glIsQuery;
638   opencascade::PFNGLBEGINQUERYPROC glBeginQuery;
639   opencascade::PFNGLENDQUERYPROC   glEndQuery;
640   opencascade::PFNGLGETQUERYIVPROC glGetQueryiv;
641   opencascade::PFNGLGETQUERYOBJECTUIVPROC glGetQueryObjectuiv;
642   opencascade::PFNGLUNMAPBUFFERPROC glUnmapBuffer;
643   opencascade::PFNGLGETBUFFERPOINTERVPROC glGetBufferPointerv;
644   opencascade::PFNGLDRAWBUFFERSPROC glDrawBuffers;
645   opencascade::PFNGLUNIFORMMATRIX2X3FVPROC glUniformMatrix2x3fv;
646   opencascade::PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv;
647   opencascade::PFNGLUNIFORMMATRIX2X4FVPROC glUniformMatrix2x4fv;
648   opencascade::PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv;
649   opencascade::PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv;
650   opencascade::PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv;
651   opencascade::PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
652   opencascade::PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample;
653   opencascade::PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer;
654   opencascade::PFNGLMAPBUFFERRANGEPROC  glMapBufferRange;
655   opencascade::PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
656   opencascade::PFNGLBINDVERTEXARRAYPROC glBindVertexArray;
657   opencascade::PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays;
658   opencascade::PFNGLGENVERTEXARRAYSPROC glGenVertexArrays;
659   opencascade::PFNGLISVERTEXARRAYPROC   glIsVertexArray;
660   opencascade::PFNGLGETINTEGERI_VPROC   glGetIntegeri_v;
661   opencascade::PFNGLBEGINTRANSFORMFEEDBACKPROC glBeginTransformFeedback;
662   opencascade::PFNGLENDTRANSFORMFEEDBACKPROC glEndTransformFeedback;
663   opencascade::PFNGLBINDBUFFERRANGEPROC glBindBufferRange;
664   opencascade::PFNGLBINDBUFFERBASEPROC  glBindBufferBase;
665   opencascade::PFNGLTRANSFORMFEEDBACKVARYINGSPROC glTransformFeedbackVaryings;
666   opencascade::PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glGetTransformFeedbackVarying;
667   opencascade::PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer;
668   opencascade::PFNGLGETVERTEXATTRIBIIVPROC   glGetVertexAttribIiv;
669   opencascade::PFNGLGETVERTEXATTRIBIUIVPROC  glGetVertexAttribIuiv;
670   opencascade::PFNGLVERTEXATTRIBI4IPROC   glVertexAttribI4i;
671   opencascade::PFNGLVERTEXATTRIBI4UIPROC  glVertexAttribI4ui;
672   opencascade::PFNGLVERTEXATTRIBI4IVPROC  glVertexAttribI4iv;
673   opencascade::PFNGLVERTEXATTRIBI4UIVPROC glVertexAttribI4uiv;
674   opencascade::PFNGLGETUNIFORMUIVPROC glGetUniformuiv;
675   opencascade::PFNGLGETFRAGDATALOCATIONPROC glGetFragDataLocation;
676   opencascade::PFNGLUNIFORM1UIPROC glUniform1ui;
677   opencascade::PFNGLUNIFORM2UIPROC glUniform2ui;
678   opencascade::PFNGLUNIFORM3UIPROC glUniform3ui;
679   opencascade::PFNGLUNIFORM4UIPROC glUniform4ui;
680   opencascade::PFNGLUNIFORM1UIVPROC glUniform1uiv;
681   opencascade::PFNGLUNIFORM2UIVPROC glUniform2uiv;
682   opencascade::PFNGLUNIFORM3UIVPROC glUniform3uiv;
683   opencascade::PFNGLUNIFORM4UIVPROC glUniform4uiv;
684   opencascade::PFNGLCLEARBUFFERIVPROC  glClearBufferiv;
685   opencascade::PFNGLCLEARBUFFERUIVPROC glClearBufferuiv;
686   opencascade::PFNGLCLEARBUFFERFVPROC  glClearBufferfv;
687   opencascade::PFNGLCLEARBUFFERFIPROC  glClearBufferfi;
688   opencascade::PFNGLGETSTRINGIPROC glGetStringi;
689   opencascade::PFNGLCOPYBUFFERSUBDATAPROC glCopyBufferSubData;
690   opencascade::PFNGLGETUNIFORMINDICESPROC glGetUniformIndices;
691   opencascade::PFNGLGETACTIVEUNIFORMSIVPROC  glGetActiveUniformsiv;
692   opencascade::PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex;
693   opencascade::PFNGLGETACTIVEUNIFORMBLOCKIVPROC   glGetActiveUniformBlockiv;
694   opencascade::PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glGetActiveUniformBlockName;
695   opencascade::PFNGLUNIFORMBLOCKBINDINGPROC   glUniformBlockBinding;
696   opencascade::PFNGLDRAWARRAYSINSTANCEDPROC   glDrawArraysInstanced;
697   opencascade::PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced;
698   opencascade::PFNGLFENCESYNCPROC      glFenceSync;
699   opencascade::PFNGLISSYNCPROC         glIsSync;
700   opencascade::PFNGLDELETESYNCPROC     glDeleteSync;
701   opencascade::PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
702   opencascade::PFNGLWAITSYNCPROC       glWaitSync;
703   opencascade::PFNGLGETINTEGER64VPROC  glGetInteger64v;
704   opencascade::PFNGLGETSYNCIVPROC      glGetSynciv;
705   opencascade::PFNGLGETINTEGER64I_VPROC glGetInteger64i_v;
706   opencascade::PFNGLGETBUFFERPARAMETERI64VPROC glGetBufferParameteri64v;
707   opencascade::PFNGLGENSAMPLERSPROC glGenSamplers;
708   opencascade::PFNGLDELETESAMPLERSPROC glDeleteSamplers;
709   opencascade::PFNGLISSAMPLERPROC   glIsSampler;
710   opencascade::PFNGLBINDSAMPLERPROC glBindSampler;
711   opencascade::PFNGLSAMPLERPARAMETERIPROC  glSamplerParameteri;
712   opencascade::PFNGLSAMPLERPARAMETERIVPROC glSamplerParameteriv;
713   opencascade::PFNGLSAMPLERPARAMETERFPROC  glSamplerParameterf;
714   opencascade::PFNGLSAMPLERPARAMETERFVPROC glSamplerParameterfv;
715   opencascade::PFNGLGETSAMPLERPARAMETERIVPROC glGetSamplerParameteriv;
716   opencascade::PFNGLGETSAMPLERPARAMETERFVPROC glGetSamplerParameterfv;
717   opencascade::PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor;
718   opencascade::PFNGLBINDTRANSFORMFEEDBACKPROC glBindTransformFeedback;
719   opencascade::PFNGLDELETETRANSFORMFEEDBACKSPROC glDeleteTransformFeedbacks;
720   opencascade::PFNGLGENTRANSFORMFEEDBACKSPROC glGenTransformFeedbacks;
721   opencascade::PFNGLISTRANSFORMFEEDBACKPROC glIsTransformFeedback;
722   opencascade::PFNGLPAUSETRANSFORMFEEDBACKPROC glPauseTransformFeedback;
723   opencascade::PFNGLRESUMETRANSFORMFEEDBACKPROC glResumeTransformFeedback;
724   opencascade::PFNGLGETPROGRAMBINARYPROC glGetProgramBinary;
725   opencascade::PFNGLPROGRAMBINARYPROC glProgramBinary;
726   opencascade::PFNGLPROGRAMPARAMETERIPROC glProgramParameteri;
727   opencascade::PFNGLINVALIDATEFRAMEBUFFERPROC glInvalidateFramebuffer;
728   opencascade::PFNGLINVALIDATESUBFRAMEBUFFERPROC glInvalidateSubFramebuffer;
729   opencascade::PFNGLTEXSTORAGE2DPROC glTexStorage2D;
730   opencascade::PFNGLTEXSTORAGE3DPROC glTexStorage3D;
731   opencascade::PFNGLGETINTERNALFORMATIVPROC glGetInternalformativ;
732
733 public: //! @name OpenGL ES 3.1
734
735   opencascade::PFNGLDISPATCHCOMPUTEPROC glDispatchCompute;
736   opencascade::PFNGLDISPATCHCOMPUTEINDIRECTPROC glDispatchComputeIndirect;
737   opencascade::PFNGLDRAWARRAYSINDIRECTPROC glDrawArraysIndirect;
738   opencascade::PFNGLDRAWELEMENTSINDIRECTPROC glDrawElementsIndirect;
739   opencascade::PFNGLFRAMEBUFFERPARAMETERIPROC glFramebufferParameteri;
740   opencascade::PFNGLGETFRAMEBUFFERPARAMETERIVPROC glGetFramebufferParameteriv;
741   opencascade::PFNGLGETPROGRAMINTERFACEIVPROC glGetProgramInterfaceiv;
742   opencascade::PFNGLGETPROGRAMRESOURCEINDEXPROC glGetProgramResourceIndex;
743   opencascade::PFNGLGETPROGRAMRESOURCENAMEPROC glGetProgramResourceName;
744   opencascade::PFNGLGETPROGRAMRESOURCEIVPROC glGetProgramResourceiv;
745   opencascade::PFNGLGETPROGRAMRESOURCELOCATIONPROC glGetProgramResourceLocation;
746   opencascade::PFNGLUSEPROGRAMSTAGESPROC glUseProgramStages;
747   opencascade::PFNGLACTIVESHADERPROGRAMPROC glActiveShaderProgram;
748   opencascade::PFNGLCREATESHADERPROGRAMVPROC glCreateShaderProgramv;
749   opencascade::PFNGLBINDPROGRAMPIPELINEPROC glBindProgramPipeline;
750   opencascade::PFNGLDELETEPROGRAMPIPELINESPROC glDeleteProgramPipelines;
751   opencascade::PFNGLGENPROGRAMPIPELINESPROC glGenProgramPipelines;
752   opencascade::PFNGLISPROGRAMPIPELINEPROC glIsProgramPipeline;
753   opencascade::PFNGLGETPROGRAMPIPELINEIVPROC glGetProgramPipelineiv;
754   opencascade::PFNGLPROGRAMUNIFORM1IPROC glProgramUniform1i;
755   opencascade::PFNGLPROGRAMUNIFORM2IPROC glProgramUniform2i;
756   opencascade::PFNGLPROGRAMUNIFORM3IPROC glProgramUniform3i;
757   opencascade::PFNGLPROGRAMUNIFORM4IPROC glProgramUniform4i;
758   opencascade::PFNGLPROGRAMUNIFORM1UIPROC glProgramUniform1ui;
759   opencascade::PFNGLPROGRAMUNIFORM2UIPROC glProgramUniform2ui;
760   opencascade::PFNGLPROGRAMUNIFORM3UIPROC glProgramUniform3ui;
761   opencascade::PFNGLPROGRAMUNIFORM4UIPROC glProgramUniform4ui;
762   opencascade::PFNGLPROGRAMUNIFORM1FPROC glProgramUniform1f;
763   opencascade::PFNGLPROGRAMUNIFORM2FPROC glProgramUniform2f;
764   opencascade::PFNGLPROGRAMUNIFORM3FPROC glProgramUniform3f;
765   opencascade::PFNGLPROGRAMUNIFORM4FPROC glProgramUniform4f;
766   opencascade::PFNGLPROGRAMUNIFORM1IVPROC glProgramUniform1iv;
767   opencascade::PFNGLPROGRAMUNIFORM2IVPROC glProgramUniform2iv;
768   opencascade::PFNGLPROGRAMUNIFORM3IVPROC glProgramUniform3iv;
769   opencascade::PFNGLPROGRAMUNIFORM4IVPROC glProgramUniform4iv;
770   opencascade::PFNGLPROGRAMUNIFORM1UIVPROC glProgramUniform1uiv;
771   opencascade::PFNGLPROGRAMUNIFORM2UIVPROC glProgramUniform2uiv;
772   opencascade::PFNGLPROGRAMUNIFORM3UIVPROC glProgramUniform3uiv;
773   opencascade::PFNGLPROGRAMUNIFORM4UIVPROC glProgramUniform4uiv;
774   opencascade::PFNGLPROGRAMUNIFORM1FVPROC glProgramUniform1fv;
775   opencascade::PFNGLPROGRAMUNIFORM2FVPROC glProgramUniform2fv;
776   opencascade::PFNGLPROGRAMUNIFORM3FVPROC glProgramUniform3fv;
777   opencascade::PFNGLPROGRAMUNIFORM4FVPROC glProgramUniform4fv;
778   opencascade::PFNGLPROGRAMUNIFORMMATRIX2FVPROC glProgramUniformMatrix2fv;
779   opencascade::PFNGLPROGRAMUNIFORMMATRIX3FVPROC glProgramUniformMatrix3fv;
780   opencascade::PFNGLPROGRAMUNIFORMMATRIX4FVPROC glProgramUniformMatrix4fv;
781   opencascade::PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glProgramUniformMatrix2x3fv;
782   opencascade::PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glProgramUniformMatrix3x2fv;
783   opencascade::PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glProgramUniformMatrix2x4fv;
784   opencascade::PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glProgramUniformMatrix4x2fv;
785   opencascade::PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glProgramUniformMatrix3x4fv;
786   opencascade::PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glProgramUniformMatrix4x3fv;
787   opencascade::PFNGLVALIDATEPROGRAMPIPELINEPROC glValidateProgramPipeline;
788   opencascade::PFNGLGETPROGRAMPIPELINEINFOLOGPROC glGetProgramPipelineInfoLog;
789   opencascade::PFNGLBINDIMAGETEXTUREPROC glBindImageTexture;
790   opencascade::PFNGLGETBOOLEANI_VPROC glGetBooleani_v;
791   opencascade::PFNGLMEMORYBARRIERPROC glMemoryBarrier;
792   opencascade::PFNGLMEMORYBARRIERBYREGIONPROC glMemoryBarrierByRegion;
793   opencascade::PFNGLTEXSTORAGE2DMULTISAMPLEPROC glTexStorage2DMultisample;
794   opencascade::PFNGLGETMULTISAMPLEFVPROC glGetMultisamplefv;
795   opencascade::PFNGLSAMPLEMASKIPROC glSampleMaski;
796   opencascade::PFNGLGETTEXLEVELPARAMETERIVPROC glGetTexLevelParameteriv;
797   opencascade::PFNGLGETTEXLEVELPARAMETERFVPROC glGetTexLevelParameterfv;
798   opencascade::PFNGLBINDVERTEXBUFFERPROC glBindVertexBuffer;
799   opencascade::PFNGLVERTEXATTRIBFORMATPROC glVertexAttribFormat;
800   opencascade::PFNGLVERTEXATTRIBIFORMATPROC glVertexAttribIFormat;
801   opencascade::PFNGLVERTEXATTRIBBINDINGPROC glVertexAttribBinding;
802   opencascade::PFNGLVERTEXBINDINGDIVISORPROC glVertexBindingDivisor;
803
804 public: //! @name OpenGL ES 3.2
805
806   opencascade::PFNGLBLENDBARRIERPROC glBlendBarrier;
807   opencascade::PFNGLCOPYIMAGESUBDATAPROC glCopyImageSubData;
808   opencascade::PFNGLPUSHDEBUGGROUPPROC glPushDebugGroup;
809   opencascade::PFNGLPOPDEBUGGROUPPROC glPopDebugGroup;
810   opencascade::PFNGLOBJECTLABELPROC glObjectLabel;
811   opencascade::PFNGLGETOBJECTLABELPROC glGetObjectLabel;
812   opencascade::PFNGLOBJECTPTRLABELPROC glObjectPtrLabel;
813   opencascade::PFNGLGETOBJECTPTRLABELPROC glGetObjectPtrLabel;
814   opencascade::PFNGLGETPOINTERVPROC glGetPointerv;
815   opencascade::PFNGLENABLEIPROC  glEnablei;
816   opencascade::PFNGLDISABLEIPROC glDisablei;
817   opencascade::PFNGLBLENDEQUATIONIPROC glBlendEquationi;
818   opencascade::PFNGLBLENDEQUATIONSEPARATEIPROC glBlendEquationSeparatei;
819   opencascade::PFNGLBLENDFUNCIPROC glBlendFunci;
820   opencascade::PFNGLBLENDFUNCSEPARATEIPROC glBlendFuncSeparatei;
821   opencascade::PFNGLCOLORMASKIPROC glColorMaski;
822   opencascade::PFNGLISENABLEDIPROC glIsEnabledi;
823   opencascade::PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex;
824   opencascade::PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glDrawRangeElementsBaseVertex;
825   opencascade::PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertex;
826   opencascade::PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture;
827   opencascade::PFNGLPRIMITIVEBOUNDINGBOXPROC glPrimitiveBoundingBox;
828   opencascade::PFNGLGETGRAPHICSRESETSTATUSPROC glGetGraphicsResetStatus;
829   opencascade::PFNGLREADNPIXELSPROC glReadnPixels;
830   opencascade::PFNGLGETNUNIFORMFVPROC glGetnUniformfv;
831   opencascade::PFNGLGETNUNIFORMIVPROC glGetnUniformiv;
832   opencascade::PFNGLGETNUNIFORMUIVPROC glGetnUniformuiv;
833   opencascade::PFNGLMINSAMPLESHADINGPROC glMinSampleShading;
834   opencascade::PFNGLPATCHPARAMETERIPROC glPatchParameteri;
835   opencascade::PFNGLTEXPARAMETERIIVPROC glTexParameterIiv;
836   opencascade::PFNGLTEXPARAMETERIUIVPROC glTexParameterIuiv;
837   opencascade::PFNGLGETTEXPARAMETERIIVPROC glGetTexParameterIiv;
838   opencascade::PFNGLGETTEXPARAMETERIUIVPROC glGetTexParameterIuiv;
839   opencascade::PFNGLSAMPLERPARAMETERIIVPROC glSamplerParameterIiv;
840   opencascade::PFNGLSAMPLERPARAMETERIUIVPROC glSamplerParameterIuiv;
841   opencascade::PFNGLGETSAMPLERPARAMETERIIVPROC glGetSamplerParameterIiv;
842   opencascade::PFNGLGETSAMPLERPARAMETERIUIVPROC glGetSamplerParameterIuiv;
843   opencascade::PFNGLTEXBUFFERPROC glTexBuffer;
844   opencascade::PFNGLTEXBUFFERRANGEPROC glTexBufferRange;
845   opencascade::PFNGLTEXSTORAGE3DMULTISAMPLEPROC glTexStorage3DMultisample;
846
847 public: //! @name GL_KHR_debug (optional) or OpenGL ES 3.2+
848
849   opencascade::PFNGLDEBUGMESSAGECONTROLPROC  glDebugMessageControl;
850   opencascade::PFNGLDEBUGMESSAGEINSERTPROC   glDebugMessageInsert;
851   opencascade::PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback;
852   opencascade::PFNGLGETDEBUGMESSAGELOGPROC   glGetDebugMessageLog;
853
854 #else // OpenGL ES vs. desktop
855
856 public: //! @name OpenGL 1.2
857
858   PFNGLBLENDCOLORPROC               glBlendColor;
859   PFNGLBLENDEQUATIONPROC            glBlendEquation;
860   PFNGLDRAWRANGEELEMENTSPROC        glDrawRangeElements;
861   PFNGLTEXIMAGE3DPROC               glTexImage3D;
862   PFNGLTEXSUBIMAGE3DPROC            glTexSubImage3D;
863   PFNGLCOPYTEXSUBIMAGE3DPROC        glCopyTexSubImage3D;
864
865 public: //! @name OpenGL 1.3
866
867   PFNGLACTIVETEXTUREPROC            glActiveTexture;
868   PFNGLSAMPLECOVERAGEPROC           glSampleCoverage;
869   PFNGLCOMPRESSEDTEXIMAGE3DPROC     glCompressedTexImage3D;
870   PFNGLCOMPRESSEDTEXIMAGE2DPROC     glCompressedTexImage2D;
871   PFNGLCOMPRESSEDTEXIMAGE1DPROC     glCompressedTexImage1D;
872   PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC  glCompressedTexSubImage3D;
873   PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC  glCompressedTexSubImage2D;
874   PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC  glCompressedTexSubImage1D;
875   PFNGLGETCOMPRESSEDTEXIMAGEPROC    glGetCompressedTexImage;
876
877   PFNGLCLIENTACTIVETEXTUREPROC      glClientActiveTexture;
878   PFNGLMULTITEXCOORD1DPROC          glMultiTexCoord1d;
879   PFNGLMULTITEXCOORD1DVPROC         glMultiTexCoord1dv;
880   PFNGLMULTITEXCOORD1FPROC          glMultiTexCoord1f;
881   PFNGLMULTITEXCOORD1FVPROC         glMultiTexCoord1fv;
882   PFNGLMULTITEXCOORD1IPROC          glMultiTexCoord1i;
883   PFNGLMULTITEXCOORD1IVPROC         glMultiTexCoord1iv;
884   PFNGLMULTITEXCOORD1SPROC          glMultiTexCoord1s;
885   PFNGLMULTITEXCOORD1SVPROC         glMultiTexCoord1sv;
886   PFNGLMULTITEXCOORD2DPROC          glMultiTexCoord2d;
887   PFNGLMULTITEXCOORD2DVPROC         glMultiTexCoord2dv;
888   PFNGLMULTITEXCOORD2FPROC          glMultiTexCoord2f;
889   PFNGLMULTITEXCOORD2FVPROC         glMultiTexCoord2fv;
890   PFNGLMULTITEXCOORD2IPROC          glMultiTexCoord2i;
891   PFNGLMULTITEXCOORD2IVPROC         glMultiTexCoord2iv;
892   PFNGLMULTITEXCOORD2SPROC          glMultiTexCoord2s;
893   PFNGLMULTITEXCOORD2SVPROC         glMultiTexCoord2sv;
894   PFNGLMULTITEXCOORD3DPROC          glMultiTexCoord3d;
895   PFNGLMULTITEXCOORD3DVPROC         glMultiTexCoord3dv;
896   PFNGLMULTITEXCOORD3FPROC          glMultiTexCoord3f;
897   PFNGLMULTITEXCOORD3FVPROC         glMultiTexCoord3fv;
898   PFNGLMULTITEXCOORD3IPROC          glMultiTexCoord3i;
899   PFNGLMULTITEXCOORD3IVPROC         glMultiTexCoord3iv;
900   PFNGLMULTITEXCOORD3SPROC          glMultiTexCoord3s;
901   PFNGLMULTITEXCOORD3SVPROC         glMultiTexCoord3sv;
902   PFNGLMULTITEXCOORD4DPROC          glMultiTexCoord4d;
903   PFNGLMULTITEXCOORD4DVPROC         glMultiTexCoord4dv;
904   PFNGLMULTITEXCOORD4FPROC          glMultiTexCoord4f;
905   PFNGLMULTITEXCOORD4FVPROC         glMultiTexCoord4fv;
906   PFNGLMULTITEXCOORD4IPROC          glMultiTexCoord4i;
907   PFNGLMULTITEXCOORD4IVPROC         glMultiTexCoord4iv;
908   PFNGLMULTITEXCOORD4SPROC          glMultiTexCoord4s;
909   PFNGLMULTITEXCOORD4SVPROC         glMultiTexCoord4sv;
910   PFNGLLOADTRANSPOSEMATRIXFPROC     glLoadTransposeMatrixf;
911   PFNGLLOADTRANSPOSEMATRIXDPROC     glLoadTransposeMatrixd;
912   PFNGLMULTTRANSPOSEMATRIXFPROC     glMultTransposeMatrixf;
913   PFNGLMULTTRANSPOSEMATRIXDPROC     glMultTransposeMatrixd;
914
915 public: //! @name OpenGL 1.4
916
917   PFNGLBLENDFUNCSEPARATEPROC        glBlendFuncSeparate;
918   PFNGLMULTIDRAWARRAYSPROC          glMultiDrawArrays;
919   PFNGLMULTIDRAWELEMENTSPROC        glMultiDrawElements;
920   PFNGLPOINTPARAMETERFPROC          glPointParameterf;
921   PFNGLPOINTPARAMETERFVPROC         glPointParameterfv;
922   PFNGLPOINTPARAMETERIPROC          glPointParameteri;
923   PFNGLPOINTPARAMETERIVPROC         glPointParameteriv;
924
925 public: //! @name OpenGL 1.5
926
927   PFNGLGENQUERIESPROC               glGenQueries;
928   PFNGLDELETEQUERIESPROC            glDeleteQueries;
929   PFNGLISQUERYPROC                  glIsQuery;
930   PFNGLBEGINQUERYPROC               glBeginQuery;
931   PFNGLENDQUERYPROC                 glEndQuery;
932   PFNGLGETQUERYIVPROC               glGetQueryiv;
933   PFNGLGETQUERYOBJECTIVPROC         glGetQueryObjectiv;
934   PFNGLGETQUERYOBJECTUIVPROC        glGetQueryObjectuiv;
935   PFNGLBINDBUFFERPROC               glBindBuffer;
936   PFNGLDELETEBUFFERSPROC            glDeleteBuffers;
937   PFNGLGENBUFFERSPROC               glGenBuffers;
938   PFNGLISBUFFERPROC                 glIsBuffer;
939   PFNGLBUFFERDATAPROC               glBufferData;
940   PFNGLBUFFERSUBDATAPROC            glBufferSubData;
941   PFNGLGETBUFFERSUBDATAPROC         glGetBufferSubData;
942   PFNGLMAPBUFFERPROC                glMapBuffer;
943   PFNGLUNMAPBUFFERPROC              glUnmapBuffer;
944   PFNGLGETBUFFERPARAMETERIVPROC     glGetBufferParameteriv;
945   PFNGLGETBUFFERPOINTERVPROC        glGetBufferPointerv;
946
947 public: //! @name OpenGL 2.0
948
949   PFNGLBLENDEQUATIONSEPARATEPROC    glBlendEquationSeparate;
950   PFNGLDRAWBUFFERSPROC              glDrawBuffers;
951   PFNGLSTENCILOPSEPARATEPROC        glStencilOpSeparate;
952   PFNGLSTENCILFUNCSEPARATEPROC      glStencilFuncSeparate;
953   PFNGLSTENCILMASKSEPARATEPROC      glStencilMaskSeparate;
954   PFNGLATTACHSHADERPROC             glAttachShader;
955   PFNGLBINDATTRIBLOCATIONPROC       glBindAttribLocation;
956   PFNGLCOMPILESHADERPROC            glCompileShader;
957   PFNGLCREATEPROGRAMPROC            glCreateProgram;
958   PFNGLCREATESHADERPROC             glCreateShader;
959   PFNGLDELETEPROGRAMPROC            glDeleteProgram;
960   PFNGLDELETESHADERPROC             glDeleteShader;
961   PFNGLDETACHSHADERPROC             glDetachShader;
962   PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
963   PFNGLENABLEVERTEXATTRIBARRAYPROC  glEnableVertexAttribArray;
964   PFNGLGETACTIVEATTRIBPROC          glGetActiveAttrib;
965   PFNGLGETACTIVEUNIFORMPROC         glGetActiveUniform;
966   PFNGLGETATTACHEDSHADERSPROC       glGetAttachedShaders;
967   PFNGLGETATTRIBLOCATIONPROC        glGetAttribLocation;
968   PFNGLGETPROGRAMIVPROC             glGetProgramiv;
969   PFNGLGETPROGRAMINFOLOGPROC        glGetProgramInfoLog;
970   PFNGLGETSHADERIVPROC              glGetShaderiv;
971   PFNGLGETSHADERINFOLOGPROC         glGetShaderInfoLog;
972   PFNGLGETSHADERSOURCEPROC          glGetShaderSource;
973   PFNGLGETUNIFORMLOCATIONPROC       glGetUniformLocation;
974   PFNGLGETUNIFORMFVPROC             glGetUniformfv;
975   PFNGLGETUNIFORMIVPROC             glGetUniformiv;
976   PFNGLGETVERTEXATTRIBDVPROC        glGetVertexAttribdv;
977   PFNGLGETVERTEXATTRIBFVPROC        glGetVertexAttribfv;
978   PFNGLGETVERTEXATTRIBIVPROC        glGetVertexAttribiv;
979   PFNGLGETVERTEXATTRIBPOINTERVPROC  glGetVertexAttribPointerv;
980   PFNGLISPROGRAMPROC                glIsProgram;
981   PFNGLISSHADERPROC                 glIsShader;
982   PFNGLLINKPROGRAMPROC              glLinkProgram;
983   PFNGLSHADERSOURCEPROC             glShaderSource;
984   PFNGLUSEPROGRAMPROC               glUseProgram;
985   PFNGLUNIFORM1FPROC                glUniform1f;
986   PFNGLUNIFORM2FPROC                glUniform2f;
987   PFNGLUNIFORM3FPROC                glUniform3f;
988   PFNGLUNIFORM4FPROC                glUniform4f;
989   PFNGLUNIFORM1IPROC                glUniform1i;
990   PFNGLUNIFORM2IPROC                glUniform2i;
991   PFNGLUNIFORM3IPROC                glUniform3i;
992   PFNGLUNIFORM4IPROC                glUniform4i;
993   PFNGLUNIFORM1FVPROC               glUniform1fv;
994   PFNGLUNIFORM2FVPROC               glUniform2fv;
995   PFNGLUNIFORM3FVPROC               glUniform3fv;
996   PFNGLUNIFORM4FVPROC               glUniform4fv;
997   PFNGLUNIFORM1IVPROC               glUniform1iv;
998   PFNGLUNIFORM2IVPROC               glUniform2iv;
999   PFNGLUNIFORM3IVPROC               glUniform3iv;
1000   PFNGLUNIFORM4IVPROC               glUniform4iv;
1001   PFNGLUNIFORMMATRIX2FVPROC         glUniformMatrix2fv;
1002   PFNGLUNIFORMMATRIX3FVPROC         glUniformMatrix3fv;
1003   PFNGLUNIFORMMATRIX4FVPROC         glUniformMatrix4fv;
1004   PFNGLVALIDATEPROGRAMPROC          glValidateProgram;
1005   PFNGLVERTEXATTRIB1DPROC           glVertexAttrib1d;
1006   PFNGLVERTEXATTRIB1DVPROC          glVertexAttrib1dv;
1007   PFNGLVERTEXATTRIB1FPROC           glVertexAttrib1f;
1008   PFNGLVERTEXATTRIB1FVPROC          glVertexAttrib1fv;
1009   PFNGLVERTEXATTRIB1SPROC           glVertexAttrib1s;
1010   PFNGLVERTEXATTRIB1SVPROC          glVertexAttrib1sv;
1011   PFNGLVERTEXATTRIB2DPROC           glVertexAttrib2d;
1012   PFNGLVERTEXATTRIB2DVPROC          glVertexAttrib2dv;
1013   PFNGLVERTEXATTRIB2FPROC           glVertexAttrib2f;
1014   PFNGLVERTEXATTRIB2FVPROC          glVertexAttrib2fv;
1015   PFNGLVERTEXATTRIB2SPROC           glVertexAttrib2s;
1016   PFNGLVERTEXATTRIB2SVPROC          glVertexAttrib2sv;
1017   PFNGLVERTEXATTRIB3DPROC           glVertexAttrib3d;
1018   PFNGLVERTEXATTRIB3DVPROC          glVertexAttrib3dv;
1019   PFNGLVERTEXATTRIB3FPROC           glVertexAttrib3f;
1020   PFNGLVERTEXATTRIB3FVPROC          glVertexAttrib3fv;
1021   PFNGLVERTEXATTRIB3SPROC           glVertexAttrib3s;
1022   PFNGLVERTEXATTRIB3SVPROC          glVertexAttrib3sv;
1023   PFNGLVERTEXATTRIB4NBVPROC         glVertexAttrib4Nbv;
1024   PFNGLVERTEXATTRIB4NIVPROC         glVertexAttrib4Niv;
1025   PFNGLVERTEXATTRIB4NSVPROC         glVertexAttrib4Nsv;
1026   PFNGLVERTEXATTRIB4NUBPROC         glVertexAttrib4Nub;
1027   PFNGLVERTEXATTRIB4NUBVPROC        glVertexAttrib4Nubv;
1028   PFNGLVERTEXATTRIB4NUIVPROC        glVertexAttrib4Nuiv;
1029   PFNGLVERTEXATTRIB4NUSVPROC        glVertexAttrib4Nusv;
1030   PFNGLVERTEXATTRIB4BVPROC          glVertexAttrib4bv;
1031   PFNGLVERTEXATTRIB4DPROC           glVertexAttrib4d;
1032   PFNGLVERTEXATTRIB4DVPROC          glVertexAttrib4dv;
1033   PFNGLVERTEXATTRIB4FPROC           glVertexAttrib4f;
1034   PFNGLVERTEXATTRIB4FVPROC          glVertexAttrib4fv;
1035   PFNGLVERTEXATTRIB4IVPROC          glVertexAttrib4iv;
1036   PFNGLVERTEXATTRIB4SPROC           glVertexAttrib4s;
1037   PFNGLVERTEXATTRIB4SVPROC          glVertexAttrib4sv;
1038   PFNGLVERTEXATTRIB4UBVPROC         glVertexAttrib4ubv;
1039   PFNGLVERTEXATTRIB4UIVPROC         glVertexAttrib4uiv;
1040   PFNGLVERTEXATTRIB4USVPROC         glVertexAttrib4usv;
1041   PFNGLVERTEXATTRIBPOINTERPROC      glVertexAttribPointer;
1042
1043 public: //! @name OpenGL 2.1
1044
1045   PFNGLUNIFORMMATRIX2X3FVPROC       glUniformMatrix2x3fv;
1046   PFNGLUNIFORMMATRIX3X2FVPROC       glUniformMatrix3x2fv;
1047   PFNGLUNIFORMMATRIX2X4FVPROC       glUniformMatrix2x4fv;
1048   PFNGLUNIFORMMATRIX4X2FVPROC       glUniformMatrix4x2fv;
1049   PFNGLUNIFORMMATRIX3X4FVPROC       glUniformMatrix3x4fv;
1050   PFNGLUNIFORMMATRIX4X3FVPROC       glUniformMatrix4x3fv;
1051
1052 public: //! @name GL_ARB_framebuffer_object (added to OpenGL 3.0 core)
1053
1054   PFNGLISRENDERBUFFERPROC                      glIsRenderbuffer;
1055   PFNGLBINDRENDERBUFFERPROC                    glBindRenderbuffer;
1056   PFNGLDELETERENDERBUFFERSPROC                 glDeleteRenderbuffers;
1057   PFNGLGENRENDERBUFFERSPROC                    glGenRenderbuffers;
1058   PFNGLRENDERBUFFERSTORAGEPROC                 glRenderbufferStorage;
1059   PFNGLGETRENDERBUFFERPARAMETERIVPROC          glGetRenderbufferParameteriv;
1060   PFNGLISFRAMEBUFFERPROC                       glIsFramebuffer;
1061   PFNGLBINDFRAMEBUFFERPROC                     glBindFramebuffer;
1062   PFNGLDELETEFRAMEBUFFERSPROC                  glDeleteFramebuffers;
1063   PFNGLGENFRAMEBUFFERSPROC                     glGenFramebuffers;
1064   PFNGLCHECKFRAMEBUFFERSTATUSPROC              glCheckFramebufferStatus;
1065   PFNGLFRAMEBUFFERTEXTURE1DPROC                glFramebufferTexture1D;
1066   PFNGLFRAMEBUFFERTEXTURE2DPROC                glFramebufferTexture2D;
1067   PFNGLFRAMEBUFFERTEXTURE3DPROC                glFramebufferTexture3D;
1068   PFNGLFRAMEBUFFERRENDERBUFFERPROC             glFramebufferRenderbuffer;
1069   PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv;
1070   PFNGLGENERATEMIPMAPPROC                      glGenerateMipmap;
1071   PFNGLBLITFRAMEBUFFERPROC                     glBlitFramebuffer;
1072   PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC      glRenderbufferStorageMultisample;
1073   PFNGLFRAMEBUFFERTEXTURELAYERPROC             glFramebufferTextureLayer;
1074
1075 public: //! @name GL_ARB_vertex_array_object (added to OpenGL 3.0 core)
1076
1077   PFNGLBINDVERTEXARRAYPROC             glBindVertexArray;
1078   PFNGLDELETEVERTEXARRAYSPROC          glDeleteVertexArrays;
1079   PFNGLGENVERTEXARRAYSPROC             glGenVertexArrays;
1080   PFNGLISVERTEXARRAYPROC               glIsVertexArray;
1081
1082 public: //! @name GL_ARB_map_buffer_range (added to OpenGL 3.0 core)
1083
1084   PFNGLMAPBUFFERRANGEPROC              glMapBufferRange;
1085   PFNGLFLUSHMAPPEDBUFFERRANGEPROC      glFlushMappedBufferRange;
1086
1087 public: //! @name OpenGL 3.0
1088
1089   PFNGLCOLORMASKIPROC                  glColorMaski;
1090   PFNGLGETBOOLEANI_VPROC               glGetBooleani_v;
1091   PFNGLGETINTEGERI_VPROC               glGetIntegeri_v;
1092   PFNGLENABLEIPROC                     glEnablei;
1093   PFNGLDISABLEIPROC                    glDisablei;
1094   PFNGLISENABLEDIPROC                  glIsEnabledi;
1095   PFNGLBEGINTRANSFORMFEEDBACKPROC      glBeginTransformFeedback;
1096   PFNGLENDTRANSFORMFEEDBACKPROC        glEndTransformFeedback;
1097   PFNGLBINDBUFFERRANGEPROC             glBindBufferRange;
1098   PFNGLBINDBUFFERBASEPROC              glBindBufferBase;
1099   PFNGLTRANSFORMFEEDBACKVARYINGSPROC   glTransformFeedbackVaryings;
1100   PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glGetTransformFeedbackVarying;
1101   PFNGLCLAMPCOLORPROC                  glClampColor;
1102   PFNGLBEGINCONDITIONALRENDERPROC      glBeginConditionalRender;
1103   PFNGLENDCONDITIONALRENDERPROC        glEndConditionalRender;
1104   PFNGLVERTEXATTRIBIPOINTERPROC        glVertexAttribIPointer;
1105   PFNGLGETVERTEXATTRIBIIVPROC          glGetVertexAttribIiv;
1106   PFNGLGETVERTEXATTRIBIUIVPROC         glGetVertexAttribIuiv;
1107   PFNGLVERTEXATTRIBI1IPROC             glVertexAttribI1i;
1108   PFNGLVERTEXATTRIBI2IPROC             glVertexAttribI2i;
1109   PFNGLVERTEXATTRIBI3IPROC             glVertexAttribI3i;
1110   PFNGLVERTEXATTRIBI4IPROC             glVertexAttribI4i;
1111   PFNGLVERTEXATTRIBI1UIPROC            glVertexAttribI1ui;
1112   PFNGLVERTEXATTRIBI2UIPROC            glVertexAttribI2ui;
1113   PFNGLVERTEXATTRIBI3UIPROC            glVertexAttribI3ui;
1114   PFNGLVERTEXATTRIBI4UIPROC            glVertexAttribI4ui;
1115   PFNGLVERTEXATTRIBI1IVPROC            glVertexAttribI1iv;
1116   PFNGLVERTEXATTRIBI2IVPROC            glVertexAttribI2iv;
1117   PFNGLVERTEXATTRIBI3IVPROC            glVertexAttribI3iv;
1118   PFNGLVERTEXATTRIBI4IVPROC            glVertexAttribI4iv;
1119   PFNGLVERTEXATTRIBI1UIVPROC           glVertexAttribI1uiv;
1120   PFNGLVERTEXATTRIBI2UIVPROC           glVertexAttribI2uiv;
1121   PFNGLVERTEXATTRIBI3UIVPROC           glVertexAttribI3uiv;
1122   PFNGLVERTEXATTRIBI4UIVPROC           glVertexAttribI4uiv;
1123   PFNGLVERTEXATTRIBI4BVPROC            glVertexAttribI4bv;
1124   PFNGLVERTEXATTRIBI4SVPROC            glVertexAttribI4sv;
1125   PFNGLVERTEXATTRIBI4UBVPROC           glVertexAttribI4ubv;
1126   PFNGLVERTEXATTRIBI4USVPROC           glVertexAttribI4usv;
1127   PFNGLGETUNIFORMUIVPROC               glGetUniformuiv;
1128   PFNGLBINDFRAGDATALOCATIONPROC        glBindFragDataLocation;
1129   PFNGLGETFRAGDATALOCATIONPROC         glGetFragDataLocation;
1130   PFNGLUNIFORM1UIPROC                  glUniform1ui;
1131   PFNGLUNIFORM2UIPROC                  glUniform2ui;
1132   PFNGLUNIFORM3UIPROC                  glUniform3ui;
1133   PFNGLUNIFORM4UIPROC                  glUniform4ui;
1134   PFNGLUNIFORM1UIVPROC                 glUniform1uiv;
1135   PFNGLUNIFORM2UIVPROC                 glUniform2uiv;
1136   PFNGLUNIFORM3UIVPROC                 glUniform3uiv;
1137   PFNGLUNIFORM4UIVPROC                 glUniform4uiv;
1138   PFNGLTEXPARAMETERIIVPROC             glTexParameterIiv;
1139   PFNGLTEXPARAMETERIUIVPROC            glTexParameterIuiv;
1140   PFNGLGETTEXPARAMETERIIVPROC          glGetTexParameterIiv;
1141   PFNGLGETTEXPARAMETERIUIVPROC         glGetTexParameterIuiv;
1142   PFNGLCLEARBUFFERIVPROC               glClearBufferiv;
1143   PFNGLCLEARBUFFERUIVPROC              glClearBufferuiv;
1144   PFNGLCLEARBUFFERFVPROC               glClearBufferfv;
1145   PFNGLCLEARBUFFERFIPROC               glClearBufferfi;
1146   PFNGLGETSTRINGIPROC                  glGetStringi;
1147
1148 public: //! @name GL_ARB_uniform_buffer_object (added to OpenGL 3.1 core)
1149
1150   PFNGLGETUNIFORMINDICESPROC           glGetUniformIndices;
1151   PFNGLGETACTIVEUNIFORMSIVPROC         glGetActiveUniformsiv;
1152   PFNGLGETACTIVEUNIFORMNAMEPROC        glGetActiveUniformName;
1153   PFNGLGETUNIFORMBLOCKINDEXPROC        glGetUniformBlockIndex;
1154   PFNGLGETACTIVEUNIFORMBLOCKIVPROC     glGetActiveUniformBlockiv;
1155   PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC   glGetActiveUniformBlockName;
1156   PFNGLUNIFORMBLOCKBINDINGPROC         glUniformBlockBinding;
1157
1158 public: //! @name GL_ARB_copy_buffer (added to OpenGL 3.1 core)
1159
1160   PFNGLCOPYBUFFERSUBDATAPROC           glCopyBufferSubData;
1161
1162 public: //! @name OpenGL 3.1
1163
1164   PFNGLDRAWARRAYSINSTANCEDPROC         glDrawArraysInstanced;
1165   PFNGLDRAWELEMENTSINSTANCEDPROC       glDrawElementsInstanced;
1166   PFNGLTEXBUFFERPROC                   glTexBuffer;
1167   PFNGLPRIMITIVERESTARTINDEXPROC       glPrimitiveRestartIndex;
1168
1169 public: //! @name GL_ARB_draw_elements_base_vertex (added to OpenGL 3.2 core)
1170
1171   PFNGLDRAWELEMENTSBASEVERTEXPROC      glDrawElementsBaseVertex;
1172   PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glDrawRangeElementsBaseVertex;
1173   PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertex;
1174   PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glMultiDrawElementsBaseVertex;
1175
1176 public: //! @name GL_ARB_provoking_vertex (added to OpenGL 3.2 core)
1177
1178   PFNGLPROVOKINGVERTEXPROC             glProvokingVertex;
1179
1180 public: //! @name GL_ARB_sync (added to OpenGL 3.2 core)
1181
1182   PFNGLFENCESYNCPROC                   glFenceSync;
1183   PFNGLISSYNCPROC                      glIsSync;
1184   PFNGLDELETESYNCPROC                  glDeleteSync;
1185   PFNGLCLIENTWAITSYNCPROC              glClientWaitSync;
1186   PFNGLWAITSYNCPROC                    glWaitSync;
1187   PFNGLGETINTEGER64VPROC               glGetInteger64v;
1188   PFNGLGETSYNCIVPROC                   glGetSynciv;
1189
1190 public: //! @name GL_ARB_texture_multisample (added to OpenGL 3.2 core)
1191
1192   PFNGLTEXIMAGE2DMULTISAMPLEPROC       glTexImage2DMultisample;
1193   PFNGLTEXIMAGE3DMULTISAMPLEPROC       glTexImage3DMultisample;
1194   PFNGLGETMULTISAMPLEFVPROC            glGetMultisamplefv;
1195   PFNGLSAMPLEMASKIPROC                 glSampleMaski;
1196
1197 public: //! @name OpenGL 3.2
1198
1199   PFNGLGETINTEGER64I_VPROC             glGetInteger64i_v;
1200   PFNGLGETBUFFERPARAMETERI64VPROC      glGetBufferParameteri64v;
1201   PFNGLFRAMEBUFFERTEXTUREPROC          glFramebufferTexture;
1202
1203 public: //! @name GL_ARB_blend_func_extended (added to OpenGL 3.3 core)
1204
1205   PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glBindFragDataLocationIndexed;
1206   PFNGLGETFRAGDATAINDEXPROC            glGetFragDataIndex;
1207
1208 public: //! @name GL_ARB_sampler_objects (added to OpenGL 3.3 core)
1209
1210   PFNGLGENSAMPLERSPROC                 glGenSamplers;
1211   PFNGLDELETESAMPLERSPROC              glDeleteSamplers;
1212   PFNGLISSAMPLERPROC                   glIsSampler;
1213   PFNGLBINDSAMPLERPROC                 glBindSampler;
1214   PFNGLSAMPLERPARAMETERIPROC           glSamplerParameteri;
1215   PFNGLSAMPLERPARAMETERIVPROC          glSamplerParameteriv;
1216   PFNGLSAMPLERPARAMETERFPROC           glSamplerParameterf;
1217   PFNGLSAMPLERPARAMETERFVPROC          glSamplerParameterfv;
1218   PFNGLSAMPLERPARAMETERIIVPROC         glSamplerParameterIiv;
1219   PFNGLSAMPLERPARAMETERIUIVPROC        glSamplerParameterIuiv;
1220   PFNGLGETSAMPLERPARAMETERIVPROC       glGetSamplerParameteriv;
1221   PFNGLGETSAMPLERPARAMETERIIVPROC      glGetSamplerParameterIiv;
1222   PFNGLGETSAMPLERPARAMETERFVPROC       glGetSamplerParameterfv;
1223   PFNGLGETSAMPLERPARAMETERIUIVPROC     glGetSamplerParameterIuiv;
1224
1225 public: //! @name GL_ARB_timer_query (added to OpenGL 3.3 core)
1226
1227   PFNGLQUERYCOUNTERPROC                glQueryCounter;
1228   PFNGLGETQUERYOBJECTI64VPROC          glGetQueryObjecti64v;
1229   PFNGLGETQUERYOBJECTUI64VPROC         glGetQueryObjectui64v;
1230
1231 public: //! @name GL_ARB_vertex_type_2_10_10_10_rev (added to OpenGL 3.3 core)
1232
1233   PFNGLVERTEXP2UIPROC                  glVertexP2ui;
1234   PFNGLVERTEXP2UIVPROC                 glVertexP2uiv;
1235   PFNGLVERTEXP3UIPROC                  glVertexP3ui;
1236   PFNGLVERTEXP3UIVPROC                 glVertexP3uiv;
1237   PFNGLVERTEXP4UIPROC                  glVertexP4ui;
1238   PFNGLVERTEXP4UIVPROC                 glVertexP4uiv;
1239   PFNGLTEXCOORDP1UIPROC                glTexCoordP1ui;
1240   PFNGLTEXCOORDP1UIVPROC               glTexCoordP1uiv;
1241   PFNGLTEXCOORDP2UIPROC                glTexCoordP2ui;
1242   PFNGLTEXCOORDP2UIVPROC               glTexCoordP2uiv;
1243   PFNGLTEXCOORDP3UIPROC                glTexCoordP3ui;
1244   PFNGLTEXCOORDP3UIVPROC               glTexCoordP3uiv;
1245   PFNGLTEXCOORDP4UIPROC                glTexCoordP4ui;
1246   PFNGLTEXCOORDP4UIVPROC               glTexCoordP4uiv;
1247   PFNGLMULTITEXCOORDP1UIPROC           glMultiTexCoordP1ui;
1248   PFNGLMULTITEXCOORDP1UIVPROC          glMultiTexCoordP1uiv;
1249   PFNGLMULTITEXCOORDP2UIPROC           glMultiTexCoordP2ui;
1250   PFNGLMULTITEXCOORDP2UIVPROC          glMultiTexCoordP2uiv;
1251   PFNGLMULTITEXCOORDP3UIPROC           glMultiTexCoordP3ui;
1252   PFNGLMULTITEXCOORDP3UIVPROC          glMultiTexCoordP3uiv;
1253   PFNGLMULTITEXCOORDP4UIPROC           glMultiTexCoordP4ui;
1254   PFNGLMULTITEXCOORDP4UIVPROC          glMultiTexCoordP4uiv;
1255   PFNGLNORMALP3UIPROC                  glNormalP3ui;
1256   PFNGLNORMALP3UIVPROC                 glNormalP3uiv;
1257   PFNGLCOLORP3UIPROC                   glColorP3ui;
1258   PFNGLCOLORP3UIVPROC                  glColorP3uiv;
1259   PFNGLCOLORP4UIPROC                   glColorP4ui;
1260   PFNGLCOLORP4UIVPROC                  glColorP4uiv;
1261   PFNGLSECONDARYCOLORP3UIPROC          glSecondaryColorP3ui;
1262   PFNGLSECONDARYCOLORP3UIVPROC         glSecondaryColorP3uiv;
1263   PFNGLVERTEXATTRIBP1UIPROC            glVertexAttribP1ui;
1264   PFNGLVERTEXATTRIBP1UIVPROC           glVertexAttribP1uiv;
1265   PFNGLVERTEXATTRIBP2UIPROC            glVertexAttribP2ui;
1266   PFNGLVERTEXATTRIBP2UIVPROC           glVertexAttribP2uiv;
1267   PFNGLVERTEXATTRIBP3UIPROC            glVertexAttribP3ui;
1268   PFNGLVERTEXATTRIBP3UIVPROC           glVertexAttribP3uiv;
1269   PFNGLVERTEXATTRIBP4UIPROC            glVertexAttribP4ui;
1270   PFNGLVERTEXATTRIBP4UIVPROC           glVertexAttribP4uiv;
1271
1272 public: //! @name OpenGL 3.3
1273
1274   PFNGLVERTEXATTRIBDIVISORPROC         glVertexAttribDivisor;
1275
1276 public: //! @name GL_ARB_draw_indirect (added to OpenGL 4.0 core)
1277
1278   PFNGLDRAWARRAYSINDIRECTPROC          glDrawArraysIndirect;
1279   PFNGLDRAWELEMENTSINDIRECTPROC        glDrawElementsIndirect;
1280
1281 public: //! @name GL_ARB_gpu_shader_fp64 (added to OpenGL 4.0 core)
1282
1283   PFNGLUNIFORM1DPROC                   glUniform1d;
1284   PFNGLUNIFORM2DPROC                   glUniform2d;
1285   PFNGLUNIFORM3DPROC                   glUniform3d;
1286   PFNGLUNIFORM4DPROC                   glUniform4d;
1287   PFNGLUNIFORM1DVPROC                  glUniform1dv;
1288   PFNGLUNIFORM2DVPROC                  glUniform2dv;
1289   PFNGLUNIFORM3DVPROC                  glUniform3dv;
1290   PFNGLUNIFORM4DVPROC                  glUniform4dv;
1291   PFNGLUNIFORMMATRIX2DVPROC            glUniformMatrix2dv;
1292   PFNGLUNIFORMMATRIX3DVPROC            glUniformMatrix3dv;
1293   PFNGLUNIFORMMATRIX4DVPROC            glUniformMatrix4dv;
1294   PFNGLUNIFORMMATRIX2X3DVPROC          glUniformMatrix2x3dv;
1295   PFNGLUNIFORMMATRIX2X4DVPROC          glUniformMatrix2x4dv;
1296   PFNGLUNIFORMMATRIX3X2DVPROC          glUniformMatrix3x2dv;
1297   PFNGLUNIFORMMATRIX3X4DVPROC          glUniformMatrix3x4dv;
1298   PFNGLUNIFORMMATRIX4X2DVPROC          glUniformMatrix4x2dv;
1299   PFNGLUNIFORMMATRIX4X3DVPROC          glUniformMatrix4x3dv;
1300   PFNGLGETUNIFORMDVPROC                glGetUniformdv;
1301
1302 public: //! @name GL_ARB_shader_subroutine (added to OpenGL 4.0 core)
1303
1304   PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC   glGetSubroutineUniformLocation;
1305   PFNGLGETSUBROUTINEINDEXPROC             glGetSubroutineIndex;
1306   PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC   glGetActiveSubroutineUniformiv;
1307   PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glGetActiveSubroutineUniformName;
1308   PFNGLGETACTIVESUBROUTINENAMEPROC        glGetActiveSubroutineName;
1309   PFNGLUNIFORMSUBROUTINESUIVPROC          glUniformSubroutinesuiv;
1310   PFNGLGETUNIFORMSUBROUTINEUIVPROC        glGetUniformSubroutineuiv;
1311   PFNGLGETPROGRAMSTAGEIVPROC              glGetProgramStageiv;
1312
1313 public: //! @name GL_ARB_tessellation_shader (added to OpenGL 4.0 core)
1314
1315   PFNGLPATCHPARAMETERIPROC             glPatchParameteri;
1316   PFNGLPATCHPARAMETERFVPROC            glPatchParameterfv;
1317
1318 public: //! @name GL_ARB_transform_feedback2 (added to OpenGL 4.0 core)
1319
1320   PFNGLBINDTRANSFORMFEEDBACKPROC       glBindTransformFeedback;
1321   PFNGLDELETETRANSFORMFEEDBACKSPROC    glDeleteTransformFeedbacks;
1322   PFNGLGENTRANSFORMFEEDBACKSPROC       glGenTransformFeedbacks;
1323   PFNGLISTRANSFORMFEEDBACKPROC         glIsTransformFeedback;
1324   PFNGLPAUSETRANSFORMFEEDBACKPROC      glPauseTransformFeedback;
1325   PFNGLRESUMETRANSFORMFEEDBACKPROC     glResumeTransformFeedback;
1326   PFNGLDRAWTRANSFORMFEEDBACKPROC       glDrawTransformFeedback;
1327
1328 public: //! @name GL_ARB_transform_feedback3 (added to OpenGL 4.0 core)
1329
1330   PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glDrawTransformFeedbackStream;
1331   PFNGLBEGINQUERYINDEXEDPROC           glBeginQueryIndexed;
1332   PFNGLENDQUERYINDEXEDPROC             glEndQueryIndexed;
1333   PFNGLGETQUERYINDEXEDIVPROC           glGetQueryIndexediv;
1334
1335 public: //! @name OpenGL 4.0
1336
1337   PFNGLMINSAMPLESHADINGPROC            glMinSampleShading;
1338   PFNGLBLENDEQUATIONIPROC              glBlendEquationi;
1339   PFNGLBLENDEQUATIONSEPARATEIPROC      glBlendEquationSeparatei;
1340   PFNGLBLENDFUNCIPROC                  glBlendFunci;
1341   PFNGLBLENDFUNCSEPARATEIPROC          glBlendFuncSeparatei;
1342
1343 public: //! @name GL_ARB_ES2_compatibility (added to OpenGL 4.1 core)
1344
1345   PFNGLRELEASESHADERCOMPILERPROC       glReleaseShaderCompiler;
1346   PFNGLSHADERBINARYPROC                glShaderBinary;
1347   PFNGLGETSHADERPRECISIONFORMATPROC    glGetShaderPrecisionFormat;
1348   PFNGLDEPTHRANGEFPROC                 glDepthRangef;
1349   PFNGLCLEARDEPTHFPROC                 glClearDepthf;
1350
1351 public: //! @name GL_ARB_get_program_binary (added to OpenGL 4.1 core)
1352
1353   PFNGLGETPROGRAMBINARYPROC            glGetProgramBinary;
1354   PFNGLPROGRAMBINARYPROC               glProgramBinary;
1355   PFNGLPROGRAMPARAMETERIPROC           glProgramParameteri;
1356
1357 public: //! @name GL_ARB_separate_shader_objects (added to OpenGL 4.1 core)
1358
1359   PFNGLUSEPROGRAMSTAGESPROC            glUseProgramStages;
1360   PFNGLACTIVESHADERPROGRAMPROC         glActiveShaderProgram;
1361   PFNGLCREATESHADERPROGRAMVPROC        glCreateShaderProgramv;
1362   PFNGLBINDPROGRAMPIPELINEPROC         glBindProgramPipeline;
1363   PFNGLDELETEPROGRAMPIPELINESPROC      glDeleteProgramPipelines;
1364   PFNGLGENPROGRAMPIPELINESPROC         glGenProgramPipelines;
1365   PFNGLISPROGRAMPIPELINEPROC           glIsProgramPipeline;
1366   PFNGLGETPROGRAMPIPELINEIVPROC        glGetProgramPipelineiv;
1367   PFNGLPROGRAMUNIFORM1IPROC            glProgramUniform1i;
1368   PFNGLPROGRAMUNIFORM1IVPROC           glProgramUniform1iv;
1369   PFNGLPROGRAMUNIFORM1FPROC            glProgramUniform1f;
1370   PFNGLPROGRAMUNIFORM1FVPROC           glProgramUniform1fv;
1371   PFNGLPROGRAMUNIFORM1DPROC            glProgramUniform1d;
1372   PFNGLPROGRAMUNIFORM1DVPROC           glProgramUniform1dv;
1373   PFNGLPROGRAMUNIFORM1UIPROC           glProgramUniform1ui;
1374   PFNGLPROGRAMUNIFORM1UIVPROC          glProgramUniform1uiv;
1375   PFNGLPROGRAMUNIFORM2IPROC            glProgramUniform2i;
1376   PFNGLPROGRAMUNIFORM2IVPROC           glProgramUniform2iv;
1377   PFNGLPROGRAMUNIFORM2FPROC            glProgramUniform2f;
1378   PFNGLPROGRAMUNIFORM2FVPROC           glProgramUniform2fv;
1379   PFNGLPROGRAMUNIFORM2DPROC            glProgramUniform2d;
1380   PFNGLPROGRAMUNIFORM2DVPROC           glProgramUniform2dv;
1381   PFNGLPROGRAMUNIFORM2UIPROC           glProgramUniform2ui;
1382   PFNGLPROGRAMUNIFORM2UIVPROC          glProgramUniform2uiv;
1383   PFNGLPROGRAMUNIFORM3IPROC            glProgramUniform3i;
1384   PFNGLPROGRAMUNIFORM3IVPROC           glProgramUniform3iv;
1385   PFNGLPROGRAMUNIFORM3FPROC            glProgramUniform3f;
1386   PFNGLPROGRAMUNIFORM3FVPROC           glProgramUniform3fv;
1387   PFNGLPROGRAMUNIFORM3DPROC            glProgramUniform3d;
1388   PFNGLPROGRAMUNIFORM3DVPROC           glProgramUniform3dv;
1389   PFNGLPROGRAMUNIFORM3UIPROC           glProgramUniform3ui;
1390   PFNGLPROGRAMUNIFORM3UIVPROC          glProgramUniform3uiv;
1391   PFNGLPROGRAMUNIFORM4IPROC            glProgramUniform4i;
1392   PFNGLPROGRAMUNIFORM4IVPROC           glProgramUniform4iv;
1393   PFNGLPROGRAMUNIFORM4FPROC            glProgramUniform4f;
1394   PFNGLPROGRAMUNIFORM4FVPROC           glProgramUniform4fv;
1395   PFNGLPROGRAMUNIFORM4DPROC            glProgramUniform4d;
1396   PFNGLPROGRAMUNIFORM4DVPROC           glProgramUniform4dv;
1397   PFNGLPROGRAMUNIFORM4UIPROC           glProgramUniform4ui;
1398   PFNGLPROGRAMUNIFORM4UIVPROC          glProgramUniform4uiv;
1399   PFNGLPROGRAMUNIFORMMATRIX2FVPROC     glProgramUniformMatrix2fv;
1400   PFNGLPROGRAMUNIFORMMATRIX3FVPROC     glProgramUniformMatrix3fv;
1401   PFNGLPROGRAMUNIFORMMATRIX4FVPROC     glProgramUniformMatrix4fv;
1402   PFNGLPROGRAMUNIFORMMATRIX2DVPROC     glProgramUniformMatrix2dv;
1403   PFNGLPROGRAMUNIFORMMATRIX3DVPROC     glProgramUniformMatrix3dv;
1404   PFNGLPROGRAMUNIFORMMATRIX4DVPROC     glProgramUniformMatrix4dv;
1405   PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC   glProgramUniformMatrix2x3fv;
1406   PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC   glProgramUniformMatrix3x2fv;
1407   PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC   glProgramUniformMatrix2x4fv;
1408   PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC   glProgramUniformMatrix4x2fv;
1409   PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC   glProgramUniformMatrix3x4fv;
1410   PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC   glProgramUniformMatrix4x3fv;
1411   PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC   glProgramUniformMatrix2x3dv;
1412   PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC   glProgramUniformMatrix3x2dv;
1413   PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC   glProgramUniformMatrix2x4dv;
1414   PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC   glProgramUniformMatrix4x2dv;
1415   PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC   glProgramUniformMatrix3x4dv;
1416   PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC   glProgramUniformMatrix4x3dv;
1417   PFNGLVALIDATEPROGRAMPIPELINEPROC     glValidateProgramPipeline;
1418   PFNGLGETPROGRAMPIPELINEINFOLOGPROC   glGetProgramPipelineInfoLog;
1419
1420 public: //! @name GL_ARB_vertex_attrib_64bit (added to OpenGL 4.1 core)
1421
1422   PFNGLVERTEXATTRIBL1DPROC             glVertexAttribL1d;
1423   PFNGLVERTEXATTRIBL2DPROC             glVertexAttribL2d;
1424   PFNGLVERTEXATTRIBL3DPROC             glVertexAttribL3d;
1425   PFNGLVERTEXATTRIBL4DPROC             glVertexAttribL4d;
1426   PFNGLVERTEXATTRIBL1DVPROC            glVertexAttribL1dv;
1427   PFNGLVERTEXATTRIBL2DVPROC            glVertexAttribL2dv;
1428   PFNGLVERTEXATTRIBL3DVPROC            glVertexAttribL3dv;
1429   PFNGLVERTEXATTRIBL4DVPROC            glVertexAttribL4dv;
1430   PFNGLVERTEXATTRIBLPOINTERPROC        glVertexAttribLPointer;
1431   PFNGLGETVERTEXATTRIBLDVPROC          glGetVertexAttribLdv;
1432
1433 public: //! @name GL_ARB_viewport_array (added to OpenGL 4.1 core)
1434
1435   PFNGLVIEWPORTARRAYVPROC              glViewportArrayv;
1436   PFNGLVIEWPORTINDEXEDFPROC            glViewportIndexedf;
1437   PFNGLVIEWPORTINDEXEDFVPROC           glViewportIndexedfv;
1438   PFNGLSCISSORARRAYVPROC               glScissorArrayv;
1439   PFNGLSCISSORINDEXEDPROC              glScissorIndexed;
1440   PFNGLSCISSORINDEXEDVPROC             glScissorIndexedv;
1441   PFNGLDEPTHRANGEARRAYVPROC            glDepthRangeArrayv;
1442   PFNGLDEPTHRANGEINDEXEDPROC           glDepthRangeIndexed;
1443   PFNGLGETFLOATI_VPROC                 glGetFloati_v;
1444   PFNGLGETDOUBLEI_VPROC                glGetDoublei_v;
1445
1446 public: //! @name OpenGL 4.1
1447
1448   //
1449
1450 public: //! @name GL_ARB_base_instance (added to OpenGL 4.2 core)
1451
1452   PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC             glDrawArraysInstancedBaseInstance;
1453   PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC           glDrawElementsInstancedBaseInstance;
1454   PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glDrawElementsInstancedBaseVertexBaseInstance;
1455
1456 public: //! @name GL_ARB_transform_feedback_instanced (added to OpenGL 4.2 core)
1457
1458   PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC              glDrawTransformFeedbackInstanced;
1459   PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC        glDrawTransformFeedbackStreamInstanced;
1460
1461 public: //! @name GL_ARB_internalformat_query (added to OpenGL 4.2 core)
1462
1463   PFNGLGETINTERNALFORMATIVPROC                         glGetInternalformativ;
1464
1465 public: //! @name GL_ARB_shader_atomic_counters (added to OpenGL 4.2 core)
1466
1467   PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC              glGetActiveAtomicCounterBufferiv;
1468
1469 public: //! @name GL_ARB_shader_image_load_store (added to OpenGL 4.2 core)
1470
1471   PFNGLBINDIMAGETEXTUREPROC                            glBindImageTexture;
1472   PFNGLMEMORYBARRIERPROC                               glMemoryBarrier;
1473
1474 public: //! @name GL_ARB_texture_storage (added to OpenGL 4.2 core)
1475
1476   PFNGLTEXSTORAGE1DPROC                                glTexStorage1D;
1477   PFNGLTEXSTORAGE2DPROC                                glTexStorage2D;
1478   PFNGLTEXSTORAGE3DPROC                                glTexStorage3D;
1479
1480 public: //! @name OpenGL 4.2
1481
1482 public: //! @name OpenGL 4.3
1483
1484   PFNGLCLEARBUFFERDATAPROC                 glClearBufferData;
1485   PFNGLCLEARBUFFERSUBDATAPROC              glClearBufferSubData;
1486   PFNGLDISPATCHCOMPUTEPROC                 glDispatchCompute;
1487   PFNGLDISPATCHCOMPUTEINDIRECTPROC         glDispatchComputeIndirect;
1488   PFNGLCOPYIMAGESUBDATAPROC                glCopyImageSubData;
1489   PFNGLFRAMEBUFFERPARAMETERIPROC           glFramebufferParameteri;
1490   PFNGLGETFRAMEBUFFERPARAMETERIVPROC       glGetFramebufferParameteriv;
1491   PFNGLGETINTERNALFORMATI64VPROC           glGetInternalformati64v;
1492   PFNGLINVALIDATETEXSUBIMAGEPROC           glInvalidateTexSubImage;
1493   PFNGLINVALIDATETEXIMAGEPROC              glInvalidateTexImage;
1494   PFNGLINVALIDATEBUFFERSUBDATAPROC         glInvalidateBufferSubData;
1495   PFNGLINVALIDATEBUFFERDATAPROC            glInvalidateBufferData;
1496   PFNGLINVALIDATEFRAMEBUFFERPROC           glInvalidateFramebuffer;
1497   PFNGLINVALIDATESUBFRAMEBUFFERPROC        glInvalidateSubFramebuffer;
1498   PFNGLMULTIDRAWARRAYSINDIRECTPROC         glMultiDrawArraysIndirect;
1499   PFNGLMULTIDRAWELEMENTSINDIRECTPROC       glMultiDrawElementsIndirect;
1500   PFNGLGETPROGRAMINTERFACEIVPROC           glGetProgramInterfaceiv;
1501   PFNGLGETPROGRAMRESOURCEINDEXPROC         glGetProgramResourceIndex;
1502   PFNGLGETPROGRAMRESOURCENAMEPROC          glGetProgramResourceName;
1503   PFNGLGETPROGRAMRESOURCEIVPROC            glGetProgramResourceiv;
1504   PFNGLGETPROGRAMRESOURCELOCATIONPROC      glGetProgramResourceLocation;
1505   PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glGetProgramResourceLocationIndex;
1506   PFNGLSHADERSTORAGEBLOCKBINDINGPROC       glShaderStorageBlockBinding;
1507   PFNGLTEXBUFFERRANGEPROC                  glTexBufferRange;
1508   PFNGLTEXSTORAGE2DMULTISAMPLEPROC         glTexStorage2DMultisample;
1509   PFNGLTEXSTORAGE3DMULTISAMPLEPROC         glTexStorage3DMultisample;
1510   PFNGLTEXTUREVIEWPROC                     glTextureView;
1511   PFNGLBINDVERTEXBUFFERPROC                glBindVertexBuffer;
1512   PFNGLVERTEXATTRIBFORMATPROC              glVertexAttribFormat;
1513   PFNGLVERTEXATTRIBIFORMATPROC             glVertexAttribIFormat;
1514   PFNGLVERTEXATTRIBLFORMATPROC             glVertexAttribLFormat;
1515   PFNGLVERTEXATTRIBBINDINGPROC             glVertexAttribBinding;
1516   PFNGLVERTEXBINDINGDIVISORPROC            glVertexBindingDivisor;
1517   PFNGLDEBUGMESSAGECONTROLPROC             glDebugMessageControl;
1518   PFNGLDEBUGMESSAGEINSERTPROC              glDebugMessageInsert;
1519   PFNGLDEBUGMESSAGECALLBACKPROC            glDebugMessageCallback;
1520   PFNGLGETDEBUGMESSAGELOGPROC              glGetDebugMessageLog;
1521   PFNGLPUSHDEBUGGROUPPROC                  glPushDebugGroup;
1522   PFNGLPOPDEBUGGROUPPROC                   glPopDebugGroup;
1523   PFNGLOBJECTLABELPROC                     glObjectLabel;
1524   PFNGLGETOBJECTLABELPROC                  glGetObjectLabel;
1525   PFNGLOBJECTPTRLABELPROC                  glObjectPtrLabel;
1526   PFNGLGETOBJECTPTRLABELPROC               glGetObjectPtrLabel;
1527
1528 public: //! @name OpenGL 4.4
1529
1530   PFNGLBUFFERSTORAGEPROC     glBufferStorage;
1531   PFNGLCLEARTEXIMAGEPROC     glClearTexImage;
1532   PFNGLCLEARTEXSUBIMAGEPROC  glClearTexSubImage;
1533   PFNGLBINDBUFFERSBASEPROC   glBindBuffersBase;
1534   PFNGLBINDBUFFERSRANGEPROC  glBindBuffersRange;
1535   PFNGLBINDTEXTURESPROC      glBindTextures;
1536   PFNGLBINDSAMPLERSPROC      glBindSamplers;
1537   PFNGLBINDIMAGETEXTURESPROC glBindImageTextures;
1538   PFNGLBINDVERTEXBUFFERSPROC glBindVertexBuffers;
1539
1540 public: //! @name OpenGL 4.5
1541
1542   PFNGLCLIPCONTROLPROC glClipControl;
1543   PFNGLCREATETRANSFORMFEEDBACKSPROC glCreateTransformFeedbacks;
1544   PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC glTransformFeedbackBufferBase;
1545   PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC glTransformFeedbackBufferRange;
1546   PFNGLGETTRANSFORMFEEDBACKIVPROC glGetTransformFeedbackiv;
1547   PFNGLGETTRANSFORMFEEDBACKI_VPROC glGetTransformFeedbacki_v;
1548   PFNGLGETTRANSFORMFEEDBACKI64_VPROC glGetTransformFeedbacki64_v;
1549   PFNGLCREATEBUFFERSPROC glCreateBuffers;
1550   PFNGLNAMEDBUFFERSTORAGEPROC glNamedBufferStorage;
1551   PFNGLNAMEDBUFFERDATAPROC glNamedBufferData;
1552   PFNGLNAMEDBUFFERSUBDATAPROC glNamedBufferSubData;
1553   PFNGLCOPYNAMEDBUFFERSUBDATAPROC glCopyNamedBufferSubData;
1554   PFNGLCLEARNAMEDBUFFERDATAPROC glClearNamedBufferData;
1555   PFNGLCLEARNAMEDBUFFERSUBDATAPROC glClearNamedBufferSubData;
1556   PFNGLMAPNAMEDBUFFERPROC glMapNamedBuffer;
1557   PFNGLMAPNAMEDBUFFERRANGEPROC glMapNamedBufferRange;
1558   PFNGLUNMAPNAMEDBUFFERPROC glUnmapNamedBuffer;
1559   PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glFlushMappedNamedBufferRange;
1560   PFNGLGETNAMEDBUFFERPARAMETERIVPROC glGetNamedBufferParameteriv;
1561   PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glGetNamedBufferParameteri64v;
1562   PFNGLGETNAMEDBUFFERPOINTERVPROC glGetNamedBufferPointerv;
1563   PFNGLGETNAMEDBUFFERSUBDATAPROC glGetNamedBufferSubData;
1564   PFNGLCREATEFRAMEBUFFERSPROC glCreateFramebuffers;
1565   PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC glNamedFramebufferRenderbuffer;
1566   PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC glNamedFramebufferParameteri;
1567   PFNGLNAMEDFRAMEBUFFERTEXTUREPROC glNamedFramebufferTexture;
1568   PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC glNamedFramebufferTextureLayer;
1569   PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC glNamedFramebufferDrawBuffer;
1570   PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC glNamedFramebufferDrawBuffers;
1571   PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC glNamedFramebufferReadBuffer;
1572   PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC glInvalidateNamedFramebufferData;
1573   PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC glInvalidateNamedFramebufferSubData;
1574   PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glClearNamedFramebufferiv;
1575   PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glClearNamedFramebufferuiv;
1576   PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glClearNamedFramebufferfv;
1577   PFNGLCLEARNAMEDFRAMEBUFFERFIPROC glClearNamedFramebufferfi;
1578   PFNGLBLITNAMEDFRAMEBUFFERPROC glBlitNamedFramebuffer;
1579   PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC glCheckNamedFramebufferStatus;
1580   PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC glGetNamedFramebufferParameteriv;
1581   PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetNamedFramebufferAttachmentParameteriv;
1582   PFNGLCREATERENDERBUFFERSPROC glCreateRenderbuffers;
1583   PFNGLNAMEDRENDERBUFFERSTORAGEPROC glNamedRenderbufferStorage;
1584   PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC glNamedRenderbufferStorageMultisample;
1585   PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC glGetNamedRenderbufferParameteriv;
1586   PFNGLCREATETEXTURESPROC glCreateTextures;
1587   PFNGLTEXTUREBUFFERPROC glTextureBuffer;
1588   PFNGLTEXTUREBUFFERRANGEPROC glTextureBufferRange;
1589   PFNGLTEXTURESTORAGE1DPROC glTextureStorage1D;
1590   PFNGLTEXTURESTORAGE2DPROC glTextureStorage2D;
1591   PFNGLTEXTURESTORAGE3DPROC glTextureStorage3D;
1592   PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC glTextureStorage2DMultisample;
1593   PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC glTextureStorage3DMultisample;
1594   PFNGLTEXTURESUBIMAGE1DPROC glTextureSubImage1D;
1595   PFNGLTEXTURESUBIMAGE2DPROC glTextureSubImage2D;
1596   PFNGLTEXTURESUBIMAGE3DPROC glTextureSubImage3D;
1597   PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC glCompressedTextureSubImage1D;
1598   PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC glCompressedTextureSubImage2D;
1599   PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC glCompressedTextureSubImage3D;
1600   PFNGLCOPYTEXTURESUBIMAGE1DPROC glCopyTextureSubImage1D;
1601   PFNGLCOPYTEXTURESUBIMAGE2DPROC glCopyTextureSubImage2D;
1602   PFNGLCOPYTEXTURESUBIMAGE3DPROC glCopyTextureSubImage3D;
1603   PFNGLTEXTUREPARAMETERFPROC glTextureParameterf;
1604   PFNGLTEXTUREPARAMETERFVPROC glTextureParameterfv;
1605   PFNGLTEXTUREPARAMETERIPROC glTextureParameteri;
1606   PFNGLTEXTUREPARAMETERIIVPROC glTextureParameterIiv;
1607   PFNGLTEXTUREPARAMETERIUIVPROC glTextureParameterIuiv;
1608   PFNGLTEXTUREPARAMETERIVPROC glTextureParameteriv;
1609   PFNGLGENERATETEXTUREMIPMAPPROC glGenerateTextureMipmap;
1610   PFNGLBINDTEXTUREUNITPROC glBindTextureUnit;
1611   PFNGLGETTEXTUREIMAGEPROC glGetTextureImage;
1612   PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glGetCompressedTextureImage;
1613   PFNGLGETTEXTURELEVELPARAMETERFVPROC glGetTextureLevelParameterfv;
1614   PFNGLGETTEXTURELEVELPARAMETERIVPROC glGetTextureLevelParameteriv;
1615   PFNGLGETTEXTUREPARAMETERFVPROC glGetTextureParameterfv;
1616   PFNGLGETTEXTUREPARAMETERIIVPROC glGetTextureParameterIiv;
1617   PFNGLGETTEXTUREPARAMETERIUIVPROC glGetTextureParameterIuiv;
1618   PFNGLGETTEXTUREPARAMETERIVPROC glGetTextureParameteriv;
1619   PFNGLCREATEVERTEXARRAYSPROC glCreateVertexArrays;
1620   PFNGLDISABLEVERTEXARRAYATTRIBPROC glDisableVertexArrayAttrib;
1621   PFNGLENABLEVERTEXARRAYATTRIBPROC glEnableVertexArrayAttrib;
1622   PFNGLVERTEXARRAYELEMENTBUFFERPROC glVertexArrayElementBuffer;
1623   PFNGLVERTEXARRAYVERTEXBUFFERPROC glVertexArrayVertexBuffer;
1624   PFNGLVERTEXARRAYVERTEXBUFFERSPROC glVertexArrayVertexBuffers;
1625   PFNGLVERTEXARRAYATTRIBBINDINGPROC glVertexArrayAttribBinding;
1626   PFNGLVERTEXARRAYATTRIBFORMATPROC glVertexArrayAttribFormat;
1627   PFNGLVERTEXARRAYATTRIBIFORMATPROC glVertexArrayAttribIFormat;
1628   PFNGLVERTEXARRAYATTRIBLFORMATPROC glVertexArrayAttribLFormat;
1629   PFNGLVERTEXARRAYBINDINGDIVISORPROC glVertexArrayBindingDivisor;
1630   PFNGLGETVERTEXARRAYIVPROC glGetVertexArrayiv;
1631   PFNGLGETVERTEXARRAYINDEXEDIVPROC glGetVertexArrayIndexediv;
1632   PFNGLGETVERTEXARRAYINDEXED64IVPROC glGetVertexArrayIndexed64iv;
1633   PFNGLCREATESAMPLERSPROC glCreateSamplers;
1634   PFNGLCREATEPROGRAMPIPELINESPROC glCreateProgramPipelines;
1635   PFNGLCREATEQUERIESPROC glCreateQueries;
1636   PFNGLGETQUERYBUFFEROBJECTI64VPROC glGetQueryBufferObjecti64v;
1637   PFNGLGETQUERYBUFFEROBJECTIVPROC glGetQueryBufferObjectiv;
1638   PFNGLGETQUERYBUFFEROBJECTUI64VPROC glGetQueryBufferObjectui64v;
1639   PFNGLGETQUERYBUFFEROBJECTUIVPROC glGetQueryBufferObjectuiv;
1640   PFNGLMEMORYBARRIERBYREGIONPROC glMemoryBarrierByRegion;
1641   PFNGLGETTEXTURESUBIMAGEPROC glGetTextureSubImage;
1642   PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glGetCompressedTextureSubImage;
1643   PFNGLGETGRAPHICSRESETSTATUSPROC glGetGraphicsResetStatus;
1644   PFNGLGETNCOMPRESSEDTEXIMAGEPROC glGetnCompressedTexImage;
1645   PFNGLGETNTEXIMAGEPROC glGetnTexImage;
1646   PFNGLGETNUNIFORMDVPROC glGetnUniformdv;
1647   PFNGLGETNUNIFORMFVPROC glGetnUniformfv;
1648   PFNGLGETNUNIFORMIVPROC glGetnUniformiv;
1649   PFNGLGETNUNIFORMUIVPROC glGetnUniformuiv;
1650   PFNGLREADNPIXELSPROC glReadnPixels;
1651   PFNGLGETNMAPDVPROC glGetnMapdv;
1652   PFNGLGETNMAPFVPROC glGetnMapfv;
1653   PFNGLGETNMAPIVPROC glGetnMapiv;
1654   PFNGLGETNPIXELMAPFVPROC  glGetnPixelMapfv;
1655   PFNGLGETNPIXELMAPUIVPROC glGetnPixelMapuiv;
1656   PFNGLGETNPIXELMAPUSVPROC glGetnPixelMapusv;
1657   PFNGLGETNPOLYGONSTIPPLEPROC glGetnPolygonStipple;
1658   PFNGLGETNCOLORTABLEPROC glGetnColorTable;
1659   PFNGLGETNCONVOLUTIONFILTERPROC glGetnConvolutionFilter;
1660   PFNGLGETNSEPARABLEFILTERPROC glGetnSeparableFilter;
1661   PFNGLGETNHISTOGRAMPROC glGetnHistogram;
1662   PFNGLGETNMINMAXPROC glGetnMinmax;
1663   PFNGLTEXTUREBARRIERPROC glTextureBarrier;
1664
1665 public: //! @name GL_EXT_geometry_shader4
1666
1667   PFNGLPROGRAMPARAMETERIEXTPROC glProgramParameteriEXT;
1668
1669 public: //! @name GL_ARB_bindless_texture
1670
1671   PFNGLGETTEXTUREHANDLEARBPROC             glGetTextureHandleARB;
1672   PFNGLGETTEXTURESAMPLERHANDLEARBPROC      glGetTextureSamplerHandleARB;
1673   PFNGLMAKETEXTUREHANDLERESIDENTARBPROC    glMakeTextureHandleResidentARB;
1674   PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC glMakeTextureHandleNonResidentARB;
1675   PFNGLGETIMAGEHANDLEARBPROC               glGetImageHandleARB;
1676   PFNGLMAKEIMAGEHANDLERESIDENTARBPROC      glMakeImageHandleResidentARB;
1677   PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC   glMakeImageHandleNonResidentARB;
1678   PFNGLUNIFORMHANDLEUI64ARBPROC            glUniformHandleui64ARB;
1679   PFNGLUNIFORMHANDLEUI64VARBPROC           glUniformHandleui64vARB;
1680   PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC     glProgramUniformHandleui64ARB;
1681   PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC    glProgramUniformHandleui64vARB;
1682   PFNGLISTEXTUREHANDLERESIDENTARBPROC      glIsTextureHandleResidentARB;
1683   PFNGLISIMAGEHANDLERESIDENTARBPROC        glIsImageHandleResidentARB;
1684   PFNGLVERTEXATTRIBL1UI64ARBPROC           glVertexAttribL1ui64ARB;
1685   PFNGLVERTEXATTRIBL1UI64VARBPROC          glVertexAttribL1ui64vARB;
1686   PFNGLGETVERTEXATTRIBLUI64VARBPROC        glGetVertexAttribLui64vARB;
1687
1688 #if defined(_WIN32)
1689 public: //! @name wgl extensions
1690
1691   typedef const char* (WINAPI *wglGetExtensionsStringARB_t)(HDC theDeviceContext);
1692   wglGetExtensionsStringARB_t wglGetExtensionsStringARB;
1693
1694   typedef BOOL        (WINAPI *wglSwapIntervalEXT_t)(int theInterval);
1695   wglSwapIntervalEXT_t wglSwapIntervalEXT;
1696
1697   // WGL_ARB_pixel_format
1698
1699 #ifndef WGL_NUMBER_PIXEL_FORMATS_ARB
1700   #define WGL_NUMBER_PIXEL_FORMATS_ARB            0x2000
1701   #define WGL_DRAW_TO_WINDOW_ARB                  0x2001
1702   #define WGL_DRAW_TO_BITMAP_ARB                  0x2002
1703   #define WGL_ACCELERATION_ARB                    0x2003
1704   #define WGL_NEED_PALETTE_ARB                    0x2004
1705   #define WGL_NEED_SYSTEM_PALETTE_ARB             0x2005
1706   #define WGL_SWAP_LAYER_BUFFERS_ARB              0x2006
1707   #define WGL_SWAP_METHOD_ARB                     0x2007
1708   #define WGL_NUMBER_OVERLAYS_ARB                 0x2008
1709   #define WGL_NUMBER_UNDERLAYS_ARB                0x2009
1710   #define WGL_TRANSPARENT_ARB                     0x200A
1711   #define WGL_TRANSPARENT_RED_VALUE_ARB           0x2037
1712   #define WGL_TRANSPARENT_GREEN_VALUE_ARB         0x2038
1713   #define WGL_TRANSPARENT_BLUE_VALUE_ARB          0x2039
1714   #define WGL_TRANSPARENT_ALPHA_VALUE_ARB         0x203A
1715   #define WGL_TRANSPARENT_INDEX_VALUE_ARB         0x203B
1716   #define WGL_SHARE_DEPTH_ARB                     0x200C
1717   #define WGL_SHARE_STENCIL_ARB                   0x200D
1718   #define WGL_SHARE_ACCUM_ARB                     0x200E
1719   #define WGL_SUPPORT_GDI_ARB                     0x200F
1720   #define WGL_SUPPORT_OPENGL_ARB                  0x2010
1721   #define WGL_DOUBLE_BUFFER_ARB                   0x2011
1722   #define WGL_STEREO_ARB                          0x2012
1723   #define WGL_PIXEL_TYPE_ARB                      0x2013
1724   #define WGL_COLOR_BITS_ARB                      0x2014
1725   #define WGL_RED_BITS_ARB                        0x2015
1726   #define WGL_RED_SHIFT_ARB                       0x2016
1727   #define WGL_GREEN_BITS_ARB                      0x2017
1728   #define WGL_GREEN_SHIFT_ARB                     0x2018
1729   #define WGL_BLUE_BITS_ARB                       0x2019
1730   #define WGL_BLUE_SHIFT_ARB                      0x201A
1731   #define WGL_ALPHA_BITS_ARB                      0x201B
1732   #define WGL_ALPHA_SHIFT_ARB                     0x201C
1733   #define WGL_ACCUM_BITS_ARB                      0x201D
1734   #define WGL_ACCUM_RED_BITS_ARB                  0x201E
1735   #define WGL_ACCUM_GREEN_BITS_ARB                0x201F
1736   #define WGL_ACCUM_BLUE_BITS_ARB                 0x2020
1737   #define WGL_ACCUM_ALPHA_BITS_ARB                0x2021
1738   #define WGL_DEPTH_BITS_ARB                      0x2022
1739   #define WGL_STENCIL_BITS_ARB                    0x2023
1740   #define WGL_AUX_BUFFERS_ARB                     0x2024
1741
1742   #define WGL_NO_ACCELERATION_ARB                 0x2025
1743   #define WGL_GENERIC_ACCELERATION_ARB            0x2026
1744   #define WGL_FULL_ACCELERATION_ARB               0x2027
1745
1746   #define WGL_SWAP_EXCHANGE_ARB                   0x2028
1747   #define WGL_SWAP_COPY_ARB                       0x2029
1748   #define WGL_SWAP_UNDEFINED_ARB                  0x202A
1749
1750   #define WGL_TYPE_RGBA_ARB                       0x202B
1751   #define WGL_TYPE_COLORINDEX_ARB                 0x202C
1752
1753 #endif // WGL_NUMBER_PIXEL_FORMATS_ARB
1754
1755       // WGL_ARB_multisample
1756 #ifndef WGL_SAMPLE_BUFFERS_ARB
1757   #define WGL_SAMPLE_BUFFERS_ARB               0x2041
1758   #define WGL_SAMPLES_ARB                      0x2042
1759 #endif
1760
1761       // WGL_ARB_create_context_robustness
1762 #ifndef WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB
1763   #define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
1764   #define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
1765   #define WGL_NO_RESET_NOTIFICATION_ARB               0x8261
1766   #define WGL_LOSE_CONTEXT_ON_RESET_ARB               0x8252
1767 #endif
1768
1769   typedef BOOL (WINAPI *wglChoosePixelFormatARB_t)
1770       (HDC           theDevCtx,
1771        const int*    theIntAttribs,
1772        const float*  theFloatAttribs,
1773        unsigned int  theMaxFormats,
1774        int*          theFormatsOut,
1775        unsigned int* theNumFormatsOut);
1776   wglChoosePixelFormatARB_t wglChoosePixelFormatARB;
1777
1778   // WGL_ARB_create_context_profile
1779
1780 #ifndef WGL_CONTEXT_MAJOR_VERSION_ARB
1781   #define WGL_CONTEXT_MAJOR_VERSION_ARB           0x2091
1782   #define WGL_CONTEXT_MINOR_VERSION_ARB           0x2092
1783   #define WGL_CONTEXT_LAYER_PLANE_ARB             0x2093
1784   #define WGL_CONTEXT_FLAGS_ARB                   0x2094
1785   #define WGL_CONTEXT_PROFILE_MASK_ARB            0x9126
1786
1787   // WGL_CONTEXT_FLAGS bits
1788   #define WGL_CONTEXT_DEBUG_BIT_ARB               0x0001
1789   #define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB  0x0002
1790
1791   // WGL_CONTEXT_PROFILE_MASK_ARB bits
1792   #define WGL_CONTEXT_CORE_PROFILE_BIT_ARB          0x00000001
1793   #define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
1794 #endif // WGL_CONTEXT_MAJOR_VERSION_ARB
1795
1796   typedef HGLRC (WINAPI *wglCreateContextAttribsARB_t)(HDC        theDevCtx,
1797                                                        HGLRC      theShareContext,
1798                                                        const int* theAttribs);
1799   wglCreateContextAttribsARB_t wglCreateContextAttribsARB;
1800
1801   // WGL_NV_DX_interop
1802
1803   typedef BOOL   (WINAPI *wglDXSetResourceShareHandleNV_t)(void* theObjectD3d, HANDLE theShareHandle);
1804   typedef HANDLE (WINAPI *wglDXOpenDeviceNV_t      )(void*   theDeviceD3d);
1805   typedef BOOL   (WINAPI *wglDXCloseDeviceNV_t     )(HANDLE  theDeviceIOP);
1806   typedef HANDLE (WINAPI *wglDXRegisterObjectNV_t  )(HANDLE  theDeviceIOP,
1807                                                      void*   theObjectD3d,
1808                                                      GLuint  theName,
1809                                                      GLenum  theType,
1810                                                      GLenum  theAccess);
1811   typedef BOOL   (WINAPI *wglDXUnregisterObjectNV_t)(HANDLE  theDeviceIOP,
1812                                                      HANDLE  theObject);
1813   typedef BOOL   (WINAPI *wglDXObjectAccessNV_t    )(HANDLE  theObject,
1814                                                      GLenum  theAccess);
1815   typedef BOOL   (WINAPI *wglDXLockObjectsNV_t     )(HANDLE  theDeviceIOP,
1816                                                      GLint   theCount,
1817                                                      HANDLE* theObjects);
1818   typedef BOOL   (WINAPI *wglDXUnlockObjectsNV_t   )(HANDLE  theDeviceIOP,
1819                                                      GLint   theCount,
1820                                                      HANDLE* theObjects);
1821
1822   wglDXSetResourceShareHandleNV_t wglDXSetResourceShareHandleNV;
1823   wglDXOpenDeviceNV_t       wglDXOpenDeviceNV;
1824   wglDXCloseDeviceNV_t      wglDXCloseDeviceNV;
1825   wglDXRegisterObjectNV_t   wglDXRegisterObjectNV;
1826   wglDXUnregisterObjectNV_t wglDXUnregisterObjectNV;
1827   wglDXObjectAccessNV_t     wglDXObjectAccessNV;
1828   wglDXLockObjectsNV_t      wglDXLockObjectsNV;
1829   wglDXUnlockObjectsNV_t    wglDXUnlockObjectsNV;
1830
1831 #ifndef WGL_ACCESS_READ_WRITE_NV
1832   #define WGL_ACCESS_READ_ONLY_NV     0x0000
1833   #define WGL_ACCESS_READ_WRITE_NV    0x0001
1834   #define WGL_ACCESS_WRITE_DISCARD_NV 0x0002
1835 #endif
1836
1837   // WGL_AMD_gpu_association
1838
1839 #ifndef WGL_GPU_VENDOR_AMD
1840   #define WGL_GPU_VENDOR_AMD                 0x1F00
1841   #define WGL_GPU_RENDERER_STRING_AMD        0x1F01
1842   #define WGL_GPU_OPENGL_VERSION_STRING_AMD  0x1F02
1843   #define WGL_GPU_FASTEST_TARGET_GPUS_AMD    0x21A2
1844   #define WGL_GPU_RAM_AMD                    0x21A3
1845   #define WGL_GPU_CLOCK_AMD                  0x21A4
1846   #define WGL_GPU_NUM_PIPES_AMD              0x21A5
1847   #define WGL_GPU_NUM_SIMD_AMD               0x21A6
1848   #define WGL_GPU_NUM_RB_AMD                 0x21A7
1849   #define WGL_GPU_NUM_SPI_AMD                0x21A8
1850 #endif
1851
1852   typedef UINT (WINAPI *wglGetGPUIDsAMD_t       )(UINT theMaxCount, UINT* theIds);
1853   typedef INT  (WINAPI *wglGetGPUInfoAMD_t      )(UINT theId, INT theProperty, GLenum theDataType, UINT theSize, void* theData);
1854   typedef UINT (WINAPI *wglGetContextGPUIDAMD_t )(HGLRC theHglrc);
1855   wglGetGPUIDsAMD_t       wglGetGPUIDsAMD;
1856   wglGetGPUInfoAMD_t      wglGetGPUInfoAMD;
1857   wglGetContextGPUIDAMD_t wglGetContextGPUIDAMD;
1858
1859 #elif defined(__APPLE__)
1860 public: //! @name CGL extensions
1861
1862 #else
1863 public: //! @name glX extensions
1864
1865   // GLX_EXT_swap_control
1866   //typedef int         (*glXSwapIntervalEXT_t)(Display* theDisplay, GLXDrawable theDrawable, int theInterval);
1867   typedef int         (*glXSwapIntervalEXT_t)();
1868   glXSwapIntervalEXT_t glXSwapIntervalEXT;
1869
1870   typedef int         (*glXSwapIntervalSGI_t)(int theInterval);
1871   glXSwapIntervalSGI_t glXSwapIntervalSGI;
1872
1873   // GLX_MESA_query_renderer
1874 #ifndef GLX_RENDERER_VENDOR_ID_MESA
1875   // for glXQueryRendererIntegerMESA() and glXQueryCurrentRendererIntegerMESA()
1876   #define GLX_RENDERER_VENDOR_ID_MESA                      0x8183
1877   #define GLX_RENDERER_DEVICE_ID_MESA                      0x8184
1878   #define GLX_RENDERER_VERSION_MESA                        0x8185
1879   #define GLX_RENDERER_ACCELERATED_MESA                    0x8186
1880   #define GLX_RENDERER_VIDEO_MEMORY_MESA                   0x8187
1881   #define GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA    0x8188
1882   #define GLX_RENDERER_PREFERRED_PROFILE_MESA              0x8189
1883   #define GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA    0x818A
1884   #define GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA 0x818B
1885   #define GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA      0x818C
1886   #define GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA     0x818D
1887
1888   #define GLX_RENDERER_ID_MESA                             0x818E
1889 #endif // GLX_RENDERER_VENDOR_ID_MESA
1890
1891   typedef Bool (*glXQueryRendererIntegerMESA_t)(Display* theDisplay, int theScreen,
1892                                                 int theRenderer, int theAttribute,
1893                                                 unsigned int* theValue);
1894   typedef Bool (*glXQueryCurrentRendererIntegerMESA_t)(int theAttribute, unsigned int* theValue);
1895   typedef const char* (*glXQueryRendererStringMESA_t)(Display* theDisplay, int theScreen,
1896                                                       int theRenderer, int theAttribute);
1897   typedef const char* (*glXQueryCurrentRendererStringMESA_t)(int theAttribute);
1898
1899   glXQueryRendererIntegerMESA_t        glXQueryRendererIntegerMESA;
1900   glXQueryCurrentRendererIntegerMESA_t glXQueryCurrentRendererIntegerMESA;
1901   glXQueryRendererStringMESA_t         glXQueryRendererStringMESA;
1902   glXQueryCurrentRendererStringMESA_t  glXQueryCurrentRendererStringMESA;
1903 #endif
1904
1905 #endif // OpenGL ES vs. desktop
1906
1907 };
1908
1909 #endif // _OpenGl_GlFunctions_Header