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