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