1 //
2 // Copyright (c) 2015 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 // FunctionsGL.h: Defines the FuntionsGL class to contain loaded GL functions
8 
9 #ifndef LIBANGLE_RENDERER_GL_FUNCTIONSGL_H_
10 #define LIBANGLE_RENDERER_GL_FUNCTIONSGL_H_
11 
12 #include "common/debug.h"
13 #include "libANGLE/Version.h"
14 #include "libANGLE/renderer/gl/functionsgl_enums.h"
15 #include "libANGLE/renderer/gl/functionsgl_typedefs.h"
16 
17 namespace rx
18 {
19 
20 enum StandardGL
21 {
22     STANDARD_GL_DESKTOP,
23     STANDARD_GL_ES,
24 };
25 
26 class FunctionsGL
27 {
28   public:
29     FunctionsGL();
30     virtual ~FunctionsGL();
31 
32     void initialize();
33 
34     // Version information
35     gl::Version version;
36     StandardGL standard;
37     GLint profile;
38     bool isAtLeastGL(const gl::Version &glVersion) const;
39     bool isAtMostGL(const gl::Version &glVersion) const;
40     bool isAtLeastGLES(const gl::Version &glesVersion) const;
41     bool isAtMostGLES(const gl::Version &glesVersion) const;
42 
43     // Extensions
44     std::vector<std::string> extensions;
45     bool hasExtension(const std::string &ext) const;
46     bool hasGLExtension(const std::string &ext) const;
47     bool hasGLESExtension(const std::string &ext) const;
48 
49     // Entry Points
50     // 1.0
51     PFNGLBLENDFUNCPROC blendFunc;
52     PFNGLCLEARPROC clear;
53     PFNGLCLEARCOLORPROC clearColor;
54     PFNGLCLEARDEPTHPROC clearDepth;
55     PFNGLCLEARSTENCILPROC clearStencil;
56     PFNGLCOLORMASKPROC colorMask;
57     PFNGLCULLFACEPROC cullFace;
58     PFNGLDEPTHFUNCPROC depthFunc;
59     PFNGLDEPTHMASKPROC depthMask;
60     PFNGLDEPTHRANGEPROC depthRange;
61     PFNGLDISABLEPROC disable;
62     PFNGLDRAWBUFFERPROC drawBuffer;
63     PFNGLENABLEPROC enable;
64     PFNGLFINISHPROC finish;
65     PFNGLFLUSHPROC flush;
66     PFNGLFRONTFACEPROC frontFace;
67     PFNGLGETBOOLEANVPROC getBooleanv;
68     PFNGLGETDOUBLEVPROC getDoublev;
69     PFNGLGETERRORPROC getError;
70     PFNGLGETFLOATVPROC getFloatv;
71     PFNGLGETINTEGERVPROC getIntegerv;
72     PFNGLGETSTRINGPROC getString;
73     PFNGLGETTEXIMAGEPROC getTexImage;
74     PFNGLGETTEXLEVELPARAMETERFVPROC getTexLevelParameterfv;
75     PFNGLGETTEXLEVELPARAMETERIVPROC getTexLevelParameteriv;
76     PFNGLGETTEXPARAMETERFVPROC getTexParameterfv;
77     PFNGLGETTEXPARAMETERIVPROC getTexParameteriv;
78     PFNGLHINTPROC hint;
79     PFNGLISENABLEDPROC isEnabled;
80     PFNGLLINEWIDTHPROC lineWidth;
81     PFNGLLOGICOPPROC logicOp;
82     PFNGLPIXELSTOREFPROC pixelStoref;
83     PFNGLPIXELSTOREIPROC pixelStorei;
84     PFNGLPOINTSIZEPROC pointSize;
85     PFNGLPOLYGONMODEPROC polygonMode;
86     PFNGLREADBUFFERPROC readBuffer;
87     PFNGLREADPIXELSPROC readPixels;
88     PFNGLSCISSORPROC scissor;
89     PFNGLSTENCILFUNCPROC stencilFunc;
90     PFNGLSTENCILMASKPROC stencilMask;
91     PFNGLSTENCILOPPROC stencilOp;
92     PFNGLTEXIMAGE1DPROC texImage1D;
93     PFNGLTEXIMAGE2DPROC texImage2D;
94     PFNGLTEXPARAMETERFPROC texParameterf;
95     PFNGLTEXPARAMETERFVPROC texParameterfv;
96     PFNGLTEXPARAMETERIPROC texParameteri;
97     PFNGLTEXPARAMETERIVPROC texParameteriv;
98     PFNGLVIEWPORTPROC viewport;
99 
100     // 1.1
101     PFNGLBINDTEXTUREPROC bindTexture;
102     PFNGLCOPYTEXIMAGE1DPROC copyTexImage1D;
103     PFNGLCOPYTEXIMAGE2DPROC copyTexImage2D;
104     PFNGLCOPYTEXSUBIMAGE1DPROC copyTexSubImage1D;
105     PFNGLCOPYTEXSUBIMAGE2DPROC copyTexSubImage2D;
106     PFNGLDELETETEXTURESPROC deleteTextures;
107     PFNGLDRAWARRAYSPROC drawArrays;
108     PFNGLDRAWELEMENTSPROC drawElements;
109     PFNGLGENTEXTURESPROC genTextures;
110     PFNGLISTEXTUREPROC isTexture;
111     PFNGLPOLYGONOFFSETPROC polygonOffset;
112     PFNGLTEXSUBIMAGE1DPROC texSubImage1D;
113     PFNGLTEXSUBIMAGE2DPROC texSubImage2D;
114 
115     // 1.2
116     PFNGLBLENDCOLORPROC blendColor;
117     PFNGLBLENDEQUATIONPROC blendEquation;
118     PFNGLCOPYTEXSUBIMAGE3DPROC copyTexSubImage3D;
119     PFNGLDRAWRANGEELEMENTSPROC drawRangeElements;
120     PFNGLTEXIMAGE3DPROC texImage3D;
121     PFNGLTEXSUBIMAGE3DPROC texSubImage3D;
122 
123     // 1.2 Extensions
124     PFNGLDELETEFENCESNVPROC deleteFencesNV;
125     PFNGLGENFENCESNVPROC genFencesNV;
126     PFNGLISFENCENVPROC isFenceNV;
127     PFNGLTESTFENCENVPROC testFenceNV;
128     PFNGLGETFENCEIVNVPROC getFenceivNV;
129     PFNGLFINISHFENCENVPROC finishFenceNV;
130     PFNGLSETFENCENVPROC setFenceNV;
131 
132     // 1.3
133     PFNGLACTIVETEXTUREPROC activeTexture;
134     PFNGLCOMPRESSEDTEXIMAGE1DPROC compressedTexImage1D;
135     PFNGLCOMPRESSEDTEXIMAGE2DPROC compressedTexImage2D;
136     PFNGLCOMPRESSEDTEXIMAGE3DPROC compressedTexImage3D;
137     PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC compressedTexSubImage1D;
138     PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC compressedTexSubImage2D;
139     PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC compressedTexSubImage3D;
140     PFNGLGETCOMPRESSEDTEXIMAGEPROC getCompressedTexImage;
141     PFNGLSAMPLECOVERAGEPROC sampleCoverage;
142 
143     // 1.4
144     PFNGLBLENDFUNCSEPARATEPROC blendFuncSeparate;
145     PFNGLMULTIDRAWARRAYSPROC multiDrawArrays;
146     PFNGLMULTIDRAWELEMENTSPROC multiDrawElements;
147     PFNGLPOINTPARAMETERFPROC pointParameterf;
148     PFNGLPOINTPARAMETERFVPROC pointParameterfv;
149     PFNGLPOINTPARAMETERIPROC pointParameteri;
150     PFNGLPOINTPARAMETERIVPROC pointParameteriv;
151 
152     // 1.5
153     PFNGLBEGINQUERYPROC beginQuery;
154     PFNGLBINDBUFFERPROC bindBuffer;
155     PFNGLBUFFERDATAPROC bufferData;
156     PFNGLBUFFERSUBDATAPROC bufferSubData;
157     PFNGLDELETEBUFFERSPROC deleteBuffers;
158     PFNGLDELETEQUERIESPROC deleteQueries;
159     PFNGLENDQUERYPROC endQuery;
160     PFNGLGENBUFFERSPROC genBuffers;
161     PFNGLGENQUERIESPROC genQueries;
162     PFNGLGETBUFFERPARAMETERIVPROC getBufferParameteriv;
163     PFNGLGETBUFFERPOINTERVPROC getBufferPointerv;
164     PFNGLGETBUFFERSUBDATAPROC getBufferSubData;
165     PFNGLGETQUERYOBJECTIVPROC getQueryObjectiv;
166     PFNGLGETQUERYOBJECTUIVPROC getQueryObjectuiv;
167     PFNGLGETQUERYIVPROC getQueryiv;
168     PFNGLISBUFFERPROC isBuffer;
169     PFNGLISQUERYPROC isQuery;
170     PFNGLMAPBUFFERPROC mapBuffer;
171     PFNGLUNMAPBUFFERPROC unmapBuffer;
172 
173     // 2.0
174     PFNGLATTACHSHADERPROC attachShader;
175     PFNGLBINDATTRIBLOCATIONPROC bindAttribLocation;
176     PFNGLBLENDEQUATIONSEPARATEPROC blendEquationSeparate;
177     PFNGLCOMPILESHADERPROC compileShader;
178     PFNGLCREATEPROGRAMPROC createProgram;
179     PFNGLCREATESHADERPROC createShader;
180     PFNGLDELETEPROGRAMPROC deleteProgram;
181     PFNGLDELETESHADERPROC deleteShader;
182     PFNGLDETACHSHADERPROC detachShader;
183     PFNGLDISABLEVERTEXATTRIBARRAYPROC disableVertexAttribArray;
184     PFNGLDRAWBUFFERSPROC drawBuffers;
185     PFNGLENABLEVERTEXATTRIBARRAYPROC enableVertexAttribArray;
186     PFNGLGETACTIVEATTRIBPROC getActiveAttrib;
187     PFNGLGETACTIVEUNIFORMPROC getActiveUniform;
188     PFNGLGETATTACHEDSHADERSPROC getAttachedShaders;
189     PFNGLGETATTRIBLOCATIONPROC getAttribLocation;
190     PFNGLGETPROGRAMINFOLOGPROC getProgramInfoLog;
191     PFNGLGETPROGRAMIVPROC getProgramiv;
192     PFNGLGETSHADERINFOLOGPROC getShaderInfoLog;
193     PFNGLGETSHADERSOURCEPROC getShaderSource;
194     PFNGLGETSHADERIVPROC getShaderiv;
195     PFNGLGETUNIFORMLOCATIONPROC getUniformLocation;
196     PFNGLGETUNIFORMFVPROC getUniformfv;
197     PFNGLGETUNIFORMIVPROC getUniformiv;
198     PFNGLGETVERTEXATTRIBPOINTERVPROC getVertexAttribPointerv;
199     PFNGLGETVERTEXATTRIBDVPROC getVertexAttribdv;
200     PFNGLGETVERTEXATTRIBFVPROC getVertexAttribfv;
201     PFNGLGETVERTEXATTRIBIVPROC getVertexAttribiv;
202     PFNGLISPROGRAMPROC isProgram;
203     PFNGLISSHADERPROC isShader;
204     PFNGLLINKPROGRAMPROC linkProgram;
205     PFNGLSHADERSOURCEPROC shaderSource;
206     PFNGLSTENCILFUNCSEPARATEPROC stencilFuncSeparate;
207     PFNGLSTENCILMASKSEPARATEPROC stencilMaskSeparate;
208     PFNGLSTENCILOPSEPARATEPROC stencilOpSeparate;
209     PFNGLUNIFORM1FPROC uniform1f;
210     PFNGLUNIFORM1FVPROC uniform1fv;
211     PFNGLUNIFORM1IPROC uniform1i;
212     PFNGLUNIFORM1IVPROC uniform1iv;
213     PFNGLUNIFORM2FPROC uniform2f;
214     PFNGLUNIFORM2FVPROC uniform2fv;
215     PFNGLUNIFORM2IPROC uniform2i;
216     PFNGLUNIFORM2IVPROC uniform2iv;
217     PFNGLUNIFORM3FPROC uniform3f;
218     PFNGLUNIFORM3FVPROC uniform3fv;
219     PFNGLUNIFORM3IPROC uniform3i;
220     PFNGLUNIFORM3IVPROC uniform3iv;
221     PFNGLUNIFORM4FPROC uniform4f;
222     PFNGLUNIFORM4FVPROC uniform4fv;
223     PFNGLUNIFORM4IPROC uniform4i;
224     PFNGLUNIFORM4IVPROC uniform4iv;
225     PFNGLUNIFORMMATRIX2FVPROC uniformMatrix2fv;
226     PFNGLUNIFORMMATRIX3FVPROC uniformMatrix3fv;
227     PFNGLUNIFORMMATRIX4FVPROC uniformMatrix4fv;
228     PFNGLUSEPROGRAMPROC useProgram;
229     PFNGLVALIDATEPROGRAMPROC validateProgram;
230     PFNGLVERTEXATTRIB1DPROC vertexAttrib1d;
231     PFNGLVERTEXATTRIB1DVPROC vertexAttrib1dv;
232     PFNGLVERTEXATTRIB1FPROC vertexAttrib1f;
233     PFNGLVERTEXATTRIB1FVPROC vertexAttrib1fv;
234     PFNGLVERTEXATTRIB1SPROC vertexAttrib1s;
235     PFNGLVERTEXATTRIB1SVPROC vertexAttrib1sv;
236     PFNGLVERTEXATTRIB2DPROC vertexAttrib2d;
237     PFNGLVERTEXATTRIB2DVPROC vertexAttrib2dv;
238     PFNGLVERTEXATTRIB2FPROC vertexAttrib2f;
239     PFNGLVERTEXATTRIB2FVPROC vertexAttrib2fv;
240     PFNGLVERTEXATTRIB2SPROC vertexAttrib2s;
241     PFNGLVERTEXATTRIB2SVPROC vertexAttrib2sv;
242     PFNGLVERTEXATTRIB3DPROC vertexAttrib3d;
243     PFNGLVERTEXATTRIB3DVPROC vertexAttrib3dv;
244     PFNGLVERTEXATTRIB3FPROC vertexAttrib3f;
245     PFNGLVERTEXATTRIB3FVPROC vertexAttrib3fv;
246     PFNGLVERTEXATTRIB3SPROC vertexAttrib3s;
247     PFNGLVERTEXATTRIB3SVPROC vertexAttrib3sv;
248     PFNGLVERTEXATTRIB4NBVPROC vertexAttrib4Nbv;
249     PFNGLVERTEXATTRIB4NIVPROC vertexAttrib4Niv;
250     PFNGLVERTEXATTRIB4NSVPROC vertexAttrib4Nsv;
251     PFNGLVERTEXATTRIB4NUBPROC vertexAttrib4Nub;
252     PFNGLVERTEXATTRIB4NUBVPROC vertexAttrib4Nubv;
253     PFNGLVERTEXATTRIB4NUIVPROC vertexAttrib4Nuiv;
254     PFNGLVERTEXATTRIB4NUSVPROC vertexAttrib4Nusv;
255     PFNGLVERTEXATTRIB4BVPROC vertexAttrib4bv;
256     PFNGLVERTEXATTRIB4DPROC vertexAttrib4d;
257     PFNGLVERTEXATTRIB4DVPROC vertexAttrib4dv;
258     PFNGLVERTEXATTRIB4FPROC vertexAttrib4f;
259     PFNGLVERTEXATTRIB4FVPROC vertexAttrib4fv;
260     PFNGLVERTEXATTRIB4IVPROC vertexAttrib4iv;
261     PFNGLVERTEXATTRIB4SPROC vertexAttrib4s;
262     PFNGLVERTEXATTRIB4SVPROC vertexAttrib4sv;
263     PFNGLVERTEXATTRIB4UBVPROC vertexAttrib4ubv;
264     PFNGLVERTEXATTRIB4UIVPROC vertexAttrib4uiv;
265     PFNGLVERTEXATTRIB4USVPROC vertexAttrib4usv;
266     PFNGLVERTEXATTRIBPOINTERPROC vertexAttribPointer;
267 
268     // 2.1
269     PFNGLUNIFORMMATRIX2X3FVPROC uniformMatrix2x3fv;
270     PFNGLUNIFORMMATRIX2X4FVPROC uniformMatrix2x4fv;
271     PFNGLUNIFORMMATRIX3X2FVPROC uniformMatrix3x2fv;
272     PFNGLUNIFORMMATRIX3X4FVPROC uniformMatrix3x4fv;
273     PFNGLUNIFORMMATRIX4X2FVPROC uniformMatrix4x2fv;
274     PFNGLUNIFORMMATRIX4X3FVPROC uniformMatrix4x3fv;
275 
276     // 3.0
277     PFNGLBEGINCONDITIONALRENDERPROC beginConditionalRender;
278     PFNGLBEGINTRANSFORMFEEDBACKPROC beginTransformFeedback;
279     PFNGLBINDBUFFERBASEPROC bindBufferBase;
280     PFNGLBINDBUFFERRANGEPROC bindBufferRange;
281     PFNGLBINDFRAGDATALOCATIONPROC bindFragDataLocation;
282     PFNGLBINDFRAMEBUFFERPROC bindFramebuffer;
283     PFNGLBINDRENDERBUFFERPROC bindRenderbuffer;
284     PFNGLBINDVERTEXARRAYPROC bindVertexArray;
285     PFNGLBLITFRAMEBUFFERPROC blitFramebuffer;
286     PFNGLCHECKFRAMEBUFFERSTATUSPROC checkFramebufferStatus;
287     PFNGLCLAMPCOLORPROC clampColor;
288     PFNGLCLEARBUFFERFIPROC clearBufferfi;
289     PFNGLCLEARBUFFERFVPROC clearBufferfv;
290     PFNGLCLEARBUFFERIVPROC clearBufferiv;
291     PFNGLCLEARBUFFERUIVPROC clearBufferuiv;
292     PFNGLCOLORMASKIPROC colorMaski;
293     PFNGLDELETEFRAMEBUFFERSPROC deleteFramebuffers;
294     PFNGLDELETERENDERBUFFERSPROC deleteRenderbuffers;
295     PFNGLDELETEVERTEXARRAYSPROC deleteVertexArrays;
296     PFNGLDISABLEIPROC disablei;
297     PFNGLENABLEIPROC enablei;
298     PFNGLENDCONDITIONALRENDERPROC endConditionalRender;
299     PFNGLENDTRANSFORMFEEDBACKPROC endTransformFeedback;
300     PFNGLFLUSHMAPPEDBUFFERRANGEPROC flushMappedBufferRange;
301     PFNGLFRAMEBUFFERRENDERBUFFERPROC framebufferRenderbuffer;
302     PFNGLFRAMEBUFFERTEXTURE1DPROC framebufferTexture1D;
303     PFNGLFRAMEBUFFERTEXTURE2DPROC framebufferTexture2D;
304     PFNGLFRAMEBUFFERTEXTURE3DPROC framebufferTexture3D;
305     PFNGLFRAMEBUFFERTEXTURELAYERPROC framebufferTextureLayer;
306     PFNGLGENFRAMEBUFFERSPROC genFramebuffers;
307     PFNGLGENRENDERBUFFERSPROC genRenderbuffers;
308     PFNGLGENVERTEXARRAYSPROC genVertexArrays;
309     PFNGLGENERATEMIPMAPPROC generateMipmap;
310     PFNGLGETBOOLEANI_VPROC getBooleani_v;
311     PFNGLGETFRAGDATALOCATIONPROC getFragDataLocation;
312     PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC getFramebufferAttachmentParameteriv;
313     PFNGLGETINTEGERI_VPROC getIntegeri_v;
314     PFNGLGETRENDERBUFFERPARAMETERIVPROC getRenderbufferParameteriv;
315     PFNGLGETSTRINGIPROC getStringi;
316     PFNGLGETTEXPARAMETERIIVPROC getTexParameterIiv;
317     PFNGLGETTEXPARAMETERIUIVPROC getTexParameterIuiv;
318     PFNGLGETTRANSFORMFEEDBACKVARYINGPROC getTransformFeedbackVarying;
319     PFNGLGETUNIFORMUIVPROC getUniformuiv;
320     PFNGLGETVERTEXATTRIBIIVPROC getVertexAttribIiv;
321     PFNGLGETVERTEXATTRIBIUIVPROC getVertexAttribIuiv;
322     PFNGLISENABLEDIPROC isEnabledi;
323     PFNGLISFRAMEBUFFERPROC isFramebuffer;
324     PFNGLISRENDERBUFFERPROC isRenderbuffer;
325     PFNGLISVERTEXARRAYPROC isVertexArray;
326     PFNGLMAPBUFFERRANGEPROC mapBufferRange;
327     PFNGLRENDERBUFFERSTORAGEPROC renderbufferStorage;
328     PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC renderbufferStorageMultisample;
329     PFNGLTEXPARAMETERIIVPROC texParameterIiv;
330     PFNGLTEXPARAMETERIUIVPROC texParameterIuiv;
331     PFNGLTRANSFORMFEEDBACKVARYINGSPROC transformFeedbackVaryings;
332     PFNGLUNIFORM1UIPROC uniform1ui;
333     PFNGLUNIFORM1UIVPROC uniform1uiv;
334     PFNGLUNIFORM2UIPROC uniform2ui;
335     PFNGLUNIFORM2UIVPROC uniform2uiv;
336     PFNGLUNIFORM3UIPROC uniform3ui;
337     PFNGLUNIFORM3UIVPROC uniform3uiv;
338     PFNGLUNIFORM4UIPROC uniform4ui;
339     PFNGLUNIFORM4UIVPROC uniform4uiv;
340     PFNGLVERTEXATTRIBI1IPROC vertexAttribI1i;
341     PFNGLVERTEXATTRIBI1IVPROC vertexAttribI1iv;
342     PFNGLVERTEXATTRIBI1UIPROC vertexAttribI1ui;
343     PFNGLVERTEXATTRIBI1UIVPROC vertexAttribI1uiv;
344     PFNGLVERTEXATTRIBI2IPROC vertexAttribI2i;
345     PFNGLVERTEXATTRIBI2IVPROC vertexAttribI2iv;
346     PFNGLVERTEXATTRIBI2UIPROC vertexAttribI2ui;
347     PFNGLVERTEXATTRIBI2UIVPROC vertexAttribI2uiv;
348     PFNGLVERTEXATTRIBI3IPROC vertexAttribI3i;
349     PFNGLVERTEXATTRIBI3IVPROC vertexAttribI3iv;
350     PFNGLVERTEXATTRIBI3UIPROC vertexAttribI3ui;
351     PFNGLVERTEXATTRIBI3UIVPROC vertexAttribI3uiv;
352     PFNGLVERTEXATTRIBI4BVPROC vertexAttribI4bv;
353     PFNGLVERTEXATTRIBI4IPROC vertexAttribI4i;
354     PFNGLVERTEXATTRIBI4IVPROC vertexAttribI4iv;
355     PFNGLVERTEXATTRIBI4SVPROC vertexAttribI4sv;
356     PFNGLVERTEXATTRIBI4UBVPROC vertexAttribI4ubv;
357     PFNGLVERTEXATTRIBI4UIPROC vertexAttribI4ui;
358     PFNGLVERTEXATTRIBI4UIVPROC vertexAttribI4uiv;
359     PFNGLVERTEXATTRIBI4USVPROC vertexAttribI4usv;
360     PFNGLVERTEXATTRIBIPOINTERPROC vertexAttribIPointer;
361 
362     // 3.1
363     PFNGLCOPYBUFFERSUBDATAPROC copyBufferSubData;
364     PFNGLDRAWARRAYSINSTANCEDPROC drawArraysInstanced;
365     PFNGLDRAWELEMENTSINSTANCEDPROC drawElementsInstanced;
366     PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC getActiveUniformBlockName;
367     PFNGLGETACTIVEUNIFORMBLOCKIVPROC getActiveUniformBlockiv;
368     PFNGLGETACTIVEUNIFORMNAMEPROC getActiveUniformName;
369     PFNGLGETACTIVEUNIFORMSIVPROC getActiveUniformsiv;
370     PFNGLGETUNIFORMBLOCKINDEXPROC getUniformBlockIndex;
371     PFNGLGETUNIFORMINDICESPROC getUniformIndices;
372     PFNGLPRIMITIVERESTARTINDEXPROC primitiveRestartIndex;
373     PFNGLTEXBUFFERPROC texBuffer;
374     PFNGLUNIFORMBLOCKBINDINGPROC uniformBlockBinding;
375 
376     // 3.2
377     PFNGLCLIENTWAITSYNCPROC clientWaitSync;
378     PFNGLDELETESYNCPROC deleteSync;
379     PFNGLDRAWELEMENTSBASEVERTEXPROC drawElementsBaseVertex;
380     PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC drawElementsInstancedBaseVertex;
381     PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC drawRangeElementsBaseVertex;
382     PFNGLFENCESYNCPROC fenceSync;
383     PFNGLFRAMEBUFFERTEXTUREPROC framebufferTexture;
384     PFNGLGETBUFFERPARAMETERI64VPROC getBufferParameteri64v;
385     PFNGLGETINTEGER64I_VPROC getInteger64i_v;
386     PFNGLGETINTEGER64VPROC getInteger64v;
387     PFNGLGETMULTISAMPLEFVPROC getMultisamplefv;
388     PFNGLGETSYNCIVPROC getSynciv;
389     PFNGLISSYNCPROC isSync;
390     PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC multiDrawElementsBaseVertex;
391     PFNGLPROVOKINGVERTEXPROC provokingVertex;
392     PFNGLSAMPLEMASKIPROC sampleMaski;
393     PFNGLTEXIMAGE2DMULTISAMPLEPROC texImage2DMultisample;
394     PFNGLTEXIMAGE3DMULTISAMPLEPROC texImage3DMultisample;
395     PFNGLWAITSYNCPROC waitSync;
396 
397     // NV_path_rendering (originally written against 3.2 compatibility profile)
398     PFNGLMATRIXLOADFEXTPROC matrixLoadEXT;
399     PFNGLGENPATHSNVPROC genPathsNV;
400     PFNGLDELETEPATHSNVPROC delPathsNV;
401     PFNGLPATHCOMMANDSNVPROC pathCommandsNV;
402     PFNGLISPATHNVPROC isPathNV;
403     PFNGLPATHPARAMETERFNVPROC setPathParameterfNV;
404     PFNGLPATHPARAMETERINVPROC setPathParameteriNV;
405     PFNGLGETPATHPARAMETERFVNVPROC getPathParameterfNV;
406     PFNGLGETPATHPARAMETERIVNVPROC getPathParameteriNV;
407     PFNGLPATHSTENCILFUNCNVPROC pathStencilFuncNV;
408     PFNGLSTENCILFILLPATHNVPROC stencilFillPathNV;
409     PFNGLSTENCILSTROKEPATHNVPROC stencilStrokePathNV;
410     PFNGLCOVERFILLPATHNVPROC coverFillPathNV;
411     PFNGLCOVERSTROKEPATHNVPROC coverStrokePathNV;
412     PFNGLSTENCILTHENCOVERFILLPATHNVPROC stencilThenCoverFillPathNV;
413     PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC stencilThenCoverStrokePathNV;
414     PFNGLCOVERFILLPATHINSTANCEDNVPROC coverFillPathInstancedNV;
415     PFNGLCOVERSTROKEPATHINSTANCEDNVPROC coverStrokePathInstancedNV;
416     PFNGLSTENCILFILLPATHINSTANCEDNVPROC stencilFillPathInstancedNV;
417     PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC stencilStrokePathInstancedNV;
418     PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC stencilThenCoverFillPathInstancedNV;
419     PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC stencilThenCoverStrokePathInstancedNV;
420     PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC programPathFragmentInputGenNV;
421 
422     // 3.3
423     PFNGLBINDFRAGDATALOCATIONINDEXEDPROC bindFragDataLocationIndexed;
424     PFNGLBINDSAMPLERPROC bindSampler;
425     PFNGLDELETESAMPLERSPROC deleteSamplers;
426     PFNGLGENSAMPLERSPROC genSamplers;
427     PFNGLGETFRAGDATAINDEXPROC getFragDataIndex;
428     PFNGLGETQUERYOBJECTI64VPROC getQueryObjecti64v;
429     PFNGLGETQUERYOBJECTUI64VPROC getQueryObjectui64v;
430     PFNGLGETSAMPLERPARAMETERIIVPROC getSamplerParameterIiv;
431     PFNGLGETSAMPLERPARAMETERIUIVPROC getSamplerParameterIuiv;
432     PFNGLGETSAMPLERPARAMETERFVPROC getSamplerParameterfv;
433     PFNGLGETSAMPLERPARAMETERIVPROC getSamplerParameteriv;
434     PFNGLISSAMPLERPROC isSampler;
435     PFNGLQUERYCOUNTERPROC queryCounter;
436     PFNGLSAMPLERPARAMETERIIVPROC samplerParameterIiv;
437     PFNGLSAMPLERPARAMETERIUIVPROC samplerParameterIuiv;
438     PFNGLSAMPLERPARAMETERFPROC samplerParameterf;
439     PFNGLSAMPLERPARAMETERFVPROC samplerParameterfv;
440     PFNGLSAMPLERPARAMETERIPROC samplerParameteri;
441     PFNGLSAMPLERPARAMETERIVPROC samplerParameteriv;
442     PFNGLVERTEXATTRIBDIVISORPROC vertexAttribDivisor;
443     PFNGLVERTEXATTRIBP1UIPROC vertexAttribP1ui;
444     PFNGLVERTEXATTRIBP1UIVPROC vertexAttribP1uiv;
445     PFNGLVERTEXATTRIBP2UIPROC vertexAttribP2ui;
446     PFNGLVERTEXATTRIBP2UIVPROC vertexAttribP2uiv;
447     PFNGLVERTEXATTRIBP3UIPROC vertexAttribP3ui;
448     PFNGLVERTEXATTRIBP3UIVPROC vertexAttribP3uiv;
449     PFNGLVERTEXATTRIBP4UIPROC vertexAttribP4ui;
450     PFNGLVERTEXATTRIBP4UIVPROC vertexAttribP4uiv;
451 
452     // 4.0
453     PFNGLBEGINQUERYINDEXEDPROC beginQueryIndexed;
454     PFNGLBINDTRANSFORMFEEDBACKPROC bindTransformFeedback;
455     PFNGLBLENDEQUATIONSEPARATEIPROC blendEquationSeparatei;
456     PFNGLBLENDEQUATIONIPROC blendEquationi;
457     PFNGLBLENDFUNCSEPARATEIPROC blendFuncSeparatei;
458     PFNGLBLENDFUNCIPROC blendFunci;
459     PFNGLDELETETRANSFORMFEEDBACKSPROC deleteTransformFeedbacks;
460     PFNGLDRAWARRAYSINDIRECTPROC drawArraysIndirect;
461     PFNGLDRAWELEMENTSINDIRECTPROC drawElementsIndirect;
462     PFNGLDRAWTRANSFORMFEEDBACKPROC drawTransformFeedback;
463     PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC drawTransformFeedbackStream;
464     PFNGLENDQUERYINDEXEDPROC endQueryIndexed;
465     PFNGLGENTRANSFORMFEEDBACKSPROC genTransformFeedbacks;
466     PFNGLGETACTIVESUBROUTINENAMEPROC getActiveSubroutineName;
467     PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC getActiveSubroutineUniformName;
468     PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC getActiveSubroutineUniformiv;
469     PFNGLGETPROGRAMSTAGEIVPROC getProgramStageiv;
470     PFNGLGETQUERYINDEXEDIVPROC getQueryIndexediv;
471     PFNGLGETSUBROUTINEINDEXPROC getSubroutineIndex;
472     PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC getSubroutineUniformLocation;
473     PFNGLGETUNIFORMSUBROUTINEUIVPROC getUniformSubroutineuiv;
474     PFNGLGETUNIFORMDVPROC getUniformdv;
475     PFNGLISTRANSFORMFEEDBACKPROC isTransformFeedback;
476     PFNGLMINSAMPLESHADINGPROC minSampleShading;
477     PFNGLPATCHPARAMETERFVPROC patchParameterfv;
478     PFNGLPATCHPARAMETERIPROC patchParameteri;
479     PFNGLPAUSETRANSFORMFEEDBACKPROC pauseTransformFeedback;
480     PFNGLRESUMETRANSFORMFEEDBACKPROC resumeTransformFeedback;
481     PFNGLUNIFORM1DPROC uniform1d;
482     PFNGLUNIFORM1DVPROC uniform1dv;
483     PFNGLUNIFORM2DPROC uniform2d;
484     PFNGLUNIFORM2DVPROC uniform2dv;
485     PFNGLUNIFORM3DPROC uniform3d;
486     PFNGLUNIFORM3DVPROC uniform3dv;
487     PFNGLUNIFORM4DPROC uniform4d;
488     PFNGLUNIFORM4DVPROC uniform4dv;
489     PFNGLUNIFORMMATRIX2DVPROC uniformMatrix2dv;
490     PFNGLUNIFORMMATRIX2X3DVPROC uniformMatrix2x3dv;
491     PFNGLUNIFORMMATRIX2X4DVPROC uniformMatrix2x4dv;
492     PFNGLUNIFORMMATRIX3DVPROC uniformMatrix3dv;
493     PFNGLUNIFORMMATRIX3X2DVPROC uniformMatrix3x2dv;
494     PFNGLUNIFORMMATRIX3X4DVPROC uniformMatrix3x4dv;
495     PFNGLUNIFORMMATRIX4DVPROC uniformMatrix4dv;
496     PFNGLUNIFORMMATRIX4X2DVPROC uniformMatrix4x2dv;
497     PFNGLUNIFORMMATRIX4X3DVPROC uniformMatrix4x3dv;
498     PFNGLUNIFORMSUBROUTINESUIVPROC uniformSubroutinesuiv;
499 
500     // 4.1
501     PFNGLACTIVESHADERPROGRAMPROC activeShaderProgram;
502     PFNGLBINDPROGRAMPIPELINEPROC bindProgramPipeline;
503     PFNGLCLEARDEPTHFPROC clearDepthf;
504     PFNGLCREATESHADERPROGRAMVPROC createShaderProgramv;
505     PFNGLDELETEPROGRAMPIPELINESPROC deleteProgramPipelines;
506     PFNGLDEPTHRANGEARRAYVPROC depthRangeArrayv;
507     PFNGLDEPTHRANGEINDEXEDPROC depthRangeIndexed;
508     PFNGLDEPTHRANGEFPROC depthRangef;
509     PFNGLGENPROGRAMPIPELINESPROC genProgramPipelines;
510     PFNGLGETDOUBLEI_VPROC getDoublei_v;
511     PFNGLGETFLOATI_VPROC getFloati_v;
512     PFNGLGETPROGRAMBINARYPROC getProgramBinary;
513     PFNGLGETPROGRAMPIPELINEINFOLOGPROC getProgramPipelineInfoLog;
514     PFNGLGETPROGRAMPIPELINEIVPROC getProgramPipelineiv;
515     PFNGLGETSHADERPRECISIONFORMATPROC getShaderPrecisionFormat;
516     PFNGLGETVERTEXATTRIBLDVPROC getVertexAttribLdv;
517     PFNGLISPROGRAMPIPELINEPROC isProgramPipeline;
518     PFNGLPROGRAMBINARYPROC programBinary;
519     PFNGLPROGRAMPARAMETERIPROC programParameteri;
520     PFNGLPROGRAMUNIFORM1DPROC programUniform1d;
521     PFNGLPROGRAMUNIFORM1DVPROC programUniform1dv;
522     PFNGLPROGRAMUNIFORM1FPROC programUniform1f;
523     PFNGLPROGRAMUNIFORM1FVPROC programUniform1fv;
524     PFNGLPROGRAMUNIFORM1IPROC programUniform1i;
525     PFNGLPROGRAMUNIFORM1IVPROC programUniform1iv;
526     PFNGLPROGRAMUNIFORM1UIPROC programUniform1ui;
527     PFNGLPROGRAMUNIFORM1UIVPROC programUniform1uiv;
528     PFNGLPROGRAMUNIFORM2DPROC programUniform2d;
529     PFNGLPROGRAMUNIFORM2DVPROC programUniform2dv;
530     PFNGLPROGRAMUNIFORM2FPROC programUniform2f;
531     PFNGLPROGRAMUNIFORM2FVPROC programUniform2fv;
532     PFNGLPROGRAMUNIFORM2IPROC programUniform2i;
533     PFNGLPROGRAMUNIFORM2IVPROC programUniform2iv;
534     PFNGLPROGRAMUNIFORM2UIPROC programUniform2ui;
535     PFNGLPROGRAMUNIFORM2UIVPROC programUniform2uiv;
536     PFNGLPROGRAMUNIFORM3DPROC programUniform3d;
537     PFNGLPROGRAMUNIFORM3DVPROC programUniform3dv;
538     PFNGLPROGRAMUNIFORM3FPROC programUniform3f;
539     PFNGLPROGRAMUNIFORM3FVPROC programUniform3fv;
540     PFNGLPROGRAMUNIFORM3IPROC programUniform3i;
541     PFNGLPROGRAMUNIFORM3IVPROC programUniform3iv;
542     PFNGLPROGRAMUNIFORM3UIPROC programUniform3ui;
543     PFNGLPROGRAMUNIFORM3UIVPROC programUniform3uiv;
544     PFNGLPROGRAMUNIFORM4DPROC programUniform4d;
545     PFNGLPROGRAMUNIFORM4DVPROC programUniform4dv;
546     PFNGLPROGRAMUNIFORM4FPROC programUniform4f;
547     PFNGLPROGRAMUNIFORM4FVPROC programUniform4fv;
548     PFNGLPROGRAMUNIFORM4IPROC programUniform4i;
549     PFNGLPROGRAMUNIFORM4IVPROC programUniform4iv;
550     PFNGLPROGRAMUNIFORM4UIPROC programUniform4ui;
551     PFNGLPROGRAMUNIFORM4UIVPROC programUniform4uiv;
552     PFNGLPROGRAMUNIFORMMATRIX2DVPROC programUniformMatrix2dv;
553     PFNGLPROGRAMUNIFORMMATRIX2FVPROC programUniformMatrix2fv;
554     PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC programUniformMatrix2x3dv;
555     PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC programUniformMatrix2x3fv;
556     PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC programUniformMatrix2x4dv;
557     PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC programUniformMatrix2x4fv;
558     PFNGLPROGRAMUNIFORMMATRIX3DVPROC programUniformMatrix3dv;
559     PFNGLPROGRAMUNIFORMMATRIX3FVPROC programUniformMatrix3fv;
560     PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC programUniformMatrix3x2dv;
561     PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC programUniformMatrix3x2fv;
562     PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC programUniformMatrix3x4dv;
563     PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC programUniformMatrix3x4fv;
564     PFNGLPROGRAMUNIFORMMATRIX4DVPROC programUniformMatrix4dv;
565     PFNGLPROGRAMUNIFORMMATRIX4FVPROC programUniformMatrix4fv;
566     PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC programUniformMatrix4x2dv;
567     PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC programUniformMatrix4x2fv;
568     PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC programUniformMatrix4x3dv;
569     PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC programUniformMatrix4x3fv;
570     PFNGLRELEASESHADERCOMPILERPROC releaseShaderCompiler;
571     PFNGLSCISSORARRAYVPROC scissorArrayv;
572     PFNGLSCISSORINDEXEDPROC scissorIndexed;
573     PFNGLSCISSORINDEXEDVPROC scissorIndexedv;
574     PFNGLSHADERBINARYPROC shaderBinary;
575     PFNGLUSEPROGRAMSTAGESPROC useProgramStages;
576     PFNGLVALIDATEPROGRAMPIPELINEPROC validateProgramPipeline;
577     PFNGLVERTEXATTRIBL1DPROC vertexAttribL1d;
578     PFNGLVERTEXATTRIBL1DVPROC vertexAttribL1dv;
579     PFNGLVERTEXATTRIBL2DPROC vertexAttribL2d;
580     PFNGLVERTEXATTRIBL2DVPROC vertexAttribL2dv;
581     PFNGLVERTEXATTRIBL3DPROC vertexAttribL3d;
582     PFNGLVERTEXATTRIBL3DVPROC vertexAttribL3dv;
583     PFNGLVERTEXATTRIBL4DPROC vertexAttribL4d;
584     PFNGLVERTEXATTRIBL4DVPROC vertexAttribL4dv;
585     PFNGLVERTEXATTRIBLPOINTERPROC vertexAttribLPointer;
586     PFNGLVIEWPORTARRAYVPROC viewportArrayv;
587     PFNGLVIEWPORTINDEXEDFPROC viewportIndexedf;
588     PFNGLVIEWPORTINDEXEDFVPROC viewportIndexedfv;
589 
590     // 4.2
591     PFNGLBINDIMAGETEXTUREPROC bindImageTexture;
592     PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC drawArraysInstancedBaseInstance;
593     PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC drawElementsInstancedBaseInstance;
594     PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC drawElementsInstancedBaseVertexBaseInstance;
595     PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC drawTransformFeedbackInstanced;
596     PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC drawTransformFeedbackStreamInstanced;
597     PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC getActiveAtomicCounterBufferiv;
598     PFNGLGETINTERNALFORMATIVPROC getInternalformativ;
599     PFNGLMEMORYBARRIERPROC memoryBarrier;
600     PFNGLTEXSTORAGE1DPROC texStorage1D;
601     PFNGLTEXSTORAGE2DPROC texStorage2D;
602     PFNGLTEXSTORAGE3DPROC texStorage3D;
603 
604     // 4.3
605     PFNGLBINDVERTEXBUFFERPROC bindVertexBuffer;
606     PFNGLCLEARBUFFERDATAPROC clearBufferData;
607     PFNGLCLEARBUFFERSUBDATAPROC clearBufferSubData;
608     PFNGLCOPYIMAGESUBDATAPROC copyImageSubData;
609     PFNGLDEBUGMESSAGECALLBACKPROC debugMessageCallback;
610     PFNGLDEBUGMESSAGECONTROLPROC debugMessageControl;
611     PFNGLDEBUGMESSAGEINSERTPROC debugMessageInsert;
612     PFNGLDISPATCHCOMPUTEPROC dispatchCompute;
613     PFNGLDISPATCHCOMPUTEINDIRECTPROC dispatchComputeIndirect;
614     PFNGLFRAMEBUFFERPARAMETERIPROC framebufferParameteri;
615     PFNGLGETDEBUGMESSAGELOGPROC getDebugMessageLog;
616     PFNGLGETFRAMEBUFFERPARAMETERIVPROC getFramebufferParameteriv;
617     PFNGLGETINTERNALFORMATI64VPROC getInternalformati64v;
618     PFNGLGETPOINTERVPROC getPointerv;
619     PFNGLGETOBJECTLABELPROC getObjectLabel;
620     PFNGLGETOBJECTPTRLABELPROC getObjectPtrLabel;
621     PFNGLGETPROGRAMINTERFACEIVPROC getProgramInterfaceiv;
622     PFNGLGETPROGRAMRESOURCEINDEXPROC getProgramResourceIndex;
623     PFNGLGETPROGRAMRESOURCELOCATIONPROC getProgramResourceLocation;
624     PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC getProgramResourceLocationIndex;
625     PFNGLGETPROGRAMRESOURCENAMEPROC getProgramResourceName;
626     PFNGLGETPROGRAMRESOURCEIVPROC getProgramResourceiv;
627     PFNGLINVALIDATEBUFFERDATAPROC invalidateBufferData;
628     PFNGLINVALIDATEBUFFERSUBDATAPROC invalidateBufferSubData;
629     PFNGLINVALIDATEFRAMEBUFFERPROC invalidateFramebuffer;
630     PFNGLINVALIDATESUBFRAMEBUFFERPROC invalidateSubFramebuffer;
631     PFNGLINVALIDATETEXIMAGEPROC invalidateTexImage;
632     PFNGLINVALIDATETEXSUBIMAGEPROC invalidateTexSubImage;
633     PFNGLMULTIDRAWARRAYSINDIRECTPROC multiDrawArraysIndirect;
634     PFNGLMULTIDRAWELEMENTSINDIRECTPROC multiDrawElementsIndirect;
635     PFNGLOBJECTLABELPROC objectLabel;
636     PFNGLOBJECTPTRLABELPROC objectPtrLabel;
637     PFNGLPOPDEBUGGROUPPROC popDebugGroup;
638     PFNGLPUSHDEBUGGROUPPROC pushDebugGroup;
639     PFNGLSHADERSTORAGEBLOCKBINDINGPROC shaderStorageBlockBinding;
640     PFNGLTEXBUFFERRANGEPROC texBufferRange;
641     PFNGLTEXSTORAGE2DMULTISAMPLEPROC texStorage2DMultisample;
642     PFNGLTEXSTORAGE3DMULTISAMPLEPROC texStorage3DMultisample;
643     PFNGLTEXTUREVIEWPROC textureView;
644     PFNGLVERTEXATTRIBBINDINGPROC vertexAttribBinding;
645     PFNGLVERTEXATTRIBFORMATPROC vertexAttribFormat;
646     PFNGLVERTEXATTRIBIFORMATPROC vertexAttribIFormat;
647     PFNGLVERTEXATTRIBLFORMATPROC vertexAttribLFormat;
648     PFNGLVERTEXBINDINGDIVISORPROC vertexBindingDivisor;
649     PFNGLCOVERAGEMODULATIONNVPROC coverageModulationNV;
650 
651     // 4.4
652     PFNGLBINDBUFFERSBASEPROC bindBuffersBase;
653     PFNGLBINDBUFFERSRANGEPROC bindBuffersRange;
654     PFNGLBINDIMAGETEXTURESPROC bindImageTextures;
655     PFNGLBINDSAMPLERSPROC bindSamplers;
656     PFNGLBINDTEXTURESPROC bindTextures;
657     PFNGLBINDVERTEXBUFFERSPROC bindVertexBuffers;
658     PFNGLBUFFERSTORAGEPROC bufferStorage;
659     PFNGLCLEARTEXIMAGEPROC clearTexImage;
660     PFNGLCLEARTEXSUBIMAGEPROC clearTexSubImage;
661 
662     // 4.5
663     PFNGLBINDTEXTUREUNITPROC bindTextureUnit;
664     PFNGLBLITNAMEDFRAMEBUFFERPROC blitNamedFramebuffer;
665     PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC checkNamedFramebufferStatus;
666     PFNGLCLEARNAMEDBUFFERDATAPROC clearNamedBufferData;
667     PFNGLCLEARNAMEDBUFFERSUBDATAPROC clearNamedBufferSubData;
668     PFNGLCLEARNAMEDFRAMEBUFFERFIPROC clearNamedFramebufferfi;
669     PFNGLCLEARNAMEDFRAMEBUFFERFVPROC clearNamedFramebufferfv;
670     PFNGLCLEARNAMEDFRAMEBUFFERIVPROC clearNamedFramebufferiv;
671     PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC clearNamedFramebufferuiv;
672     PFNGLCLIPCONTROLPROC clipControl;
673     PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC compressedTextureSubImage1D;
674     PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC compressedTextureSubImage2D;
675     PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC compressedTextureSubImage3D;
676     PFNGLCOPYNAMEDBUFFERSUBDATAPROC copyNamedBufferSubData;
677     PFNGLCOPYTEXTURESUBIMAGE1DPROC copyTextureSubImage1D;
678     PFNGLCOPYTEXTURESUBIMAGE2DPROC copyTextureSubImage2D;
679     PFNGLCOPYTEXTURESUBIMAGE3DPROC copyTextureSubImage3D;
680     PFNGLCREATEBUFFERSPROC createBuffers;
681     PFNGLCREATEFRAMEBUFFERSPROC createFramebuffers;
682     PFNGLCREATEPROGRAMPIPELINESPROC createProgramPipelines;
683     PFNGLCREATEQUERIESPROC createQueries;
684     PFNGLCREATERENDERBUFFERSPROC createRenderbuffers;
685     PFNGLCREATESAMPLERSPROC createSamplers;
686     PFNGLCREATETEXTURESPROC createTextures;
687     PFNGLCREATETRANSFORMFEEDBACKSPROC createTransformFeedbacks;
688     PFNGLCREATEVERTEXARRAYSPROC createVertexArrays;
689     PFNGLDISABLEVERTEXARRAYATTRIBPROC disableVertexArrayAttrib;
690     PFNGLENABLEVERTEXARRAYATTRIBPROC enableVertexArrayAttrib;
691     PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC flushMappedNamedBufferRange;
692     PFNGLGENERATETEXTUREMIPMAPPROC generateTextureMipmap;
693     PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC getCompressedTextureImage;
694     PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC getCompressedTextureSubImage;
695     PFNGLGETGRAPHICSRESETSTATUSPROC getGraphicsResetStatus;
696     PFNGLGETNAMEDBUFFERPARAMETERI64VPROC getNamedBufferParameteri64v;
697     PFNGLGETNAMEDBUFFERPARAMETERIVPROC getNamedBufferParameteriv;
698     PFNGLGETNAMEDBUFFERPOINTERVPROC getNamedBufferPointerv;
699     PFNGLGETNAMEDBUFFERSUBDATAPROC getNamedBufferSubData;
700     PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC getNamedFramebufferAttachmentParameteriv;
701     PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC getNamedFramebufferParameteriv;
702     PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC getNamedRenderbufferParameteriv;
703     PFNGLGETQUERYBUFFEROBJECTI64VPROC getQueryBufferObjecti64v;
704     PFNGLGETQUERYBUFFEROBJECTIVPROC getQueryBufferObjectiv;
705     PFNGLGETQUERYBUFFEROBJECTUI64VPROC getQueryBufferObjectui64v;
706     PFNGLGETQUERYBUFFEROBJECTUIVPROC getQueryBufferObjectuiv;
707     PFNGLGETTEXTUREIMAGEPROC getTextureImage;
708     PFNGLGETTEXTURELEVELPARAMETERFVPROC getTextureLevelParameterfv;
709     PFNGLGETTEXTURELEVELPARAMETERIVPROC getTextureLevelParameteriv;
710     PFNGLGETTEXTUREPARAMETERIIVPROC getTextureParameterIiv;
711     PFNGLGETTEXTUREPARAMETERIUIVPROC getTextureParameterIuiv;
712     PFNGLGETTEXTUREPARAMETERFVPROC getTextureParameterfv;
713     PFNGLGETTEXTUREPARAMETERIVPROC getTextureParameteriv;
714     PFNGLGETTEXTURESUBIMAGEPROC getTextureSubImage;
715     PFNGLGETTRANSFORMFEEDBACKI64_VPROC getTransformFeedbacki64_v;
716     PFNGLGETTRANSFORMFEEDBACKI_VPROC getTransformFeedbacki_v;
717     PFNGLGETTRANSFORMFEEDBACKIVPROC getTransformFeedbackiv;
718     PFNGLGETVERTEXARRAYINDEXED64IVPROC getVertexArrayIndexed64iv;
719     PFNGLGETVERTEXARRAYINDEXEDIVPROC getVertexArrayIndexediv;
720     PFNGLGETVERTEXARRAYIVPROC getVertexArrayiv;
721     PFNGLGETNCOMPRESSEDTEXIMAGEPROC getnCompressedTexImage;
722     PFNGLGETNTEXIMAGEPROC getnTexImage;
723     PFNGLGETNUNIFORMDVPROC getnUniformdv;
724     PFNGLGETNUNIFORMFVPROC getnUniformfv;
725     PFNGLGETNUNIFORMIVPROC getnUniformiv;
726     PFNGLGETNUNIFORMUIVPROC getnUniformuiv;
727     PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC invalidateNamedFramebufferData;
728     PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC invalidateNamedFramebufferSubData;
729     PFNGLMAPNAMEDBUFFERPROC mapNamedBuffer;
730     PFNGLMAPNAMEDBUFFERRANGEPROC mapNamedBufferRange;
731     PFNGLMEMORYBARRIERBYREGIONPROC memoryBarrierByRegion;
732     PFNGLNAMEDBUFFERDATAPROC namedBufferData;
733     PFNGLNAMEDBUFFERSTORAGEPROC namedBufferStorage;
734     PFNGLNAMEDBUFFERSUBDATAPROC namedBufferSubData;
735     PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC namedFramebufferDrawBuffer;
736     PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC namedFramebufferDrawBuffers;
737     PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC namedFramebufferParameteri;
738     PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC namedFramebufferReadBuffer;
739     PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC namedFramebufferRenderbuffer;
740     PFNGLNAMEDFRAMEBUFFERTEXTUREPROC namedFramebufferTexture;
741     PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC namedFramebufferTextureLayer;
742     PFNGLNAMEDRENDERBUFFERSTORAGEPROC namedRenderbufferStorage;
743     PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC namedRenderbufferStorageMultisample;
744     PFNGLREADNPIXELSPROC readnPixels;
745     PFNGLTEXTUREBARRIERPROC textureBarrier;
746     PFNGLTEXTUREBUFFERPROC textureBuffer;
747     PFNGLTEXTUREBUFFERRANGEPROC textureBufferRange;
748     PFNGLTEXTUREPARAMETERIIVPROC textureParameterIiv;
749     PFNGLTEXTUREPARAMETERIUIVPROC textureParameterIuiv;
750     PFNGLTEXTUREPARAMETERFPROC textureParameterf;
751     PFNGLTEXTUREPARAMETERFVPROC textureParameterfv;
752     PFNGLTEXTUREPARAMETERIPROC textureParameteri;
753     PFNGLTEXTUREPARAMETERIVPROC textureParameteriv;
754     PFNGLTEXTURESTORAGE1DPROC textureStorage1D;
755     PFNGLTEXTURESTORAGE2DPROC textureStorage2D;
756     PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC textureStorage2DMultisample;
757     PFNGLTEXTURESTORAGE3DPROC textureStorage3D;
758     PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC textureStorage3DMultisample;
759     PFNGLTEXTURESUBIMAGE1DPROC textureSubImage1D;
760     PFNGLTEXTURESUBIMAGE2DPROC textureSubImage2D;
761     PFNGLTEXTURESUBIMAGE3DPROC textureSubImage3D;
762     PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC transformFeedbackBufferBase;
763     PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC transformFeedbackBufferRange;
764     PFNGLUNMAPNAMEDBUFFERPROC unmapNamedBuffer;
765     PFNGLVERTEXARRAYATTRIBBINDINGPROC vertexArrayAttribBinding;
766     PFNGLVERTEXARRAYATTRIBFORMATPROC vertexArrayAttribFormat;
767     PFNGLVERTEXARRAYATTRIBIFORMATPROC vertexArrayAttribIFormat;
768     PFNGLVERTEXARRAYATTRIBLFORMATPROC vertexArrayAttribLFormat;
769     PFNGLVERTEXARRAYBINDINGDIVISORPROC vertexArrayBindingDivisor;
770     PFNGLVERTEXARRAYELEMENTBUFFERPROC vertexArrayElementBuffer;
771     PFNGLVERTEXARRAYVERTEXBUFFERPROC vertexArrayVertexBuffer;
772     PFNGLVERTEXARRAYVERTEXBUFFERSPROC vertexArrayVertexBuffers;
773 
774     // ES 3.2
775     PFNGLBLENDBARRIERPROC blendBarrier;
776     PFNGLPRIMITIVEBOUNDINGBOXPROC primitiveBoundingBox;
777 
778     // ES extensions
779     PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC eglImageTargetRenderbufferStorageOES;
780     PFNGLEGLIMAGETARGETTEXTURE2DOESPROC eglImageTargetTexture2DOES;
781 
782   private:
783     void initializeProcsDesktopGL();
784     void initializeProcsGLES();
785 
786     virtual void *loadProcAddress(const std::string &function) = 0;
787 };
788 
789 }
790 
791 #endif // LIBANGLE_RENDERER_GL_FUNCTIONSGL_H_
792