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