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