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