0025158: Visualization, OpenGl_Context - support EGL as alternative to WGL and GLX
[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 #ifndef APIENTRY
26   #define APIENTRY
27 #endif
28 #ifndef APIENTRYP
29   #define APIENTRYP APIENTRY *
30 #endif
31 #ifndef GLAPI
32   #define GLAPI extern
33 #endif
34
35 // exclude modern definitions and system-provided glext.h, should be defined before gl.h inclusion
36 #define GL_GLEXT_LEGACY
37
38 // include main OpenGL header provided with system
39 #if defined(__APPLE__)
40   #include <OpenGL/gl.h>
41   #include <OpenGL/glu.h>
42   #define __X_GL_H // prevent chaotic gl.h inclusions to avoid compile errors
43 #else
44   #include <GL/gl.h>
45   #include <GL/glu.h>
46 #endif
47
48 #if defined(__ANDROID__)
49   #define HAVE_EGL
50 #endif
51
52 #include <InterfaceGraphic.hxx>
53 #include <InterfaceGraphic_tgl_all.hxx>
54 #include <InterfaceGraphic_telem.hxx>
55
56 // GL version can be defined by system gl.h header
57 #undef GL_VERSION_1_2
58 #undef GL_VERSION_1_3
59 #undef GL_VERSION_1_4
60 #undef GL_VERSION_1_5
61 #undef GL_VERSION_2_0
62 #undef GL_VERSION_2_1
63 #undef GL_VERSION_3_0
64 #undef GL_VERSION_3_1
65 #undef GL_VERSION_3_2
66 #undef GL_VERSION_3_3
67 #undef GL_VERSION_4_0
68 #undef GL_VERSION_4_1
69 #undef GL_VERSION_4_2
70 #undef GL_VERSION_4_3
71 #undef GL_VERSION_4_4
72
73 // include glext.h provided by Khronos group
74 #include <glext.h>
75
76 //! Mega structure defines the complete list of OpenGL functions.
77 struct OpenGl_GlFunctions
78 {
79
80 public: //! @name OpenGL 1.2
81
82   PFNGLBLENDCOLORPROC               glBlendColor;
83   PFNGLBLENDEQUATIONPROC            glBlendEquation;
84   PFNGLDRAWRANGEELEMENTSPROC        glDrawRangeElements;
85   PFNGLTEXIMAGE3DPROC               glTexImage3D;
86   PFNGLTEXSUBIMAGE3DPROC            glTexSubImage3D;
87   PFNGLCOPYTEXSUBIMAGE3DPROC        glCopyTexSubImage3D;
88
89 public: //! @name OpenGL 1.3
90
91   PFNGLACTIVETEXTUREPROC            glActiveTexture;
92   PFNGLSAMPLECOVERAGEPROC           glSampleCoverage;
93   PFNGLCOMPRESSEDTEXIMAGE3DPROC     glCompressedTexImage3D;
94   PFNGLCOMPRESSEDTEXIMAGE2DPROC     glCompressedTexImage2D;
95   PFNGLCOMPRESSEDTEXIMAGE1DPROC     glCompressedTexImage1D;
96   PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC  glCompressedTexSubImage3D;
97   PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC  glCompressedTexSubImage2D;
98   PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC  glCompressedTexSubImage1D;
99   PFNGLGETCOMPRESSEDTEXIMAGEPROC    glGetCompressedTexImage;
100
101   PFNGLCLIENTACTIVETEXTUREPROC      glClientActiveTexture;
102   PFNGLMULTITEXCOORD1DPROC          glMultiTexCoord1d;
103   PFNGLMULTITEXCOORD1DVPROC         glMultiTexCoord1dv;
104   PFNGLMULTITEXCOORD1FPROC          glMultiTexCoord1f;
105   PFNGLMULTITEXCOORD1FVPROC         glMultiTexCoord1fv;
106   PFNGLMULTITEXCOORD1IPROC          glMultiTexCoord1i;
107   PFNGLMULTITEXCOORD1IVPROC         glMultiTexCoord1iv;
108   PFNGLMULTITEXCOORD1SPROC          glMultiTexCoord1s;
109   PFNGLMULTITEXCOORD1SVPROC         glMultiTexCoord1sv;
110   PFNGLMULTITEXCOORD2DPROC          glMultiTexCoord2d;
111   PFNGLMULTITEXCOORD2DVPROC         glMultiTexCoord2dv;
112   PFNGLMULTITEXCOORD2FPROC          glMultiTexCoord2f;
113   PFNGLMULTITEXCOORD2FVPROC         glMultiTexCoord2fv;
114   PFNGLMULTITEXCOORD2IPROC          glMultiTexCoord2i;
115   PFNGLMULTITEXCOORD2IVPROC         glMultiTexCoord2iv;
116   PFNGLMULTITEXCOORD2SPROC          glMultiTexCoord2s;
117   PFNGLMULTITEXCOORD2SVPROC         glMultiTexCoord2sv;
118   PFNGLMULTITEXCOORD3DPROC          glMultiTexCoord3d;
119   PFNGLMULTITEXCOORD3DVPROC         glMultiTexCoord3dv;
120   PFNGLMULTITEXCOORD3FPROC          glMultiTexCoord3f;
121   PFNGLMULTITEXCOORD3FVPROC         glMultiTexCoord3fv;
122   PFNGLMULTITEXCOORD3IPROC          glMultiTexCoord3i;
123   PFNGLMULTITEXCOORD3IVPROC         glMultiTexCoord3iv;
124   PFNGLMULTITEXCOORD3SPROC          glMultiTexCoord3s;
125   PFNGLMULTITEXCOORD3SVPROC         glMultiTexCoord3sv;
126   PFNGLMULTITEXCOORD4DPROC          glMultiTexCoord4d;
127   PFNGLMULTITEXCOORD4DVPROC         glMultiTexCoord4dv;
128   PFNGLMULTITEXCOORD4FPROC          glMultiTexCoord4f;
129   PFNGLMULTITEXCOORD4FVPROC         glMultiTexCoord4fv;
130   PFNGLMULTITEXCOORD4IPROC          glMultiTexCoord4i;
131   PFNGLMULTITEXCOORD4IVPROC         glMultiTexCoord4iv;
132   PFNGLMULTITEXCOORD4SPROC          glMultiTexCoord4s;
133   PFNGLMULTITEXCOORD4SVPROC         glMultiTexCoord4sv;
134   PFNGLLOADTRANSPOSEMATRIXFPROC     glLoadTransposeMatrixf;
135   PFNGLLOADTRANSPOSEMATRIXDPROC     glLoadTransposeMatrixd;
136   PFNGLMULTTRANSPOSEMATRIXFPROC     glMultTransposeMatrixf;
137   PFNGLMULTTRANSPOSEMATRIXDPROC     glMultTransposeMatrixd;
138
139 public: //! @name OpenGL 1.4
140
141   PFNGLBLENDFUNCSEPARATEPROC        glBlendFuncSeparate;
142   PFNGLMULTIDRAWARRAYSPROC          glMultiDrawArrays;
143   PFNGLMULTIDRAWELEMENTSPROC        glMultiDrawElements;
144   PFNGLPOINTPARAMETERFPROC          glPointParameterf;
145   PFNGLPOINTPARAMETERFVPROC         glPointParameterfv;
146   PFNGLPOINTPARAMETERIPROC          glPointParameteri;
147   PFNGLPOINTPARAMETERIVPROC         glPointParameteriv;
148
149 public: //! @name OpenGL 1.5
150
151   PFNGLGENQUERIESPROC               glGenQueries;
152   PFNGLDELETEQUERIESPROC            glDeleteQueries;
153   PFNGLISQUERYPROC                  glIsQuery;
154   PFNGLBEGINQUERYPROC               glBeginQuery;
155   PFNGLENDQUERYPROC                 glEndQuery;
156   PFNGLGETQUERYIVPROC               glGetQueryiv;
157   PFNGLGETQUERYOBJECTIVPROC         glGetQueryObjectiv;
158   PFNGLGETQUERYOBJECTUIVPROC        glGetQueryObjectuiv;
159   PFNGLBINDBUFFERPROC               glBindBuffer;
160   PFNGLDELETEBUFFERSPROC            glDeleteBuffers;
161   PFNGLGENBUFFERSPROC               glGenBuffers;
162   PFNGLISBUFFERPROC                 glIsBuffer;
163   PFNGLBUFFERDATAPROC               glBufferData;
164   PFNGLBUFFERSUBDATAPROC            glBufferSubData;
165   PFNGLGETBUFFERSUBDATAPROC         glGetBufferSubData;
166   PFNGLMAPBUFFERPROC                glMapBuffer;
167   PFNGLUNMAPBUFFERPROC              glUnmapBuffer;
168   PFNGLGETBUFFERPARAMETERIVPROC     glGetBufferParameteriv;
169   PFNGLGETBUFFERPOINTERVPROC        glGetBufferPointerv;
170
171 public: //! @name OpenGL 2.0
172
173   PFNGLBLENDEQUATIONSEPARATEPROC    glBlendEquationSeparate;
174   PFNGLDRAWBUFFERSPROC              glDrawBuffers;
175   PFNGLSTENCILOPSEPARATEPROC        glStencilOpSeparate;
176   PFNGLSTENCILFUNCSEPARATEPROC      glStencilFuncSeparate;
177   PFNGLSTENCILMASKSEPARATEPROC      glStencilMaskSeparate;
178   PFNGLATTACHSHADERPROC             glAttachShader;
179   PFNGLBINDATTRIBLOCATIONPROC       glBindAttribLocation;
180   PFNGLCOMPILESHADERPROC            glCompileShader;
181   PFNGLCREATEPROGRAMPROC            glCreateProgram;
182   PFNGLCREATESHADERPROC             glCreateShader;
183   PFNGLDELETEPROGRAMPROC            glDeleteProgram;
184   PFNGLDELETESHADERPROC             glDeleteShader;
185   PFNGLDETACHSHADERPROC             glDetachShader;
186   PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
187   PFNGLENABLEVERTEXATTRIBARRAYPROC  glEnableVertexAttribArray;
188   PFNGLGETACTIVEATTRIBPROC          glGetActiveAttrib;
189   PFNGLGETACTIVEUNIFORMPROC         glGetActiveUniform;
190   PFNGLGETATTACHEDSHADERSPROC       glGetAttachedShaders;
191   PFNGLGETATTRIBLOCATIONPROC        glGetAttribLocation;
192   PFNGLGETPROGRAMIVPROC             glGetProgramiv;
193   PFNGLGETPROGRAMINFOLOGPROC        glGetProgramInfoLog;
194   PFNGLGETSHADERIVPROC              glGetShaderiv;
195   PFNGLGETSHADERINFOLOGPROC         glGetShaderInfoLog;
196   PFNGLGETSHADERSOURCEPROC          glGetShaderSource;
197   PFNGLGETUNIFORMLOCATIONPROC       glGetUniformLocation;
198   PFNGLGETUNIFORMFVPROC             glGetUniformfv;
199   PFNGLGETUNIFORMIVPROC             glGetUniformiv;
200   PFNGLGETVERTEXATTRIBDVPROC        glGetVertexAttribdv;
201   PFNGLGETVERTEXATTRIBFVPROC        glGetVertexAttribfv;
202   PFNGLGETVERTEXATTRIBIVPROC        glGetVertexAttribiv;
203   PFNGLGETVERTEXATTRIBPOINTERVPROC  glGetVertexAttribPointerv;
204   PFNGLISPROGRAMPROC                glIsProgram;
205   PFNGLISSHADERPROC                 glIsShader;
206   PFNGLLINKPROGRAMPROC              glLinkProgram;
207   PFNGLSHADERSOURCEPROC             glShaderSource;
208   PFNGLUSEPROGRAMPROC               glUseProgram;
209   PFNGLUNIFORM1FPROC                glUniform1f;
210   PFNGLUNIFORM2FPROC                glUniform2f;
211   PFNGLUNIFORM3FPROC                glUniform3f;
212   PFNGLUNIFORM4FPROC                glUniform4f;
213   PFNGLUNIFORM1IPROC                glUniform1i;
214   PFNGLUNIFORM2IPROC                glUniform2i;
215   PFNGLUNIFORM3IPROC                glUniform3i;
216   PFNGLUNIFORM4IPROC                glUniform4i;
217   PFNGLUNIFORM1FVPROC               glUniform1fv;
218   PFNGLUNIFORM2FVPROC               glUniform2fv;
219   PFNGLUNIFORM3FVPROC               glUniform3fv;
220   PFNGLUNIFORM4FVPROC               glUniform4fv;
221   PFNGLUNIFORM1IVPROC               glUniform1iv;
222   PFNGLUNIFORM2IVPROC               glUniform2iv;
223   PFNGLUNIFORM3IVPROC               glUniform3iv;
224   PFNGLUNIFORM4IVPROC               glUniform4iv;
225   PFNGLUNIFORMMATRIX2FVPROC         glUniformMatrix2fv;
226   PFNGLUNIFORMMATRIX3FVPROC         glUniformMatrix3fv;
227   PFNGLUNIFORMMATRIX4FVPROC         glUniformMatrix4fv;
228   PFNGLVALIDATEPROGRAMPROC          glValidateProgram;
229   PFNGLVERTEXATTRIB1DPROC           glVertexAttrib1d;
230   PFNGLVERTEXATTRIB1DVPROC          glVertexAttrib1dv;
231   PFNGLVERTEXATTRIB1FPROC           glVertexAttrib1f;
232   PFNGLVERTEXATTRIB1FVPROC          glVertexAttrib1fv;
233   PFNGLVERTEXATTRIB1SPROC           glVertexAttrib1s;
234   PFNGLVERTEXATTRIB1SVPROC          glVertexAttrib1sv;
235   PFNGLVERTEXATTRIB2DPROC           glVertexAttrib2d;
236   PFNGLVERTEXATTRIB2DVPROC          glVertexAttrib2dv;
237   PFNGLVERTEXATTRIB2FPROC           glVertexAttrib2f;
238   PFNGLVERTEXATTRIB2FVPROC          glVertexAttrib2fv;
239   PFNGLVERTEXATTRIB2SPROC           glVertexAttrib2s;
240   PFNGLVERTEXATTRIB2SVPROC          glVertexAttrib2sv;
241   PFNGLVERTEXATTRIB3DPROC           glVertexAttrib3d;
242   PFNGLVERTEXATTRIB3DVPROC          glVertexAttrib3dv;
243   PFNGLVERTEXATTRIB3FPROC           glVertexAttrib3f;
244   PFNGLVERTEXATTRIB3FVPROC          glVertexAttrib3fv;
245   PFNGLVERTEXATTRIB3SPROC           glVertexAttrib3s;
246   PFNGLVERTEXATTRIB3SVPROC          glVertexAttrib3sv;
247   PFNGLVERTEXATTRIB4NBVPROC         glVertexAttrib4Nbv;
248   PFNGLVERTEXATTRIB4NIVPROC         glVertexAttrib4Niv;
249   PFNGLVERTEXATTRIB4NSVPROC         glVertexAttrib4Nsv;
250   PFNGLVERTEXATTRIB4NUBPROC         glVertexAttrib4Nub;
251   PFNGLVERTEXATTRIB4NUBVPROC        glVertexAttrib4Nubv;
252   PFNGLVERTEXATTRIB4NUIVPROC        glVertexAttrib4Nuiv;
253   PFNGLVERTEXATTRIB4NUSVPROC        glVertexAttrib4Nusv;
254   PFNGLVERTEXATTRIB4BVPROC          glVertexAttrib4bv;
255   PFNGLVERTEXATTRIB4DPROC           glVertexAttrib4d;
256   PFNGLVERTEXATTRIB4DVPROC          glVertexAttrib4dv;
257   PFNGLVERTEXATTRIB4FPROC           glVertexAttrib4f;
258   PFNGLVERTEXATTRIB4FVPROC          glVertexAttrib4fv;
259   PFNGLVERTEXATTRIB4IVPROC          glVertexAttrib4iv;
260   PFNGLVERTEXATTRIB4SPROC           glVertexAttrib4s;
261   PFNGLVERTEXATTRIB4SVPROC          glVertexAttrib4sv;
262   PFNGLVERTEXATTRIB4UBVPROC         glVertexAttrib4ubv;
263   PFNGLVERTEXATTRIB4UIVPROC         glVertexAttrib4uiv;
264   PFNGLVERTEXATTRIB4USVPROC         glVertexAttrib4usv;
265   PFNGLVERTEXATTRIBPOINTERPROC      glVertexAttribPointer;
266
267 public: //! @name OpenGL 2.1
268
269   PFNGLUNIFORMMATRIX2X3FVPROC       glUniformMatrix2x3fv;
270   PFNGLUNIFORMMATRIX3X2FVPROC       glUniformMatrix3x2fv;
271   PFNGLUNIFORMMATRIX2X4FVPROC       glUniformMatrix2x4fv;
272   PFNGLUNIFORMMATRIX4X2FVPROC       glUniformMatrix4x2fv;
273   PFNGLUNIFORMMATRIX3X4FVPROC       glUniformMatrix3x4fv;
274   PFNGLUNIFORMMATRIX4X3FVPROC       glUniformMatrix4x3fv;
275
276 public: //! @name GL_ARB_framebuffer_object (added to OpenGL 3.0 core)
277
278   PFNGLISRENDERBUFFERPROC                      glIsRenderbuffer;
279   PFNGLBINDRENDERBUFFERPROC                    glBindRenderbuffer;
280   PFNGLDELETERENDERBUFFERSPROC                 glDeleteRenderbuffers;
281   PFNGLGENRENDERBUFFERSPROC                    glGenRenderbuffers;
282   PFNGLRENDERBUFFERSTORAGEPROC                 glRenderbufferStorage;
283   PFNGLGETRENDERBUFFERPARAMETERIVPROC          glGetRenderbufferParameteriv;
284   PFNGLISFRAMEBUFFERPROC                       glIsFramebuffer;
285   PFNGLBINDFRAMEBUFFERPROC                     glBindFramebuffer;
286   PFNGLDELETEFRAMEBUFFERSPROC                  glDeleteFramebuffers;
287   PFNGLGENFRAMEBUFFERSPROC                     glGenFramebuffers;
288   PFNGLCHECKFRAMEBUFFERSTATUSPROC              glCheckFramebufferStatus;
289   PFNGLFRAMEBUFFERTEXTURE1DPROC                glFramebufferTexture1D;
290   PFNGLFRAMEBUFFERTEXTURE2DPROC                glFramebufferTexture2D;
291   PFNGLFRAMEBUFFERTEXTURE3DPROC                glFramebufferTexture3D;
292   PFNGLFRAMEBUFFERRENDERBUFFERPROC             glFramebufferRenderbuffer;
293   PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv;
294   PFNGLGENERATEMIPMAPPROC                      glGenerateMipmap;
295   PFNGLBLITFRAMEBUFFERPROC                     glBlitFramebuffer;
296   PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC      glRenderbufferStorageMultisample;
297   PFNGLFRAMEBUFFERTEXTURELAYERPROC             glFramebufferTextureLayer;
298
299 public: //! @name GL_ARB_vertex_array_object (added to OpenGL 3.0 core)
300
301   PFNGLBINDVERTEXARRAYPROC             glBindVertexArray;
302   PFNGLDELETEVERTEXARRAYSPROC          glDeleteVertexArrays;
303   PFNGLGENVERTEXARRAYSPROC             glGenVertexArrays;
304   PFNGLISVERTEXARRAYPROC               glIsVertexArray;
305
306 public: //! @name GL_ARB_map_buffer_range (added to OpenGL 3.0 core)
307
308   PFNGLMAPBUFFERRANGEPROC              glMapBufferRange;
309   PFNGLFLUSHMAPPEDBUFFERRANGEPROC      glFlushMappedBufferRange;
310
311 public: //! @name OpenGL 3.0
312
313   PFNGLCOLORMASKIPROC                  glColorMaski;
314   PFNGLGETBOOLEANI_VPROC               glGetBooleani_v;
315   PFNGLGETINTEGERI_VPROC               glGetIntegeri_v;
316   PFNGLENABLEIPROC                     glEnablei;
317   PFNGLDISABLEIPROC                    glDisablei;
318   PFNGLISENABLEDIPROC                  glIsEnabledi;
319   PFNGLBEGINTRANSFORMFEEDBACKPROC      glBeginTransformFeedback;
320   PFNGLENDTRANSFORMFEEDBACKPROC        glEndTransformFeedback;
321   PFNGLBINDBUFFERRANGEPROC             glBindBufferRange;
322   PFNGLBINDBUFFERBASEPROC              glBindBufferBase;
323   PFNGLTRANSFORMFEEDBACKVARYINGSPROC   glTransformFeedbackVaryings;
324   PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glGetTransformFeedbackVarying;
325   PFNGLCLAMPCOLORPROC                  glClampColor;
326   PFNGLBEGINCONDITIONALRENDERPROC      glBeginConditionalRender;
327   PFNGLENDCONDITIONALRENDERPROC        glEndConditionalRender;
328   PFNGLVERTEXATTRIBIPOINTERPROC        glVertexAttribIPointer;
329   PFNGLGETVERTEXATTRIBIIVPROC          glGetVertexAttribIiv;
330   PFNGLGETVERTEXATTRIBIUIVPROC         glGetVertexAttribIuiv;
331   PFNGLVERTEXATTRIBI1IPROC             glVertexAttribI1i;
332   PFNGLVERTEXATTRIBI2IPROC             glVertexAttribI2i;
333   PFNGLVERTEXATTRIBI3IPROC             glVertexAttribI3i;
334   PFNGLVERTEXATTRIBI4IPROC             glVertexAttribI4i;
335   PFNGLVERTEXATTRIBI1UIPROC            glVertexAttribI1ui;
336   PFNGLVERTEXATTRIBI2UIPROC            glVertexAttribI2ui;
337   PFNGLVERTEXATTRIBI3UIPROC            glVertexAttribI3ui;
338   PFNGLVERTEXATTRIBI4UIPROC            glVertexAttribI4ui;
339   PFNGLVERTEXATTRIBI1IVPROC            glVertexAttribI1iv;
340   PFNGLVERTEXATTRIBI2IVPROC            glVertexAttribI2iv;
341   PFNGLVERTEXATTRIBI3IVPROC            glVertexAttribI3iv;
342   PFNGLVERTEXATTRIBI4IVPROC            glVertexAttribI4iv;
343   PFNGLVERTEXATTRIBI1UIVPROC           glVertexAttribI1uiv;
344   PFNGLVERTEXATTRIBI2UIVPROC           glVertexAttribI2uiv;
345   PFNGLVERTEXATTRIBI3UIVPROC           glVertexAttribI3uiv;
346   PFNGLVERTEXATTRIBI4UIVPROC           glVertexAttribI4uiv;
347   PFNGLVERTEXATTRIBI4BVPROC            glVertexAttribI4bv;
348   PFNGLVERTEXATTRIBI4SVPROC            glVertexAttribI4sv;
349   PFNGLVERTEXATTRIBI4UBVPROC           glVertexAttribI4ubv;
350   PFNGLVERTEXATTRIBI4USVPROC           glVertexAttribI4usv;
351   PFNGLGETUNIFORMUIVPROC               glGetUniformuiv;
352   PFNGLBINDFRAGDATALOCATIONPROC        glBindFragDataLocation;
353   PFNGLGETFRAGDATALOCATIONPROC         glGetFragDataLocation;
354   PFNGLUNIFORM1UIPROC                  glUniform1ui;
355   PFNGLUNIFORM2UIPROC                  glUniform2ui;
356   PFNGLUNIFORM3UIPROC                  glUniform3ui;
357   PFNGLUNIFORM4UIPROC                  glUniform4ui;
358   PFNGLUNIFORM1UIVPROC                 glUniform1uiv;
359   PFNGLUNIFORM2UIVPROC                 glUniform2uiv;
360   PFNGLUNIFORM3UIVPROC                 glUniform3uiv;
361   PFNGLUNIFORM4UIVPROC                 glUniform4uiv;
362   PFNGLTEXPARAMETERIIVPROC             glTexParameterIiv;
363   PFNGLTEXPARAMETERIUIVPROC            glTexParameterIuiv;
364   PFNGLGETTEXPARAMETERIIVPROC          glGetTexParameterIiv;
365   PFNGLGETTEXPARAMETERIUIVPROC         glGetTexParameterIuiv;
366   PFNGLCLEARBUFFERIVPROC               glClearBufferiv;
367   PFNGLCLEARBUFFERUIVPROC              glClearBufferuiv;
368   PFNGLCLEARBUFFERFVPROC               glClearBufferfv;
369   PFNGLCLEARBUFFERFIPROC               glClearBufferfi;
370   PFNGLGETSTRINGIPROC                  glGetStringi;
371
372 public: //! @name GL_ARB_uniform_buffer_object (added to OpenGL 3.1 core)
373
374   PFNGLGETUNIFORMINDICESPROC           glGetUniformIndices;
375   PFNGLGETACTIVEUNIFORMSIVPROC         glGetActiveUniformsiv;
376   PFNGLGETACTIVEUNIFORMNAMEPROC        glGetActiveUniformName;
377   PFNGLGETUNIFORMBLOCKINDEXPROC        glGetUniformBlockIndex;
378   PFNGLGETACTIVEUNIFORMBLOCKIVPROC     glGetActiveUniformBlockiv;
379   PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC   glGetActiveUniformBlockName;
380   PFNGLUNIFORMBLOCKBINDINGPROC         glUniformBlockBinding;
381
382 public: //! @name GL_ARB_copy_buffer (added to OpenGL 3.1 core)
383
384   PFNGLCOPYBUFFERSUBDATAPROC           glCopyBufferSubData;
385
386 public: //! @name OpenGL 3.1
387
388   PFNGLDRAWARRAYSINSTANCEDPROC         glDrawArraysInstanced;
389   PFNGLDRAWELEMENTSINSTANCEDPROC       glDrawElementsInstanced;
390   PFNGLTEXBUFFERPROC                   glTexBuffer;
391   PFNGLPRIMITIVERESTARTINDEXPROC       glPrimitiveRestartIndex;
392
393 public: //! @name GL_ARB_draw_elements_base_vertex (added to OpenGL 3.2 core)
394
395   PFNGLDRAWELEMENTSBASEVERTEXPROC      glDrawElementsBaseVertex;
396   PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glDrawRangeElementsBaseVertex;
397   PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertex;
398   PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glMultiDrawElementsBaseVertex;
399
400 public: //! @name GL_ARB_provoking_vertex (added to OpenGL 3.2 core)
401
402   PFNGLPROVOKINGVERTEXPROC             glProvokingVertex;
403
404 public: //! @name GL_ARB_sync (added to OpenGL 3.2 core)
405
406   PFNGLFENCESYNCPROC                   glFenceSync;
407   PFNGLISSYNCPROC                      glIsSync;
408   PFNGLDELETESYNCPROC                  glDeleteSync;
409   PFNGLCLIENTWAITSYNCPROC              glClientWaitSync;
410   PFNGLWAITSYNCPROC                    glWaitSync;
411   PFNGLGETINTEGER64VPROC               glGetInteger64v;
412   PFNGLGETSYNCIVPROC                   glGetSynciv;
413
414 public: //! @name GL_ARB_texture_multisample (added to OpenGL 3.2 core)
415
416   PFNGLTEXIMAGE2DMULTISAMPLEPROC       glTexImage2DMultisample;
417   PFNGLTEXIMAGE3DMULTISAMPLEPROC       glTexImage3DMultisample;
418   PFNGLGETMULTISAMPLEFVPROC            glGetMultisamplefv;
419   PFNGLSAMPLEMASKIPROC                 glSampleMaski;
420
421 public: //! @name OpenGL 3.2
422
423   PFNGLGETINTEGER64I_VPROC             glGetInteger64i_v;
424   PFNGLGETBUFFERPARAMETERI64VPROC      glGetBufferParameteri64v;
425   PFNGLFRAMEBUFFERTEXTUREPROC          glFramebufferTexture;
426
427 public: //! @name GL_ARB_blend_func_extended (added to OpenGL 3.3 core)
428
429   PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glBindFragDataLocationIndexed;
430   PFNGLGETFRAGDATAINDEXPROC            glGetFragDataIndex;
431
432 public: //! @name GL_ARB_sampler_objects (added to OpenGL 3.3 core)
433
434   PFNGLGENSAMPLERSPROC                 glGenSamplers;
435   PFNGLDELETESAMPLERSPROC              glDeleteSamplers;
436   PFNGLISSAMPLERPROC                   glIsSampler;
437   PFNGLBINDSAMPLERPROC                 glBindSampler;
438   PFNGLSAMPLERPARAMETERIPROC           glSamplerParameteri;
439   PFNGLSAMPLERPARAMETERIVPROC          glSamplerParameteriv;
440   PFNGLSAMPLERPARAMETERFPROC           glSamplerParameterf;
441   PFNGLSAMPLERPARAMETERFVPROC          glSamplerParameterfv;
442   PFNGLSAMPLERPARAMETERIIVPROC         glSamplerParameterIiv;
443   PFNGLSAMPLERPARAMETERIUIVPROC        glSamplerParameterIuiv;
444   PFNGLGETSAMPLERPARAMETERIVPROC       glGetSamplerParameteriv;
445   PFNGLGETSAMPLERPARAMETERIIVPROC      glGetSamplerParameterIiv;
446   PFNGLGETSAMPLERPARAMETERFVPROC       glGetSamplerParameterfv;
447   PFNGLGETSAMPLERPARAMETERIUIVPROC     glGetSamplerParameterIuiv;
448
449 public: //! @name GL_ARB_timer_query (added to OpenGL 3.3 core)
450
451   PFNGLQUERYCOUNTERPROC                glQueryCounter;
452   PFNGLGETQUERYOBJECTI64VPROC          glGetQueryObjecti64v;
453   PFNGLGETQUERYOBJECTUI64VPROC         glGetQueryObjectui64v;
454
455 public: //! @name GL_ARB_vertex_type_2_10_10_10_rev (added to OpenGL 3.3 core)
456
457   PFNGLVERTEXP2UIPROC                  glVertexP2ui;
458   PFNGLVERTEXP2UIVPROC                 glVertexP2uiv;
459   PFNGLVERTEXP3UIPROC                  glVertexP3ui;
460   PFNGLVERTEXP3UIVPROC                 glVertexP3uiv;
461   PFNGLVERTEXP4UIPROC                  glVertexP4ui;
462   PFNGLVERTEXP4UIVPROC                 glVertexP4uiv;
463   PFNGLTEXCOORDP1UIPROC                glTexCoordP1ui;
464   PFNGLTEXCOORDP1UIVPROC               glTexCoordP1uiv;
465   PFNGLTEXCOORDP2UIPROC                glTexCoordP2ui;
466   PFNGLTEXCOORDP2UIVPROC               glTexCoordP2uiv;
467   PFNGLTEXCOORDP3UIPROC                glTexCoordP3ui;
468   PFNGLTEXCOORDP3UIVPROC               glTexCoordP3uiv;
469   PFNGLTEXCOORDP4UIPROC                glTexCoordP4ui;
470   PFNGLTEXCOORDP4UIVPROC               glTexCoordP4uiv;
471   PFNGLMULTITEXCOORDP1UIPROC           glMultiTexCoordP1ui;
472   PFNGLMULTITEXCOORDP1UIVPROC          glMultiTexCoordP1uiv;
473   PFNGLMULTITEXCOORDP2UIPROC           glMultiTexCoordP2ui;
474   PFNGLMULTITEXCOORDP2UIVPROC          glMultiTexCoordP2uiv;
475   PFNGLMULTITEXCOORDP3UIPROC           glMultiTexCoordP3ui;
476   PFNGLMULTITEXCOORDP3UIVPROC          glMultiTexCoordP3uiv;
477   PFNGLMULTITEXCOORDP4UIPROC           glMultiTexCoordP4ui;
478   PFNGLMULTITEXCOORDP4UIVPROC          glMultiTexCoordP4uiv;
479   PFNGLNORMALP3UIPROC                  glNormalP3ui;
480   PFNGLNORMALP3UIVPROC                 glNormalP3uiv;
481   PFNGLCOLORP3UIPROC                   glColorP3ui;
482   PFNGLCOLORP3UIVPROC                  glColorP3uiv;
483   PFNGLCOLORP4UIPROC                   glColorP4ui;
484   PFNGLCOLORP4UIVPROC                  glColorP4uiv;
485   PFNGLSECONDARYCOLORP3UIPROC          glSecondaryColorP3ui;
486   PFNGLSECONDARYCOLORP3UIVPROC         glSecondaryColorP3uiv;
487   PFNGLVERTEXATTRIBP1UIPROC            glVertexAttribP1ui;
488   PFNGLVERTEXATTRIBP1UIVPROC           glVertexAttribP1uiv;
489   PFNGLVERTEXATTRIBP2UIPROC            glVertexAttribP2ui;
490   PFNGLVERTEXATTRIBP2UIVPROC           glVertexAttribP2uiv;
491   PFNGLVERTEXATTRIBP3UIPROC            glVertexAttribP3ui;
492   PFNGLVERTEXATTRIBP3UIVPROC           glVertexAttribP3uiv;
493   PFNGLVERTEXATTRIBP4UIPROC            glVertexAttribP4ui;
494   PFNGLVERTEXATTRIBP4UIVPROC           glVertexAttribP4uiv;
495
496 public: //! @name OpenGL 3.3
497
498   PFNGLVERTEXATTRIBDIVISORPROC         glVertexAttribDivisor;
499
500 public: //! @name GL_ARB_draw_indirect (added to OpenGL 4.0 core)
501
502   PFNGLDRAWARRAYSINDIRECTPROC          glDrawArraysIndirect;
503   PFNGLDRAWELEMENTSINDIRECTPROC        glDrawElementsIndirect;
504
505 public: //! @name GL_ARB_gpu_shader_fp64 (added to OpenGL 4.0 core)
506
507   PFNGLUNIFORM1DPROC                   glUniform1d;
508   PFNGLUNIFORM2DPROC                   glUniform2d;
509   PFNGLUNIFORM3DPROC                   glUniform3d;
510   PFNGLUNIFORM4DPROC                   glUniform4d;
511   PFNGLUNIFORM1DVPROC                  glUniform1dv;
512   PFNGLUNIFORM2DVPROC                  glUniform2dv;
513   PFNGLUNIFORM3DVPROC                  glUniform3dv;
514   PFNGLUNIFORM4DVPROC                  glUniform4dv;
515   PFNGLUNIFORMMATRIX2DVPROC            glUniformMatrix2dv;
516   PFNGLUNIFORMMATRIX3DVPROC            glUniformMatrix3dv;
517   PFNGLUNIFORMMATRIX4DVPROC            glUniformMatrix4dv;
518   PFNGLUNIFORMMATRIX2X3DVPROC          glUniformMatrix2x3dv;
519   PFNGLUNIFORMMATRIX2X4DVPROC          glUniformMatrix2x4dv;
520   PFNGLUNIFORMMATRIX3X2DVPROC          glUniformMatrix3x2dv;
521   PFNGLUNIFORMMATRIX3X4DVPROC          glUniformMatrix3x4dv;
522   PFNGLUNIFORMMATRIX4X2DVPROC          glUniformMatrix4x2dv;
523   PFNGLUNIFORMMATRIX4X3DVPROC          glUniformMatrix4x3dv;
524   PFNGLGETUNIFORMDVPROC                glGetUniformdv;
525
526 public: //! @name GL_ARB_shader_subroutine (added to OpenGL 4.0 core)
527
528   PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC   glGetSubroutineUniformLocation;
529   PFNGLGETSUBROUTINEINDEXPROC             glGetSubroutineIndex;
530   PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC   glGetActiveSubroutineUniformiv;
531   PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glGetActiveSubroutineUniformName;
532   PFNGLGETACTIVESUBROUTINENAMEPROC        glGetActiveSubroutineName;
533   PFNGLUNIFORMSUBROUTINESUIVPROC          glUniformSubroutinesuiv;
534   PFNGLGETUNIFORMSUBROUTINEUIVPROC        glGetUniformSubroutineuiv;
535   PFNGLGETPROGRAMSTAGEIVPROC              glGetProgramStageiv;
536
537 public: //! @name GL_ARB_tessellation_shader (added to OpenGL 4.0 core)
538
539   PFNGLPATCHPARAMETERIPROC             glPatchParameteri;
540   PFNGLPATCHPARAMETERFVPROC            glPatchParameterfv;
541
542 public: //! @name GL_ARB_transform_feedback2 (added to OpenGL 4.0 core)
543
544   PFNGLBINDTRANSFORMFEEDBACKPROC       glBindTransformFeedback;
545   PFNGLDELETETRANSFORMFEEDBACKSPROC    glDeleteTransformFeedbacks;
546   PFNGLGENTRANSFORMFEEDBACKSPROC       glGenTransformFeedbacks;
547   PFNGLISTRANSFORMFEEDBACKPROC         glIsTransformFeedback;
548   PFNGLPAUSETRANSFORMFEEDBACKPROC      glPauseTransformFeedback;
549   PFNGLRESUMETRANSFORMFEEDBACKPROC     glResumeTransformFeedback;
550   PFNGLDRAWTRANSFORMFEEDBACKPROC       glDrawTransformFeedback;
551
552 public: //! @name GL_ARB_transform_feedback3 (added to OpenGL 4.0 core)
553
554   PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glDrawTransformFeedbackStream;
555   PFNGLBEGINQUERYINDEXEDPROC           glBeginQueryIndexed;
556   PFNGLENDQUERYINDEXEDPROC             glEndQueryIndexed;
557   PFNGLGETQUERYINDEXEDIVPROC           glGetQueryIndexediv;
558
559 public: //! @name OpenGL 4.0
560
561   PFNGLMINSAMPLESHADINGPROC            glMinSampleShading;
562   PFNGLBLENDEQUATIONIPROC              glBlendEquationi;
563   PFNGLBLENDEQUATIONSEPARATEIPROC      glBlendEquationSeparatei;
564   PFNGLBLENDFUNCIPROC                  glBlendFunci;
565   PFNGLBLENDFUNCSEPARATEIPROC          glBlendFuncSeparatei;
566
567 public: //! @name GL_ARB_ES2_compatibility (added to OpenGL 4.1 core)
568
569   PFNGLRELEASESHADERCOMPILERPROC       glReleaseShaderCompiler;
570   PFNGLSHADERBINARYPROC                glShaderBinary;
571   PFNGLGETSHADERPRECISIONFORMATPROC    glGetShaderPrecisionFormat;
572   PFNGLDEPTHRANGEFPROC                 glDepthRangef;
573   PFNGLCLEARDEPTHFPROC                 glClearDepthf;
574
575 public: //! @name GL_ARB_get_program_binary (added to OpenGL 4.1 core)
576
577   PFNGLGETPROGRAMBINARYPROC            glGetProgramBinary;
578   PFNGLPROGRAMBINARYPROC               glProgramBinary;
579   PFNGLPROGRAMPARAMETERIPROC           glProgramParameteri;
580
581 public: //! @name GL_ARB_separate_shader_objects (added to OpenGL 4.1 core)
582
583   PFNGLUSEPROGRAMSTAGESPROC            glUseProgramStages;
584   PFNGLACTIVESHADERPROGRAMPROC         glActiveShaderProgram;
585   PFNGLCREATESHADERPROGRAMVPROC        glCreateShaderProgramv;
586   PFNGLBINDPROGRAMPIPELINEPROC         glBindProgramPipeline;
587   PFNGLDELETEPROGRAMPIPELINESPROC      glDeleteProgramPipelines;
588   PFNGLGENPROGRAMPIPELINESPROC         glGenProgramPipelines;
589   PFNGLISPROGRAMPIPELINEPROC           glIsProgramPipeline;
590   PFNGLGETPROGRAMPIPELINEIVPROC        glGetProgramPipelineiv;
591   PFNGLPROGRAMUNIFORM1IPROC            glProgramUniform1i;
592   PFNGLPROGRAMUNIFORM1IVPROC           glProgramUniform1iv;
593   PFNGLPROGRAMUNIFORM1FPROC            glProgramUniform1f;
594   PFNGLPROGRAMUNIFORM1FVPROC           glProgramUniform1fv;
595   PFNGLPROGRAMUNIFORM1DPROC            glProgramUniform1d;
596   PFNGLPROGRAMUNIFORM1DVPROC           glProgramUniform1dv;
597   PFNGLPROGRAMUNIFORM1UIPROC           glProgramUniform1ui;
598   PFNGLPROGRAMUNIFORM1UIVPROC          glProgramUniform1uiv;
599   PFNGLPROGRAMUNIFORM2IPROC            glProgramUniform2i;
600   PFNGLPROGRAMUNIFORM2IVPROC           glProgramUniform2iv;
601   PFNGLPROGRAMUNIFORM2FPROC            glProgramUniform2f;
602   PFNGLPROGRAMUNIFORM2FVPROC           glProgramUniform2fv;
603   PFNGLPROGRAMUNIFORM2DPROC            glProgramUniform2d;
604   PFNGLPROGRAMUNIFORM2DVPROC           glProgramUniform2dv;
605   PFNGLPROGRAMUNIFORM2UIPROC           glProgramUniform2ui;
606   PFNGLPROGRAMUNIFORM2UIVPROC          glProgramUniform2uiv;
607   PFNGLPROGRAMUNIFORM3IPROC            glProgramUniform3i;
608   PFNGLPROGRAMUNIFORM3IVPROC           glProgramUniform3iv;
609   PFNGLPROGRAMUNIFORM3FPROC            glProgramUniform3f;
610   PFNGLPROGRAMUNIFORM3FVPROC           glProgramUniform3fv;
611   PFNGLPROGRAMUNIFORM3DPROC            glProgramUniform3d;
612   PFNGLPROGRAMUNIFORM3DVPROC           glProgramUniform3dv;
613   PFNGLPROGRAMUNIFORM3UIPROC           glProgramUniform3ui;
614   PFNGLPROGRAMUNIFORM3UIVPROC          glProgramUniform3uiv;
615   PFNGLPROGRAMUNIFORM4IPROC            glProgramUniform4i;
616   PFNGLPROGRAMUNIFORM4IVPROC           glProgramUniform4iv;
617   PFNGLPROGRAMUNIFORM4FPROC            glProgramUniform4f;
618   PFNGLPROGRAMUNIFORM4FVPROC           glProgramUniform4fv;
619   PFNGLPROGRAMUNIFORM4DPROC            glProgramUniform4d;
620   PFNGLPROGRAMUNIFORM4DVPROC           glProgramUniform4dv;
621   PFNGLPROGRAMUNIFORM4UIPROC           glProgramUniform4ui;
622   PFNGLPROGRAMUNIFORM4UIVPROC          glProgramUniform4uiv;
623   PFNGLPROGRAMUNIFORMMATRIX2FVPROC     glProgramUniformMatrix2fv;
624   PFNGLPROGRAMUNIFORMMATRIX3FVPROC     glProgramUniformMatrix3fv;
625   PFNGLPROGRAMUNIFORMMATRIX4FVPROC     glProgramUniformMatrix4fv;
626   PFNGLPROGRAMUNIFORMMATRIX2DVPROC     glProgramUniformMatrix2dv;
627   PFNGLPROGRAMUNIFORMMATRIX3DVPROC     glProgramUniformMatrix3dv;
628   PFNGLPROGRAMUNIFORMMATRIX4DVPROC     glProgramUniformMatrix4dv;
629   PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC   glProgramUniformMatrix2x3fv;
630   PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC   glProgramUniformMatrix3x2fv;
631   PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC   glProgramUniformMatrix2x4fv;
632   PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC   glProgramUniformMatrix4x2fv;
633   PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC   glProgramUniformMatrix3x4fv;
634   PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC   glProgramUniformMatrix4x3fv;
635   PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC   glProgramUniformMatrix2x3dv;
636   PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC   glProgramUniformMatrix3x2dv;
637   PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC   glProgramUniformMatrix2x4dv;
638   PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC   glProgramUniformMatrix4x2dv;
639   PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC   glProgramUniformMatrix3x4dv;
640   PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC   glProgramUniformMatrix4x3dv;
641   PFNGLVALIDATEPROGRAMPIPELINEPROC     glValidateProgramPipeline;
642   PFNGLGETPROGRAMPIPELINEINFOLOGPROC   glGetProgramPipelineInfoLog;
643
644 public: //! @name GL_ARB_vertex_attrib_64bit (added to OpenGL 4.1 core)
645
646   PFNGLVERTEXATTRIBL1DPROC             glVertexAttribL1d;
647   PFNGLVERTEXATTRIBL2DPROC             glVertexAttribL2d;
648   PFNGLVERTEXATTRIBL3DPROC             glVertexAttribL3d;
649   PFNGLVERTEXATTRIBL4DPROC             glVertexAttribL4d;
650   PFNGLVERTEXATTRIBL1DVPROC            glVertexAttribL1dv;
651   PFNGLVERTEXATTRIBL2DVPROC            glVertexAttribL2dv;
652   PFNGLVERTEXATTRIBL3DVPROC            glVertexAttribL3dv;
653   PFNGLVERTEXATTRIBL4DVPROC            glVertexAttribL4dv;
654   PFNGLVERTEXATTRIBLPOINTERPROC        glVertexAttribLPointer;
655   PFNGLGETVERTEXATTRIBLDVPROC          glGetVertexAttribLdv;
656
657 public: //! @name GL_ARB_viewport_array (added to OpenGL 4.1 core)
658
659   PFNGLVIEWPORTARRAYVPROC              glViewportArrayv;
660   PFNGLVIEWPORTINDEXEDFPROC            glViewportIndexedf;
661   PFNGLVIEWPORTINDEXEDFVPROC           glViewportIndexedfv;
662   PFNGLSCISSORARRAYVPROC               glScissorArrayv;
663   PFNGLSCISSORINDEXEDPROC              glScissorIndexed;
664   PFNGLSCISSORINDEXEDVPROC             glScissorIndexedv;
665   PFNGLDEPTHRANGEARRAYVPROC            glDepthRangeArrayv;
666   PFNGLDEPTHRANGEINDEXEDPROC           glDepthRangeIndexed;
667   PFNGLGETFLOATI_VPROC                 glGetFloati_v;
668   PFNGLGETDOUBLEI_VPROC                glGetDoublei_v;
669
670 public: //! @name OpenGL 4.1
671
672   //
673
674 public: //! @name GL_ARB_base_instance (added to OpenGL 4.2 core)
675
676   PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC             glDrawArraysInstancedBaseInstance;
677   PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC           glDrawElementsInstancedBaseInstance;
678   PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glDrawElementsInstancedBaseVertexBaseInstance;
679
680 public: //! @name GL_ARB_transform_feedback_instanced (added to OpenGL 4.2 core)
681
682   PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC              glDrawTransformFeedbackInstanced;
683   PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC        glDrawTransformFeedbackStreamInstanced;
684
685 public: //! @name GL_ARB_internalformat_query (added to OpenGL 4.2 core)
686
687   PFNGLGETINTERNALFORMATIVPROC                         glGetInternalformativ;
688
689 public: //! @name GL_ARB_shader_atomic_counters (added to OpenGL 4.2 core)
690
691   PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC              glGetActiveAtomicCounterBufferiv;
692
693 public: //! @name GL_ARB_shader_image_load_store (added to OpenGL 4.2 core)
694
695   PFNGLBINDIMAGETEXTUREPROC                            glBindImageTexture;
696   PFNGLMEMORYBARRIERPROC                               glMemoryBarrier;
697
698 public: //! @name GL_ARB_texture_storage (added to OpenGL 4.2 core)
699
700   PFNGLTEXSTORAGE1DPROC                                glTexStorage1D;
701   PFNGLTEXSTORAGE2DPROC                                glTexStorage2D;
702   PFNGLTEXSTORAGE3DPROC                                glTexStorage3D;
703   PFNGLTEXTURESTORAGE1DEXTPROC                         glTextureStorage1DEXT;
704   PFNGLTEXTURESTORAGE2DEXTPROC                         glTextureStorage2DEXT;
705   PFNGLTEXTURESTORAGE3DEXTPROC                         glTextureStorage3DEXT;
706
707 public: //! @name OpenGL 4.2
708
709 public: //! @name OpenGL 4.3
710
711   PFNGLCLEARBUFFERDATAPROC                 glClearBufferData;
712   PFNGLCLEARBUFFERSUBDATAPROC              glClearBufferSubData;
713   PFNGLDISPATCHCOMPUTEPROC                 glDispatchCompute;
714   PFNGLDISPATCHCOMPUTEINDIRECTPROC         glDispatchComputeIndirect;
715   PFNGLCOPYIMAGESUBDATAPROC                glCopyImageSubData;
716   PFNGLFRAMEBUFFERPARAMETERIPROC           glFramebufferParameteri;
717   PFNGLGETFRAMEBUFFERPARAMETERIVPROC       glGetFramebufferParameteriv;
718   PFNGLGETINTERNALFORMATI64VPROC           glGetInternalformati64v;
719   PFNGLINVALIDATETEXSUBIMAGEPROC           glInvalidateTexSubImage;
720   PFNGLINVALIDATETEXIMAGEPROC              glInvalidateTexImage;
721   PFNGLINVALIDATEBUFFERSUBDATAPROC         glInvalidateBufferSubData;
722   PFNGLINVALIDATEBUFFERDATAPROC            glInvalidateBufferData;
723   PFNGLINVALIDATEFRAMEBUFFERPROC           glInvalidateFramebuffer;
724   PFNGLINVALIDATESUBFRAMEBUFFERPROC        glInvalidateSubFramebuffer;
725   PFNGLMULTIDRAWARRAYSINDIRECTPROC         glMultiDrawArraysIndirect;
726   PFNGLMULTIDRAWELEMENTSINDIRECTPROC       glMultiDrawElementsIndirect;
727   PFNGLGETPROGRAMINTERFACEIVPROC           glGetProgramInterfaceiv;
728   PFNGLGETPROGRAMRESOURCEINDEXPROC         glGetProgramResourceIndex;
729   PFNGLGETPROGRAMRESOURCENAMEPROC          glGetProgramResourceName;
730   PFNGLGETPROGRAMRESOURCEIVPROC            glGetProgramResourceiv;
731   PFNGLGETPROGRAMRESOURCELOCATIONPROC      glGetProgramResourceLocation;
732   PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glGetProgramResourceLocationIndex;
733   PFNGLSHADERSTORAGEBLOCKBINDINGPROC       glShaderStorageBlockBinding;
734   PFNGLTEXBUFFERRANGEPROC                  glTexBufferRange;
735   PFNGLTEXSTORAGE2DMULTISAMPLEPROC         glTexStorage2DMultisample;
736   PFNGLTEXSTORAGE3DMULTISAMPLEPROC         glTexStorage3DMultisample;
737   PFNGLTEXTUREVIEWPROC                     glTextureView;
738   PFNGLBINDVERTEXBUFFERPROC                glBindVertexBuffer;
739   PFNGLVERTEXATTRIBFORMATPROC              glVertexAttribFormat;
740   PFNGLVERTEXATTRIBIFORMATPROC             glVertexAttribIFormat;
741   PFNGLVERTEXATTRIBLFORMATPROC             glVertexAttribLFormat;
742   PFNGLVERTEXATTRIBBINDINGPROC             glVertexAttribBinding;
743   PFNGLVERTEXBINDINGDIVISORPROC            glVertexBindingDivisor;
744   PFNGLDEBUGMESSAGECONTROLPROC             glDebugMessageControl;
745   PFNGLDEBUGMESSAGEINSERTPROC              glDebugMessageInsert;
746   PFNGLDEBUGMESSAGECALLBACKPROC            glDebugMessageCallback;
747   PFNGLGETDEBUGMESSAGELOGPROC              glGetDebugMessageLog;
748   PFNGLPUSHDEBUGGROUPPROC                  glPushDebugGroup;
749   PFNGLPOPDEBUGGROUPPROC                   glPopDebugGroup;
750   PFNGLOBJECTLABELPROC                     glObjectLabel;
751   PFNGLGETOBJECTLABELPROC                  glGetObjectLabel;
752   PFNGLOBJECTPTRLABELPROC                  glObjectPtrLabel;
753   PFNGLGETOBJECTPTRLABELPROC               glGetObjectPtrLabel;
754
755 public: //! @name OpenGL 4.4
756
757   PFNGLBUFFERSTORAGEPROC     glBufferStorage;
758   PFNGLCLEARTEXIMAGEPROC     glClearTexImage;
759   PFNGLCLEARTEXSUBIMAGEPROC  glClearTexSubImage;
760   PFNGLBINDBUFFERSBASEPROC   glBindBuffersBase;
761   PFNGLBINDBUFFERSRANGEPROC  glBindBuffersRange;
762   PFNGLBINDTEXTURESPROC      glBindTextures;
763   PFNGLBINDSAMPLERSPROC      glBindSamplers;
764   PFNGLBINDIMAGETEXTURESPROC glBindImageTextures;
765   PFNGLBINDVERTEXBUFFERSPROC glBindVertexBuffers;
766
767 public: //! @name GL_ARB_debug_output (optional)
768
769   PFNGLDEBUGMESSAGECONTROLARBPROC  glDebugMessageControlARB;
770   PFNGLDEBUGMESSAGEINSERTARBPROC   glDebugMessageInsertARB;
771   PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallbackARB;
772   PFNGLGETDEBUGMESSAGELOGARBPROC   glGetDebugMessageLogARB;
773
774 public: //! @name GL_EXT_geometry_shader4
775
776   PFNGLPROGRAMPARAMETERIEXTPROC glProgramParameteriEXT;
777
778 #if defined(_WIN32)
779 public: //! @name wgl extensions
780
781   typedef const char* (WINAPI *wglGetExtensionsStringARB_t)(HDC theDeviceContext);
782   wglGetExtensionsStringARB_t wglGetExtensionsStringARB;
783
784   typedef BOOL        (WINAPI *wglSwapIntervalEXT_t)(int theInterval);
785   wglSwapIntervalEXT_t wglSwapIntervalEXT;
786
787   // WGL_ARB_pixel_format
788
789 #ifndef WGL_NUMBER_PIXEL_FORMATS_ARB
790   #define WGL_NUMBER_PIXEL_FORMATS_ARB            0x2000
791   #define WGL_DRAW_TO_WINDOW_ARB                  0x2001
792   #define WGL_DRAW_TO_BITMAP_ARB                  0x2002
793   #define WGL_ACCELERATION_ARB                    0x2003
794   #define WGL_NEED_PALETTE_ARB                    0x2004
795   #define WGL_NEED_SYSTEM_PALETTE_ARB             0x2005
796   #define WGL_SWAP_LAYER_BUFFERS_ARB              0x2006
797   #define WGL_SWAP_METHOD_ARB                     0x2007
798   #define WGL_NUMBER_OVERLAYS_ARB                 0x2008
799   #define WGL_NUMBER_UNDERLAYS_ARB                0x2009
800   #define WGL_TRANSPARENT_ARB                     0x200A
801   #define WGL_TRANSPARENT_RED_VALUE_ARB           0x2037
802   #define WGL_TRANSPARENT_GREEN_VALUE_ARB         0x2038
803   #define WGL_TRANSPARENT_BLUE_VALUE_ARB          0x2039
804   #define WGL_TRANSPARENT_ALPHA_VALUE_ARB         0x203A
805   #define WGL_TRANSPARENT_INDEX_VALUE_ARB         0x203B
806   #define WGL_SHARE_DEPTH_ARB                     0x200C
807   #define WGL_SHARE_STENCIL_ARB                   0x200D
808   #define WGL_SHARE_ACCUM_ARB                     0x200E
809   #define WGL_SUPPORT_GDI_ARB                     0x200F
810   #define WGL_SUPPORT_OPENGL_ARB                  0x2010
811   #define WGL_DOUBLE_BUFFER_ARB                   0x2011
812   #define WGL_STEREO_ARB                          0x2012
813   #define WGL_PIXEL_TYPE_ARB                      0x2013
814   #define WGL_COLOR_BITS_ARB                      0x2014
815   #define WGL_RED_BITS_ARB                        0x2015
816   #define WGL_RED_SHIFT_ARB                       0x2016
817   #define WGL_GREEN_BITS_ARB                      0x2017
818   #define WGL_GREEN_SHIFT_ARB                     0x2018
819   #define WGL_BLUE_BITS_ARB                       0x2019
820   #define WGL_BLUE_SHIFT_ARB                      0x201A
821   #define WGL_ALPHA_BITS_ARB                      0x201B
822   #define WGL_ALPHA_SHIFT_ARB                     0x201C
823   #define WGL_ACCUM_BITS_ARB                      0x201D
824   #define WGL_ACCUM_RED_BITS_ARB                  0x201E
825   #define WGL_ACCUM_GREEN_BITS_ARB                0x201F
826   #define WGL_ACCUM_BLUE_BITS_ARB                 0x2020
827   #define WGL_ACCUM_ALPHA_BITS_ARB                0x2021
828   #define WGL_DEPTH_BITS_ARB                      0x2022
829   #define WGL_STENCIL_BITS_ARB                    0x2023
830   #define WGL_AUX_BUFFERS_ARB                     0x2024
831
832   #define WGL_NO_ACCELERATION_ARB                 0x2025
833   #define WGL_GENERIC_ACCELERATION_ARB            0x2026
834   #define WGL_FULL_ACCELERATION_ARB               0x2027
835
836   #define WGL_SWAP_EXCHANGE_ARB                   0x2028
837   #define WGL_SWAP_COPY_ARB                       0x2029
838   #define WGL_SWAP_UNDEFINED_ARB                  0x202A
839
840   #define WGL_TYPE_RGBA_ARB                       0x202B
841   #define WGL_TYPE_COLORINDEX_ARB                 0x202C
842
843 #endif // WGL_NUMBER_PIXEL_FORMATS_ARB
844
845       // WGL_ARB_multisample
846 #ifndef WGL_SAMPLE_BUFFERS_ARB
847   #define WGL_SAMPLE_BUFFERS_ARB               0x2041
848   #define WGL_SAMPLES_ARB                      0x2042
849 #endif
850
851       // WGL_ARB_create_context_robustness
852 #ifndef WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB
853   #define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
854   #define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
855   #define WGL_NO_RESET_NOTIFICATION_ARB               0x8261
856   #define WGL_LOSE_CONTEXT_ON_RESET_ARB               0x8252
857 #endif
858
859   typedef BOOL (WINAPI *wglChoosePixelFormatARB_t)
860       (HDC           theDevCtx,
861        const int*    theIntAttribs,
862        const float*  theFloatAttribs,
863        unsigned int  theMaxFormats,
864        int*          theFormatsOut,
865        unsigned int* theNumFormatsOut);
866   wglChoosePixelFormatARB_t wglChoosePixelFormatARB;
867
868   // WGL_ARB_create_context_profile
869
870 #ifndef WGL_CONTEXT_MAJOR_VERSION_ARB
871   #define WGL_CONTEXT_MAJOR_VERSION_ARB           0x2091
872   #define WGL_CONTEXT_MINOR_VERSION_ARB           0x2092
873   #define WGL_CONTEXT_LAYER_PLANE_ARB             0x2093
874   #define WGL_CONTEXT_FLAGS_ARB                   0x2094
875   #define WGL_CONTEXT_PROFILE_MASK_ARB            0x9126
876
877   // WGL_CONTEXT_FLAGS bits
878   #define WGL_CONTEXT_DEBUG_BIT_ARB               0x0001
879   #define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB  0x0002
880
881   // WGL_CONTEXT_PROFILE_MASK_ARB bits
882   #define WGL_CONTEXT_CORE_PROFILE_BIT_ARB          0x00000001
883   #define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
884 #endif // WGL_CONTEXT_MAJOR_VERSION_ARB
885
886   typedef HGLRC (WINAPI *wglCreateContextAttribsARB_t)(HDC        theDevCtx,
887                                                        HGLRC      theShareContext,
888                                                        const int* theAttribs);
889   wglCreateContextAttribsARB_t wglCreateContextAttribsARB;
890
891   // WGL_NV_DX_interop
892
893   typedef BOOL   (WINAPI *wglDXSetResourceShareHandleNV_t)(void* theObjectD3d, HANDLE theShareHandle);
894   typedef HANDLE (WINAPI *wglDXOpenDeviceNV_t      )(void*   theDeviceD3d);
895   typedef BOOL   (WINAPI *wglDXCloseDeviceNV_t     )(HANDLE  theDeviceIOP);
896   typedef HANDLE (WINAPI *wglDXRegisterObjectNV_t  )(HANDLE  theDeviceIOP,
897                                                      void*   theObjectD3d,
898                                                      GLuint  theName,
899                                                      GLenum  theType,
900                                                      GLenum  theAccess);
901   typedef BOOL   (WINAPI *wglDXUnregisterObjectNV_t)(HANDLE  theDeviceIOP,
902                                                      HANDLE  theObject);
903   typedef BOOL   (WINAPI *wglDXObjectAccessNV_t    )(HANDLE  theObject,
904                                                      GLenum  theAccess);
905   typedef BOOL   (WINAPI *wglDXLockObjectsNV_t     )(HANDLE  theDeviceIOP,
906                                                      GLint   theCount,
907                                                      HANDLE* theObjects);
908   typedef BOOL   (WINAPI *wglDXUnlockObjectsNV_t   )(HANDLE  theDeviceIOP,
909                                                      GLint   theCount,
910                                                      HANDLE* theObjects);
911
912   wglDXSetResourceShareHandleNV_t wglDXSetResourceShareHandleNV;
913   wglDXOpenDeviceNV_t       wglDXOpenDeviceNV;
914   wglDXCloseDeviceNV_t      wglDXCloseDeviceNV;
915   wglDXRegisterObjectNV_t   wglDXRegisterObjectNV;
916   wglDXUnregisterObjectNV_t wglDXUnregisterObjectNV;
917   wglDXObjectAccessNV_t     wglDXObjectAccessNV;
918   wglDXLockObjectsNV_t      wglDXLockObjectsNV;
919   wglDXUnlockObjectsNV_t    wglDXUnlockObjectsNV;
920
921 #ifndef WGL_ACCESS_READ_WRITE_NV
922   #define WGL_ACCESS_READ_ONLY_NV     0x0000
923   #define WGL_ACCESS_READ_WRITE_NV    0x0001
924   #define WGL_ACCESS_WRITE_DISCARD_NV 0x0002
925 #endif
926
927 #elif defined(__APPLE__)
928 public: //! @name CGL extensions
929
930 #else
931 public: //! @name glX extensions
932
933   // GLX_EXT_swap_control
934   //typedef int         (*glXSwapIntervalEXT_t)(Display* theDisplay, GLXDrawable theDrawable, int theInterval);
935   typedef int         (*glXSwapIntervalEXT_t)();
936   glXSwapIntervalEXT_t glXSwapIntervalEXT;
937
938   typedef int         (*glXSwapIntervalSGI_t)(int theInterval);
939   glXSwapIntervalSGI_t glXSwapIntervalSGI;
940 #endif
941
942 };
943
944 #endif // _OpenGl_GlFunctions_Header