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