• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // GENERATED FILE - DO NOT EDIT.
2 // Generated by generate_gl_dispatch_table.py using data from gl_bindings_data.json and gl.xml.
3 //
4 // Copyright 2019 The ANGLE Project Authors. All rights reserved.
5 // Use of this source code is governed by a BSD-style license that can be
6 // found in the LICENSE file.
7 //
8 // DispatchTableGL_autogen.cpp:
9 //   Initialize the native bindings for ANGLE's OpenGL back-end.
10 
11 #include "libANGLE/renderer/gl/DispatchTableGL_autogen.h"
12 
13 #include "libANGLE/Version.h"
14 #include "libANGLE/renderer/gl/FunctionsGL.h"
15 
16 #if defined(ANGLE_ENABLE_OPENGL_NULL)
17 #    include "libANGLE/renderer/gl/null_functions.h"
18 #endif  // defined(ANGLE_ENABLE_OPENGL_NULL)
19 
20 // Check for nullptr so extensions do not overwrite core imports.
21 #define ASSIGN(NAME, FP) \
22     if (!FP)             \
23     *reinterpret_cast<void **>(&FP) = loadProcAddress(NAME)
24 
25 namespace rx
26 {
27 DispatchTableGL::DispatchTableGL() = default;
28 
initProcsDesktopGL(const gl::Version & version,const std::set<std::string> & extensions)29 void DispatchTableGL::initProcsDesktopGL(const gl::Version &version,
30                                          const std::set<std::string> &extensions)
31 {
32     if (version >= gl::Version(1, 0))
33     {
34         ASSIGN("glBlendFunc", blendFunc);
35         ASSIGN("glClear", clear);
36         ASSIGN("glClearColor", clearColor);
37         ASSIGN("glClearDepth", clearDepth);
38         ASSIGN("glClearStencil", clearStencil);
39         ASSIGN("glColorMask", colorMask);
40         ASSIGN("glCullFace", cullFace);
41         ASSIGN("glDepthFunc", depthFunc);
42         ASSIGN("glDepthMask", depthMask);
43         ASSIGN("glDepthRange", depthRange);
44         ASSIGN("glDisable", disable);
45         ASSIGN("glDrawBuffer", drawBuffer);
46         ASSIGN("glEnable", enable);
47         ASSIGN("glFinish", finish);
48         ASSIGN("glFlush", flush);
49         ASSIGN("glFrontFace", frontFace);
50         ASSIGN("glGetBooleanv", getBooleanv);
51         ASSIGN("glGetDoublev", getDoublev);
52         ASSIGN("glGetError", getError);
53         ASSIGN("glGetFloatv", getFloatv);
54         ASSIGN("glGetIntegerv", getIntegerv);
55         ASSIGN("glGetString", getString);
56         ASSIGN("glGetTexImage", getTexImage);
57         ASSIGN("glGetTexLevelParameterfv", getTexLevelParameterfv);
58         ASSIGN("glGetTexLevelParameteriv", getTexLevelParameteriv);
59         ASSIGN("glGetTexParameterfv", getTexParameterfv);
60         ASSIGN("glGetTexParameteriv", getTexParameteriv);
61         ASSIGN("glHint", hint);
62         ASSIGN("glIsEnabled", isEnabled);
63         ASSIGN("glLineWidth", lineWidth);
64         ASSIGN("glLogicOp", logicOp);
65         ASSIGN("glPixelStoref", pixelStoref);
66         ASSIGN("glPixelStorei", pixelStorei);
67         ASSIGN("glPointSize", pointSize);
68         ASSIGN("glPolygonMode", polygonMode);
69         ASSIGN("glReadBuffer", readBuffer);
70         ASSIGN("glReadPixels", readPixels);
71         ASSIGN("glScissor", scissor);
72         ASSIGN("glStencilFunc", stencilFunc);
73         ASSIGN("glStencilMask", stencilMask);
74         ASSIGN("glStencilOp", stencilOp);
75         ASSIGN("glTexImage1D", texImage1D);
76         ASSIGN("glTexImage2D", texImage2D);
77         ASSIGN("glTexParameterf", texParameterf);
78         ASSIGN("glTexParameterfv", texParameterfv);
79         ASSIGN("glTexParameteri", texParameteri);
80         ASSIGN("glTexParameteriv", texParameteriv);
81         ASSIGN("glViewport", viewport);
82     }
83 
84     if (version >= gl::Version(1, 1))
85     {
86         ASSIGN("glBindTexture", bindTexture);
87         ASSIGN("glCopyTexImage1D", copyTexImage1D);
88         ASSIGN("glCopyTexImage2D", copyTexImage2D);
89         ASSIGN("glCopyTexSubImage1D", copyTexSubImage1D);
90         ASSIGN("glCopyTexSubImage2D", copyTexSubImage2D);
91         ASSIGN("glDeleteTextures", deleteTextures);
92         ASSIGN("glDrawArrays", drawArrays);
93         ASSIGN("glDrawElements", drawElements);
94         ASSIGN("glGenTextures", genTextures);
95         ASSIGN("glIsTexture", isTexture);
96         ASSIGN("glPolygonOffset", polygonOffset);
97         ASSIGN("glTexSubImage1D", texSubImage1D);
98         ASSIGN("glTexSubImage2D", texSubImage2D);
99     }
100 
101     if (version >= gl::Version(1, 2))
102     {
103         ASSIGN("glCopyTexSubImage3D", copyTexSubImage3D);
104         ASSIGN("glDrawRangeElements", drawRangeElements);
105         ASSIGN("glTexImage3D", texImage3D);
106         ASSIGN("glTexSubImage3D", texSubImage3D);
107     }
108 
109     if (version >= gl::Version(1, 3))
110     {
111         ASSIGN("glActiveTexture", activeTexture);
112         ASSIGN("glCompressedTexImage1D", compressedTexImage1D);
113         ASSIGN("glCompressedTexImage2D", compressedTexImage2D);
114         ASSIGN("glCompressedTexImage3D", compressedTexImage3D);
115         ASSIGN("glCompressedTexSubImage1D", compressedTexSubImage1D);
116         ASSIGN("glCompressedTexSubImage2D", compressedTexSubImage2D);
117         ASSIGN("glCompressedTexSubImage3D", compressedTexSubImage3D);
118         ASSIGN("glGetCompressedTexImage", getCompressedTexImage);
119         ASSIGN("glSampleCoverage", sampleCoverage);
120     }
121 
122     if (version >= gl::Version(1, 4))
123     {
124         ASSIGN("glBlendColor", blendColor);
125         ASSIGN("glBlendEquation", blendEquation);
126         ASSIGN("glBlendFuncSeparate", blendFuncSeparate);
127         ASSIGN("glMultiDrawArrays", multiDrawArrays);
128         ASSIGN("glMultiDrawElements", multiDrawElements);
129         ASSIGN("glPointParameterf", pointParameterf);
130         ASSIGN("glPointParameterfv", pointParameterfv);
131         ASSIGN("glPointParameteri", pointParameteri);
132         ASSIGN("glPointParameteriv", pointParameteriv);
133     }
134 
135     if (version >= gl::Version(1, 5))
136     {
137         ASSIGN("glBeginQuery", beginQuery);
138         ASSIGN("glBindBuffer", bindBuffer);
139         ASSIGN("glBufferData", bufferData);
140         ASSIGN("glBufferSubData", bufferSubData);
141         ASSIGN("glDeleteBuffers", deleteBuffers);
142         ASSIGN("glDeleteQueries", deleteQueries);
143         ASSIGN("glEndQuery", endQuery);
144         ASSIGN("glGenBuffers", genBuffers);
145         ASSIGN("glGenQueries", genQueries);
146         ASSIGN("glGetBufferParameteriv", getBufferParameteriv);
147         ASSIGN("glGetBufferPointerv", getBufferPointerv);
148         ASSIGN("glGetBufferSubData", getBufferSubData);
149         ASSIGN("glGetQueryObjectiv", getQueryObjectiv);
150         ASSIGN("glGetQueryObjectuiv", getQueryObjectuiv);
151         ASSIGN("glGetQueryiv", getQueryiv);
152         ASSIGN("glIsBuffer", isBuffer);
153         ASSIGN("glIsQuery", isQuery);
154         ASSIGN("glMapBuffer", mapBuffer);
155         ASSIGN("glUnmapBuffer", unmapBuffer);
156     }
157 
158     if (version >= gl::Version(2, 0))
159     {
160         ASSIGN("glAttachShader", attachShader);
161         ASSIGN("glBindAttribLocation", bindAttribLocation);
162         ASSIGN("glBlendEquationSeparate", blendEquationSeparate);
163         ASSIGN("glCompileShader", compileShader);
164         ASSIGN("glCreateProgram", createProgram);
165         ASSIGN("glCreateShader", createShader);
166         ASSIGN("glDeleteProgram", deleteProgram);
167         ASSIGN("glDeleteShader", deleteShader);
168         ASSIGN("glDetachShader", detachShader);
169         ASSIGN("glDisableVertexAttribArray", disableVertexAttribArray);
170         ASSIGN("glDrawBuffers", drawBuffers);
171         ASSIGN("glEnableVertexAttribArray", enableVertexAttribArray);
172         ASSIGN("glGetActiveAttrib", getActiveAttrib);
173         ASSIGN("glGetActiveUniform", getActiveUniform);
174         ASSIGN("glGetAttachedShaders", getAttachedShaders);
175         ASSIGN("glGetAttribLocation", getAttribLocation);
176         ASSIGN("glGetProgramInfoLog", getProgramInfoLog);
177         ASSIGN("glGetProgramiv", getProgramiv);
178         ASSIGN("glGetShaderInfoLog", getShaderInfoLog);
179         ASSIGN("glGetShaderSource", getShaderSource);
180         ASSIGN("glGetShaderiv", getShaderiv);
181         ASSIGN("glGetUniformLocation", getUniformLocation);
182         ASSIGN("glGetUniformfv", getUniformfv);
183         ASSIGN("glGetUniformiv", getUniformiv);
184         ASSIGN("glGetVertexAttribPointerv", getVertexAttribPointerv);
185         ASSIGN("glGetVertexAttribdv", getVertexAttribdv);
186         ASSIGN("glGetVertexAttribfv", getVertexAttribfv);
187         ASSIGN("glGetVertexAttribiv", getVertexAttribiv);
188         ASSIGN("glIsProgram", isProgram);
189         ASSIGN("glIsShader", isShader);
190         ASSIGN("glLinkProgram", linkProgram);
191         ASSIGN("glShaderSource", shaderSource);
192         ASSIGN("glStencilFuncSeparate", stencilFuncSeparate);
193         ASSIGN("glStencilMaskSeparate", stencilMaskSeparate);
194         ASSIGN("glStencilOpSeparate", stencilOpSeparate);
195         ASSIGN("glUniform1f", uniform1f);
196         ASSIGN("glUniform1fv", uniform1fv);
197         ASSIGN("glUniform1i", uniform1i);
198         ASSIGN("glUniform1iv", uniform1iv);
199         ASSIGN("glUniform2f", uniform2f);
200         ASSIGN("glUniform2fv", uniform2fv);
201         ASSIGN("glUniform2i", uniform2i);
202         ASSIGN("glUniform2iv", uniform2iv);
203         ASSIGN("glUniform3f", uniform3f);
204         ASSIGN("glUniform3fv", uniform3fv);
205         ASSIGN("glUniform3i", uniform3i);
206         ASSIGN("glUniform3iv", uniform3iv);
207         ASSIGN("glUniform4f", uniform4f);
208         ASSIGN("glUniform4fv", uniform4fv);
209         ASSIGN("glUniform4i", uniform4i);
210         ASSIGN("glUniform4iv", uniform4iv);
211         ASSIGN("glUniformMatrix2fv", uniformMatrix2fv);
212         ASSIGN("glUniformMatrix3fv", uniformMatrix3fv);
213         ASSIGN("glUniformMatrix4fv", uniformMatrix4fv);
214         ASSIGN("glUseProgram", useProgram);
215         ASSIGN("glValidateProgram", validateProgram);
216         ASSIGN("glVertexAttrib1d", vertexAttrib1d);
217         ASSIGN("glVertexAttrib1dv", vertexAttrib1dv);
218         ASSIGN("glVertexAttrib1f", vertexAttrib1f);
219         ASSIGN("glVertexAttrib1fv", vertexAttrib1fv);
220         ASSIGN("glVertexAttrib1s", vertexAttrib1s);
221         ASSIGN("glVertexAttrib1sv", vertexAttrib1sv);
222         ASSIGN("glVertexAttrib2d", vertexAttrib2d);
223         ASSIGN("glVertexAttrib2dv", vertexAttrib2dv);
224         ASSIGN("glVertexAttrib2f", vertexAttrib2f);
225         ASSIGN("glVertexAttrib2fv", vertexAttrib2fv);
226         ASSIGN("glVertexAttrib2s", vertexAttrib2s);
227         ASSIGN("glVertexAttrib2sv", vertexAttrib2sv);
228         ASSIGN("glVertexAttrib3d", vertexAttrib3d);
229         ASSIGN("glVertexAttrib3dv", vertexAttrib3dv);
230         ASSIGN("glVertexAttrib3f", vertexAttrib3f);
231         ASSIGN("glVertexAttrib3fv", vertexAttrib3fv);
232         ASSIGN("glVertexAttrib3s", vertexAttrib3s);
233         ASSIGN("glVertexAttrib3sv", vertexAttrib3sv);
234         ASSIGN("glVertexAttrib4Nbv", vertexAttrib4Nbv);
235         ASSIGN("glVertexAttrib4Niv", vertexAttrib4Niv);
236         ASSIGN("glVertexAttrib4Nsv", vertexAttrib4Nsv);
237         ASSIGN("glVertexAttrib4Nub", vertexAttrib4Nub);
238         ASSIGN("glVertexAttrib4Nubv", vertexAttrib4Nubv);
239         ASSIGN("glVertexAttrib4Nuiv", vertexAttrib4Nuiv);
240         ASSIGN("glVertexAttrib4Nusv", vertexAttrib4Nusv);
241         ASSIGN("glVertexAttrib4bv", vertexAttrib4bv);
242         ASSIGN("glVertexAttrib4d", vertexAttrib4d);
243         ASSIGN("glVertexAttrib4dv", vertexAttrib4dv);
244         ASSIGN("glVertexAttrib4f", vertexAttrib4f);
245         ASSIGN("glVertexAttrib4fv", vertexAttrib4fv);
246         ASSIGN("glVertexAttrib4iv", vertexAttrib4iv);
247         ASSIGN("glVertexAttrib4s", vertexAttrib4s);
248         ASSIGN("glVertexAttrib4sv", vertexAttrib4sv);
249         ASSIGN("glVertexAttrib4ubv", vertexAttrib4ubv);
250         ASSIGN("glVertexAttrib4uiv", vertexAttrib4uiv);
251         ASSIGN("glVertexAttrib4usv", vertexAttrib4usv);
252         ASSIGN("glVertexAttribPointer", vertexAttribPointer);
253     }
254 
255     if (version >= gl::Version(2, 1))
256     {
257         ASSIGN("glUniformMatrix2x3fv", uniformMatrix2x3fv);
258         ASSIGN("glUniformMatrix2x4fv", uniformMatrix2x4fv);
259         ASSIGN("glUniformMatrix3x2fv", uniformMatrix3x2fv);
260         ASSIGN("glUniformMatrix3x4fv", uniformMatrix3x4fv);
261         ASSIGN("glUniformMatrix4x2fv", uniformMatrix4x2fv);
262         ASSIGN("glUniformMatrix4x3fv", uniformMatrix4x3fv);
263     }
264 
265     if (version >= gl::Version(3, 0))
266     {
267         ASSIGN("glBeginConditionalRender", beginConditionalRender);
268         ASSIGN("glBeginTransformFeedback", beginTransformFeedback);
269         ASSIGN("glBindBufferBase", bindBufferBase);
270         ASSIGN("glBindBufferRange", bindBufferRange);
271         ASSIGN("glBindFragDataLocation", bindFragDataLocation);
272         ASSIGN("glBindFramebuffer", bindFramebuffer);
273         ASSIGN("glBindRenderbuffer", bindRenderbuffer);
274         ASSIGN("glBindVertexArray", bindVertexArray);
275         ASSIGN("glBlitFramebuffer", blitFramebuffer);
276         ASSIGN("glCheckFramebufferStatus", checkFramebufferStatus);
277         ASSIGN("glClampColor", clampColor);
278         ASSIGN("glClearBufferfi", clearBufferfi);
279         ASSIGN("glClearBufferfv", clearBufferfv);
280         ASSIGN("glClearBufferiv", clearBufferiv);
281         ASSIGN("glClearBufferuiv", clearBufferuiv);
282         ASSIGN("glColorMaski", colorMaski);
283         ASSIGN("glDeleteFramebuffers", deleteFramebuffers);
284         ASSIGN("glDeleteRenderbuffers", deleteRenderbuffers);
285         ASSIGN("glDeleteVertexArrays", deleteVertexArrays);
286         ASSIGN("glDisablei", disablei);
287         ASSIGN("glEnablei", enablei);
288         ASSIGN("glEndConditionalRender", endConditionalRender);
289         ASSIGN("glEndTransformFeedback", endTransformFeedback);
290         ASSIGN("glFlushMappedBufferRange", flushMappedBufferRange);
291         ASSIGN("glFramebufferRenderbuffer", framebufferRenderbuffer);
292         ASSIGN("glFramebufferTexture1D", framebufferTexture1D);
293         ASSIGN("glFramebufferTexture2D", framebufferTexture2D);
294         ASSIGN("glFramebufferTexture3D", framebufferTexture3D);
295         ASSIGN("glFramebufferTextureLayer", framebufferTextureLayer);
296         ASSIGN("glGenFramebuffers", genFramebuffers);
297         ASSIGN("glGenRenderbuffers", genRenderbuffers);
298         ASSIGN("glGenVertexArrays", genVertexArrays);
299         ASSIGN("glGenerateMipmap", generateMipmap);
300         ASSIGN("glGetBooleani_v", getBooleani_v);
301         ASSIGN("glGetFragDataLocation", getFragDataLocation);
302         ASSIGN("glGetFramebufferAttachmentParameteriv", getFramebufferAttachmentParameteriv);
303         ASSIGN("glGetIntegeri_v", getIntegeri_v);
304         ASSIGN("glGetRenderbufferParameteriv", getRenderbufferParameteriv);
305         ASSIGN("glGetStringi", getStringi);
306         ASSIGN("glGetTexParameterIiv", getTexParameterIiv);
307         ASSIGN("glGetTexParameterIuiv", getTexParameterIuiv);
308         ASSIGN("glGetTransformFeedbackVarying", getTransformFeedbackVarying);
309         ASSIGN("glGetUniformuiv", getUniformuiv);
310         ASSIGN("glGetVertexAttribIiv", getVertexAttribIiv);
311         ASSIGN("glGetVertexAttribIuiv", getVertexAttribIuiv);
312         ASSIGN("glIsEnabledi", isEnabledi);
313         ASSIGN("glIsFramebuffer", isFramebuffer);
314         ASSIGN("glIsRenderbuffer", isRenderbuffer);
315         ASSIGN("glIsVertexArray", isVertexArray);
316         ASSIGN("glMapBufferRange", mapBufferRange);
317         ASSIGN("glRenderbufferStorage", renderbufferStorage);
318         ASSIGN("glRenderbufferStorageMultisample", renderbufferStorageMultisample);
319         ASSIGN("glTexParameterIiv", texParameterIiv);
320         ASSIGN("glTexParameterIuiv", texParameterIuiv);
321         ASSIGN("glTransformFeedbackVaryings", transformFeedbackVaryings);
322         ASSIGN("glUniform1ui", uniform1ui);
323         ASSIGN("glUniform1uiv", uniform1uiv);
324         ASSIGN("glUniform2ui", uniform2ui);
325         ASSIGN("glUniform2uiv", uniform2uiv);
326         ASSIGN("glUniform3ui", uniform3ui);
327         ASSIGN("glUniform3uiv", uniform3uiv);
328         ASSIGN("glUniform4ui", uniform4ui);
329         ASSIGN("glUniform4uiv", uniform4uiv);
330         ASSIGN("glVertexAttribI1i", vertexAttribI1i);
331         ASSIGN("glVertexAttribI1iv", vertexAttribI1iv);
332         ASSIGN("glVertexAttribI1ui", vertexAttribI1ui);
333         ASSIGN("glVertexAttribI1uiv", vertexAttribI1uiv);
334         ASSIGN("glVertexAttribI2i", vertexAttribI2i);
335         ASSIGN("glVertexAttribI2iv", vertexAttribI2iv);
336         ASSIGN("glVertexAttribI2ui", vertexAttribI2ui);
337         ASSIGN("glVertexAttribI2uiv", vertexAttribI2uiv);
338         ASSIGN("glVertexAttribI3i", vertexAttribI3i);
339         ASSIGN("glVertexAttribI3iv", vertexAttribI3iv);
340         ASSIGN("glVertexAttribI3ui", vertexAttribI3ui);
341         ASSIGN("glVertexAttribI3uiv", vertexAttribI3uiv);
342         ASSIGN("glVertexAttribI4bv", vertexAttribI4bv);
343         ASSIGN("glVertexAttribI4i", vertexAttribI4i);
344         ASSIGN("glVertexAttribI4iv", vertexAttribI4iv);
345         ASSIGN("glVertexAttribI4sv", vertexAttribI4sv);
346         ASSIGN("glVertexAttribI4ubv", vertexAttribI4ubv);
347         ASSIGN("glVertexAttribI4ui", vertexAttribI4ui);
348         ASSIGN("glVertexAttribI4uiv", vertexAttribI4uiv);
349         ASSIGN("glVertexAttribI4usv", vertexAttribI4usv);
350         ASSIGN("glVertexAttribIPointer", vertexAttribIPointer);
351     }
352 
353     if (version >= gl::Version(3, 1))
354     {
355         ASSIGN("glCopyBufferSubData", copyBufferSubData);
356         ASSIGN("glDrawArraysInstanced", drawArraysInstanced);
357         ASSIGN("glDrawElementsInstanced", drawElementsInstanced);
358         ASSIGN("glGetActiveUniformBlockName", getActiveUniformBlockName);
359         ASSIGN("glGetActiveUniformBlockiv", getActiveUniformBlockiv);
360         ASSIGN("glGetActiveUniformName", getActiveUniformName);
361         ASSIGN("glGetActiveUniformsiv", getActiveUniformsiv);
362         ASSIGN("glGetUniformBlockIndex", getUniformBlockIndex);
363         ASSIGN("glGetUniformIndices", getUniformIndices);
364         ASSIGN("glPrimitiveRestartIndex", primitiveRestartIndex);
365         ASSIGN("glTexBuffer", texBuffer);
366         ASSIGN("glUniformBlockBinding", uniformBlockBinding);
367     }
368 
369     if (version >= gl::Version(3, 2))
370     {
371         ASSIGN("glClientWaitSync", clientWaitSync);
372         ASSIGN("glDeleteSync", deleteSync);
373         ASSIGN("glDrawElementsBaseVertex", drawElementsBaseVertex);
374         ASSIGN("glDrawElementsInstancedBaseVertex", drawElementsInstancedBaseVertex);
375         ASSIGN("glDrawRangeElementsBaseVertex", drawRangeElementsBaseVertex);
376         ASSIGN("glFenceSync", fenceSync);
377         ASSIGN("glFramebufferTexture", framebufferTexture);
378         ASSIGN("glGetBufferParameteri64v", getBufferParameteri64v);
379         ASSIGN("glGetInteger64i_v", getInteger64i_v);
380         ASSIGN("glGetInteger64v", getInteger64v);
381         ASSIGN("glGetMultisamplefv", getMultisamplefv);
382         ASSIGN("glGetSynciv", getSynciv);
383         ASSIGN("glIsSync", isSync);
384         ASSIGN("glMultiDrawElementsBaseVertex", multiDrawElementsBaseVertex);
385         ASSIGN("glProvokingVertex", provokingVertex);
386         ASSIGN("glSampleMaski", sampleMaski);
387         ASSIGN("glTexImage2DMultisample", texImage2DMultisample);
388         ASSIGN("glTexImage3DMultisample", texImage3DMultisample);
389         ASSIGN("glWaitSync", waitSync);
390     }
391 
392     if (version >= gl::Version(3, 3))
393     {
394         ASSIGN("glBindFragDataLocationIndexed", bindFragDataLocationIndexed);
395         ASSIGN("glBindSampler", bindSampler);
396         ASSIGN("glDeleteSamplers", deleteSamplers);
397         ASSIGN("glGenSamplers", genSamplers);
398         ASSIGN("glGetFragDataIndex", getFragDataIndex);
399         ASSIGN("glGetQueryObjecti64v", getQueryObjecti64v);
400         ASSIGN("glGetQueryObjectui64v", getQueryObjectui64v);
401         ASSIGN("glGetSamplerParameterIiv", getSamplerParameterIiv);
402         ASSIGN("glGetSamplerParameterIuiv", getSamplerParameterIuiv);
403         ASSIGN("glGetSamplerParameterfv", getSamplerParameterfv);
404         ASSIGN("glGetSamplerParameteriv", getSamplerParameteriv);
405         ASSIGN("glIsSampler", isSampler);
406         ASSIGN("glQueryCounter", queryCounter);
407         ASSIGN("glSamplerParameterIiv", samplerParameterIiv);
408         ASSIGN("glSamplerParameterIuiv", samplerParameterIuiv);
409         ASSIGN("glSamplerParameterf", samplerParameterf);
410         ASSIGN("glSamplerParameterfv", samplerParameterfv);
411         ASSIGN("glSamplerParameteri", samplerParameteri);
412         ASSIGN("glSamplerParameteriv", samplerParameteriv);
413         ASSIGN("glVertexAttribDivisor", vertexAttribDivisor);
414         ASSIGN("glVertexAttribP1ui", vertexAttribP1ui);
415         ASSIGN("glVertexAttribP1uiv", vertexAttribP1uiv);
416         ASSIGN("glVertexAttribP2ui", vertexAttribP2ui);
417         ASSIGN("glVertexAttribP2uiv", vertexAttribP2uiv);
418         ASSIGN("glVertexAttribP3ui", vertexAttribP3ui);
419         ASSIGN("glVertexAttribP3uiv", vertexAttribP3uiv);
420         ASSIGN("glVertexAttribP4ui", vertexAttribP4ui);
421         ASSIGN("glVertexAttribP4uiv", vertexAttribP4uiv);
422     }
423 
424     if (version >= gl::Version(4, 0))
425     {
426         ASSIGN("glBeginQueryIndexed", beginQueryIndexed);
427         ASSIGN("glBindTransformFeedback", bindTransformFeedback);
428         ASSIGN("glBlendEquationSeparatei", blendEquationSeparatei);
429         ASSIGN("glBlendEquationi", blendEquationi);
430         ASSIGN("glBlendFuncSeparatei", blendFuncSeparatei);
431         ASSIGN("glBlendFunci", blendFunci);
432         ASSIGN("glDeleteTransformFeedbacks", deleteTransformFeedbacks);
433         ASSIGN("glDrawArraysIndirect", drawArraysIndirect);
434         ASSIGN("glDrawElementsIndirect", drawElementsIndirect);
435         ASSIGN("glDrawTransformFeedback", drawTransformFeedback);
436         ASSIGN("glDrawTransformFeedbackStream", drawTransformFeedbackStream);
437         ASSIGN("glEndQueryIndexed", endQueryIndexed);
438         ASSIGN("glGenTransformFeedbacks", genTransformFeedbacks);
439         ASSIGN("glGetActiveSubroutineName", getActiveSubroutineName);
440         ASSIGN("glGetActiveSubroutineUniformName", getActiveSubroutineUniformName);
441         ASSIGN("glGetActiveSubroutineUniformiv", getActiveSubroutineUniformiv);
442         ASSIGN("glGetProgramStageiv", getProgramStageiv);
443         ASSIGN("glGetQueryIndexediv", getQueryIndexediv);
444         ASSIGN("glGetSubroutineIndex", getSubroutineIndex);
445         ASSIGN("glGetSubroutineUniformLocation", getSubroutineUniformLocation);
446         ASSIGN("glGetUniformSubroutineuiv", getUniformSubroutineuiv);
447         ASSIGN("glGetUniformdv", getUniformdv);
448         ASSIGN("glIsTransformFeedback", isTransformFeedback);
449         ASSIGN("glMinSampleShading", minSampleShading);
450         ASSIGN("glPatchParameterfv", patchParameterfv);
451         ASSIGN("glPatchParameteri", patchParameteri);
452         ASSIGN("glPauseTransformFeedback", pauseTransformFeedback);
453         ASSIGN("glResumeTransformFeedback", resumeTransformFeedback);
454         ASSIGN("glUniform1d", uniform1d);
455         ASSIGN("glUniform1dv", uniform1dv);
456         ASSIGN("glUniform2d", uniform2d);
457         ASSIGN("glUniform2dv", uniform2dv);
458         ASSIGN("glUniform3d", uniform3d);
459         ASSIGN("glUniform3dv", uniform3dv);
460         ASSIGN("glUniform4d", uniform4d);
461         ASSIGN("glUniform4dv", uniform4dv);
462         ASSIGN("glUniformMatrix2dv", uniformMatrix2dv);
463         ASSIGN("glUniformMatrix2x3dv", uniformMatrix2x3dv);
464         ASSIGN("glUniformMatrix2x4dv", uniformMatrix2x4dv);
465         ASSIGN("glUniformMatrix3dv", uniformMatrix3dv);
466         ASSIGN("glUniformMatrix3x2dv", uniformMatrix3x2dv);
467         ASSIGN("glUniformMatrix3x4dv", uniformMatrix3x4dv);
468         ASSIGN("glUniformMatrix4dv", uniformMatrix4dv);
469         ASSIGN("glUniformMatrix4x2dv", uniformMatrix4x2dv);
470         ASSIGN("glUniformMatrix4x3dv", uniformMatrix4x3dv);
471         ASSIGN("glUniformSubroutinesuiv", uniformSubroutinesuiv);
472     }
473 
474     if (version >= gl::Version(4, 1))
475     {
476         ASSIGN("glActiveShaderProgram", activeShaderProgram);
477         ASSIGN("glBindProgramPipeline", bindProgramPipeline);
478         ASSIGN("glClearDepthf", clearDepthf);
479         ASSIGN("glCreateShaderProgramv", createShaderProgramv);
480         ASSIGN("glDeleteProgramPipelines", deleteProgramPipelines);
481         ASSIGN("glDepthRangeArrayv", depthRangeArrayv);
482         ASSIGN("glDepthRangeIndexed", depthRangeIndexed);
483         ASSIGN("glDepthRangef", depthRangef);
484         ASSIGN("glGenProgramPipelines", genProgramPipelines);
485         ASSIGN("glGetDoublei_v", getDoublei_v);
486         ASSIGN("glGetFloati_v", getFloati_v);
487         ASSIGN("glGetProgramBinary", getProgramBinary);
488         ASSIGN("glGetProgramPipelineInfoLog", getProgramPipelineInfoLog);
489         ASSIGN("glGetProgramPipelineiv", getProgramPipelineiv);
490         ASSIGN("glGetShaderPrecisionFormat", getShaderPrecisionFormat);
491         ASSIGN("glGetVertexAttribLdv", getVertexAttribLdv);
492         ASSIGN("glIsProgramPipeline", isProgramPipeline);
493         ASSIGN("glProgramBinary", programBinary);
494         ASSIGN("glProgramParameteri", programParameteri);
495         ASSIGN("glProgramUniform1d", programUniform1d);
496         ASSIGN("glProgramUniform1dv", programUniform1dv);
497         ASSIGN("glProgramUniform1f", programUniform1f);
498         ASSIGN("glProgramUniform1fv", programUniform1fv);
499         ASSIGN("glProgramUniform1i", programUniform1i);
500         ASSIGN("glProgramUniform1iv", programUniform1iv);
501         ASSIGN("glProgramUniform1ui", programUniform1ui);
502         ASSIGN("glProgramUniform1uiv", programUniform1uiv);
503         ASSIGN("glProgramUniform2d", programUniform2d);
504         ASSIGN("glProgramUniform2dv", programUniform2dv);
505         ASSIGN("glProgramUniform2f", programUniform2f);
506         ASSIGN("glProgramUniform2fv", programUniform2fv);
507         ASSIGN("glProgramUniform2i", programUniform2i);
508         ASSIGN("glProgramUniform2iv", programUniform2iv);
509         ASSIGN("glProgramUniform2ui", programUniform2ui);
510         ASSIGN("glProgramUniform2uiv", programUniform2uiv);
511         ASSIGN("glProgramUniform3d", programUniform3d);
512         ASSIGN("glProgramUniform3dv", programUniform3dv);
513         ASSIGN("glProgramUniform3f", programUniform3f);
514         ASSIGN("glProgramUniform3fv", programUniform3fv);
515         ASSIGN("glProgramUniform3i", programUniform3i);
516         ASSIGN("glProgramUniform3iv", programUniform3iv);
517         ASSIGN("glProgramUniform3ui", programUniform3ui);
518         ASSIGN("glProgramUniform3uiv", programUniform3uiv);
519         ASSIGN("glProgramUniform4d", programUniform4d);
520         ASSIGN("glProgramUniform4dv", programUniform4dv);
521         ASSIGN("glProgramUniform4f", programUniform4f);
522         ASSIGN("glProgramUniform4fv", programUniform4fv);
523         ASSIGN("glProgramUniform4i", programUniform4i);
524         ASSIGN("glProgramUniform4iv", programUniform4iv);
525         ASSIGN("glProgramUniform4ui", programUniform4ui);
526         ASSIGN("glProgramUniform4uiv", programUniform4uiv);
527         ASSIGN("glProgramUniformMatrix2dv", programUniformMatrix2dv);
528         ASSIGN("glProgramUniformMatrix2fv", programUniformMatrix2fv);
529         ASSIGN("glProgramUniformMatrix2x3dv", programUniformMatrix2x3dv);
530         ASSIGN("glProgramUniformMatrix2x3fv", programUniformMatrix2x3fv);
531         ASSIGN("glProgramUniformMatrix2x4dv", programUniformMatrix2x4dv);
532         ASSIGN("glProgramUniformMatrix2x4fv", programUniformMatrix2x4fv);
533         ASSIGN("glProgramUniformMatrix3dv", programUniformMatrix3dv);
534         ASSIGN("glProgramUniformMatrix3fv", programUniformMatrix3fv);
535         ASSIGN("glProgramUniformMatrix3x2dv", programUniformMatrix3x2dv);
536         ASSIGN("glProgramUniformMatrix3x2fv", programUniformMatrix3x2fv);
537         ASSIGN("glProgramUniformMatrix3x4dv", programUniformMatrix3x4dv);
538         ASSIGN("glProgramUniformMatrix3x4fv", programUniformMatrix3x4fv);
539         ASSIGN("glProgramUniformMatrix4dv", programUniformMatrix4dv);
540         ASSIGN("glProgramUniformMatrix4fv", programUniformMatrix4fv);
541         ASSIGN("glProgramUniformMatrix4x2dv", programUniformMatrix4x2dv);
542         ASSIGN("glProgramUniformMatrix4x2fv", programUniformMatrix4x2fv);
543         ASSIGN("glProgramUniformMatrix4x3dv", programUniformMatrix4x3dv);
544         ASSIGN("glProgramUniformMatrix4x3fv", programUniformMatrix4x3fv);
545         ASSIGN("glReleaseShaderCompiler", releaseShaderCompiler);
546         ASSIGN("glScissorArrayv", scissorArrayv);
547         ASSIGN("glScissorIndexed", scissorIndexed);
548         ASSIGN("glScissorIndexedv", scissorIndexedv);
549         ASSIGN("glShaderBinary", shaderBinary);
550         ASSIGN("glUseProgramStages", useProgramStages);
551         ASSIGN("glValidateProgramPipeline", validateProgramPipeline);
552         ASSIGN("glVertexAttribL1d", vertexAttribL1d);
553         ASSIGN("glVertexAttribL1dv", vertexAttribL1dv);
554         ASSIGN("glVertexAttribL2d", vertexAttribL2d);
555         ASSIGN("glVertexAttribL2dv", vertexAttribL2dv);
556         ASSIGN("glVertexAttribL3d", vertexAttribL3d);
557         ASSIGN("glVertexAttribL3dv", vertexAttribL3dv);
558         ASSIGN("glVertexAttribL4d", vertexAttribL4d);
559         ASSIGN("glVertexAttribL4dv", vertexAttribL4dv);
560         ASSIGN("glVertexAttribLPointer", vertexAttribLPointer);
561         ASSIGN("glViewportArrayv", viewportArrayv);
562         ASSIGN("glViewportIndexedf", viewportIndexedf);
563         ASSIGN("glViewportIndexedfv", viewportIndexedfv);
564     }
565 
566     if (version >= gl::Version(4, 2))
567     {
568         ASSIGN("glBindImageTexture", bindImageTexture);
569         ASSIGN("glDrawArraysInstancedBaseInstance", drawArraysInstancedBaseInstance);
570         ASSIGN("glDrawElementsInstancedBaseInstance", drawElementsInstancedBaseInstance);
571         ASSIGN("glDrawElementsInstancedBaseVertexBaseInstance",
572                drawElementsInstancedBaseVertexBaseInstance);
573         ASSIGN("glDrawTransformFeedbackInstanced", drawTransformFeedbackInstanced);
574         ASSIGN("glDrawTransformFeedbackStreamInstanced", drawTransformFeedbackStreamInstanced);
575         ASSIGN("glGetActiveAtomicCounterBufferiv", getActiveAtomicCounterBufferiv);
576         ASSIGN("glGetInternalformativ", getInternalformativ);
577         ASSIGN("glMemoryBarrier", memoryBarrier);
578         ASSIGN("glTexStorage1D", texStorage1D);
579         ASSIGN("glTexStorage2D", texStorage2D);
580         ASSIGN("glTexStorage3D", texStorage3D);
581     }
582 
583     if (version >= gl::Version(4, 3))
584     {
585         ASSIGN("glBindVertexBuffer", bindVertexBuffer);
586         ASSIGN("glClearBufferData", clearBufferData);
587         ASSIGN("glClearBufferSubData", clearBufferSubData);
588         ASSIGN("glCopyImageSubData", copyImageSubData);
589         ASSIGN("glDebugMessageCallback", debugMessageCallback);
590         ASSIGN("glDebugMessageControl", debugMessageControl);
591         ASSIGN("glDebugMessageInsert", debugMessageInsert);
592         ASSIGN("glDispatchCompute", dispatchCompute);
593         ASSIGN("glDispatchComputeIndirect", dispatchComputeIndirect);
594         ASSIGN("glFramebufferParameteri", framebufferParameteri);
595         ASSIGN("glGetDebugMessageLog", getDebugMessageLog);
596         ASSIGN("glGetFramebufferParameteriv", getFramebufferParameteriv);
597         ASSIGN("glGetInternalformati64v", getInternalformati64v);
598         ASSIGN("glGetObjectLabel", getObjectLabel);
599         ASSIGN("glGetObjectPtrLabel", getObjectPtrLabel);
600         ASSIGN("glGetPointerv", getPointerv);
601         ASSIGN("glGetProgramInterfaceiv", getProgramInterfaceiv);
602         ASSIGN("glGetProgramResourceIndex", getProgramResourceIndex);
603         ASSIGN("glGetProgramResourceLocation", getProgramResourceLocation);
604         ASSIGN("glGetProgramResourceLocationIndex", getProgramResourceLocationIndex);
605         ASSIGN("glGetProgramResourceName", getProgramResourceName);
606         ASSIGN("glGetProgramResourceiv", getProgramResourceiv);
607         ASSIGN("glInvalidateBufferData", invalidateBufferData);
608         ASSIGN("glInvalidateBufferSubData", invalidateBufferSubData);
609         ASSIGN("glInvalidateFramebuffer", invalidateFramebuffer);
610         ASSIGN("glInvalidateSubFramebuffer", invalidateSubFramebuffer);
611         ASSIGN("glInvalidateTexImage", invalidateTexImage);
612         ASSIGN("glInvalidateTexSubImage", invalidateTexSubImage);
613         ASSIGN("glMultiDrawArraysIndirect", multiDrawArraysIndirect);
614         ASSIGN("glMultiDrawElementsIndirect", multiDrawElementsIndirect);
615         ASSIGN("glObjectLabel", objectLabel);
616         ASSIGN("glObjectPtrLabel", objectPtrLabel);
617         ASSIGN("glPopDebugGroup", popDebugGroup);
618         ASSIGN("glPushDebugGroup", pushDebugGroup);
619         ASSIGN("glShaderStorageBlockBinding", shaderStorageBlockBinding);
620         ASSIGN("glTexBufferRange", texBufferRange);
621         ASSIGN("glTexStorage2DMultisample", texStorage2DMultisample);
622         ASSIGN("glTexStorage3DMultisample", texStorage3DMultisample);
623         ASSIGN("glTextureView", textureView);
624         ASSIGN("glVertexAttribBinding", vertexAttribBinding);
625         ASSIGN("glVertexAttribFormat", vertexAttribFormat);
626         ASSIGN("glVertexAttribIFormat", vertexAttribIFormat);
627         ASSIGN("glVertexAttribLFormat", vertexAttribLFormat);
628         ASSIGN("glVertexBindingDivisor", vertexBindingDivisor);
629     }
630 
631     if (version >= gl::Version(4, 4))
632     {
633         ASSIGN("glBindBuffersBase", bindBuffersBase);
634         ASSIGN("glBindBuffersRange", bindBuffersRange);
635         ASSIGN("glBindImageTextures", bindImageTextures);
636         ASSIGN("glBindSamplers", bindSamplers);
637         ASSIGN("glBindTextures", bindTextures);
638         ASSIGN("glBindVertexBuffers", bindVertexBuffers);
639         ASSIGN("glBufferStorage", bufferStorage);
640         ASSIGN("glClearTexImage", clearTexImage);
641         ASSIGN("glClearTexSubImage", clearTexSubImage);
642     }
643 
644     if (version >= gl::Version(4, 5))
645     {
646         ASSIGN("glBindTextureUnit", bindTextureUnit);
647         ASSIGN("glBlitNamedFramebuffer", blitNamedFramebuffer);
648         ASSIGN("glCheckNamedFramebufferStatus", checkNamedFramebufferStatus);
649         ASSIGN("glClearNamedBufferData", clearNamedBufferData);
650         ASSIGN("glClearNamedBufferSubData", clearNamedBufferSubData);
651         ASSIGN("glClearNamedFramebufferfi", clearNamedFramebufferfi);
652         ASSIGN("glClearNamedFramebufferfv", clearNamedFramebufferfv);
653         ASSIGN("glClearNamedFramebufferiv", clearNamedFramebufferiv);
654         ASSIGN("glClearNamedFramebufferuiv", clearNamedFramebufferuiv);
655         ASSIGN("glClipControl", clipControl);
656         ASSIGN("glCompressedTextureSubImage1D", compressedTextureSubImage1D);
657         ASSIGN("glCompressedTextureSubImage2D", compressedTextureSubImage2D);
658         ASSIGN("glCompressedTextureSubImage3D", compressedTextureSubImage3D);
659         ASSIGN("glCopyNamedBufferSubData", copyNamedBufferSubData);
660         ASSIGN("glCopyTextureSubImage1D", copyTextureSubImage1D);
661         ASSIGN("glCopyTextureSubImage2D", copyTextureSubImage2D);
662         ASSIGN("glCopyTextureSubImage3D", copyTextureSubImage3D);
663         ASSIGN("glCreateBuffers", createBuffers);
664         ASSIGN("glCreateFramebuffers", createFramebuffers);
665         ASSIGN("glCreateProgramPipelines", createProgramPipelines);
666         ASSIGN("glCreateQueries", createQueries);
667         ASSIGN("glCreateRenderbuffers", createRenderbuffers);
668         ASSIGN("glCreateSamplers", createSamplers);
669         ASSIGN("glCreateTextures", createTextures);
670         ASSIGN("glCreateTransformFeedbacks", createTransformFeedbacks);
671         ASSIGN("glCreateVertexArrays", createVertexArrays);
672         ASSIGN("glDisableVertexArrayAttrib", disableVertexArrayAttrib);
673         ASSIGN("glEnableVertexArrayAttrib", enableVertexArrayAttrib);
674         ASSIGN("glFlushMappedNamedBufferRange", flushMappedNamedBufferRange);
675         ASSIGN("glGenerateTextureMipmap", generateTextureMipmap);
676         ASSIGN("glGetCompressedTextureImage", getCompressedTextureImage);
677         ASSIGN("glGetCompressedTextureSubImage", getCompressedTextureSubImage);
678         ASSIGN("glGetGraphicsResetStatus", getGraphicsResetStatus);
679         ASSIGN("glGetNamedBufferParameteri64v", getNamedBufferParameteri64v);
680         ASSIGN("glGetNamedBufferParameteriv", getNamedBufferParameteriv);
681         ASSIGN("glGetNamedBufferPointerv", getNamedBufferPointerv);
682         ASSIGN("glGetNamedBufferSubData", getNamedBufferSubData);
683         ASSIGN("glGetNamedFramebufferAttachmentParameteriv",
684                getNamedFramebufferAttachmentParameteriv);
685         ASSIGN("glGetNamedFramebufferParameteriv", getNamedFramebufferParameteriv);
686         ASSIGN("glGetNamedRenderbufferParameteriv", getNamedRenderbufferParameteriv);
687         ASSIGN("glGetQueryBufferObjecti64v", getQueryBufferObjecti64v);
688         ASSIGN("glGetQueryBufferObjectiv", getQueryBufferObjectiv);
689         ASSIGN("glGetQueryBufferObjectui64v", getQueryBufferObjectui64v);
690         ASSIGN("glGetQueryBufferObjectuiv", getQueryBufferObjectuiv);
691         ASSIGN("glGetTextureImage", getTextureImage);
692         ASSIGN("glGetTextureLevelParameterfv", getTextureLevelParameterfv);
693         ASSIGN("glGetTextureLevelParameteriv", getTextureLevelParameteriv);
694         ASSIGN("glGetTextureParameterIiv", getTextureParameterIiv);
695         ASSIGN("glGetTextureParameterIuiv", getTextureParameterIuiv);
696         ASSIGN("glGetTextureParameterfv", getTextureParameterfv);
697         ASSIGN("glGetTextureParameteriv", getTextureParameteriv);
698         ASSIGN("glGetTextureSubImage", getTextureSubImage);
699         ASSIGN("glGetTransformFeedbacki64_v", getTransformFeedbacki64_v);
700         ASSIGN("glGetTransformFeedbacki_v", getTransformFeedbacki_v);
701         ASSIGN("glGetTransformFeedbackiv", getTransformFeedbackiv);
702         ASSIGN("glGetVertexArrayIndexed64iv", getVertexArrayIndexed64iv);
703         ASSIGN("glGetVertexArrayIndexediv", getVertexArrayIndexediv);
704         ASSIGN("glGetVertexArrayiv", getVertexArrayiv);
705         ASSIGN("glGetnCompressedTexImage", getnCompressedTexImage);
706         ASSIGN("glGetnTexImage", getnTexImage);
707         ASSIGN("glGetnUniformdv", getnUniformdv);
708         ASSIGN("glGetnUniformfv", getnUniformfv);
709         ASSIGN("glGetnUniformiv", getnUniformiv);
710         ASSIGN("glGetnUniformuiv", getnUniformuiv);
711         ASSIGN("glInvalidateNamedFramebufferData", invalidateNamedFramebufferData);
712         ASSIGN("glInvalidateNamedFramebufferSubData", invalidateNamedFramebufferSubData);
713         ASSIGN("glMapNamedBuffer", mapNamedBuffer);
714         ASSIGN("glMapNamedBufferRange", mapNamedBufferRange);
715         ASSIGN("glMemoryBarrierByRegion", memoryBarrierByRegion);
716         ASSIGN("glNamedBufferData", namedBufferData);
717         ASSIGN("glNamedBufferStorage", namedBufferStorage);
718         ASSIGN("glNamedBufferSubData", namedBufferSubData);
719         ASSIGN("glNamedFramebufferDrawBuffer", namedFramebufferDrawBuffer);
720         ASSIGN("glNamedFramebufferDrawBuffers", namedFramebufferDrawBuffers);
721         ASSIGN("glNamedFramebufferParameteri", namedFramebufferParameteri);
722         ASSIGN("glNamedFramebufferReadBuffer", namedFramebufferReadBuffer);
723         ASSIGN("glNamedFramebufferRenderbuffer", namedFramebufferRenderbuffer);
724         ASSIGN("glNamedFramebufferTexture", namedFramebufferTexture);
725         ASSIGN("glNamedFramebufferTextureLayer", namedFramebufferTextureLayer);
726         ASSIGN("glNamedRenderbufferStorage", namedRenderbufferStorage);
727         ASSIGN("glNamedRenderbufferStorageMultisample", namedRenderbufferStorageMultisample);
728         ASSIGN("glReadnPixels", readnPixels);
729         ASSIGN("glTextureBarrier", textureBarrier);
730         ASSIGN("glTextureBuffer", textureBuffer);
731         ASSIGN("glTextureBufferRange", textureBufferRange);
732         ASSIGN("glTextureParameterIiv", textureParameterIiv);
733         ASSIGN("glTextureParameterIuiv", textureParameterIuiv);
734         ASSIGN("glTextureParameterf", textureParameterf);
735         ASSIGN("glTextureParameterfv", textureParameterfv);
736         ASSIGN("glTextureParameteri", textureParameteri);
737         ASSIGN("glTextureParameteriv", textureParameteriv);
738         ASSIGN("glTextureStorage1D", textureStorage1D);
739         ASSIGN("glTextureStorage2D", textureStorage2D);
740         ASSIGN("glTextureStorage2DMultisample", textureStorage2DMultisample);
741         ASSIGN("glTextureStorage3D", textureStorage3D);
742         ASSIGN("glTextureStorage3DMultisample", textureStorage3DMultisample);
743         ASSIGN("glTextureSubImage1D", textureSubImage1D);
744         ASSIGN("glTextureSubImage2D", textureSubImage2D);
745         ASSIGN("glTextureSubImage3D", textureSubImage3D);
746         ASSIGN("glTransformFeedbackBufferBase", transformFeedbackBufferBase);
747         ASSIGN("glTransformFeedbackBufferRange", transformFeedbackBufferRange);
748         ASSIGN("glUnmapNamedBuffer", unmapNamedBuffer);
749         ASSIGN("glVertexArrayAttribBinding", vertexArrayAttribBinding);
750         ASSIGN("glVertexArrayAttribFormat", vertexArrayAttribFormat);
751         ASSIGN("glVertexArrayAttribIFormat", vertexArrayAttribIFormat);
752         ASSIGN("glVertexArrayAttribLFormat", vertexArrayAttribLFormat);
753         ASSIGN("glVertexArrayBindingDivisor", vertexArrayBindingDivisor);
754         ASSIGN("glVertexArrayElementBuffer", vertexArrayElementBuffer);
755         ASSIGN("glVertexArrayVertexBuffer", vertexArrayVertexBuffer);
756         ASSIGN("glVertexArrayVertexBuffers", vertexArrayVertexBuffers);
757     }
758 
759     if (extensions.count("GL_ARB_ES2_compatibility") != 0)
760     {
761         ASSIGN("glClearDepthf", clearDepthf);
762         ASSIGN("glDepthRangef", depthRangef);
763         ASSIGN("glGetShaderPrecisionFormat", getShaderPrecisionFormat);
764         ASSIGN("glReleaseShaderCompiler", releaseShaderCompiler);
765         ASSIGN("glShaderBinary", shaderBinary);
766     }
767 
768     if (extensions.count("GL_ARB_ES3_1_compatibility") != 0)
769     {
770         ASSIGN("glMemoryBarrierByRegion", memoryBarrierByRegion);
771     }
772 
773     if (extensions.count("GL_ARB_ES3_2_compatibility") != 0)
774     {
775         ASSIGN("glPrimitiveBoundingBoxARB", primitiveBoundingBox);
776     }
777 
778     if (extensions.count("GL_ARB_base_instance") != 0)
779     {
780         ASSIGN("glDrawArraysInstancedBaseInstance", drawArraysInstancedBaseInstance);
781         ASSIGN("glDrawElementsInstancedBaseInstance", drawElementsInstancedBaseInstance);
782         ASSIGN("glDrawElementsInstancedBaseVertexBaseInstance",
783                drawElementsInstancedBaseVertexBaseInstance);
784     }
785 
786     if (extensions.count("GL_ARB_blend_func_extended") != 0)
787     {
788         ASSIGN("glBindFragDataLocationIndexed", bindFragDataLocationIndexed);
789         ASSIGN("glGetFragDataIndex", getFragDataIndex);
790     }
791 
792     if (extensions.count("GL_ARB_buffer_storage") != 0)
793     {
794         ASSIGN("glBufferStorage", bufferStorage);
795     }
796 
797     if (extensions.count("GL_ARB_clear_buffer_object") != 0)
798     {
799         ASSIGN("glClearBufferData", clearBufferData);
800         ASSIGN("glClearBufferSubData", clearBufferSubData);
801     }
802 
803     if (extensions.count("GL_ARB_clear_texture") != 0)
804     {
805         ASSIGN("glClearTexImage", clearTexImage);
806         ASSIGN("glClearTexSubImage", clearTexSubImage);
807     }
808 
809     if (extensions.count("GL_ARB_clip_control") != 0)
810     {
811         ASSIGN("glClipControl", clipControl);
812     }
813 
814     if (extensions.count("GL_ARB_color_buffer_float") != 0)
815     {
816         ASSIGN("glClampColorARB", clampColor);
817     }
818 
819     if (extensions.count("GL_ARB_compute_shader") != 0)
820     {
821         ASSIGN("glDispatchCompute", dispatchCompute);
822         ASSIGN("glDispatchComputeIndirect", dispatchComputeIndirect);
823     }
824 
825     if (extensions.count("GL_ARB_copy_buffer") != 0)
826     {
827         ASSIGN("glCopyBufferSubData", copyBufferSubData);
828     }
829 
830     if (extensions.count("GL_ARB_copy_image") != 0)
831     {
832         ASSIGN("glCopyImageSubData", copyImageSubData);
833     }
834 
835     if (extensions.count("GL_ARB_debug_output") != 0)
836     {
837         ASSIGN("glDebugMessageCallbackARB", debugMessageCallback);
838         ASSIGN("glDebugMessageControlARB", debugMessageControl);
839         ASSIGN("glDebugMessageInsertARB", debugMessageInsert);
840         ASSIGN("glGetDebugMessageLogARB", getDebugMessageLog);
841     }
842 
843     if (extensions.count("GL_ARB_direct_state_access") != 0)
844     {
845         ASSIGN("glBindTextureUnit", bindTextureUnit);
846         ASSIGN("glBlitNamedFramebuffer", blitNamedFramebuffer);
847         ASSIGN("glCheckNamedFramebufferStatus", checkNamedFramebufferStatus);
848         ASSIGN("glClearNamedBufferData", clearNamedBufferData);
849         ASSIGN("glClearNamedBufferSubData", clearNamedBufferSubData);
850         ASSIGN("glClearNamedFramebufferfi", clearNamedFramebufferfi);
851         ASSIGN("glClearNamedFramebufferfv", clearNamedFramebufferfv);
852         ASSIGN("glClearNamedFramebufferiv", clearNamedFramebufferiv);
853         ASSIGN("glClearNamedFramebufferuiv", clearNamedFramebufferuiv);
854         ASSIGN("glCompressedTextureSubImage1D", compressedTextureSubImage1D);
855         ASSIGN("glCompressedTextureSubImage2D", compressedTextureSubImage2D);
856         ASSIGN("glCompressedTextureSubImage3D", compressedTextureSubImage3D);
857         ASSIGN("glCopyNamedBufferSubData", copyNamedBufferSubData);
858         ASSIGN("glCopyTextureSubImage1D", copyTextureSubImage1D);
859         ASSIGN("glCopyTextureSubImage2D", copyTextureSubImage2D);
860         ASSIGN("glCopyTextureSubImage3D", copyTextureSubImage3D);
861         ASSIGN("glCreateBuffers", createBuffers);
862         ASSIGN("glCreateFramebuffers", createFramebuffers);
863         ASSIGN("glCreateProgramPipelines", createProgramPipelines);
864         ASSIGN("glCreateQueries", createQueries);
865         ASSIGN("glCreateRenderbuffers", createRenderbuffers);
866         ASSIGN("glCreateSamplers", createSamplers);
867         ASSIGN("glCreateTextures", createTextures);
868         ASSIGN("glCreateTransformFeedbacks", createTransformFeedbacks);
869         ASSIGN("glCreateVertexArrays", createVertexArrays);
870         ASSIGN("glDisableVertexArrayAttrib", disableVertexArrayAttrib);
871         ASSIGN("glEnableVertexArrayAttrib", enableVertexArrayAttrib);
872         ASSIGN("glFlushMappedNamedBufferRange", flushMappedNamedBufferRange);
873         ASSIGN("glGenerateTextureMipmap", generateTextureMipmap);
874         ASSIGN("glGetCompressedTextureImage", getCompressedTextureImage);
875         ASSIGN("glGetNamedBufferParameteri64v", getNamedBufferParameteri64v);
876         ASSIGN("glGetNamedBufferParameteriv", getNamedBufferParameteriv);
877         ASSIGN("glGetNamedBufferPointerv", getNamedBufferPointerv);
878         ASSIGN("glGetNamedBufferSubData", getNamedBufferSubData);
879         ASSIGN("glGetNamedFramebufferAttachmentParameteriv",
880                getNamedFramebufferAttachmentParameteriv);
881         ASSIGN("glGetNamedFramebufferParameteriv", getNamedFramebufferParameteriv);
882         ASSIGN("glGetNamedRenderbufferParameteriv", getNamedRenderbufferParameteriv);
883         ASSIGN("glGetQueryBufferObjecti64v", getQueryBufferObjecti64v);
884         ASSIGN("glGetQueryBufferObjectiv", getQueryBufferObjectiv);
885         ASSIGN("glGetQueryBufferObjectui64v", getQueryBufferObjectui64v);
886         ASSIGN("glGetQueryBufferObjectuiv", getQueryBufferObjectuiv);
887         ASSIGN("glGetTextureImage", getTextureImage);
888         ASSIGN("glGetTextureLevelParameterfv", getTextureLevelParameterfv);
889         ASSIGN("glGetTextureLevelParameteriv", getTextureLevelParameteriv);
890         ASSIGN("glGetTextureParameterIiv", getTextureParameterIiv);
891         ASSIGN("glGetTextureParameterIuiv", getTextureParameterIuiv);
892         ASSIGN("glGetTextureParameterfv", getTextureParameterfv);
893         ASSIGN("glGetTextureParameteriv", getTextureParameteriv);
894         ASSIGN("glGetTransformFeedbacki64_v", getTransformFeedbacki64_v);
895         ASSIGN("glGetTransformFeedbacki_v", getTransformFeedbacki_v);
896         ASSIGN("glGetTransformFeedbackiv", getTransformFeedbackiv);
897         ASSIGN("glGetVertexArrayIndexed64iv", getVertexArrayIndexed64iv);
898         ASSIGN("glGetVertexArrayIndexediv", getVertexArrayIndexediv);
899         ASSIGN("glGetVertexArrayiv", getVertexArrayiv);
900         ASSIGN("glInvalidateNamedFramebufferData", invalidateNamedFramebufferData);
901         ASSIGN("glInvalidateNamedFramebufferSubData", invalidateNamedFramebufferSubData);
902         ASSIGN("glMapNamedBuffer", mapNamedBuffer);
903         ASSIGN("glMapNamedBufferRange", mapNamedBufferRange);
904         ASSIGN("glNamedBufferData", namedBufferData);
905         ASSIGN("glNamedBufferStorage", namedBufferStorage);
906         ASSIGN("glNamedBufferSubData", namedBufferSubData);
907         ASSIGN("glNamedFramebufferDrawBuffer", namedFramebufferDrawBuffer);
908         ASSIGN("glNamedFramebufferDrawBuffers", namedFramebufferDrawBuffers);
909         ASSIGN("glNamedFramebufferParameteri", namedFramebufferParameteri);
910         ASSIGN("glNamedFramebufferReadBuffer", namedFramebufferReadBuffer);
911         ASSIGN("glNamedFramebufferRenderbuffer", namedFramebufferRenderbuffer);
912         ASSIGN("glNamedFramebufferTexture", namedFramebufferTexture);
913         ASSIGN("glNamedFramebufferTextureLayer", namedFramebufferTextureLayer);
914         ASSIGN("glNamedRenderbufferStorage", namedRenderbufferStorage);
915         ASSIGN("glNamedRenderbufferStorageMultisample", namedRenderbufferStorageMultisample);
916         ASSIGN("glTextureBuffer", textureBuffer);
917         ASSIGN("glTextureBufferRange", textureBufferRange);
918         ASSIGN("glTextureParameterIiv", textureParameterIiv);
919         ASSIGN("glTextureParameterIuiv", textureParameterIuiv);
920         ASSIGN("glTextureParameterf", textureParameterf);
921         ASSIGN("glTextureParameterfv", textureParameterfv);
922         ASSIGN("glTextureParameteri", textureParameteri);
923         ASSIGN("glTextureParameteriv", textureParameteriv);
924         ASSIGN("glTextureStorage1D", textureStorage1D);
925         ASSIGN("glTextureStorage2D", textureStorage2D);
926         ASSIGN("glTextureStorage2DMultisample", textureStorage2DMultisample);
927         ASSIGN("glTextureStorage3D", textureStorage3D);
928         ASSIGN("glTextureStorage3DMultisample", textureStorage3DMultisample);
929         ASSIGN("glTextureSubImage1D", textureSubImage1D);
930         ASSIGN("glTextureSubImage2D", textureSubImage2D);
931         ASSIGN("glTextureSubImage3D", textureSubImage3D);
932         ASSIGN("glTransformFeedbackBufferBase", transformFeedbackBufferBase);
933         ASSIGN("glTransformFeedbackBufferRange", transformFeedbackBufferRange);
934         ASSIGN("glUnmapNamedBuffer", unmapNamedBuffer);
935         ASSIGN("glVertexArrayAttribBinding", vertexArrayAttribBinding);
936         ASSIGN("glVertexArrayAttribFormat", vertexArrayAttribFormat);
937         ASSIGN("glVertexArrayAttribIFormat", vertexArrayAttribIFormat);
938         ASSIGN("glVertexArrayAttribLFormat", vertexArrayAttribLFormat);
939         ASSIGN("glVertexArrayBindingDivisor", vertexArrayBindingDivisor);
940         ASSIGN("glVertexArrayElementBuffer", vertexArrayElementBuffer);
941         ASSIGN("glVertexArrayVertexBuffer", vertexArrayVertexBuffer);
942         ASSIGN("glVertexArrayVertexBuffers", vertexArrayVertexBuffers);
943     }
944 
945     if (extensions.count("GL_ARB_draw_buffers") != 0)
946     {
947         ASSIGN("glDrawBuffersARB", drawBuffers);
948     }
949 
950     if (extensions.count("GL_ARB_draw_buffers_blend") != 0)
951     {
952         ASSIGN("glBlendEquationSeparateiARB", blendEquationSeparatei);
953         ASSIGN("glBlendEquationiARB", blendEquationi);
954         ASSIGN("glBlendFuncSeparateiARB", blendFuncSeparatei);
955         ASSIGN("glBlendFunciARB", blendFunci);
956     }
957 
958     if (extensions.count("GL_ARB_draw_elements_base_vertex") != 0)
959     {
960         ASSIGN("glDrawElementsBaseVertex", drawElementsBaseVertex);
961         ASSIGN("glDrawElementsInstancedBaseVertex", drawElementsInstancedBaseVertex);
962         ASSIGN("glDrawRangeElementsBaseVertex", drawRangeElementsBaseVertex);
963         ASSIGN("glMultiDrawElementsBaseVertex", multiDrawElementsBaseVertex);
964     }
965 
966     if (extensions.count("GL_ARB_draw_indirect") != 0)
967     {
968         ASSIGN("glDrawArraysIndirect", drawArraysIndirect);
969         ASSIGN("glDrawElementsIndirect", drawElementsIndirect);
970     }
971 
972     if (extensions.count("GL_ARB_draw_instanced") != 0)
973     {
974         ASSIGN("glDrawArraysInstancedARB", drawArraysInstanced);
975         ASSIGN("glDrawElementsInstancedARB", drawElementsInstanced);
976     }
977 
978     if (extensions.count("GL_ARB_fragment_program") != 0)
979     {
980         ASSIGN("glGetProgramivARB", getProgramiv);
981         ASSIGN("glIsProgramARB", isProgram);
982     }
983 
984     if (extensions.count("GL_ARB_framebuffer_no_attachments") != 0)
985     {
986         ASSIGN("glFramebufferParameteri", framebufferParameteri);
987         ASSIGN("glGetFramebufferParameteriv", getFramebufferParameteriv);
988     }
989 
990     if (extensions.count("GL_ARB_framebuffer_object") != 0)
991     {
992         ASSIGN("glBindFramebuffer", bindFramebuffer);
993         ASSIGN("glBindRenderbuffer", bindRenderbuffer);
994         ASSIGN("glBlitFramebuffer", blitFramebuffer);
995         ASSIGN("glCheckFramebufferStatus", checkFramebufferStatus);
996         ASSIGN("glDeleteFramebuffers", deleteFramebuffers);
997         ASSIGN("glDeleteRenderbuffers", deleteRenderbuffers);
998         ASSIGN("glFramebufferRenderbuffer", framebufferRenderbuffer);
999         ASSIGN("glFramebufferTexture1D", framebufferTexture1D);
1000         ASSIGN("glFramebufferTexture2D", framebufferTexture2D);
1001         ASSIGN("glFramebufferTexture3D", framebufferTexture3D);
1002         ASSIGN("glFramebufferTextureLayer", framebufferTextureLayer);
1003         ASSIGN("glGenFramebuffers", genFramebuffers);
1004         ASSIGN("glGenRenderbuffers", genRenderbuffers);
1005         ASSIGN("glGenerateMipmap", generateMipmap);
1006         ASSIGN("glGetFramebufferAttachmentParameteriv", getFramebufferAttachmentParameteriv);
1007         ASSIGN("glGetRenderbufferParameteriv", getRenderbufferParameteriv);
1008         ASSIGN("glIsFramebuffer", isFramebuffer);
1009         ASSIGN("glIsRenderbuffer", isRenderbuffer);
1010         ASSIGN("glRenderbufferStorage", renderbufferStorage);
1011         ASSIGN("glRenderbufferStorageMultisample", renderbufferStorageMultisample);
1012     }
1013 
1014     if (extensions.count("GL_ARB_geometry_shader4") != 0)
1015     {
1016         ASSIGN("glFramebufferTextureARB", framebufferTexture);
1017         ASSIGN("glFramebufferTextureLayerARB", framebufferTextureLayer);
1018         ASSIGN("glProgramParameteriARB", programParameteri);
1019     }
1020 
1021     if (extensions.count("GL_ARB_get_program_binary") != 0)
1022     {
1023         ASSIGN("glGetProgramBinary", getProgramBinary);
1024         ASSIGN("glProgramBinary", programBinary);
1025         ASSIGN("glProgramParameteri", programParameteri);
1026     }
1027 
1028     if (extensions.count("GL_ARB_get_texture_sub_image") != 0)
1029     {
1030         ASSIGN("glGetCompressedTextureSubImage", getCompressedTextureSubImage);
1031         ASSIGN("glGetTextureSubImage", getTextureSubImage);
1032     }
1033 
1034     if (extensions.count("GL_ARB_gpu_shader_fp64") != 0)
1035     {
1036         ASSIGN("glGetUniformdv", getUniformdv);
1037         ASSIGN("glUniform1d", uniform1d);
1038         ASSIGN("glUniform1dv", uniform1dv);
1039         ASSIGN("glUniform2d", uniform2d);
1040         ASSIGN("glUniform2dv", uniform2dv);
1041         ASSIGN("glUniform3d", uniform3d);
1042         ASSIGN("glUniform3dv", uniform3dv);
1043         ASSIGN("glUniform4d", uniform4d);
1044         ASSIGN("glUniform4dv", uniform4dv);
1045         ASSIGN("glUniformMatrix2dv", uniformMatrix2dv);
1046         ASSIGN("glUniformMatrix2x3dv", uniformMatrix2x3dv);
1047         ASSIGN("glUniformMatrix2x4dv", uniformMatrix2x4dv);
1048         ASSIGN("glUniformMatrix3dv", uniformMatrix3dv);
1049         ASSIGN("glUniformMatrix3x2dv", uniformMatrix3x2dv);
1050         ASSIGN("glUniformMatrix3x4dv", uniformMatrix3x4dv);
1051         ASSIGN("glUniformMatrix4dv", uniformMatrix4dv);
1052         ASSIGN("glUniformMatrix4x2dv", uniformMatrix4x2dv);
1053         ASSIGN("glUniformMatrix4x3dv", uniformMatrix4x3dv);
1054     }
1055 
1056     if (extensions.count("GL_ARB_imaging") != 0)
1057     {
1058         ASSIGN("glBlendColor", blendColor);
1059         ASSIGN("glBlendEquation", blendEquation);
1060     }
1061 
1062     if (extensions.count("GL_ARB_instanced_arrays") != 0)
1063     {
1064         ASSIGN("glVertexAttribDivisorARB", vertexAttribDivisor);
1065     }
1066 
1067     if (extensions.count("GL_ARB_internalformat_query") != 0)
1068     {
1069         ASSIGN("glGetInternalformativ", getInternalformativ);
1070     }
1071 
1072     if (extensions.count("GL_ARB_internalformat_query2") != 0)
1073     {
1074         ASSIGN("glGetInternalformati64v", getInternalformati64v);
1075     }
1076 
1077     if (extensions.count("GL_ARB_invalidate_subdata") != 0)
1078     {
1079         ASSIGN("glInvalidateBufferData", invalidateBufferData);
1080         ASSIGN("glInvalidateBufferSubData", invalidateBufferSubData);
1081         ASSIGN("glInvalidateFramebuffer", invalidateFramebuffer);
1082         ASSIGN("glInvalidateSubFramebuffer", invalidateSubFramebuffer);
1083         ASSIGN("glInvalidateTexImage", invalidateTexImage);
1084         ASSIGN("glInvalidateTexSubImage", invalidateTexSubImage);
1085     }
1086 
1087     if (extensions.count("GL_ARB_map_buffer_range") != 0)
1088     {
1089         ASSIGN("glFlushMappedBufferRange", flushMappedBufferRange);
1090         ASSIGN("glMapBufferRange", mapBufferRange);
1091     }
1092 
1093     if (extensions.count("GL_ARB_multi_bind") != 0)
1094     {
1095         ASSIGN("glBindBuffersBase", bindBuffersBase);
1096         ASSIGN("glBindBuffersRange", bindBuffersRange);
1097         ASSIGN("glBindImageTextures", bindImageTextures);
1098         ASSIGN("glBindSamplers", bindSamplers);
1099         ASSIGN("glBindTextures", bindTextures);
1100         ASSIGN("glBindVertexBuffers", bindVertexBuffers);
1101     }
1102 
1103     if (extensions.count("GL_ARB_multi_draw_indirect") != 0)
1104     {
1105         ASSIGN("glMultiDrawArraysIndirect", multiDrawArraysIndirect);
1106         ASSIGN("glMultiDrawElementsIndirect", multiDrawElementsIndirect);
1107     }
1108 
1109     if (extensions.count("GL_ARB_multisample") != 0)
1110     {
1111         ASSIGN("glSampleCoverageARB", sampleCoverage);
1112     }
1113 
1114     if (extensions.count("GL_ARB_multitexture") != 0)
1115     {
1116         ASSIGN("glActiveTextureARB", activeTexture);
1117     }
1118 
1119     if (extensions.count("GL_ARB_occlusion_query") != 0)
1120     {
1121         ASSIGN("glBeginQueryARB", beginQuery);
1122         ASSIGN("glDeleteQueriesARB", deleteQueries);
1123         ASSIGN("glEndQueryARB", endQuery);
1124         ASSIGN("glGenQueriesARB", genQueries);
1125         ASSIGN("glGetQueryObjectivARB", getQueryObjectiv);
1126         ASSIGN("glGetQueryObjectuivARB", getQueryObjectuiv);
1127         ASSIGN("glGetQueryivARB", getQueryiv);
1128         ASSIGN("glIsQueryARB", isQuery);
1129     }
1130 
1131     if (extensions.count("GL_ARB_parallel_shader_compile") != 0)
1132     {
1133         ASSIGN("glMaxShaderCompilerThreadsARB", maxShaderCompilerThreadsARB);
1134     }
1135 
1136     if (extensions.count("GL_ARB_point_parameters") != 0)
1137     {
1138         ASSIGN("glPointParameterfARB", pointParameterf);
1139         ASSIGN("glPointParameterfvARB", pointParameterfv);
1140     }
1141 
1142     if (extensions.count("GL_ARB_program_interface_query") != 0)
1143     {
1144         ASSIGN("glGetProgramInterfaceiv", getProgramInterfaceiv);
1145         ASSIGN("glGetProgramResourceIndex", getProgramResourceIndex);
1146         ASSIGN("glGetProgramResourceLocation", getProgramResourceLocation);
1147         ASSIGN("glGetProgramResourceLocationIndex", getProgramResourceLocationIndex);
1148         ASSIGN("glGetProgramResourceName", getProgramResourceName);
1149         ASSIGN("glGetProgramResourceiv", getProgramResourceiv);
1150     }
1151 
1152     if (extensions.count("GL_ARB_provoking_vertex") != 0)
1153     {
1154         ASSIGN("glProvokingVertex", provokingVertex);
1155     }
1156 
1157     if (extensions.count("GL_ARB_robustness") != 0)
1158     {
1159         ASSIGN("glGetGraphicsResetStatusARB", getGraphicsResetStatus);
1160         ASSIGN("glGetnCompressedTexImageARB", getnCompressedTexImage);
1161         ASSIGN("glGetnTexImageARB", getnTexImage);
1162         ASSIGN("glGetnUniformdvARB", getnUniformdv);
1163         ASSIGN("glGetnUniformfvARB", getnUniformfv);
1164         ASSIGN("glGetnUniformivARB", getnUniformiv);
1165         ASSIGN("glGetnUniformuivARB", getnUniformuiv);
1166         ASSIGN("glReadnPixelsARB", readnPixels);
1167     }
1168 
1169     if (extensions.count("GL_ARB_sample_shading") != 0)
1170     {
1171         ASSIGN("glMinSampleShadingARB", minSampleShading);
1172     }
1173 
1174     if (extensions.count("GL_ARB_sampler_objects") != 0)
1175     {
1176         ASSIGN("glBindSampler", bindSampler);
1177         ASSIGN("glDeleteSamplers", deleteSamplers);
1178         ASSIGN("glGenSamplers", genSamplers);
1179         ASSIGN("glGetSamplerParameterIiv", getSamplerParameterIiv);
1180         ASSIGN("glGetSamplerParameterIuiv", getSamplerParameterIuiv);
1181         ASSIGN("glGetSamplerParameterfv", getSamplerParameterfv);
1182         ASSIGN("glGetSamplerParameteriv", getSamplerParameteriv);
1183         ASSIGN("glIsSampler", isSampler);
1184         ASSIGN("glSamplerParameterIiv", samplerParameterIiv);
1185         ASSIGN("glSamplerParameterIuiv", samplerParameterIuiv);
1186         ASSIGN("glSamplerParameterf", samplerParameterf);
1187         ASSIGN("glSamplerParameterfv", samplerParameterfv);
1188         ASSIGN("glSamplerParameteri", samplerParameteri);
1189         ASSIGN("glSamplerParameteriv", samplerParameteriv);
1190     }
1191 
1192     if (extensions.count("GL_ARB_separate_shader_objects") != 0)
1193     {
1194         ASSIGN("glActiveShaderProgram", activeShaderProgram);
1195         ASSIGN("glBindProgramPipeline", bindProgramPipeline);
1196         ASSIGN("glCreateShaderProgramv", createShaderProgramv);
1197         ASSIGN("glDeleteProgramPipelines", deleteProgramPipelines);
1198         ASSIGN("glGenProgramPipelines", genProgramPipelines);
1199         ASSIGN("glGetProgramPipelineInfoLog", getProgramPipelineInfoLog);
1200         ASSIGN("glGetProgramPipelineiv", getProgramPipelineiv);
1201         ASSIGN("glIsProgramPipeline", isProgramPipeline);
1202         ASSIGN("glProgramParameteri", programParameteri);
1203         ASSIGN("glProgramUniform1d", programUniform1d);
1204         ASSIGN("glProgramUniform1dv", programUniform1dv);
1205         ASSIGN("glProgramUniform1f", programUniform1f);
1206         ASSIGN("glProgramUniform1fv", programUniform1fv);
1207         ASSIGN("glProgramUniform1i", programUniform1i);
1208         ASSIGN("glProgramUniform1iv", programUniform1iv);
1209         ASSIGN("glProgramUniform1ui", programUniform1ui);
1210         ASSIGN("glProgramUniform1uiv", programUniform1uiv);
1211         ASSIGN("glProgramUniform2d", programUniform2d);
1212         ASSIGN("glProgramUniform2dv", programUniform2dv);
1213         ASSIGN("glProgramUniform2f", programUniform2f);
1214         ASSIGN("glProgramUniform2fv", programUniform2fv);
1215         ASSIGN("glProgramUniform2i", programUniform2i);
1216         ASSIGN("glProgramUniform2iv", programUniform2iv);
1217         ASSIGN("glProgramUniform2ui", programUniform2ui);
1218         ASSIGN("glProgramUniform2uiv", programUniform2uiv);
1219         ASSIGN("glProgramUniform3d", programUniform3d);
1220         ASSIGN("glProgramUniform3dv", programUniform3dv);
1221         ASSIGN("glProgramUniform3f", programUniform3f);
1222         ASSIGN("glProgramUniform3fv", programUniform3fv);
1223         ASSIGN("glProgramUniform3i", programUniform3i);
1224         ASSIGN("glProgramUniform3iv", programUniform3iv);
1225         ASSIGN("glProgramUniform3ui", programUniform3ui);
1226         ASSIGN("glProgramUniform3uiv", programUniform3uiv);
1227         ASSIGN("glProgramUniform4d", programUniform4d);
1228         ASSIGN("glProgramUniform4dv", programUniform4dv);
1229         ASSIGN("glProgramUniform4f", programUniform4f);
1230         ASSIGN("glProgramUniform4fv", programUniform4fv);
1231         ASSIGN("glProgramUniform4i", programUniform4i);
1232         ASSIGN("glProgramUniform4iv", programUniform4iv);
1233         ASSIGN("glProgramUniform4ui", programUniform4ui);
1234         ASSIGN("glProgramUniform4uiv", programUniform4uiv);
1235         ASSIGN("glProgramUniformMatrix2dv", programUniformMatrix2dv);
1236         ASSIGN("glProgramUniformMatrix2fv", programUniformMatrix2fv);
1237         ASSIGN("glProgramUniformMatrix2x3dv", programUniformMatrix2x3dv);
1238         ASSIGN("glProgramUniformMatrix2x3fv", programUniformMatrix2x3fv);
1239         ASSIGN("glProgramUniformMatrix2x4dv", programUniformMatrix2x4dv);
1240         ASSIGN("glProgramUniformMatrix2x4fv", programUniformMatrix2x4fv);
1241         ASSIGN("glProgramUniformMatrix3dv", programUniformMatrix3dv);
1242         ASSIGN("glProgramUniformMatrix3fv", programUniformMatrix3fv);
1243         ASSIGN("glProgramUniformMatrix3x2dv", programUniformMatrix3x2dv);
1244         ASSIGN("glProgramUniformMatrix3x2fv", programUniformMatrix3x2fv);
1245         ASSIGN("glProgramUniformMatrix3x4dv", programUniformMatrix3x4dv);
1246         ASSIGN("glProgramUniformMatrix3x4fv", programUniformMatrix3x4fv);
1247         ASSIGN("glProgramUniformMatrix4dv", programUniformMatrix4dv);
1248         ASSIGN("glProgramUniformMatrix4fv", programUniformMatrix4fv);
1249         ASSIGN("glProgramUniformMatrix4x2dv", programUniformMatrix4x2dv);
1250         ASSIGN("glProgramUniformMatrix4x2fv", programUniformMatrix4x2fv);
1251         ASSIGN("glProgramUniformMatrix4x3dv", programUniformMatrix4x3dv);
1252         ASSIGN("glProgramUniformMatrix4x3fv", programUniformMatrix4x3fv);
1253         ASSIGN("glUseProgramStages", useProgramStages);
1254         ASSIGN("glValidateProgramPipeline", validateProgramPipeline);
1255     }
1256 
1257     if (extensions.count("GL_ARB_shader_atomic_counters") != 0)
1258     {
1259         ASSIGN("glGetActiveAtomicCounterBufferiv", getActiveAtomicCounterBufferiv);
1260     }
1261 
1262     if (extensions.count("GL_ARB_shader_image_load_store") != 0)
1263     {
1264         ASSIGN("glBindImageTexture", bindImageTexture);
1265         ASSIGN("glMemoryBarrier", memoryBarrier);
1266     }
1267 
1268     if (extensions.count("GL_ARB_shader_objects") != 0)
1269     {
1270         ASSIGN("glCompileShaderARB", compileShader);
1271         ASSIGN("glGetActiveUniformARB", getActiveUniform);
1272         ASSIGN("glGetShaderSourceARB", getShaderSource);
1273         ASSIGN("glGetUniformLocationARB", getUniformLocation);
1274         ASSIGN("glGetUniformfvARB", getUniformfv);
1275         ASSIGN("glGetUniformivARB", getUniformiv);
1276         ASSIGN("glLinkProgramARB", linkProgram);
1277         ASSIGN("glShaderSourceARB", shaderSource);
1278         ASSIGN("glUniform1fARB", uniform1f);
1279         ASSIGN("glUniform1fvARB", uniform1fv);
1280         ASSIGN("glUniform1iARB", uniform1i);
1281         ASSIGN("glUniform1ivARB", uniform1iv);
1282         ASSIGN("glUniform2fARB", uniform2f);
1283         ASSIGN("glUniform2fvARB", uniform2fv);
1284         ASSIGN("glUniform2iARB", uniform2i);
1285         ASSIGN("glUniform2ivARB", uniform2iv);
1286         ASSIGN("glUniform3fARB", uniform3f);
1287         ASSIGN("glUniform3fvARB", uniform3fv);
1288         ASSIGN("glUniform3iARB", uniform3i);
1289         ASSIGN("glUniform3ivARB", uniform3iv);
1290         ASSIGN("glUniform4fARB", uniform4f);
1291         ASSIGN("glUniform4fvARB", uniform4fv);
1292         ASSIGN("glUniform4iARB", uniform4i);
1293         ASSIGN("glUniform4ivARB", uniform4iv);
1294         ASSIGN("glUniformMatrix2fvARB", uniformMatrix2fv);
1295         ASSIGN("glUniformMatrix3fvARB", uniformMatrix3fv);
1296         ASSIGN("glUniformMatrix4fvARB", uniformMatrix4fv);
1297         ASSIGN("glValidateProgramARB", validateProgram);
1298     }
1299 
1300     if (extensions.count("GL_ARB_shader_storage_buffer_object") != 0)
1301     {
1302         ASSIGN("glShaderStorageBlockBinding", shaderStorageBlockBinding);
1303     }
1304 
1305     if (extensions.count("GL_ARB_shader_subroutine") != 0)
1306     {
1307         ASSIGN("glGetActiveSubroutineName", getActiveSubroutineName);
1308         ASSIGN("glGetActiveSubroutineUniformName", getActiveSubroutineUniformName);
1309         ASSIGN("glGetActiveSubroutineUniformiv", getActiveSubroutineUniformiv);
1310         ASSIGN("glGetProgramStageiv", getProgramStageiv);
1311         ASSIGN("glGetSubroutineIndex", getSubroutineIndex);
1312         ASSIGN("glGetSubroutineUniformLocation", getSubroutineUniformLocation);
1313         ASSIGN("glGetUniformSubroutineuiv", getUniformSubroutineuiv);
1314         ASSIGN("glUniformSubroutinesuiv", uniformSubroutinesuiv);
1315     }
1316 
1317     if (extensions.count("GL_ARB_sync") != 0)
1318     {
1319         ASSIGN("glClientWaitSync", clientWaitSync);
1320         ASSIGN("glDeleteSync", deleteSync);
1321         ASSIGN("glFenceSync", fenceSync);
1322         ASSIGN("glGetInteger64v", getInteger64v);
1323         ASSIGN("glGetSynciv", getSynciv);
1324         ASSIGN("glIsSync", isSync);
1325         ASSIGN("glWaitSync", waitSync);
1326     }
1327 
1328     if (extensions.count("GL_ARB_tessellation_shader") != 0)
1329     {
1330         ASSIGN("glPatchParameterfv", patchParameterfv);
1331         ASSIGN("glPatchParameteri", patchParameteri);
1332     }
1333 
1334     if (extensions.count("GL_ARB_texture_barrier") != 0)
1335     {
1336         ASSIGN("glTextureBarrier", textureBarrier);
1337     }
1338 
1339     if (extensions.count("GL_ARB_texture_buffer_object") != 0)
1340     {
1341         ASSIGN("glTexBufferARB", texBuffer);
1342     }
1343 
1344     if (extensions.count("GL_ARB_texture_buffer_range") != 0)
1345     {
1346         ASSIGN("glTexBufferRange", texBufferRange);
1347     }
1348 
1349     if (extensions.count("GL_ARB_texture_compression") != 0)
1350     {
1351         ASSIGN("glCompressedTexImage1DARB", compressedTexImage1D);
1352         ASSIGN("glCompressedTexImage2DARB", compressedTexImage2D);
1353         ASSIGN("glCompressedTexImage3DARB", compressedTexImage3D);
1354         ASSIGN("glCompressedTexSubImage1DARB", compressedTexSubImage1D);
1355         ASSIGN("glCompressedTexSubImage2DARB", compressedTexSubImage2D);
1356         ASSIGN("glCompressedTexSubImage3DARB", compressedTexSubImage3D);
1357         ASSIGN("glGetCompressedTexImageARB", getCompressedTexImage);
1358     }
1359 
1360     if (extensions.count("GL_ARB_texture_multisample") != 0)
1361     {
1362         ASSIGN("glGetMultisamplefv", getMultisamplefv);
1363         ASSIGN("glSampleMaski", sampleMaski);
1364         ASSIGN("glTexImage2DMultisample", texImage2DMultisample);
1365         ASSIGN("glTexImage3DMultisample", texImage3DMultisample);
1366     }
1367 
1368     if (extensions.count("GL_ARB_texture_storage") != 0)
1369     {
1370         ASSIGN("glTexStorage1D", texStorage1D);
1371         ASSIGN("glTexStorage2D", texStorage2D);
1372         ASSIGN("glTexStorage3D", texStorage3D);
1373     }
1374 
1375     if (extensions.count("GL_ARB_texture_storage_multisample") != 0)
1376     {
1377         ASSIGN("glTexStorage2DMultisample", texStorage2DMultisample);
1378         ASSIGN("glTexStorage3DMultisample", texStorage3DMultisample);
1379     }
1380 
1381     if (extensions.count("GL_ARB_texture_view") != 0)
1382     {
1383         ASSIGN("glTextureView", textureView);
1384     }
1385 
1386     if (extensions.count("GL_ARB_timer_query") != 0)
1387     {
1388         ASSIGN("glGetQueryObjecti64v", getQueryObjecti64v);
1389         ASSIGN("glGetQueryObjectui64v", getQueryObjectui64v);
1390         ASSIGN("glQueryCounter", queryCounter);
1391     }
1392 
1393     if (extensions.count("GL_ARB_transform_feedback2") != 0)
1394     {
1395         ASSIGN("glBindTransformFeedback", bindTransformFeedback);
1396         ASSIGN("glDeleteTransformFeedbacks", deleteTransformFeedbacks);
1397         ASSIGN("glDrawTransformFeedback", drawTransformFeedback);
1398         ASSIGN("glGenTransformFeedbacks", genTransformFeedbacks);
1399         ASSIGN("glIsTransformFeedback", isTransformFeedback);
1400         ASSIGN("glPauseTransformFeedback", pauseTransformFeedback);
1401         ASSIGN("glResumeTransformFeedback", resumeTransformFeedback);
1402     }
1403 
1404     if (extensions.count("GL_ARB_transform_feedback3") != 0)
1405     {
1406         ASSIGN("glBeginQueryIndexed", beginQueryIndexed);
1407         ASSIGN("glDrawTransformFeedbackStream", drawTransformFeedbackStream);
1408         ASSIGN("glEndQueryIndexed", endQueryIndexed);
1409         ASSIGN("glGetQueryIndexediv", getQueryIndexediv);
1410     }
1411 
1412     if (extensions.count("GL_ARB_transform_feedback_instanced") != 0)
1413     {
1414         ASSIGN("glDrawTransformFeedbackInstanced", drawTransformFeedbackInstanced);
1415         ASSIGN("glDrawTransformFeedbackStreamInstanced", drawTransformFeedbackStreamInstanced);
1416     }
1417 
1418     if (extensions.count("GL_ARB_uniform_buffer_object") != 0)
1419     {
1420         ASSIGN("glBindBufferBase", bindBufferBase);
1421         ASSIGN("glBindBufferRange", bindBufferRange);
1422         ASSIGN("glGetActiveUniformBlockName", getActiveUniformBlockName);
1423         ASSIGN("glGetActiveUniformBlockiv", getActiveUniformBlockiv);
1424         ASSIGN("glGetActiveUniformName", getActiveUniformName);
1425         ASSIGN("glGetActiveUniformsiv", getActiveUniformsiv);
1426         ASSIGN("glGetIntegeri_v", getIntegeri_v);
1427         ASSIGN("glGetUniformBlockIndex", getUniformBlockIndex);
1428         ASSIGN("glGetUniformIndices", getUniformIndices);
1429         ASSIGN("glUniformBlockBinding", uniformBlockBinding);
1430     }
1431 
1432     if (extensions.count("GL_ARB_vertex_array_object") != 0)
1433     {
1434         ASSIGN("glBindVertexArray", bindVertexArray);
1435         ASSIGN("glDeleteVertexArrays", deleteVertexArrays);
1436         ASSIGN("glGenVertexArrays", genVertexArrays);
1437         ASSIGN("glIsVertexArray", isVertexArray);
1438     }
1439 
1440     if (extensions.count("GL_ARB_vertex_attrib_64bit") != 0)
1441     {
1442         ASSIGN("glGetVertexAttribLdv", getVertexAttribLdv);
1443         ASSIGN("glVertexAttribL1d", vertexAttribL1d);
1444         ASSIGN("glVertexAttribL1dv", vertexAttribL1dv);
1445         ASSIGN("glVertexAttribL2d", vertexAttribL2d);
1446         ASSIGN("glVertexAttribL2dv", vertexAttribL2dv);
1447         ASSIGN("glVertexAttribL3d", vertexAttribL3d);
1448         ASSIGN("glVertexAttribL3dv", vertexAttribL3dv);
1449         ASSIGN("glVertexAttribL4d", vertexAttribL4d);
1450         ASSIGN("glVertexAttribL4dv", vertexAttribL4dv);
1451         ASSIGN("glVertexAttribLPointer", vertexAttribLPointer);
1452     }
1453 
1454     if (extensions.count("GL_ARB_vertex_attrib_binding") != 0)
1455     {
1456         ASSIGN("glBindVertexBuffer", bindVertexBuffer);
1457         ASSIGN("glVertexAttribBinding", vertexAttribBinding);
1458         ASSIGN("glVertexAttribFormat", vertexAttribFormat);
1459         ASSIGN("glVertexAttribIFormat", vertexAttribIFormat);
1460         ASSIGN("glVertexAttribLFormat", vertexAttribLFormat);
1461         ASSIGN("glVertexBindingDivisor", vertexBindingDivisor);
1462     }
1463 
1464     if (extensions.count("GL_ARB_vertex_buffer_object") != 0)
1465     {
1466         ASSIGN("glBindBufferARB", bindBuffer);
1467         ASSIGN("glBufferDataARB", bufferData);
1468         ASSIGN("glBufferSubDataARB", bufferSubData);
1469         ASSIGN("glDeleteBuffersARB", deleteBuffers);
1470         ASSIGN("glGenBuffersARB", genBuffers);
1471         ASSIGN("glGetBufferParameterivARB", getBufferParameteriv);
1472         ASSIGN("glGetBufferPointervARB", getBufferPointerv);
1473         ASSIGN("glGetBufferSubDataARB", getBufferSubData);
1474         ASSIGN("glIsBufferARB", isBuffer);
1475         ASSIGN("glMapBufferARB", mapBuffer);
1476         ASSIGN("glUnmapBufferARB", unmapBuffer);
1477     }
1478 
1479     if (extensions.count("GL_ARB_vertex_program") != 0)
1480     {
1481         ASSIGN("glDisableVertexAttribArrayARB", disableVertexAttribArray);
1482         ASSIGN("glEnableVertexAttribArrayARB", enableVertexAttribArray);
1483         ASSIGN("glGetProgramivARB", getProgramiv);
1484         ASSIGN("glGetVertexAttribPointervARB", getVertexAttribPointerv);
1485         ASSIGN("glGetVertexAttribdvARB", getVertexAttribdv);
1486         ASSIGN("glGetVertexAttribfvARB", getVertexAttribfv);
1487         ASSIGN("glGetVertexAttribivARB", getVertexAttribiv);
1488         ASSIGN("glIsProgramARB", isProgram);
1489         ASSIGN("glVertexAttrib1dARB", vertexAttrib1d);
1490         ASSIGN("glVertexAttrib1dvARB", vertexAttrib1dv);
1491         ASSIGN("glVertexAttrib1fARB", vertexAttrib1f);
1492         ASSIGN("glVertexAttrib1fvARB", vertexAttrib1fv);
1493         ASSIGN("glVertexAttrib1sARB", vertexAttrib1s);
1494         ASSIGN("glVertexAttrib1svARB", vertexAttrib1sv);
1495         ASSIGN("glVertexAttrib2dARB", vertexAttrib2d);
1496         ASSIGN("glVertexAttrib2dvARB", vertexAttrib2dv);
1497         ASSIGN("glVertexAttrib2fARB", vertexAttrib2f);
1498         ASSIGN("glVertexAttrib2fvARB", vertexAttrib2fv);
1499         ASSIGN("glVertexAttrib2sARB", vertexAttrib2s);
1500         ASSIGN("glVertexAttrib2svARB", vertexAttrib2sv);
1501         ASSIGN("glVertexAttrib3dARB", vertexAttrib3d);
1502         ASSIGN("glVertexAttrib3dvARB", vertexAttrib3dv);
1503         ASSIGN("glVertexAttrib3fARB", vertexAttrib3f);
1504         ASSIGN("glVertexAttrib3fvARB", vertexAttrib3fv);
1505         ASSIGN("glVertexAttrib3sARB", vertexAttrib3s);
1506         ASSIGN("glVertexAttrib3svARB", vertexAttrib3sv);
1507         ASSIGN("glVertexAttrib4NbvARB", vertexAttrib4Nbv);
1508         ASSIGN("glVertexAttrib4NivARB", vertexAttrib4Niv);
1509         ASSIGN("glVertexAttrib4NsvARB", vertexAttrib4Nsv);
1510         ASSIGN("glVertexAttrib4NubARB", vertexAttrib4Nub);
1511         ASSIGN("glVertexAttrib4NubvARB", vertexAttrib4Nubv);
1512         ASSIGN("glVertexAttrib4NuivARB", vertexAttrib4Nuiv);
1513         ASSIGN("glVertexAttrib4NusvARB", vertexAttrib4Nusv);
1514         ASSIGN("glVertexAttrib4bvARB", vertexAttrib4bv);
1515         ASSIGN("glVertexAttrib4dARB", vertexAttrib4d);
1516         ASSIGN("glVertexAttrib4dvARB", vertexAttrib4dv);
1517         ASSIGN("glVertexAttrib4fARB", vertexAttrib4f);
1518         ASSIGN("glVertexAttrib4fvARB", vertexAttrib4fv);
1519         ASSIGN("glVertexAttrib4ivARB", vertexAttrib4iv);
1520         ASSIGN("glVertexAttrib4sARB", vertexAttrib4s);
1521         ASSIGN("glVertexAttrib4svARB", vertexAttrib4sv);
1522         ASSIGN("glVertexAttrib4ubvARB", vertexAttrib4ubv);
1523         ASSIGN("glVertexAttrib4uivARB", vertexAttrib4uiv);
1524         ASSIGN("glVertexAttrib4usvARB", vertexAttrib4usv);
1525         ASSIGN("glVertexAttribPointerARB", vertexAttribPointer);
1526     }
1527 
1528     if (extensions.count("GL_ARB_vertex_shader") != 0)
1529     {
1530         ASSIGN("glBindAttribLocationARB", bindAttribLocation);
1531         ASSIGN("glDisableVertexAttribArrayARB", disableVertexAttribArray);
1532         ASSIGN("glEnableVertexAttribArrayARB", enableVertexAttribArray);
1533         ASSIGN("glGetActiveAttribARB", getActiveAttrib);
1534         ASSIGN("glGetAttribLocationARB", getAttribLocation);
1535         ASSIGN("glGetVertexAttribPointervARB", getVertexAttribPointerv);
1536         ASSIGN("glGetVertexAttribdvARB", getVertexAttribdv);
1537         ASSIGN("glGetVertexAttribfvARB", getVertexAttribfv);
1538         ASSIGN("glGetVertexAttribivARB", getVertexAttribiv);
1539         ASSIGN("glVertexAttrib1dARB", vertexAttrib1d);
1540         ASSIGN("glVertexAttrib1dvARB", vertexAttrib1dv);
1541         ASSIGN("glVertexAttrib1fARB", vertexAttrib1f);
1542         ASSIGN("glVertexAttrib1fvARB", vertexAttrib1fv);
1543         ASSIGN("glVertexAttrib1sARB", vertexAttrib1s);
1544         ASSIGN("glVertexAttrib1svARB", vertexAttrib1sv);
1545         ASSIGN("glVertexAttrib2dARB", vertexAttrib2d);
1546         ASSIGN("glVertexAttrib2dvARB", vertexAttrib2dv);
1547         ASSIGN("glVertexAttrib2fARB", vertexAttrib2f);
1548         ASSIGN("glVertexAttrib2fvARB", vertexAttrib2fv);
1549         ASSIGN("glVertexAttrib2sARB", vertexAttrib2s);
1550         ASSIGN("glVertexAttrib2svARB", vertexAttrib2sv);
1551         ASSIGN("glVertexAttrib3dARB", vertexAttrib3d);
1552         ASSIGN("glVertexAttrib3dvARB", vertexAttrib3dv);
1553         ASSIGN("glVertexAttrib3fARB", vertexAttrib3f);
1554         ASSIGN("glVertexAttrib3fvARB", vertexAttrib3fv);
1555         ASSIGN("glVertexAttrib3sARB", vertexAttrib3s);
1556         ASSIGN("glVertexAttrib3svARB", vertexAttrib3sv);
1557         ASSIGN("glVertexAttrib4NbvARB", vertexAttrib4Nbv);
1558         ASSIGN("glVertexAttrib4NivARB", vertexAttrib4Niv);
1559         ASSIGN("glVertexAttrib4NsvARB", vertexAttrib4Nsv);
1560         ASSIGN("glVertexAttrib4NubARB", vertexAttrib4Nub);
1561         ASSIGN("glVertexAttrib4NubvARB", vertexAttrib4Nubv);
1562         ASSIGN("glVertexAttrib4NuivARB", vertexAttrib4Nuiv);
1563         ASSIGN("glVertexAttrib4NusvARB", vertexAttrib4Nusv);
1564         ASSIGN("glVertexAttrib4bvARB", vertexAttrib4bv);
1565         ASSIGN("glVertexAttrib4dARB", vertexAttrib4d);
1566         ASSIGN("glVertexAttrib4dvARB", vertexAttrib4dv);
1567         ASSIGN("glVertexAttrib4fARB", vertexAttrib4f);
1568         ASSIGN("glVertexAttrib4fvARB", vertexAttrib4fv);
1569         ASSIGN("glVertexAttrib4ivARB", vertexAttrib4iv);
1570         ASSIGN("glVertexAttrib4sARB", vertexAttrib4s);
1571         ASSIGN("glVertexAttrib4svARB", vertexAttrib4sv);
1572         ASSIGN("glVertexAttrib4ubvARB", vertexAttrib4ubv);
1573         ASSIGN("glVertexAttrib4uivARB", vertexAttrib4uiv);
1574         ASSIGN("glVertexAttrib4usvARB", vertexAttrib4usv);
1575         ASSIGN("glVertexAttribPointerARB", vertexAttribPointer);
1576     }
1577 
1578     if (extensions.count("GL_ARB_vertex_type_2_10_10_10_rev") != 0)
1579     {
1580         ASSIGN("glVertexAttribP1ui", vertexAttribP1ui);
1581         ASSIGN("glVertexAttribP1uiv", vertexAttribP1uiv);
1582         ASSIGN("glVertexAttribP2ui", vertexAttribP2ui);
1583         ASSIGN("glVertexAttribP2uiv", vertexAttribP2uiv);
1584         ASSIGN("glVertexAttribP3ui", vertexAttribP3ui);
1585         ASSIGN("glVertexAttribP3uiv", vertexAttribP3uiv);
1586         ASSIGN("glVertexAttribP4ui", vertexAttribP4ui);
1587         ASSIGN("glVertexAttribP4uiv", vertexAttribP4uiv);
1588     }
1589 
1590     if (extensions.count("GL_ARB_viewport_array") != 0)
1591     {
1592         ASSIGN("glDepthRangeArrayv", depthRangeArrayv);
1593         ASSIGN("glDepthRangeIndexed", depthRangeIndexed);
1594         ASSIGN("glGetDoublei_v", getDoublei_v);
1595         ASSIGN("glGetFloati_v", getFloati_v);
1596         ASSIGN("glScissorArrayv", scissorArrayv);
1597         ASSIGN("glScissorIndexed", scissorIndexed);
1598         ASSIGN("glScissorIndexedv", scissorIndexedv);
1599         ASSIGN("glViewportArrayv", viewportArrayv);
1600         ASSIGN("glViewportIndexedf", viewportIndexedf);
1601         ASSIGN("glViewportIndexedfv", viewportIndexedfv);
1602     }
1603 
1604     if (extensions.count("GL_EXT_blend_color") != 0)
1605     {
1606         ASSIGN("glBlendColorEXT", blendColor);
1607     }
1608 
1609     if (extensions.count("GL_EXT_blend_equation_separate") != 0)
1610     {
1611         ASSIGN("glBlendEquationSeparateEXT", blendEquationSeparate);
1612     }
1613 
1614     if (extensions.count("GL_EXT_blend_func_separate") != 0)
1615     {
1616         ASSIGN("glBlendFuncSeparateEXT", blendFuncSeparate);
1617     }
1618 
1619     if (extensions.count("GL_EXT_copy_texture") != 0)
1620     {
1621         ASSIGN("glCopyTexImage1DEXT", copyTexImage1D);
1622         ASSIGN("glCopyTexImage2DEXT", copyTexImage2D);
1623         ASSIGN("glCopyTexSubImage1DEXT", copyTexSubImage1D);
1624         ASSIGN("glCopyTexSubImage2DEXT", copyTexSubImage2D);
1625         ASSIGN("glCopyTexSubImage3DEXT", copyTexSubImage3D);
1626     }
1627 
1628     if (extensions.count("GL_EXT_direct_state_access") != 0)
1629     {
1630         ASSIGN("glCheckNamedFramebufferStatusEXT", checkNamedFramebufferStatus);
1631         ASSIGN("glClearNamedBufferDataEXT", clearNamedBufferData);
1632         ASSIGN("glClearNamedBufferSubDataEXT", clearNamedBufferSubData);
1633         ASSIGN("glCompressedTextureSubImage1DEXT", compressedTextureSubImage1D);
1634         ASSIGN("glCompressedTextureSubImage2DEXT", compressedTextureSubImage2D);
1635         ASSIGN("glCompressedTextureSubImage3DEXT", compressedTextureSubImage3D);
1636         ASSIGN("glCopyTextureSubImage1DEXT", copyTextureSubImage1D);
1637         ASSIGN("glCopyTextureSubImage2DEXT", copyTextureSubImage2D);
1638         ASSIGN("glCopyTextureSubImage3DEXT", copyTextureSubImage3D);
1639         ASSIGN("glDisableVertexArrayAttribEXT", disableVertexArrayAttrib);
1640         ASSIGN("glEnableVertexArrayAttribEXT", enableVertexArrayAttrib);
1641         ASSIGN("glFlushMappedNamedBufferRangeEXT", flushMappedNamedBufferRange);
1642         ASSIGN("glGenerateTextureMipmapEXT", generateTextureMipmap);
1643         ASSIGN("glGetCompressedTextureImageEXT", getCompressedTextureImage);
1644         ASSIGN("glGetDoublei_vEXT", getDoublei_v);
1645         ASSIGN("glGetFloati_vEXT", getFloati_v);
1646         ASSIGN("glGetFramebufferParameterivEXT", getFramebufferParameteriv);
1647         ASSIGN("glGetNamedBufferParameterivEXT", getNamedBufferParameteriv);
1648         ASSIGN("glGetNamedBufferPointervEXT", getNamedBufferPointerv);
1649         ASSIGN("glGetNamedBufferSubDataEXT", getNamedBufferSubData);
1650         ASSIGN("glGetNamedFramebufferAttachmentParameterivEXT",
1651                getNamedFramebufferAttachmentParameteriv);
1652         ASSIGN("glGetNamedFramebufferParameterivEXT", getNamedFramebufferParameteriv);
1653         ASSIGN("glGetNamedRenderbufferParameterivEXT", getNamedRenderbufferParameteriv);
1654         ASSIGN("glGetTextureImageEXT", getTextureImage);
1655         ASSIGN("glGetTextureLevelParameterfvEXT", getTextureLevelParameterfv);
1656         ASSIGN("glGetTextureLevelParameterivEXT", getTextureLevelParameteriv);
1657         ASSIGN("glGetTextureParameterIivEXT", getTextureParameterIiv);
1658         ASSIGN("glGetTextureParameterIuivEXT", getTextureParameterIuiv);
1659         ASSIGN("glGetTextureParameterfvEXT", getTextureParameterfv);
1660         ASSIGN("glGetTextureParameterivEXT", getTextureParameteriv);
1661         ASSIGN("glMapNamedBufferEXT", mapNamedBuffer);
1662         ASSIGN("glMapNamedBufferRangeEXT", mapNamedBufferRange);
1663         ASSIGN("glNamedBufferDataEXT", namedBufferData);
1664         ASSIGN("glNamedBufferStorageEXT", namedBufferStorage);
1665         ASSIGN("glNamedBufferSubDataEXT", namedBufferSubData);
1666         ASSIGN("glNamedFramebufferParameteriEXT", namedFramebufferParameteri);
1667         ASSIGN("glNamedFramebufferRenderbufferEXT", namedFramebufferRenderbuffer);
1668         ASSIGN("glNamedFramebufferTextureEXT", namedFramebufferTexture);
1669         ASSIGN("glNamedFramebufferTextureLayerEXT", namedFramebufferTextureLayer);
1670         ASSIGN("glNamedRenderbufferStorageEXT", namedRenderbufferStorage);
1671         ASSIGN("glNamedRenderbufferStorageMultisampleEXT", namedRenderbufferStorageMultisample);
1672         ASSIGN("glProgramUniform1dEXT", programUniform1d);
1673         ASSIGN("glProgramUniform1dvEXT", programUniform1dv);
1674         ASSIGN("glProgramUniform2dEXT", programUniform2d);
1675         ASSIGN("glProgramUniform2dvEXT", programUniform2dv);
1676         ASSIGN("glProgramUniform3dEXT", programUniform3d);
1677         ASSIGN("glProgramUniform3dvEXT", programUniform3dv);
1678         ASSIGN("glProgramUniform4dEXT", programUniform4d);
1679         ASSIGN("glProgramUniform4dvEXT", programUniform4dv);
1680         ASSIGN("glProgramUniformMatrix2dvEXT", programUniformMatrix2dv);
1681         ASSIGN("glProgramUniformMatrix2x3dvEXT", programUniformMatrix2x3dv);
1682         ASSIGN("glProgramUniformMatrix2x4dvEXT", programUniformMatrix2x4dv);
1683         ASSIGN("glProgramUniformMatrix3dvEXT", programUniformMatrix3dv);
1684         ASSIGN("glProgramUniformMatrix3x2dvEXT", programUniformMatrix3x2dv);
1685         ASSIGN("glProgramUniformMatrix3x4dvEXT", programUniformMatrix3x4dv);
1686         ASSIGN("glProgramUniformMatrix4dvEXT", programUniformMatrix4dv);
1687         ASSIGN("glProgramUniformMatrix4x2dvEXT", programUniformMatrix4x2dv);
1688         ASSIGN("glProgramUniformMatrix4x3dvEXT", programUniformMatrix4x3dv);
1689         ASSIGN("glTextureBufferEXT", textureBuffer);
1690         ASSIGN("glTextureBufferRangeEXT", textureBufferRange);
1691         ASSIGN("glTextureParameterIivEXT", textureParameterIiv);
1692         ASSIGN("glTextureParameterIuivEXT", textureParameterIuiv);
1693         ASSIGN("glTextureParameterfEXT", textureParameterf);
1694         ASSIGN("glTextureParameterfvEXT", textureParameterfv);
1695         ASSIGN("glTextureParameteriEXT", textureParameteri);
1696         ASSIGN("glTextureParameterivEXT", textureParameteriv);
1697         ASSIGN("glTextureStorage1DEXT", textureStorage1D);
1698         ASSIGN("glTextureStorage2DEXT", textureStorage2D);
1699         ASSIGN("glTextureStorage2DMultisampleEXT", textureStorage2DMultisample);
1700         ASSIGN("glTextureStorage3DEXT", textureStorage3D);
1701         ASSIGN("glTextureStorage3DMultisampleEXT", textureStorage3DMultisample);
1702         ASSIGN("glTextureSubImage1DEXT", textureSubImage1D);
1703         ASSIGN("glTextureSubImage2DEXT", textureSubImage2D);
1704         ASSIGN("glTextureSubImage3DEXT", textureSubImage3D);
1705         ASSIGN("glUnmapNamedBufferEXT", unmapNamedBuffer);
1706     }
1707 
1708     if (extensions.count("GL_EXT_draw_range_elements") != 0)
1709     {
1710         ASSIGN("glDrawRangeElementsEXT", drawRangeElements);
1711     }
1712 
1713     if (extensions.count("GL_EXT_framebuffer_blit") != 0)
1714     {
1715         ASSIGN("glBlitFramebufferEXT", blitFramebuffer);
1716     }
1717 
1718     if (extensions.count("GL_EXT_framebuffer_multisample") != 0)
1719     {
1720         ASSIGN("glRenderbufferStorageMultisampleEXT", renderbufferStorageMultisample);
1721     }
1722 
1723     if (extensions.count("GL_EXT_framebuffer_object") != 0)
1724     {
1725         ASSIGN("glBindFramebufferEXT", bindFramebuffer);
1726         ASSIGN("glBindRenderbufferEXT", bindRenderbuffer);
1727         ASSIGN("glCheckFramebufferStatusEXT", checkFramebufferStatus);
1728         ASSIGN("glDeleteFramebuffersEXT", deleteFramebuffers);
1729         ASSIGN("glDeleteRenderbuffersEXT", deleteRenderbuffers);
1730         ASSIGN("glFramebufferRenderbufferEXT", framebufferRenderbuffer);
1731         ASSIGN("glFramebufferTexture1DEXT", framebufferTexture1D);
1732         ASSIGN("glFramebufferTexture2DEXT", framebufferTexture2D);
1733         ASSIGN("glFramebufferTexture3DEXT", framebufferTexture3D);
1734         ASSIGN("glGenFramebuffersEXT", genFramebuffers);
1735         ASSIGN("glGenRenderbuffersEXT", genRenderbuffers);
1736         ASSIGN("glGenerateMipmapEXT", generateMipmap);
1737         ASSIGN("glGetFramebufferAttachmentParameterivEXT", getFramebufferAttachmentParameteriv);
1738         ASSIGN("glGetRenderbufferParameterivEXT", getRenderbufferParameteriv);
1739         ASSIGN("glIsFramebufferEXT", isFramebuffer);
1740         ASSIGN("glIsRenderbufferEXT", isRenderbuffer);
1741         ASSIGN("glRenderbufferStorageEXT", renderbufferStorage);
1742     }
1743 
1744     if (extensions.count("GL_EXT_gpu_shader4") != 0)
1745     {
1746         ASSIGN("glBindFragDataLocationEXT", bindFragDataLocation);
1747         ASSIGN("glGetFragDataLocationEXT", getFragDataLocation);
1748         ASSIGN("glGetUniformuivEXT", getUniformuiv);
1749         ASSIGN("glUniform1uiEXT", uniform1ui);
1750         ASSIGN("glUniform1uivEXT", uniform1uiv);
1751         ASSIGN("glUniform2uiEXT", uniform2ui);
1752         ASSIGN("glUniform2uivEXT", uniform2uiv);
1753         ASSIGN("glUniform3uiEXT", uniform3ui);
1754         ASSIGN("glUniform3uivEXT", uniform3uiv);
1755         ASSIGN("glUniform4uiEXT", uniform4ui);
1756         ASSIGN("glUniform4uivEXT", uniform4uiv);
1757     }
1758 
1759     if (extensions.count("GL_EXT_point_parameters") != 0)
1760     {
1761         ASSIGN("glPointParameterfEXT", pointParameterf);
1762         ASSIGN("glPointParameterfvEXT", pointParameterfv);
1763     }
1764 
1765     if (extensions.count("GL_EXT_polygon_offset") != 0)
1766     {
1767         ASSIGN("glPolygonOffsetEXT", polygonOffset);
1768     }
1769 
1770     if (extensions.count("GL_EXT_provoking_vertex") != 0)
1771     {
1772         ASSIGN("glProvokingVertexEXT", provokingVertex);
1773     }
1774 
1775     if (extensions.count("GL_EXT_shader_image_load_store") != 0)
1776     {
1777         ASSIGN("glBindImageTextureEXT", bindImageTexture);
1778         ASSIGN("glMemoryBarrierEXT", memoryBarrier);
1779     }
1780 
1781     if (extensions.count("GL_EXT_subtexture") != 0)
1782     {
1783         ASSIGN("glTexSubImage1DEXT", texSubImage1D);
1784         ASSIGN("glTexSubImage2DEXT", texSubImage2D);
1785     }
1786 
1787     if (extensions.count("GL_EXT_texture3D") != 0)
1788     {
1789         ASSIGN("glTexImage3DEXT", texImage3D);
1790         ASSIGN("glTexSubImage3DEXT", texSubImage3D);
1791     }
1792 
1793     if (extensions.count("GL_EXT_texture_array") != 0)
1794     {
1795         ASSIGN("glFramebufferTextureLayerEXT", framebufferTextureLayer);
1796     }
1797 
1798     if (extensions.count("GL_EXT_texture_buffer_object") != 0)
1799     {
1800         ASSIGN("glTexBufferEXT", texBuffer);
1801     }
1802 
1803     if (extensions.count("GL_EXT_texture_integer") != 0)
1804     {
1805         ASSIGN("glGetTexParameterIivEXT", getTexParameterIiv);
1806         ASSIGN("glGetTexParameterIuivEXT", getTexParameterIuiv);
1807         ASSIGN("glTexParameterIivEXT", texParameterIiv);
1808         ASSIGN("glTexParameterIuivEXT", texParameterIuiv);
1809     }
1810 
1811     if (extensions.count("GL_EXT_texture_object") != 0)
1812     {
1813         ASSIGN("glBindTextureEXT", bindTexture);
1814         ASSIGN("glDeleteTexturesEXT", deleteTextures);
1815         ASSIGN("glGenTexturesEXT", genTextures);
1816         ASSIGN("glIsTextureEXT", isTexture);
1817     }
1818 
1819     if (extensions.count("GL_EXT_timer_query") != 0)
1820     {
1821         ASSIGN("glGetQueryObjecti64vEXT", getQueryObjecti64v);
1822         ASSIGN("glGetQueryObjectui64vEXT", getQueryObjectui64v);
1823     }
1824 
1825     if (extensions.count("GL_EXT_transform_feedback") != 0)
1826     {
1827         ASSIGN("glBeginTransformFeedbackEXT", beginTransformFeedback);
1828         ASSIGN("glBindBufferBaseEXT", bindBufferBase);
1829         ASSIGN("glBindBufferRangeEXT", bindBufferRange);
1830         ASSIGN("glEndTransformFeedbackEXT", endTransformFeedback);
1831         ASSIGN("glGetTransformFeedbackVaryingEXT", getTransformFeedbackVarying);
1832         ASSIGN("glTransformFeedbackVaryingsEXT", transformFeedbackVaryings);
1833     }
1834 
1835     if (extensions.count("GL_EXT_vertex_array") != 0)
1836     {
1837         ASSIGN("glDrawArraysEXT", drawArrays);
1838         ASSIGN("glGetPointervEXT", getPointerv);
1839     }
1840 
1841     if (extensions.count("GL_EXT_vertex_attrib_64bit") != 0)
1842     {
1843         ASSIGN("glGetVertexAttribLdvEXT", getVertexAttribLdv);
1844         ASSIGN("glVertexAttribL1dEXT", vertexAttribL1d);
1845         ASSIGN("glVertexAttribL1dvEXT", vertexAttribL1dv);
1846         ASSIGN("glVertexAttribL2dEXT", vertexAttribL2d);
1847         ASSIGN("glVertexAttribL2dvEXT", vertexAttribL2dv);
1848         ASSIGN("glVertexAttribL3dEXT", vertexAttribL3d);
1849         ASSIGN("glVertexAttribL3dvEXT", vertexAttribL3dv);
1850         ASSIGN("glVertexAttribL4dEXT", vertexAttribL4d);
1851         ASSIGN("glVertexAttribL4dvEXT", vertexAttribL4dv);
1852         ASSIGN("glVertexAttribLPointerEXT", vertexAttribLPointer);
1853     }
1854 
1855     if (extensions.count("GL_KHR_debug") != 0)
1856     {
1857         ASSIGN("glDebugMessageCallback", debugMessageCallback);
1858         ASSIGN("glDebugMessageControl", debugMessageControl);
1859         ASSIGN("glDebugMessageInsert", debugMessageInsert);
1860         ASSIGN("glGetDebugMessageLog", getDebugMessageLog);
1861         ASSIGN("glGetObjectLabel", getObjectLabel);
1862         ASSIGN("glGetObjectPtrLabel", getObjectPtrLabel);
1863         ASSIGN("glGetPointerv", getPointerv);
1864         ASSIGN("glObjectLabel", objectLabel);
1865         ASSIGN("glObjectPtrLabel", objectPtrLabel);
1866         ASSIGN("glPopDebugGroup", popDebugGroup);
1867         ASSIGN("glPushDebugGroup", pushDebugGroup);
1868     }
1869 
1870     if (extensions.count("GL_KHR_robustness") != 0)
1871     {
1872         ASSIGN("glGetGraphicsResetStatus", getGraphicsResetStatus);
1873         ASSIGN("glGetnUniformfv", getnUniformfv);
1874         ASSIGN("glGetnUniformiv", getnUniformiv);
1875         ASSIGN("glGetnUniformuiv", getnUniformuiv);
1876         ASSIGN("glReadnPixels", readnPixels);
1877     }
1878 
1879     if (extensions.count("GL_NV_geometry_program4") != 0)
1880     {
1881         ASSIGN("glFramebufferTextureEXT", framebufferTexture);
1882         ASSIGN("glFramebufferTextureLayerEXT", framebufferTextureLayer);
1883     }
1884 
1885     if (extensions.count("GL_NV_vertex_program4") != 0)
1886     {
1887         ASSIGN("glGetVertexAttribIivEXT", getVertexAttribIiv);
1888         ASSIGN("glGetVertexAttribIuivEXT", getVertexAttribIuiv);
1889         ASSIGN("glVertexAttribI1iEXT", vertexAttribI1i);
1890         ASSIGN("glVertexAttribI1ivEXT", vertexAttribI1iv);
1891         ASSIGN("glVertexAttribI1uiEXT", vertexAttribI1ui);
1892         ASSIGN("glVertexAttribI1uivEXT", vertexAttribI1uiv);
1893         ASSIGN("glVertexAttribI2iEXT", vertexAttribI2i);
1894         ASSIGN("glVertexAttribI2ivEXT", vertexAttribI2iv);
1895         ASSIGN("glVertexAttribI2uiEXT", vertexAttribI2ui);
1896         ASSIGN("glVertexAttribI2uivEXT", vertexAttribI2uiv);
1897         ASSIGN("glVertexAttribI3iEXT", vertexAttribI3i);
1898         ASSIGN("glVertexAttribI3ivEXT", vertexAttribI3iv);
1899         ASSIGN("glVertexAttribI3uiEXT", vertexAttribI3ui);
1900         ASSIGN("glVertexAttribI3uivEXT", vertexAttribI3uiv);
1901         ASSIGN("glVertexAttribI4bvEXT", vertexAttribI4bv);
1902         ASSIGN("glVertexAttribI4iEXT", vertexAttribI4i);
1903         ASSIGN("glVertexAttribI4ivEXT", vertexAttribI4iv);
1904         ASSIGN("glVertexAttribI4svEXT", vertexAttribI4sv);
1905         ASSIGN("glVertexAttribI4ubvEXT", vertexAttribI4ubv);
1906         ASSIGN("glVertexAttribI4uiEXT", vertexAttribI4ui);
1907         ASSIGN("glVertexAttribI4uivEXT", vertexAttribI4uiv);
1908         ASSIGN("glVertexAttribI4usvEXT", vertexAttribI4usv);
1909         ASSIGN("glVertexAttribIPointerEXT", vertexAttribIPointer);
1910     }
1911 
1912     if (extensions.count("GL_OES_single_precision") != 0)
1913     {
1914         ASSIGN("glClearDepthfOES", clearDepthf);
1915         ASSIGN("glDepthRangefOES", depthRangef);
1916     }
1917 }
1918 
initProcsGLES(const gl::Version & version,const std::set<std::string> & extensions)1919 void DispatchTableGL::initProcsGLES(const gl::Version &version,
1920                                     const std::set<std::string> &extensions)
1921 {
1922     if (version >= gl::Version(2, 0))
1923     {
1924         ASSIGN("glActiveTexture", activeTexture);
1925         ASSIGN("glAttachShader", attachShader);
1926         ASSIGN("glBindAttribLocation", bindAttribLocation);
1927         ASSIGN("glBindBuffer", bindBuffer);
1928         ASSIGN("glBindFramebuffer", bindFramebuffer);
1929         ASSIGN("glBindRenderbuffer", bindRenderbuffer);
1930         ASSIGN("glBindTexture", bindTexture);
1931         ASSIGN("glBlendColor", blendColor);
1932         ASSIGN("glBlendEquation", blendEquation);
1933         ASSIGN("glBlendEquationSeparate", blendEquationSeparate);
1934         ASSIGN("glBlendFunc", blendFunc);
1935         ASSIGN("glBlendFuncSeparate", blendFuncSeparate);
1936         ASSIGN("glBufferData", bufferData);
1937         ASSIGN("glBufferSubData", bufferSubData);
1938         ASSIGN("glCheckFramebufferStatus", checkFramebufferStatus);
1939         ASSIGN("glClear", clear);
1940         ASSIGN("glClearColor", clearColor);
1941         ASSIGN("glClearDepthf", clearDepthf);
1942         ASSIGN("glClearStencil", clearStencil);
1943         ASSIGN("glColorMask", colorMask);
1944         ASSIGN("glCompileShader", compileShader);
1945         ASSIGN("glCompressedTexImage2D", compressedTexImage2D);
1946         ASSIGN("glCompressedTexSubImage2D", compressedTexSubImage2D);
1947         ASSIGN("glCopyTexImage2D", copyTexImage2D);
1948         ASSIGN("glCopyTexSubImage2D", copyTexSubImage2D);
1949         ASSIGN("glCreateProgram", createProgram);
1950         ASSIGN("glCreateShader", createShader);
1951         ASSIGN("glCullFace", cullFace);
1952         ASSIGN("glDeleteBuffers", deleteBuffers);
1953         ASSIGN("glDeleteFramebuffers", deleteFramebuffers);
1954         ASSIGN("glDeleteProgram", deleteProgram);
1955         ASSIGN("glDeleteRenderbuffers", deleteRenderbuffers);
1956         ASSIGN("glDeleteShader", deleteShader);
1957         ASSIGN("glDeleteTextures", deleteTextures);
1958         ASSIGN("glDepthFunc", depthFunc);
1959         ASSIGN("glDepthMask", depthMask);
1960         ASSIGN("glDepthRangef", depthRangef);
1961         ASSIGN("glDetachShader", detachShader);
1962         ASSIGN("glDisable", disable);
1963         ASSIGN("glDisableVertexAttribArray", disableVertexAttribArray);
1964         ASSIGN("glDrawArrays", drawArrays);
1965         ASSIGN("glDrawElements", drawElements);
1966         ASSIGN("glEnable", enable);
1967         ASSIGN("glEnableVertexAttribArray", enableVertexAttribArray);
1968         ASSIGN("glFinish", finish);
1969         ASSIGN("glFlush", flush);
1970         ASSIGN("glFramebufferRenderbuffer", framebufferRenderbuffer);
1971         ASSIGN("glFramebufferTexture2D", framebufferTexture2D);
1972         ASSIGN("glFrontFace", frontFace);
1973         ASSIGN("glGenBuffers", genBuffers);
1974         ASSIGN("glGenFramebuffers", genFramebuffers);
1975         ASSIGN("glGenRenderbuffers", genRenderbuffers);
1976         ASSIGN("glGenTextures", genTextures);
1977         ASSIGN("glGenerateMipmap", generateMipmap);
1978         ASSIGN("glGetActiveAttrib", getActiveAttrib);
1979         ASSIGN("glGetActiveUniform", getActiveUniform);
1980         ASSIGN("glGetAttachedShaders", getAttachedShaders);
1981         ASSIGN("glGetAttribLocation", getAttribLocation);
1982         ASSIGN("glGetBooleanv", getBooleanv);
1983         ASSIGN("glGetBufferParameteriv", getBufferParameteriv);
1984         ASSIGN("glGetError", getError);
1985         ASSIGN("glGetFloatv", getFloatv);
1986         ASSIGN("glGetFramebufferAttachmentParameteriv", getFramebufferAttachmentParameteriv);
1987         ASSIGN("glGetIntegerv", getIntegerv);
1988         ASSIGN("glGetProgramInfoLog", getProgramInfoLog);
1989         ASSIGN("glGetProgramiv", getProgramiv);
1990         ASSIGN("glGetRenderbufferParameteriv", getRenderbufferParameteriv);
1991         ASSIGN("glGetShaderInfoLog", getShaderInfoLog);
1992         ASSIGN("glGetShaderPrecisionFormat", getShaderPrecisionFormat);
1993         ASSIGN("glGetShaderSource", getShaderSource);
1994         ASSIGN("glGetShaderiv", getShaderiv);
1995         ASSIGN("glGetString", getString);
1996         ASSIGN("glGetTexParameterfv", getTexParameterfv);
1997         ASSIGN("glGetTexParameteriv", getTexParameteriv);
1998         ASSIGN("glGetUniformLocation", getUniformLocation);
1999         ASSIGN("glGetUniformfv", getUniformfv);
2000         ASSIGN("glGetUniformiv", getUniformiv);
2001         ASSIGN("glGetVertexAttribPointerv", getVertexAttribPointerv);
2002         ASSIGN("glGetVertexAttribfv", getVertexAttribfv);
2003         ASSIGN("glGetVertexAttribiv", getVertexAttribiv);
2004         ASSIGN("glHint", hint);
2005         ASSIGN("glIsBuffer", isBuffer);
2006         ASSIGN("glIsEnabled", isEnabled);
2007         ASSIGN("glIsFramebuffer", isFramebuffer);
2008         ASSIGN("glIsProgram", isProgram);
2009         ASSIGN("glIsRenderbuffer", isRenderbuffer);
2010         ASSIGN("glIsShader", isShader);
2011         ASSIGN("glIsTexture", isTexture);
2012         ASSIGN("glLineWidth", lineWidth);
2013         ASSIGN("glLinkProgram", linkProgram);
2014         ASSIGN("glPixelStorei", pixelStorei);
2015         ASSIGN("glPolygonOffset", polygonOffset);
2016         ASSIGN("glReadPixels", readPixels);
2017         ASSIGN("glReleaseShaderCompiler", releaseShaderCompiler);
2018         ASSIGN("glRenderbufferStorage", renderbufferStorage);
2019         ASSIGN("glSampleCoverage", sampleCoverage);
2020         ASSIGN("glScissor", scissor);
2021         ASSIGN("glShaderBinary", shaderBinary);
2022         ASSIGN("glShaderSource", shaderSource);
2023         ASSIGN("glStencilFunc", stencilFunc);
2024         ASSIGN("glStencilFuncSeparate", stencilFuncSeparate);
2025         ASSIGN("glStencilMask", stencilMask);
2026         ASSIGN("glStencilMaskSeparate", stencilMaskSeparate);
2027         ASSIGN("glStencilOp", stencilOp);
2028         ASSIGN("glStencilOpSeparate", stencilOpSeparate);
2029         ASSIGN("glTexImage2D", texImage2D);
2030         ASSIGN("glTexParameterf", texParameterf);
2031         ASSIGN("glTexParameterfv", texParameterfv);
2032         ASSIGN("glTexParameteri", texParameteri);
2033         ASSIGN("glTexParameteriv", texParameteriv);
2034         ASSIGN("glTexSubImage2D", texSubImage2D);
2035         ASSIGN("glUniform1f", uniform1f);
2036         ASSIGN("glUniform1fv", uniform1fv);
2037         ASSIGN("glUniform1i", uniform1i);
2038         ASSIGN("glUniform1iv", uniform1iv);
2039         ASSIGN("glUniform2f", uniform2f);
2040         ASSIGN("glUniform2fv", uniform2fv);
2041         ASSIGN("glUniform2i", uniform2i);
2042         ASSIGN("glUniform2iv", uniform2iv);
2043         ASSIGN("glUniform3f", uniform3f);
2044         ASSIGN("glUniform3fv", uniform3fv);
2045         ASSIGN("glUniform3i", uniform3i);
2046         ASSIGN("glUniform3iv", uniform3iv);
2047         ASSIGN("glUniform4f", uniform4f);
2048         ASSIGN("glUniform4fv", uniform4fv);
2049         ASSIGN("glUniform4i", uniform4i);
2050         ASSIGN("glUniform4iv", uniform4iv);
2051         ASSIGN("glUniformMatrix2fv", uniformMatrix2fv);
2052         ASSIGN("glUniformMatrix3fv", uniformMatrix3fv);
2053         ASSIGN("glUniformMatrix4fv", uniformMatrix4fv);
2054         ASSIGN("glUseProgram", useProgram);
2055         ASSIGN("glValidateProgram", validateProgram);
2056         ASSIGN("glVertexAttrib1f", vertexAttrib1f);
2057         ASSIGN("glVertexAttrib1fv", vertexAttrib1fv);
2058         ASSIGN("glVertexAttrib2f", vertexAttrib2f);
2059         ASSIGN("glVertexAttrib2fv", vertexAttrib2fv);
2060         ASSIGN("glVertexAttrib3f", vertexAttrib3f);
2061         ASSIGN("glVertexAttrib3fv", vertexAttrib3fv);
2062         ASSIGN("glVertexAttrib4f", vertexAttrib4f);
2063         ASSIGN("glVertexAttrib4fv", vertexAttrib4fv);
2064         ASSIGN("glVertexAttribPointer", vertexAttribPointer);
2065         ASSIGN("glViewport", viewport);
2066     }
2067 
2068     if (version >= gl::Version(3, 0))
2069     {
2070         ASSIGN("glBeginQuery", beginQuery);
2071         ASSIGN("glBeginTransformFeedback", beginTransformFeedback);
2072         ASSIGN("glBindBufferBase", bindBufferBase);
2073         ASSIGN("glBindBufferRange", bindBufferRange);
2074         ASSIGN("glBindSampler", bindSampler);
2075         ASSIGN("glBindTransformFeedback", bindTransformFeedback);
2076         ASSIGN("glBindVertexArray", bindVertexArray);
2077         ASSIGN("glBlitFramebuffer", blitFramebuffer);
2078         ASSIGN("glClearBufferfi", clearBufferfi);
2079         ASSIGN("glClearBufferfv", clearBufferfv);
2080         ASSIGN("glClearBufferiv", clearBufferiv);
2081         ASSIGN("glClearBufferuiv", clearBufferuiv);
2082         ASSIGN("glClientWaitSync", clientWaitSync);
2083         ASSIGN("glCompressedTexImage3D", compressedTexImage3D);
2084         ASSIGN("glCompressedTexSubImage3D", compressedTexSubImage3D);
2085         ASSIGN("glCopyBufferSubData", copyBufferSubData);
2086         ASSIGN("glCopyTexSubImage3D", copyTexSubImage3D);
2087         ASSIGN("glDeleteQueries", deleteQueries);
2088         ASSIGN("glDeleteSamplers", deleteSamplers);
2089         ASSIGN("glDeleteSync", deleteSync);
2090         ASSIGN("glDeleteTransformFeedbacks", deleteTransformFeedbacks);
2091         ASSIGN("glDeleteVertexArrays", deleteVertexArrays);
2092         ASSIGN("glDrawArraysInstanced", drawArraysInstanced);
2093         ASSIGN("glDrawBuffers", drawBuffers);
2094         ASSIGN("glDrawElementsInstanced", drawElementsInstanced);
2095         ASSIGN("glDrawRangeElements", drawRangeElements);
2096         ASSIGN("glEndQuery", endQuery);
2097         ASSIGN("glEndTransformFeedback", endTransformFeedback);
2098         ASSIGN("glFenceSync", fenceSync);
2099         ASSIGN("glFlushMappedBufferRange", flushMappedBufferRange);
2100         ASSIGN("glFramebufferTextureLayer", framebufferTextureLayer);
2101         ASSIGN("glGenQueries", genQueries);
2102         ASSIGN("glGenSamplers", genSamplers);
2103         ASSIGN("glGenTransformFeedbacks", genTransformFeedbacks);
2104         ASSIGN("glGenVertexArrays", genVertexArrays);
2105         ASSIGN("glGetActiveUniformBlockName", getActiveUniformBlockName);
2106         ASSIGN("glGetActiveUniformBlockiv", getActiveUniformBlockiv);
2107         ASSIGN("glGetActiveUniformsiv", getActiveUniformsiv);
2108         ASSIGN("glGetBufferParameteri64v", getBufferParameteri64v);
2109         ASSIGN("glGetBufferPointerv", getBufferPointerv);
2110         ASSIGN("glGetFragDataLocation", getFragDataLocation);
2111         ASSIGN("glGetInteger64i_v", getInteger64i_v);
2112         ASSIGN("glGetInteger64v", getInteger64v);
2113         ASSIGN("glGetIntegeri_v", getIntegeri_v);
2114         ASSIGN("glGetInternalformativ", getInternalformativ);
2115         ASSIGN("glGetProgramBinary", getProgramBinary);
2116         ASSIGN("glGetQueryObjectuiv", getQueryObjectuiv);
2117         ASSIGN("glGetQueryiv", getQueryiv);
2118         ASSIGN("glGetSamplerParameterfv", getSamplerParameterfv);
2119         ASSIGN("glGetSamplerParameteriv", getSamplerParameteriv);
2120         ASSIGN("glGetStringi", getStringi);
2121         ASSIGN("glGetSynciv", getSynciv);
2122         ASSIGN("glGetTransformFeedbackVarying", getTransformFeedbackVarying);
2123         ASSIGN("glGetUniformBlockIndex", getUniformBlockIndex);
2124         ASSIGN("glGetUniformIndices", getUniformIndices);
2125         ASSIGN("glGetUniformuiv", getUniformuiv);
2126         ASSIGN("glGetVertexAttribIiv", getVertexAttribIiv);
2127         ASSIGN("glGetVertexAttribIuiv", getVertexAttribIuiv);
2128         ASSIGN("glInvalidateFramebuffer", invalidateFramebuffer);
2129         ASSIGN("glInvalidateSubFramebuffer", invalidateSubFramebuffer);
2130         ASSIGN("glIsQuery", isQuery);
2131         ASSIGN("glIsSampler", isSampler);
2132         ASSIGN("glIsSync", isSync);
2133         ASSIGN("glIsTransformFeedback", isTransformFeedback);
2134         ASSIGN("glIsVertexArray", isVertexArray);
2135         ASSIGN("glMapBufferRange", mapBufferRange);
2136         ASSIGN("glPauseTransformFeedback", pauseTransformFeedback);
2137         ASSIGN("glProgramBinary", programBinary);
2138         ASSIGN("glProgramParameteri", programParameteri);
2139         ASSIGN("glReadBuffer", readBuffer);
2140         ASSIGN("glRenderbufferStorageMultisample", renderbufferStorageMultisample);
2141         ASSIGN("glResumeTransformFeedback", resumeTransformFeedback);
2142         ASSIGN("glSamplerParameterf", samplerParameterf);
2143         ASSIGN("glSamplerParameterfv", samplerParameterfv);
2144         ASSIGN("glSamplerParameteri", samplerParameteri);
2145         ASSIGN("glSamplerParameteriv", samplerParameteriv);
2146         ASSIGN("glTexImage3D", texImage3D);
2147         ASSIGN("glTexStorage2D", texStorage2D);
2148         ASSIGN("glTexStorage3D", texStorage3D);
2149         ASSIGN("glTexSubImage3D", texSubImage3D);
2150         ASSIGN("glTransformFeedbackVaryings", transformFeedbackVaryings);
2151         ASSIGN("glUniform1ui", uniform1ui);
2152         ASSIGN("glUniform1uiv", uniform1uiv);
2153         ASSIGN("glUniform2ui", uniform2ui);
2154         ASSIGN("glUniform2uiv", uniform2uiv);
2155         ASSIGN("glUniform3ui", uniform3ui);
2156         ASSIGN("glUniform3uiv", uniform3uiv);
2157         ASSIGN("glUniform4ui", uniform4ui);
2158         ASSIGN("glUniform4uiv", uniform4uiv);
2159         ASSIGN("glUniformBlockBinding", uniformBlockBinding);
2160         ASSIGN("glUniformMatrix2x3fv", uniformMatrix2x3fv);
2161         ASSIGN("glUniformMatrix2x4fv", uniformMatrix2x4fv);
2162         ASSIGN("glUniformMatrix3x2fv", uniformMatrix3x2fv);
2163         ASSIGN("glUniformMatrix3x4fv", uniformMatrix3x4fv);
2164         ASSIGN("glUniformMatrix4x2fv", uniformMatrix4x2fv);
2165         ASSIGN("glUniformMatrix4x3fv", uniformMatrix4x3fv);
2166         ASSIGN("glUnmapBuffer", unmapBuffer);
2167         ASSIGN("glVertexAttribDivisor", vertexAttribDivisor);
2168         ASSIGN("glVertexAttribI4i", vertexAttribI4i);
2169         ASSIGN("glVertexAttribI4iv", vertexAttribI4iv);
2170         ASSIGN("glVertexAttribI4ui", vertexAttribI4ui);
2171         ASSIGN("glVertexAttribI4uiv", vertexAttribI4uiv);
2172         ASSIGN("glVertexAttribIPointer", vertexAttribIPointer);
2173         ASSIGN("glWaitSync", waitSync);
2174     }
2175 
2176     if (version >= gl::Version(3, 1))
2177     {
2178         ASSIGN("glActiveShaderProgram", activeShaderProgram);
2179         ASSIGN("glBindImageTexture", bindImageTexture);
2180         ASSIGN("glBindProgramPipeline", bindProgramPipeline);
2181         ASSIGN("glBindVertexBuffer", bindVertexBuffer);
2182         ASSIGN("glCreateShaderProgramv", createShaderProgramv);
2183         ASSIGN("glDeleteProgramPipelines", deleteProgramPipelines);
2184         ASSIGN("glDispatchCompute", dispatchCompute);
2185         ASSIGN("glDispatchComputeIndirect", dispatchComputeIndirect);
2186         ASSIGN("glDrawArraysIndirect", drawArraysIndirect);
2187         ASSIGN("glDrawElementsIndirect", drawElementsIndirect);
2188         ASSIGN("glFramebufferParameteri", framebufferParameteri);
2189         ASSIGN("glGenProgramPipelines", genProgramPipelines);
2190         ASSIGN("glGetBooleani_v", getBooleani_v);
2191         ASSIGN("glGetFramebufferParameteriv", getFramebufferParameteriv);
2192         ASSIGN("glGetMultisamplefv", getMultisamplefv);
2193         ASSIGN("glGetProgramInterfaceiv", getProgramInterfaceiv);
2194         ASSIGN("glGetProgramPipelineInfoLog", getProgramPipelineInfoLog);
2195         ASSIGN("glGetProgramPipelineiv", getProgramPipelineiv);
2196         ASSIGN("glGetProgramResourceIndex", getProgramResourceIndex);
2197         ASSIGN("glGetProgramResourceLocation", getProgramResourceLocation);
2198         ASSIGN("glGetProgramResourceName", getProgramResourceName);
2199         ASSIGN("glGetProgramResourceiv", getProgramResourceiv);
2200         ASSIGN("glGetTexLevelParameterfv", getTexLevelParameterfv);
2201         ASSIGN("glGetTexLevelParameteriv", getTexLevelParameteriv);
2202         ASSIGN("glIsProgramPipeline", isProgramPipeline);
2203         ASSIGN("glMemoryBarrier", memoryBarrier);
2204         ASSIGN("glMemoryBarrierByRegion", memoryBarrierByRegion);
2205         ASSIGN("glProgramUniform1f", programUniform1f);
2206         ASSIGN("glProgramUniform1fv", programUniform1fv);
2207         ASSIGN("glProgramUniform1i", programUniform1i);
2208         ASSIGN("glProgramUniform1iv", programUniform1iv);
2209         ASSIGN("glProgramUniform1ui", programUniform1ui);
2210         ASSIGN("glProgramUniform1uiv", programUniform1uiv);
2211         ASSIGN("glProgramUniform2f", programUniform2f);
2212         ASSIGN("glProgramUniform2fv", programUniform2fv);
2213         ASSIGN("glProgramUniform2i", programUniform2i);
2214         ASSIGN("glProgramUniform2iv", programUniform2iv);
2215         ASSIGN("glProgramUniform2ui", programUniform2ui);
2216         ASSIGN("glProgramUniform2uiv", programUniform2uiv);
2217         ASSIGN("glProgramUniform3f", programUniform3f);
2218         ASSIGN("glProgramUniform3fv", programUniform3fv);
2219         ASSIGN("glProgramUniform3i", programUniform3i);
2220         ASSIGN("glProgramUniform3iv", programUniform3iv);
2221         ASSIGN("glProgramUniform3ui", programUniform3ui);
2222         ASSIGN("glProgramUniform3uiv", programUniform3uiv);
2223         ASSIGN("glProgramUniform4f", programUniform4f);
2224         ASSIGN("glProgramUniform4fv", programUniform4fv);
2225         ASSIGN("glProgramUniform4i", programUniform4i);
2226         ASSIGN("glProgramUniform4iv", programUniform4iv);
2227         ASSIGN("glProgramUniform4ui", programUniform4ui);
2228         ASSIGN("glProgramUniform4uiv", programUniform4uiv);
2229         ASSIGN("glProgramUniformMatrix2fv", programUniformMatrix2fv);
2230         ASSIGN("glProgramUniformMatrix2x3fv", programUniformMatrix2x3fv);
2231         ASSIGN("glProgramUniformMatrix2x4fv", programUniformMatrix2x4fv);
2232         ASSIGN("glProgramUniformMatrix3fv", programUniformMatrix3fv);
2233         ASSIGN("glProgramUniformMatrix3x2fv", programUniformMatrix3x2fv);
2234         ASSIGN("glProgramUniformMatrix3x4fv", programUniformMatrix3x4fv);
2235         ASSIGN("glProgramUniformMatrix4fv", programUniformMatrix4fv);
2236         ASSIGN("glProgramUniformMatrix4x2fv", programUniformMatrix4x2fv);
2237         ASSIGN("glProgramUniformMatrix4x3fv", programUniformMatrix4x3fv);
2238         ASSIGN("glSampleMaski", sampleMaski);
2239         ASSIGN("glTexStorage2DMultisample", texStorage2DMultisample);
2240         ASSIGN("glUseProgramStages", useProgramStages);
2241         ASSIGN("glValidateProgramPipeline", validateProgramPipeline);
2242         ASSIGN("glVertexAttribBinding", vertexAttribBinding);
2243         ASSIGN("glVertexAttribFormat", vertexAttribFormat);
2244         ASSIGN("glVertexAttribIFormat", vertexAttribIFormat);
2245         ASSIGN("glVertexBindingDivisor", vertexBindingDivisor);
2246     }
2247 
2248     if (version >= gl::Version(3, 2))
2249     {
2250         ASSIGN("glBlendBarrier", blendBarrier);
2251         ASSIGN("glBlendEquationSeparatei", blendEquationSeparatei);
2252         ASSIGN("glBlendEquationi", blendEquationi);
2253         ASSIGN("glBlendFuncSeparatei", blendFuncSeparatei);
2254         ASSIGN("glBlendFunci", blendFunci);
2255         ASSIGN("glColorMaski", colorMaski);
2256         ASSIGN("glCopyImageSubData", copyImageSubData);
2257         ASSIGN("glDebugMessageCallback", debugMessageCallback);
2258         ASSIGN("glDebugMessageControl", debugMessageControl);
2259         ASSIGN("glDebugMessageInsert", debugMessageInsert);
2260         ASSIGN("glDisablei", disablei);
2261         ASSIGN("glDrawElementsBaseVertex", drawElementsBaseVertex);
2262         ASSIGN("glDrawElementsInstancedBaseVertex", drawElementsInstancedBaseVertex);
2263         ASSIGN("glDrawRangeElementsBaseVertex", drawRangeElementsBaseVertex);
2264         ASSIGN("glEnablei", enablei);
2265         ASSIGN("glFramebufferTexture", framebufferTexture);
2266         ASSIGN("glGetDebugMessageLog", getDebugMessageLog);
2267         ASSIGN("glGetGraphicsResetStatus", getGraphicsResetStatus);
2268         ASSIGN("glGetObjectLabel", getObjectLabel);
2269         ASSIGN("glGetObjectPtrLabel", getObjectPtrLabel);
2270         ASSIGN("glGetPointerv", getPointerv);
2271         ASSIGN("glGetSamplerParameterIiv", getSamplerParameterIiv);
2272         ASSIGN("glGetSamplerParameterIuiv", getSamplerParameterIuiv);
2273         ASSIGN("glGetTexParameterIiv", getTexParameterIiv);
2274         ASSIGN("glGetTexParameterIuiv", getTexParameterIuiv);
2275         ASSIGN("glGetnUniformfv", getnUniformfv);
2276         ASSIGN("glGetnUniformiv", getnUniformiv);
2277         ASSIGN("glGetnUniformuiv", getnUniformuiv);
2278         ASSIGN("glIsEnabledi", isEnabledi);
2279         ASSIGN("glMinSampleShading", minSampleShading);
2280         ASSIGN("glObjectLabel", objectLabel);
2281         ASSIGN("glObjectPtrLabel", objectPtrLabel);
2282         ASSIGN("glPatchParameteri", patchParameteri);
2283         ASSIGN("glPopDebugGroup", popDebugGroup);
2284         ASSIGN("glPrimitiveBoundingBox", primitiveBoundingBox);
2285         ASSIGN("glPushDebugGroup", pushDebugGroup);
2286         ASSIGN("glReadnPixels", readnPixels);
2287         ASSIGN("glSamplerParameterIiv", samplerParameterIiv);
2288         ASSIGN("glSamplerParameterIuiv", samplerParameterIuiv);
2289         ASSIGN("glTexBuffer", texBuffer);
2290         ASSIGN("glTexBufferRange", texBufferRange);
2291         ASSIGN("glTexParameterIiv", texParameterIiv);
2292         ASSIGN("glTexParameterIuiv", texParameterIuiv);
2293         ASSIGN("glTexStorage3DMultisample", texStorage3DMultisample);
2294     }
2295 
2296     if (extensions.count("GL_EXT_base_instance") != 0)
2297     {
2298         ASSIGN("glDrawArraysInstancedBaseInstanceEXT", drawArraysInstancedBaseInstance);
2299         ASSIGN("glDrawElementsInstancedBaseInstanceEXT", drawElementsInstancedBaseInstance);
2300         ASSIGN("glDrawElementsInstancedBaseVertexBaseInstanceEXT",
2301                drawElementsInstancedBaseVertexBaseInstance);
2302     }
2303 
2304     if (extensions.count("GL_EXT_blend_func_extended") != 0)
2305     {
2306         ASSIGN("glBindFragDataLocationEXT", bindFragDataLocation);
2307         ASSIGN("glBindFragDataLocationIndexedEXT", bindFragDataLocationIndexed);
2308         ASSIGN("glGetFragDataIndexEXT", getFragDataIndex);
2309         ASSIGN("glGetProgramResourceLocationIndexEXT", getProgramResourceLocationIndex);
2310     }
2311 
2312     if (extensions.count("GL_EXT_buffer_storage") != 0)
2313     {
2314         ASSIGN("glBufferStorageEXT", bufferStorage);
2315     }
2316 
2317     if (extensions.count("GL_EXT_clear_texture") != 0)
2318     {
2319         ASSIGN("glClearTexImageEXT", clearTexImage);
2320         ASSIGN("glClearTexSubImageEXT", clearTexSubImage);
2321     }
2322 
2323     if (extensions.count("GL_EXT_clip_control") != 0)
2324     {
2325         ASSIGN("glClipControlEXT", clipControl);
2326     }
2327 
2328     if (extensions.count("GL_EXT_copy_image") != 0)
2329     {
2330         ASSIGN("glCopyImageSubDataEXT", copyImageSubData);
2331     }
2332 
2333     if (extensions.count("GL_EXT_discard_framebuffer") != 0)
2334     {
2335         ASSIGN("glDiscardFramebufferEXT", discardFramebufferEXT);
2336     }
2337 
2338     if (extensions.count("GL_EXT_disjoint_timer_query") != 0)
2339     {
2340         ASSIGN("glBeginQueryEXT", beginQuery);
2341         ASSIGN("glDeleteQueriesEXT", deleteQueries);
2342         ASSIGN("glEndQueryEXT", endQuery);
2343         ASSIGN("glGenQueriesEXT", genQueries);
2344         ASSIGN("glGetQueryObjecti64vEXT", getQueryObjecti64v);
2345         ASSIGN("glGetQueryObjectivEXT", getQueryObjectiv);
2346         ASSIGN("glGetQueryObjectui64vEXT", getQueryObjectui64v);
2347         ASSIGN("glGetQueryObjectuivEXT", getQueryObjectuiv);
2348         ASSIGN("glGetQueryivEXT", getQueryiv);
2349         ASSIGN("glIsQueryEXT", isQuery);
2350         ASSIGN("glQueryCounterEXT", queryCounter);
2351     }
2352 
2353     if (extensions.count("GL_EXT_draw_buffers") != 0)
2354     {
2355         ASSIGN("glDrawBuffersEXT", drawBuffers);
2356     }
2357 
2358     if (extensions.count("GL_EXT_draw_buffers_indexed") != 0)
2359     {
2360         ASSIGN("glBlendEquationSeparateiEXT", blendEquationSeparatei);
2361         ASSIGN("glBlendEquationiEXT", blendEquationi);
2362         ASSIGN("glBlendFuncSeparateiEXT", blendFuncSeparatei);
2363         ASSIGN("glBlendFunciEXT", blendFunci);
2364         ASSIGN("glColorMaskiEXT", colorMaski);
2365         ASSIGN("glDisableiEXT", disablei);
2366         ASSIGN("glEnableiEXT", enablei);
2367         ASSIGN("glIsEnablediEXT", isEnabledi);
2368     }
2369 
2370     if (extensions.count("GL_EXT_draw_elements_base_vertex") != 0)
2371     {
2372         ASSIGN("glDrawElementsBaseVertexEXT", drawElementsBaseVertex);
2373         ASSIGN("glDrawElementsInstancedBaseVertexEXT", drawElementsInstancedBaseVertex);
2374         ASSIGN("glDrawRangeElementsBaseVertexEXT", drawRangeElementsBaseVertex);
2375         ASSIGN("glMultiDrawElementsBaseVertexEXT", multiDrawElementsBaseVertex);
2376     }
2377 
2378     if (extensions.count("GL_EXT_draw_transform_feedback") != 0)
2379     {
2380         ASSIGN("glDrawTransformFeedbackEXT", drawTransformFeedback);
2381         ASSIGN("glDrawTransformFeedbackInstancedEXT", drawTransformFeedbackInstanced);
2382     }
2383 
2384     if (extensions.count("GL_EXT_geometry_shader") != 0)
2385     {
2386         ASSIGN("glFramebufferTextureEXT", framebufferTexture);
2387     }
2388 
2389     if (extensions.count("GL_EXT_instanced_arrays") != 0)
2390     {
2391         ASSIGN("glVertexAttribDivisorEXT", vertexAttribDivisor);
2392     }
2393 
2394     if (extensions.count("GL_EXT_map_buffer_range") != 0)
2395     {
2396         ASSIGN("glFlushMappedBufferRangeEXT", flushMappedBufferRange);
2397         ASSIGN("glMapBufferRangeEXT", mapBufferRange);
2398     }
2399 
2400     if (extensions.count("GL_EXT_multi_draw_indirect") != 0)
2401     {
2402         ASSIGN("glMultiDrawArraysIndirectEXT", multiDrawArraysIndirect);
2403         ASSIGN("glMultiDrawElementsIndirectEXT", multiDrawElementsIndirect);
2404     }
2405 
2406     if (extensions.count("GL_EXT_multisampled_render_to_texture") != 0)
2407     {
2408         ASSIGN("glRenderbufferStorageMultisampleEXT", renderbufferStorageMultisample);
2409     }
2410 
2411     if (extensions.count("GL_EXT_multiview_draw_buffers") != 0)
2412     {
2413         ASSIGN("glGetIntegeri_vEXT", getIntegeri_v);
2414     }
2415 
2416     if (extensions.count("GL_EXT_occlusion_query_boolean") != 0)
2417     {
2418         ASSIGN("glBeginQueryEXT", beginQuery);
2419         ASSIGN("glDeleteQueriesEXT", deleteQueries);
2420         ASSIGN("glEndQueryEXT", endQuery);
2421         ASSIGN("glGenQueriesEXT", genQueries);
2422         ASSIGN("glGetQueryObjectuivEXT", getQueryObjectuiv);
2423         ASSIGN("glGetQueryivEXT", getQueryiv);
2424         ASSIGN("glIsQueryEXT", isQuery);
2425     }
2426 
2427     if (extensions.count("GL_EXT_primitive_bounding_box") != 0)
2428     {
2429         ASSIGN("glPrimitiveBoundingBoxEXT", primitiveBoundingBox);
2430     }
2431 
2432     if (extensions.count("GL_EXT_robustness") != 0)
2433     {
2434         ASSIGN("glGetGraphicsResetStatusEXT", getGraphicsResetStatus);
2435         ASSIGN("glGetnUniformfvEXT", getnUniformfv);
2436         ASSIGN("glGetnUniformivEXT", getnUniformiv);
2437         ASSIGN("glReadnPixelsEXT", readnPixels);
2438     }
2439 
2440     if (extensions.count("GL_EXT_tessellation_shader") != 0)
2441     {
2442         ASSIGN("glPatchParameteriEXT", patchParameteri);
2443     }
2444 
2445     if (extensions.count("GL_EXT_texture_border_clamp") != 0)
2446     {
2447         ASSIGN("glGetSamplerParameterIivEXT", getSamplerParameterIiv);
2448         ASSIGN("glGetSamplerParameterIuivEXT", getSamplerParameterIuiv);
2449         ASSIGN("glGetTexParameterIivEXT", getTexParameterIiv);
2450         ASSIGN("glGetTexParameterIuivEXT", getTexParameterIuiv);
2451         ASSIGN("glSamplerParameterIivEXT", samplerParameterIiv);
2452         ASSIGN("glSamplerParameterIuivEXT", samplerParameterIuiv);
2453         ASSIGN("glTexParameterIivEXT", texParameterIiv);
2454         ASSIGN("glTexParameterIuivEXT", texParameterIuiv);
2455     }
2456 
2457     if (extensions.count("GL_EXT_texture_buffer") != 0)
2458     {
2459         ASSIGN("glTexBufferEXT", texBuffer);
2460         ASSIGN("glTexBufferRangeEXT", texBufferRange);
2461     }
2462 
2463     if (extensions.count("GL_EXT_texture_storage") != 0)
2464     {
2465         ASSIGN("glTexStorage1DEXT", texStorage1D);
2466         ASSIGN("glTexStorage2DEXT", texStorage2D);
2467         ASSIGN("glTexStorage3DEXT", texStorage3D);
2468         ASSIGN("glTextureStorage1DEXT", textureStorage1D);
2469         ASSIGN("glTextureStorage2DEXT", textureStorage2D);
2470         ASSIGN("glTextureStorage3DEXT", textureStorage3D);
2471     }
2472 
2473     if (extensions.count("GL_EXT_texture_view") != 0)
2474     {
2475         ASSIGN("glTextureViewEXT", textureView);
2476     }
2477 
2478     if (extensions.count("GL_KHR_debug") != 0)
2479     {
2480         ASSIGN("glDebugMessageCallbackKHR", debugMessageCallback);
2481         ASSIGN("glDebugMessageControlKHR", debugMessageControl);
2482         ASSIGN("glDebugMessageInsertKHR", debugMessageInsert);
2483         ASSIGN("glGetDebugMessageLogKHR", getDebugMessageLog);
2484         ASSIGN("glGetObjectLabelKHR", getObjectLabel);
2485         ASSIGN("glGetObjectPtrLabelKHR", getObjectPtrLabel);
2486         ASSIGN("glGetPointervKHR", getPointerv);
2487         ASSIGN("glObjectLabelKHR", objectLabel);
2488         ASSIGN("glObjectPtrLabelKHR", objectPtrLabel);
2489         ASSIGN("glPopDebugGroupKHR", popDebugGroup);
2490         ASSIGN("glPushDebugGroupKHR", pushDebugGroup);
2491     }
2492 
2493     if (extensions.count("GL_KHR_robustness") != 0)
2494     {
2495         ASSIGN("glGetGraphicsResetStatusKHR", getGraphicsResetStatus);
2496         ASSIGN("glGetnUniformfvKHR", getnUniformfv);
2497         ASSIGN("glGetnUniformivKHR", getnUniformiv);
2498         ASSIGN("glGetnUniformuivKHR", getnUniformuiv);
2499         ASSIGN("glReadnPixelsKHR", readnPixels);
2500     }
2501 
2502     if (extensions.count("GL_OES_EGL_image") != 0)
2503     {
2504         ASSIGN("glEGLImageTargetRenderbufferStorageOES", eGLImageTargetRenderbufferStorageOES);
2505         ASSIGN("glEGLImageTargetTexture2DOES", eGLImageTargetTexture2DOES);
2506     }
2507 
2508     if (extensions.count("GL_OES_copy_image") != 0)
2509     {
2510         ASSIGN("glCopyImageSubDataOES", copyImageSubData);
2511     }
2512 
2513     if (extensions.count("GL_OES_draw_buffers_indexed") != 0)
2514     {
2515         ASSIGN("glBlendEquationSeparateiOES", blendEquationSeparatei);
2516         ASSIGN("glBlendEquationiOES", blendEquationi);
2517         ASSIGN("glBlendFuncSeparateiOES", blendFuncSeparatei);
2518         ASSIGN("glBlendFunciOES", blendFunci);
2519         ASSIGN("glColorMaskiOES", colorMaski);
2520         ASSIGN("glDisableiOES", disablei);
2521         ASSIGN("glEnableiOES", enablei);
2522         ASSIGN("glIsEnablediOES", isEnabledi);
2523     }
2524 
2525     if (extensions.count("GL_OES_draw_elements_base_vertex") != 0)
2526     {
2527         ASSIGN("glDrawElementsBaseVertexOES", drawElementsBaseVertex);
2528         ASSIGN("glDrawElementsInstancedBaseVertexOES", drawElementsInstancedBaseVertex);
2529         ASSIGN("glDrawRangeElementsBaseVertexOES", drawRangeElementsBaseVertex);
2530         ASSIGN("glMultiDrawElementsBaseVertexEXT", multiDrawElementsBaseVertex);
2531     }
2532 
2533     if (extensions.count("GL_OES_geometry_shader") != 0)
2534     {
2535         ASSIGN("glFramebufferTextureOES", framebufferTexture);
2536     }
2537 
2538     if (extensions.count("GL_OES_get_program_binary") != 0)
2539     {
2540         ASSIGN("glGetProgramBinaryOES", getProgramBinary);
2541         ASSIGN("glProgramBinaryOES", programBinary);
2542     }
2543 
2544     if (extensions.count("GL_OES_mapbuffer") != 0)
2545     {
2546         ASSIGN("glGetBufferPointervOES", getBufferPointerv);
2547         ASSIGN("glMapBufferOES", mapBuffer);
2548         ASSIGN("glUnmapBufferOES", unmapBuffer);
2549     }
2550 
2551     if (extensions.count("GL_OES_primitive_bounding_box") != 0)
2552     {
2553         ASSIGN("glPrimitiveBoundingBoxOES", primitiveBoundingBox);
2554     }
2555 
2556     if (extensions.count("GL_OES_sample_shading") != 0)
2557     {
2558         ASSIGN("glMinSampleShadingOES", minSampleShading);
2559     }
2560 
2561     if (extensions.count("GL_OES_tessellation_shader") != 0)
2562     {
2563         ASSIGN("glPatchParameteriOES", patchParameteri);
2564     }
2565 
2566     if (extensions.count("GL_OES_texture_3D") != 0)
2567     {
2568         ASSIGN("glCompressedTexImage3DOES", compressedTexImage3D);
2569         ASSIGN("glCompressedTexSubImage3DOES", compressedTexSubImage3D);
2570         ASSIGN("glCopyTexSubImage3DOES", copyTexSubImage3D);
2571         ASSIGN("glFramebufferTexture3DOES", framebufferTexture3D);
2572         ASSIGN("glTexImage3DOES", texImage3D);
2573         ASSIGN("glTexSubImage3DOES", texSubImage3D);
2574     }
2575 
2576     if (extensions.count("GL_OES_texture_border_clamp") != 0)
2577     {
2578         ASSIGN("glGetSamplerParameterIivOES", getSamplerParameterIiv);
2579         ASSIGN("glGetSamplerParameterIuivOES", getSamplerParameterIuiv);
2580         ASSIGN("glGetTexParameterIivOES", getTexParameterIiv);
2581         ASSIGN("glGetTexParameterIuivOES", getTexParameterIuiv);
2582         ASSIGN("glSamplerParameterIivOES", samplerParameterIiv);
2583         ASSIGN("glSamplerParameterIuivOES", samplerParameterIuiv);
2584         ASSIGN("glTexParameterIivOES", texParameterIiv);
2585         ASSIGN("glTexParameterIuivOES", texParameterIuiv);
2586     }
2587 
2588     if (extensions.count("GL_OES_texture_buffer") != 0)
2589     {
2590         ASSIGN("glTexBufferOES", texBuffer);
2591         ASSIGN("glTexBufferRangeOES", texBufferRange);
2592     }
2593 
2594     if (extensions.count("GL_OES_texture_storage_multisample_2d_array") != 0)
2595     {
2596         ASSIGN("glTexStorage3DMultisampleOES", texStorage3DMultisample);
2597     }
2598 
2599     if (extensions.count("GL_OES_texture_view") != 0)
2600     {
2601         ASSIGN("glTextureViewOES", textureView);
2602     }
2603 
2604     if (extensions.count("GL_OES_vertex_array_object") != 0)
2605     {
2606         ASSIGN("glBindVertexArrayOES", bindVertexArray);
2607         ASSIGN("glDeleteVertexArraysOES", deleteVertexArrays);
2608         ASSIGN("glGenVertexArraysOES", genVertexArrays);
2609         ASSIGN("glIsVertexArrayOES", isVertexArray);
2610     }
2611 
2612     if (extensions.count("GL_OES_viewport_array") != 0)
2613     {
2614         ASSIGN("glDisableiOES", disablei);
2615         ASSIGN("glEnableiOES", enablei);
2616         ASSIGN("glGetFloati_vOES", getFloati_v);
2617         ASSIGN("glIsEnablediOES", isEnabledi);
2618         ASSIGN("glScissorArrayvOES", scissorArrayv);
2619         ASSIGN("glScissorIndexedOES", scissorIndexed);
2620         ASSIGN("glScissorIndexedvOES", scissorIndexedv);
2621         ASSIGN("glViewportArrayvOES", viewportArrayv);
2622         ASSIGN("glViewportIndexedfOES", viewportIndexedf);
2623         ASSIGN("glViewportIndexedfvOES", viewportIndexedfv);
2624     }
2625 }
2626 
initProcsSharedExtensions(const std::set<std::string> & extensions)2627 void DispatchTableGL::initProcsSharedExtensions(const std::set<std::string> &extensions)
2628 {
2629     if (extensions.count("GL_EXT_blend_minmax") != 0)
2630     {
2631         ASSIGN("glBlendEquationEXT", blendEquation);
2632     }
2633 
2634     if (extensions.count("GL_EXT_debug_label") != 0)
2635     {
2636         ASSIGN("glGetObjectLabelEXT", getObjectLabel);
2637     }
2638 
2639     if (extensions.count("GL_EXT_debug_marker") != 0)
2640     {
2641         ASSIGN("glInsertEventMarkerEXT", insertEventMarkerEXT);
2642         ASSIGN("glPopGroupMarkerEXT", popGroupMarkerEXT);
2643         ASSIGN("glPushGroupMarkerEXT", pushGroupMarkerEXT);
2644     }
2645 
2646     if (extensions.count("GL_EXT_draw_instanced") != 0)
2647     {
2648         ASSIGN("glDrawArraysInstancedEXT", drawArraysInstanced);
2649         ASSIGN("glDrawElementsInstancedEXT", drawElementsInstanced);
2650     }
2651 
2652     if (extensions.count("GL_EXT_memory_object") != 0)
2653     {
2654         ASSIGN("glBufferStorageMemEXT", bufferStorageMemEXT);
2655         ASSIGN("glCreateMemoryObjectsEXT", createMemoryObjectsEXT);
2656         ASSIGN("glDeleteMemoryObjectsEXT", deleteMemoryObjectsEXT);
2657         ASSIGN("glGetMemoryObjectParameterivEXT", getMemoryObjectParameterivEXT);
2658         ASSIGN("glGetUnsignedBytei_vEXT", getUnsignedBytei_vEXT);
2659         ASSIGN("glGetUnsignedBytevEXT", getUnsignedBytevEXT);
2660         ASSIGN("glIsMemoryObjectEXT", isMemoryObjectEXT);
2661         ASSIGN("glMemoryObjectParameterivEXT", memoryObjectParameterivEXT);
2662         ASSIGN("glNamedBufferStorageMemEXT", namedBufferStorageMemEXT);
2663         ASSIGN("glTexStorageMem2DEXT", texStorageMem2DEXT);
2664         ASSIGN("glTexStorageMem2DMultisampleEXT", texStorageMem2DMultisampleEXT);
2665         ASSIGN("glTexStorageMem3DEXT", texStorageMem3DEXT);
2666         ASSIGN("glTexStorageMem3DMultisampleEXT", texStorageMem3DMultisampleEXT);
2667         ASSIGN("glTextureStorageMem2DEXT", textureStorageMem2DEXT);
2668         ASSIGN("glTextureStorageMem2DMultisampleEXT", textureStorageMem2DMultisampleEXT);
2669         ASSIGN("glTextureStorageMem3DEXT", textureStorageMem3DEXT);
2670         ASSIGN("glTextureStorageMem3DMultisampleEXT", textureStorageMem3DMultisampleEXT);
2671     }
2672 
2673     if (extensions.count("GL_EXT_memory_object_fd") != 0)
2674     {
2675         ASSIGN("glImportMemoryFdEXT", importMemoryFdEXT);
2676     }
2677 
2678     if (extensions.count("GL_EXT_memory_object_win32") != 0)
2679     {
2680         ASSIGN("glImportMemoryWin32HandleEXT", importMemoryWin32HandleEXT);
2681         ASSIGN("glImportMemoryWin32NameEXT", importMemoryWin32NameEXT);
2682     }
2683 
2684     if (extensions.count("GL_EXT_multi_draw_arrays") != 0)
2685     {
2686         ASSIGN("glMultiDrawArraysEXT", multiDrawArrays);
2687         ASSIGN("glMultiDrawElementsEXT", multiDrawElements);
2688     }
2689 
2690     if (extensions.count("GL_EXT_semaphore") != 0)
2691     {
2692         ASSIGN("glDeleteSemaphoresEXT", deleteSemaphoresEXT);
2693         ASSIGN("glGenSemaphoresEXT", genSemaphoresEXT);
2694         ASSIGN("glGetSemaphoreParameterui64vEXT", getSemaphoreParameterui64vEXT);
2695         ASSIGN("glGetUnsignedBytei_vEXT", getUnsignedBytei_vEXT);
2696         ASSIGN("glGetUnsignedBytevEXT", getUnsignedBytevEXT);
2697         ASSIGN("glIsSemaphoreEXT", isSemaphoreEXT);
2698         ASSIGN("glSemaphoreParameterui64vEXT", semaphoreParameterui64vEXT);
2699         ASSIGN("glSignalSemaphoreEXT", signalSemaphoreEXT);
2700         ASSIGN("glWaitSemaphoreEXT", waitSemaphoreEXT);
2701     }
2702 
2703     if (extensions.count("GL_EXT_semaphore_fd") != 0)
2704     {
2705         ASSIGN("glImportSemaphoreFdEXT", importSemaphoreFdEXT);
2706     }
2707 
2708     if (extensions.count("GL_EXT_semaphore_win32") != 0)
2709     {
2710         ASSIGN("glImportSemaphoreWin32HandleEXT", importSemaphoreWin32HandleEXT);
2711         ASSIGN("glImportSemaphoreWin32NameEXT", importSemaphoreWin32NameEXT);
2712     }
2713 
2714     if (extensions.count("GL_EXT_separate_shader_objects") != 0)
2715     {
2716         ASSIGN("glActiveShaderProgramEXT", activeShaderProgram);
2717         ASSIGN("glBindProgramPipelineEXT", bindProgramPipeline);
2718         ASSIGN("glCreateShaderProgramvEXT", createShaderProgramv);
2719         ASSIGN("glDeleteProgramPipelinesEXT", deleteProgramPipelines);
2720         ASSIGN("glGenProgramPipelinesEXT", genProgramPipelines);
2721         ASSIGN("glGetProgramPipelineInfoLogEXT", getProgramPipelineInfoLog);
2722         ASSIGN("glGetProgramPipelineivEXT", getProgramPipelineiv);
2723         ASSIGN("glIsProgramPipelineEXT", isProgramPipeline);
2724         ASSIGN("glProgramParameteriEXT", programParameteri);
2725         ASSIGN("glProgramUniform1fEXT", programUniform1f);
2726         ASSIGN("glProgramUniform1fvEXT", programUniform1fv);
2727         ASSIGN("glProgramUniform1iEXT", programUniform1i);
2728         ASSIGN("glProgramUniform1ivEXT", programUniform1iv);
2729         ASSIGN("glProgramUniform1uiEXT", programUniform1ui);
2730         ASSIGN("glProgramUniform1uivEXT", programUniform1uiv);
2731         ASSIGN("glProgramUniform2fEXT", programUniform2f);
2732         ASSIGN("glProgramUniform2fvEXT", programUniform2fv);
2733         ASSIGN("glProgramUniform2iEXT", programUniform2i);
2734         ASSIGN("glProgramUniform2ivEXT", programUniform2iv);
2735         ASSIGN("glProgramUniform2uiEXT", programUniform2ui);
2736         ASSIGN("glProgramUniform2uivEXT", programUniform2uiv);
2737         ASSIGN("glProgramUniform3fEXT", programUniform3f);
2738         ASSIGN("glProgramUniform3fvEXT", programUniform3fv);
2739         ASSIGN("glProgramUniform3iEXT", programUniform3i);
2740         ASSIGN("glProgramUniform3ivEXT", programUniform3iv);
2741         ASSIGN("glProgramUniform3uiEXT", programUniform3ui);
2742         ASSIGN("glProgramUniform3uivEXT", programUniform3uiv);
2743         ASSIGN("glProgramUniform4fEXT", programUniform4f);
2744         ASSIGN("glProgramUniform4fvEXT", programUniform4fv);
2745         ASSIGN("glProgramUniform4iEXT", programUniform4i);
2746         ASSIGN("glProgramUniform4ivEXT", programUniform4iv);
2747         ASSIGN("glProgramUniform4uiEXT", programUniform4ui);
2748         ASSIGN("glProgramUniform4uivEXT", programUniform4uiv);
2749         ASSIGN("glProgramUniformMatrix2fvEXT", programUniformMatrix2fv);
2750         ASSIGN("glProgramUniformMatrix2x3fvEXT", programUniformMatrix2x3fv);
2751         ASSIGN("glProgramUniformMatrix2x4fvEXT", programUniformMatrix2x4fv);
2752         ASSIGN("glProgramUniformMatrix3fvEXT", programUniformMatrix3fv);
2753         ASSIGN("glProgramUniformMatrix3x2fvEXT", programUniformMatrix3x2fv);
2754         ASSIGN("glProgramUniformMatrix3x4fvEXT", programUniformMatrix3x4fv);
2755         ASSIGN("glProgramUniformMatrix4fvEXT", programUniformMatrix4fv);
2756         ASSIGN("glProgramUniformMatrix4fvEXT", programUniformMatrix4fv);
2757         ASSIGN("glProgramUniformMatrix4x2fvEXT", programUniformMatrix4x2fv);
2758         ASSIGN("glProgramUniformMatrix4x3fvEXT", programUniformMatrix4x3fv);
2759         ASSIGN("glUseProgramStagesEXT", useProgramStages);
2760         ASSIGN("glValidateProgramPipelineEXT", validateProgramPipeline);
2761     }
2762 
2763     if (extensions.count("GL_KHR_parallel_shader_compile") != 0)
2764     {
2765         ASSIGN("glMaxShaderCompilerThreadsKHR", maxShaderCompilerThreadsKHR);
2766     }
2767 
2768     if (extensions.count("GL_NV_fence") != 0)
2769     {
2770         ASSIGN("glDeleteFencesNV", deleteFencesNV);
2771         ASSIGN("glFinishFenceNV", finishFenceNV);
2772         ASSIGN("glGenFencesNV", genFencesNV);
2773         ASSIGN("glGetFenceivNV", getFenceivNV);
2774         ASSIGN("glIsFenceNV", isFenceNV);
2775         ASSIGN("glSetFenceNV", setFenceNV);
2776         ASSIGN("glTestFenceNV", testFenceNV);
2777     }
2778 
2779     if (extensions.count("GL_NV_framebuffer_mixed_samples") != 0)
2780     {
2781         ASSIGN("glCoverageModulationNV", coverageModulationNV);
2782     }
2783 
2784     if (extensions.count("GL_NV_internalformat_sample_query") != 0)
2785     {
2786         ASSIGN("glGetInternalformatSampleivNV", getInternalformatSampleivNV);
2787     }
2788 
2789     if (extensions.count("GL_NV_path_rendering") != 0)
2790     {
2791         ASSIGN("glCoverFillPathInstancedNV", coverFillPathInstancedNV);
2792         ASSIGN("glCoverFillPathNV", coverFillPathNV);
2793         ASSIGN("glCoverStrokePathInstancedNV", coverStrokePathInstancedNV);
2794         ASSIGN("glCoverStrokePathNV", coverStrokePathNV);
2795         ASSIGN("glDeletePathsNV", deletePathsNV);
2796         ASSIGN("glGenPathsNV", genPathsNV);
2797         ASSIGN("glGetPathParameterfvNV", getPathParameterfvNV);
2798         ASSIGN("glGetPathParameterivNV", getPathParameterivNV);
2799         ASSIGN("glIsPathNV", isPathNV);
2800         ASSIGN("glMatrixLoadfEXT", matrixLoadfEXT);
2801         ASSIGN("glPathCommandsNV", pathCommandsNV);
2802         ASSIGN("glPathParameterfNV", pathParameterfNV);
2803         ASSIGN("glPathParameteriNV", pathParameteriNV);
2804         ASSIGN("glPathStencilFuncNV", pathStencilFuncNV);
2805         ASSIGN("glProgramPathFragmentInputGenNV", programPathFragmentInputGenNV);
2806         ASSIGN("glStencilFillPathInstancedNV", stencilFillPathInstancedNV);
2807         ASSIGN("glStencilFillPathNV", stencilFillPathNV);
2808         ASSIGN("glStencilStrokePathInstancedNV", stencilStrokePathInstancedNV);
2809         ASSIGN("glStencilStrokePathNV", stencilStrokePathNV);
2810         ASSIGN("glStencilThenCoverFillPathInstancedNV", stencilThenCoverFillPathInstancedNV);
2811         ASSIGN("glStencilThenCoverFillPathNV", stencilThenCoverFillPathNV);
2812         ASSIGN("glStencilThenCoverStrokePathInstancedNV", stencilThenCoverStrokePathInstancedNV);
2813         ASSIGN("glStencilThenCoverStrokePathNV", stencilThenCoverStrokePathNV);
2814     }
2815 
2816     if (extensions.count("GL_OVR_multiview") != 0)
2817     {
2818         ASSIGN("glFramebufferTextureMultiviewOVR", framebufferTextureMultiviewOVR);
2819     }
2820 }
2821 
2822 #if defined(ANGLE_ENABLE_OPENGL_NULL)
initProcsDesktopGLNULL(const gl::Version & version,const std::set<std::string> & extensions)2823 void DispatchTableGL::initProcsDesktopGLNULL(const gl::Version &version,
2824                                              const std::set<std::string> &extensions)
2825 {
2826     if (version >= gl::Version(1, 0))
2827     {
2828         blendFunc              = &glBlendFuncNULL;
2829         clear                  = &glClearNULL;
2830         clearColor             = &glClearColorNULL;
2831         clearDepth             = &glClearDepthNULL;
2832         clearStencil           = &glClearStencilNULL;
2833         colorMask              = &glColorMaskNULL;
2834         cullFace               = &glCullFaceNULL;
2835         depthFunc              = &glDepthFuncNULL;
2836         depthMask              = &glDepthMaskNULL;
2837         depthRange             = &glDepthRangeNULL;
2838         disable                = &glDisableNULL;
2839         drawBuffer             = &glDrawBufferNULL;
2840         enable                 = &glEnableNULL;
2841         finish                 = &glFinishNULL;
2842         flush                  = &glFlushNULL;
2843         frontFace              = &glFrontFaceNULL;
2844         getBooleanv            = &glGetBooleanvNULL;
2845         getDoublev             = &glGetDoublevNULL;
2846         getError               = &glGetErrorNULL;
2847         getFloatv              = &glGetFloatvNULL;
2848         getIntegerv            = &glGetIntegervNULL;
2849         getString              = &glGetStringNULL;
2850         getTexImage            = &glGetTexImageNULL;
2851         getTexLevelParameterfv = &glGetTexLevelParameterfvNULL;
2852         getTexLevelParameteriv = &glGetTexLevelParameterivNULL;
2853         getTexParameterfv      = &glGetTexParameterfvNULL;
2854         getTexParameteriv      = &glGetTexParameterivNULL;
2855         hint                   = &glHintNULL;
2856         isEnabled              = &glIsEnabledNULL;
2857         lineWidth              = &glLineWidthNULL;
2858         logicOp                = &glLogicOpNULL;
2859         pixelStoref            = &glPixelStorefNULL;
2860         pixelStorei            = &glPixelStoreiNULL;
2861         pointSize              = &glPointSizeNULL;
2862         polygonMode            = &glPolygonModeNULL;
2863         readBuffer             = &glReadBufferNULL;
2864         readPixels             = &glReadPixelsNULL;
2865         scissor                = &glScissorNULL;
2866         stencilFunc            = &glStencilFuncNULL;
2867         stencilMask            = &glStencilMaskNULL;
2868         stencilOp              = &glStencilOpNULL;
2869         texImage1D             = &glTexImage1DNULL;
2870         texImage2D             = &glTexImage2DNULL;
2871         texParameterf          = &glTexParameterfNULL;
2872         texParameterfv         = &glTexParameterfvNULL;
2873         texParameteri          = &glTexParameteriNULL;
2874         texParameteriv         = &glTexParameterivNULL;
2875         viewport               = &glViewportNULL;
2876     }
2877 
2878     if (version >= gl::Version(1, 1))
2879     {
2880         bindTexture       = &glBindTextureNULL;
2881         copyTexImage1D    = &glCopyTexImage1DNULL;
2882         copyTexImage2D    = &glCopyTexImage2DNULL;
2883         copyTexSubImage1D = &glCopyTexSubImage1DNULL;
2884         copyTexSubImage2D = &glCopyTexSubImage2DNULL;
2885         deleteTextures    = &glDeleteTexturesNULL;
2886         drawArrays        = &glDrawArraysNULL;
2887         drawElements      = &glDrawElementsNULL;
2888         genTextures       = &glGenTexturesNULL;
2889         isTexture         = &glIsTextureNULL;
2890         polygonOffset     = &glPolygonOffsetNULL;
2891         texSubImage1D     = &glTexSubImage1DNULL;
2892         texSubImage2D     = &glTexSubImage2DNULL;
2893     }
2894 
2895     if (version >= gl::Version(1, 2))
2896     {
2897         copyTexSubImage3D = &glCopyTexSubImage3DNULL;
2898         drawRangeElements = &glDrawRangeElementsNULL;
2899         texImage3D        = &glTexImage3DNULL;
2900         texSubImage3D     = &glTexSubImage3DNULL;
2901     }
2902 
2903     if (version >= gl::Version(1, 3))
2904     {
2905         activeTexture           = &glActiveTextureNULL;
2906         compressedTexImage1D    = &glCompressedTexImage1DNULL;
2907         compressedTexImage2D    = &glCompressedTexImage2DNULL;
2908         compressedTexImage3D    = &glCompressedTexImage3DNULL;
2909         compressedTexSubImage1D = &glCompressedTexSubImage1DNULL;
2910         compressedTexSubImage2D = &glCompressedTexSubImage2DNULL;
2911         compressedTexSubImage3D = &glCompressedTexSubImage3DNULL;
2912         getCompressedTexImage   = &glGetCompressedTexImageNULL;
2913         sampleCoverage          = &glSampleCoverageNULL;
2914     }
2915 
2916     if (version >= gl::Version(1, 4))
2917     {
2918         blendColor        = &glBlendColorNULL;
2919         blendEquation     = &glBlendEquationNULL;
2920         blendFuncSeparate = &glBlendFuncSeparateNULL;
2921         multiDrawArrays   = &glMultiDrawArraysNULL;
2922         multiDrawElements = &glMultiDrawElementsNULL;
2923         pointParameterf   = &glPointParameterfNULL;
2924         pointParameterfv  = &glPointParameterfvNULL;
2925         pointParameteri   = &glPointParameteriNULL;
2926         pointParameteriv  = &glPointParameterivNULL;
2927     }
2928 
2929     if (version >= gl::Version(1, 5))
2930     {
2931         beginQuery           = &glBeginQueryNULL;
2932         bindBuffer           = &glBindBufferNULL;
2933         bufferData           = &glBufferDataNULL;
2934         bufferSubData        = &glBufferSubDataNULL;
2935         deleteBuffers        = &glDeleteBuffersNULL;
2936         deleteQueries        = &glDeleteQueriesNULL;
2937         endQuery             = &glEndQueryNULL;
2938         genBuffers           = &glGenBuffersNULL;
2939         genQueries           = &glGenQueriesNULL;
2940         getBufferParameteriv = &glGetBufferParameterivNULL;
2941         getBufferPointerv    = &glGetBufferPointervNULL;
2942         getBufferSubData     = &glGetBufferSubDataNULL;
2943         getQueryObjectiv     = &glGetQueryObjectivNULL;
2944         getQueryObjectuiv    = &glGetQueryObjectuivNULL;
2945         getQueryiv           = &glGetQueryivNULL;
2946         isBuffer             = &glIsBufferNULL;
2947         isQuery              = &glIsQueryNULL;
2948         mapBuffer            = &glMapBufferNULL;
2949         unmapBuffer          = &glUnmapBufferNULL;
2950     }
2951 
2952     if (version >= gl::Version(2, 0))
2953     {
2954         attachShader             = &glAttachShaderNULL;
2955         bindAttribLocation       = &glBindAttribLocationNULL;
2956         blendEquationSeparate    = &glBlendEquationSeparateNULL;
2957         compileShader            = &glCompileShaderNULL;
2958         createProgram            = &glCreateProgramNULL;
2959         createShader             = &glCreateShaderNULL;
2960         deleteProgram            = &glDeleteProgramNULL;
2961         deleteShader             = &glDeleteShaderNULL;
2962         detachShader             = &glDetachShaderNULL;
2963         disableVertexAttribArray = &glDisableVertexAttribArrayNULL;
2964         drawBuffers              = &glDrawBuffersNULL;
2965         enableVertexAttribArray  = &glEnableVertexAttribArrayNULL;
2966         getActiveAttrib          = &glGetActiveAttribNULL;
2967         getActiveUniform         = &glGetActiveUniformNULL;
2968         getAttachedShaders       = &glGetAttachedShadersNULL;
2969         getAttribLocation        = &glGetAttribLocationNULL;
2970         getProgramInfoLog        = &glGetProgramInfoLogNULL;
2971         getProgramiv             = &glGetProgramivNULL;
2972         getShaderInfoLog         = &glGetShaderInfoLogNULL;
2973         getShaderSource          = &glGetShaderSourceNULL;
2974         getShaderiv              = &glGetShaderivNULL;
2975         getUniformLocation       = &glGetUniformLocationNULL;
2976         getUniformfv             = &glGetUniformfvNULL;
2977         getUniformiv             = &glGetUniformivNULL;
2978         getVertexAttribPointerv  = &glGetVertexAttribPointervNULL;
2979         getVertexAttribdv        = &glGetVertexAttribdvNULL;
2980         getVertexAttribfv        = &glGetVertexAttribfvNULL;
2981         getVertexAttribiv        = &glGetVertexAttribivNULL;
2982         isProgram                = &glIsProgramNULL;
2983         isShader                 = &glIsShaderNULL;
2984         linkProgram              = &glLinkProgramNULL;
2985         shaderSource             = &glShaderSourceNULL;
2986         stencilFuncSeparate      = &glStencilFuncSeparateNULL;
2987         stencilMaskSeparate      = &glStencilMaskSeparateNULL;
2988         stencilOpSeparate        = &glStencilOpSeparateNULL;
2989         uniform1f                = &glUniform1fNULL;
2990         uniform1fv               = &glUniform1fvNULL;
2991         uniform1i                = &glUniform1iNULL;
2992         uniform1iv               = &glUniform1ivNULL;
2993         uniform2f                = &glUniform2fNULL;
2994         uniform2fv               = &glUniform2fvNULL;
2995         uniform2i                = &glUniform2iNULL;
2996         uniform2iv               = &glUniform2ivNULL;
2997         uniform3f                = &glUniform3fNULL;
2998         uniform3fv               = &glUniform3fvNULL;
2999         uniform3i                = &glUniform3iNULL;
3000         uniform3iv               = &glUniform3ivNULL;
3001         uniform4f                = &glUniform4fNULL;
3002         uniform4fv               = &glUniform4fvNULL;
3003         uniform4i                = &glUniform4iNULL;
3004         uniform4iv               = &glUniform4ivNULL;
3005         uniformMatrix2fv         = &glUniformMatrix2fvNULL;
3006         uniformMatrix3fv         = &glUniformMatrix3fvNULL;
3007         uniformMatrix4fv         = &glUniformMatrix4fvNULL;
3008         useProgram               = &glUseProgramNULL;
3009         validateProgram          = &glValidateProgramNULL;
3010         vertexAttrib1d           = &glVertexAttrib1dNULL;
3011         vertexAttrib1dv          = &glVertexAttrib1dvNULL;
3012         vertexAttrib1f           = &glVertexAttrib1fNULL;
3013         vertexAttrib1fv          = &glVertexAttrib1fvNULL;
3014         vertexAttrib1s           = &glVertexAttrib1sNULL;
3015         vertexAttrib1sv          = &glVertexAttrib1svNULL;
3016         vertexAttrib2d           = &glVertexAttrib2dNULL;
3017         vertexAttrib2dv          = &glVertexAttrib2dvNULL;
3018         vertexAttrib2f           = &glVertexAttrib2fNULL;
3019         vertexAttrib2fv          = &glVertexAttrib2fvNULL;
3020         vertexAttrib2s           = &glVertexAttrib2sNULL;
3021         vertexAttrib2sv          = &glVertexAttrib2svNULL;
3022         vertexAttrib3d           = &glVertexAttrib3dNULL;
3023         vertexAttrib3dv          = &glVertexAttrib3dvNULL;
3024         vertexAttrib3f           = &glVertexAttrib3fNULL;
3025         vertexAttrib3fv          = &glVertexAttrib3fvNULL;
3026         vertexAttrib3s           = &glVertexAttrib3sNULL;
3027         vertexAttrib3sv          = &glVertexAttrib3svNULL;
3028         vertexAttrib4Nbv         = &glVertexAttrib4NbvNULL;
3029         vertexAttrib4Niv         = &glVertexAttrib4NivNULL;
3030         vertexAttrib4Nsv         = &glVertexAttrib4NsvNULL;
3031         vertexAttrib4Nub         = &glVertexAttrib4NubNULL;
3032         vertexAttrib4Nubv        = &glVertexAttrib4NubvNULL;
3033         vertexAttrib4Nuiv        = &glVertexAttrib4NuivNULL;
3034         vertexAttrib4Nusv        = &glVertexAttrib4NusvNULL;
3035         vertexAttrib4bv          = &glVertexAttrib4bvNULL;
3036         vertexAttrib4d           = &glVertexAttrib4dNULL;
3037         vertexAttrib4dv          = &glVertexAttrib4dvNULL;
3038         vertexAttrib4f           = &glVertexAttrib4fNULL;
3039         vertexAttrib4fv          = &glVertexAttrib4fvNULL;
3040         vertexAttrib4iv          = &glVertexAttrib4ivNULL;
3041         vertexAttrib4s           = &glVertexAttrib4sNULL;
3042         vertexAttrib4sv          = &glVertexAttrib4svNULL;
3043         vertexAttrib4ubv         = &glVertexAttrib4ubvNULL;
3044         vertexAttrib4uiv         = &glVertexAttrib4uivNULL;
3045         vertexAttrib4usv         = &glVertexAttrib4usvNULL;
3046         vertexAttribPointer      = &glVertexAttribPointerNULL;
3047     }
3048 
3049     if (version >= gl::Version(2, 1))
3050     {
3051         uniformMatrix2x3fv = &glUniformMatrix2x3fvNULL;
3052         uniformMatrix2x4fv = &glUniformMatrix2x4fvNULL;
3053         uniformMatrix3x2fv = &glUniformMatrix3x2fvNULL;
3054         uniformMatrix3x4fv = &glUniformMatrix3x4fvNULL;
3055         uniformMatrix4x2fv = &glUniformMatrix4x2fvNULL;
3056         uniformMatrix4x3fv = &glUniformMatrix4x3fvNULL;
3057     }
3058 
3059     if (version >= gl::Version(3, 0))
3060     {
3061         beginConditionalRender              = &glBeginConditionalRenderNULL;
3062         beginTransformFeedback              = &glBeginTransformFeedbackNULL;
3063         bindBufferBase                      = &glBindBufferBaseNULL;
3064         bindBufferRange                     = &glBindBufferRangeNULL;
3065         bindFragDataLocation                = &glBindFragDataLocationNULL;
3066         bindFramebuffer                     = &glBindFramebufferNULL;
3067         bindRenderbuffer                    = &glBindRenderbufferNULL;
3068         bindVertexArray                     = &glBindVertexArrayNULL;
3069         blitFramebuffer                     = &glBlitFramebufferNULL;
3070         checkFramebufferStatus              = &glCheckFramebufferStatusNULL;
3071         clampColor                          = &glClampColorNULL;
3072         clearBufferfi                       = &glClearBufferfiNULL;
3073         clearBufferfv                       = &glClearBufferfvNULL;
3074         clearBufferiv                       = &glClearBufferivNULL;
3075         clearBufferuiv                      = &glClearBufferuivNULL;
3076         colorMaski                          = &glColorMaskiNULL;
3077         deleteFramebuffers                  = &glDeleteFramebuffersNULL;
3078         deleteRenderbuffers                 = &glDeleteRenderbuffersNULL;
3079         deleteVertexArrays                  = &glDeleteVertexArraysNULL;
3080         disablei                            = &glDisableiNULL;
3081         enablei                             = &glEnableiNULL;
3082         endConditionalRender                = &glEndConditionalRenderNULL;
3083         endTransformFeedback                = &glEndTransformFeedbackNULL;
3084         flushMappedBufferRange              = &glFlushMappedBufferRangeNULL;
3085         framebufferRenderbuffer             = &glFramebufferRenderbufferNULL;
3086         framebufferTexture1D                = &glFramebufferTexture1DNULL;
3087         framebufferTexture2D                = &glFramebufferTexture2DNULL;
3088         framebufferTexture3D                = &glFramebufferTexture3DNULL;
3089         framebufferTextureLayer             = &glFramebufferTextureLayerNULL;
3090         genFramebuffers                     = &glGenFramebuffersNULL;
3091         genRenderbuffers                    = &glGenRenderbuffersNULL;
3092         genVertexArrays                     = &glGenVertexArraysNULL;
3093         generateMipmap                      = &glGenerateMipmapNULL;
3094         getBooleani_v                       = &glGetBooleani_vNULL;
3095         getFragDataLocation                 = &glGetFragDataLocationNULL;
3096         getFramebufferAttachmentParameteriv = &glGetFramebufferAttachmentParameterivNULL;
3097         getIntegeri_v                       = &glGetIntegeri_vNULL;
3098         getRenderbufferParameteriv          = &glGetRenderbufferParameterivNULL;
3099         getStringi                          = &glGetStringiNULL;
3100         getTexParameterIiv                  = &glGetTexParameterIivNULL;
3101         getTexParameterIuiv                 = &glGetTexParameterIuivNULL;
3102         getTransformFeedbackVarying         = &glGetTransformFeedbackVaryingNULL;
3103         getUniformuiv                       = &glGetUniformuivNULL;
3104         getVertexAttribIiv                  = &glGetVertexAttribIivNULL;
3105         getVertexAttribIuiv                 = &glGetVertexAttribIuivNULL;
3106         isEnabledi                          = &glIsEnablediNULL;
3107         isFramebuffer                       = &glIsFramebufferNULL;
3108         isRenderbuffer                      = &glIsRenderbufferNULL;
3109         isVertexArray                       = &glIsVertexArrayNULL;
3110         mapBufferRange                      = &glMapBufferRangeNULL;
3111         renderbufferStorage                 = &glRenderbufferStorageNULL;
3112         renderbufferStorageMultisample      = &glRenderbufferStorageMultisampleNULL;
3113         texParameterIiv                     = &glTexParameterIivNULL;
3114         texParameterIuiv                    = &glTexParameterIuivNULL;
3115         transformFeedbackVaryings           = &glTransformFeedbackVaryingsNULL;
3116         uniform1ui                          = &glUniform1uiNULL;
3117         uniform1uiv                         = &glUniform1uivNULL;
3118         uniform2ui                          = &glUniform2uiNULL;
3119         uniform2uiv                         = &glUniform2uivNULL;
3120         uniform3ui                          = &glUniform3uiNULL;
3121         uniform3uiv                         = &glUniform3uivNULL;
3122         uniform4ui                          = &glUniform4uiNULL;
3123         uniform4uiv                         = &glUniform4uivNULL;
3124         vertexAttribI1i                     = &glVertexAttribI1iNULL;
3125         vertexAttribI1iv                    = &glVertexAttribI1ivNULL;
3126         vertexAttribI1ui                    = &glVertexAttribI1uiNULL;
3127         vertexAttribI1uiv                   = &glVertexAttribI1uivNULL;
3128         vertexAttribI2i                     = &glVertexAttribI2iNULL;
3129         vertexAttribI2iv                    = &glVertexAttribI2ivNULL;
3130         vertexAttribI2ui                    = &glVertexAttribI2uiNULL;
3131         vertexAttribI2uiv                   = &glVertexAttribI2uivNULL;
3132         vertexAttribI3i                     = &glVertexAttribI3iNULL;
3133         vertexAttribI3iv                    = &glVertexAttribI3ivNULL;
3134         vertexAttribI3ui                    = &glVertexAttribI3uiNULL;
3135         vertexAttribI3uiv                   = &glVertexAttribI3uivNULL;
3136         vertexAttribI4bv                    = &glVertexAttribI4bvNULL;
3137         vertexAttribI4i                     = &glVertexAttribI4iNULL;
3138         vertexAttribI4iv                    = &glVertexAttribI4ivNULL;
3139         vertexAttribI4sv                    = &glVertexAttribI4svNULL;
3140         vertexAttribI4ubv                   = &glVertexAttribI4ubvNULL;
3141         vertexAttribI4ui                    = &glVertexAttribI4uiNULL;
3142         vertexAttribI4uiv                   = &glVertexAttribI4uivNULL;
3143         vertexAttribI4usv                   = &glVertexAttribI4usvNULL;
3144         vertexAttribIPointer                = &glVertexAttribIPointerNULL;
3145     }
3146 
3147     if (version >= gl::Version(3, 1))
3148     {
3149         copyBufferSubData         = &glCopyBufferSubDataNULL;
3150         drawArraysInstanced       = &glDrawArraysInstancedNULL;
3151         drawElementsInstanced     = &glDrawElementsInstancedNULL;
3152         getActiveUniformBlockName = &glGetActiveUniformBlockNameNULL;
3153         getActiveUniformBlockiv   = &glGetActiveUniformBlockivNULL;
3154         getActiveUniformName      = &glGetActiveUniformNameNULL;
3155         getActiveUniformsiv       = &glGetActiveUniformsivNULL;
3156         getUniformBlockIndex      = &glGetUniformBlockIndexNULL;
3157         getUniformIndices         = &glGetUniformIndicesNULL;
3158         primitiveRestartIndex     = &glPrimitiveRestartIndexNULL;
3159         texBuffer                 = &glTexBufferNULL;
3160         uniformBlockBinding       = &glUniformBlockBindingNULL;
3161     }
3162 
3163     if (version >= gl::Version(3, 2))
3164     {
3165         clientWaitSync                  = &glClientWaitSyncNULL;
3166         deleteSync                      = &glDeleteSyncNULL;
3167         drawElementsBaseVertex          = &glDrawElementsBaseVertexNULL;
3168         drawElementsInstancedBaseVertex = &glDrawElementsInstancedBaseVertexNULL;
3169         drawRangeElementsBaseVertex     = &glDrawRangeElementsBaseVertexNULL;
3170         fenceSync                       = &glFenceSyncNULL;
3171         framebufferTexture              = &glFramebufferTextureNULL;
3172         getBufferParameteri64v          = &glGetBufferParameteri64vNULL;
3173         getInteger64i_v                 = &glGetInteger64i_vNULL;
3174         getInteger64v                   = &glGetInteger64vNULL;
3175         getMultisamplefv                = &glGetMultisamplefvNULL;
3176         getSynciv                       = &glGetSyncivNULL;
3177         isSync                          = &glIsSyncNULL;
3178         multiDrawElementsBaseVertex     = &glMultiDrawElementsBaseVertexNULL;
3179         provokingVertex                 = &glProvokingVertexNULL;
3180         sampleMaski                     = &glSampleMaskiNULL;
3181         texImage2DMultisample           = &glTexImage2DMultisampleNULL;
3182         texImage3DMultisample           = &glTexImage3DMultisampleNULL;
3183         waitSync                        = &glWaitSyncNULL;
3184     }
3185 
3186     if (version >= gl::Version(3, 3))
3187     {
3188         bindFragDataLocationIndexed = &glBindFragDataLocationIndexedNULL;
3189         bindSampler                 = &glBindSamplerNULL;
3190         deleteSamplers              = &glDeleteSamplersNULL;
3191         genSamplers                 = &glGenSamplersNULL;
3192         getFragDataIndex            = &glGetFragDataIndexNULL;
3193         getQueryObjecti64v          = &glGetQueryObjecti64vNULL;
3194         getQueryObjectui64v         = &glGetQueryObjectui64vNULL;
3195         getSamplerParameterIiv      = &glGetSamplerParameterIivNULL;
3196         getSamplerParameterIuiv     = &glGetSamplerParameterIuivNULL;
3197         getSamplerParameterfv       = &glGetSamplerParameterfvNULL;
3198         getSamplerParameteriv       = &glGetSamplerParameterivNULL;
3199         isSampler                   = &glIsSamplerNULL;
3200         queryCounter                = &glQueryCounterNULL;
3201         samplerParameterIiv         = &glSamplerParameterIivNULL;
3202         samplerParameterIuiv        = &glSamplerParameterIuivNULL;
3203         samplerParameterf           = &glSamplerParameterfNULL;
3204         samplerParameterfv          = &glSamplerParameterfvNULL;
3205         samplerParameteri           = &glSamplerParameteriNULL;
3206         samplerParameteriv          = &glSamplerParameterivNULL;
3207         vertexAttribDivisor         = &glVertexAttribDivisorNULL;
3208         vertexAttribP1ui            = &glVertexAttribP1uiNULL;
3209         vertexAttribP1uiv           = &glVertexAttribP1uivNULL;
3210         vertexAttribP2ui            = &glVertexAttribP2uiNULL;
3211         vertexAttribP2uiv           = &glVertexAttribP2uivNULL;
3212         vertexAttribP3ui            = &glVertexAttribP3uiNULL;
3213         vertexAttribP3uiv           = &glVertexAttribP3uivNULL;
3214         vertexAttribP4ui            = &glVertexAttribP4uiNULL;
3215         vertexAttribP4uiv           = &glVertexAttribP4uivNULL;
3216     }
3217 
3218     if (version >= gl::Version(4, 0))
3219     {
3220         beginQueryIndexed              = &glBeginQueryIndexedNULL;
3221         bindTransformFeedback          = &glBindTransformFeedbackNULL;
3222         blendEquationSeparatei         = &glBlendEquationSeparateiNULL;
3223         blendEquationi                 = &glBlendEquationiNULL;
3224         blendFuncSeparatei             = &glBlendFuncSeparateiNULL;
3225         blendFunci                     = &glBlendFunciNULL;
3226         deleteTransformFeedbacks       = &glDeleteTransformFeedbacksNULL;
3227         drawArraysIndirect             = &glDrawArraysIndirectNULL;
3228         drawElementsIndirect           = &glDrawElementsIndirectNULL;
3229         drawTransformFeedback          = &glDrawTransformFeedbackNULL;
3230         drawTransformFeedbackStream    = &glDrawTransformFeedbackStreamNULL;
3231         endQueryIndexed                = &glEndQueryIndexedNULL;
3232         genTransformFeedbacks          = &glGenTransformFeedbacksNULL;
3233         getActiveSubroutineName        = &glGetActiveSubroutineNameNULL;
3234         getActiveSubroutineUniformName = &glGetActiveSubroutineUniformNameNULL;
3235         getActiveSubroutineUniformiv   = &glGetActiveSubroutineUniformivNULL;
3236         getProgramStageiv              = &glGetProgramStageivNULL;
3237         getQueryIndexediv              = &glGetQueryIndexedivNULL;
3238         getSubroutineIndex             = &glGetSubroutineIndexNULL;
3239         getSubroutineUniformLocation   = &glGetSubroutineUniformLocationNULL;
3240         getUniformSubroutineuiv        = &glGetUniformSubroutineuivNULL;
3241         getUniformdv                   = &glGetUniformdvNULL;
3242         isTransformFeedback            = &glIsTransformFeedbackNULL;
3243         minSampleShading               = &glMinSampleShadingNULL;
3244         patchParameterfv               = &glPatchParameterfvNULL;
3245         patchParameteri                = &glPatchParameteriNULL;
3246         pauseTransformFeedback         = &glPauseTransformFeedbackNULL;
3247         resumeTransformFeedback        = &glResumeTransformFeedbackNULL;
3248         uniform1d                      = &glUniform1dNULL;
3249         uniform1dv                     = &glUniform1dvNULL;
3250         uniform2d                      = &glUniform2dNULL;
3251         uniform2dv                     = &glUniform2dvNULL;
3252         uniform3d                      = &glUniform3dNULL;
3253         uniform3dv                     = &glUniform3dvNULL;
3254         uniform4d                      = &glUniform4dNULL;
3255         uniform4dv                     = &glUniform4dvNULL;
3256         uniformMatrix2dv               = &glUniformMatrix2dvNULL;
3257         uniformMatrix2x3dv             = &glUniformMatrix2x3dvNULL;
3258         uniformMatrix2x4dv             = &glUniformMatrix2x4dvNULL;
3259         uniformMatrix3dv               = &glUniformMatrix3dvNULL;
3260         uniformMatrix3x2dv             = &glUniformMatrix3x2dvNULL;
3261         uniformMatrix3x4dv             = &glUniformMatrix3x4dvNULL;
3262         uniformMatrix4dv               = &glUniformMatrix4dvNULL;
3263         uniformMatrix4x2dv             = &glUniformMatrix4x2dvNULL;
3264         uniformMatrix4x3dv             = &glUniformMatrix4x3dvNULL;
3265         uniformSubroutinesuiv          = &glUniformSubroutinesuivNULL;
3266     }
3267 
3268     if (version >= gl::Version(4, 1))
3269     {
3270         activeShaderProgram       = &glActiveShaderProgramNULL;
3271         bindProgramPipeline       = &glBindProgramPipelineNULL;
3272         clearDepthf               = &glClearDepthfNULL;
3273         createShaderProgramv      = &glCreateShaderProgramvNULL;
3274         deleteProgramPipelines    = &glDeleteProgramPipelinesNULL;
3275         depthRangeArrayv          = &glDepthRangeArrayvNULL;
3276         depthRangeIndexed         = &glDepthRangeIndexedNULL;
3277         depthRangef               = &glDepthRangefNULL;
3278         genProgramPipelines       = &glGenProgramPipelinesNULL;
3279         getDoublei_v              = &glGetDoublei_vNULL;
3280         getFloati_v               = &glGetFloati_vNULL;
3281         getProgramBinary          = &glGetProgramBinaryNULL;
3282         getProgramPipelineInfoLog = &glGetProgramPipelineInfoLogNULL;
3283         getProgramPipelineiv      = &glGetProgramPipelineivNULL;
3284         getShaderPrecisionFormat  = &glGetShaderPrecisionFormatNULL;
3285         getVertexAttribLdv        = &glGetVertexAttribLdvNULL;
3286         isProgramPipeline         = &glIsProgramPipelineNULL;
3287         programBinary             = &glProgramBinaryNULL;
3288         programParameteri         = &glProgramParameteriNULL;
3289         programUniform1d          = &glProgramUniform1dNULL;
3290         programUniform1dv         = &glProgramUniform1dvNULL;
3291         programUniform1f          = &glProgramUniform1fNULL;
3292         programUniform1fv         = &glProgramUniform1fvNULL;
3293         programUniform1i          = &glProgramUniform1iNULL;
3294         programUniform1iv         = &glProgramUniform1ivNULL;
3295         programUniform1ui         = &glProgramUniform1uiNULL;
3296         programUniform1uiv        = &glProgramUniform1uivNULL;
3297         programUniform2d          = &glProgramUniform2dNULL;
3298         programUniform2dv         = &glProgramUniform2dvNULL;
3299         programUniform2f          = &glProgramUniform2fNULL;
3300         programUniform2fv         = &glProgramUniform2fvNULL;
3301         programUniform2i          = &glProgramUniform2iNULL;
3302         programUniform2iv         = &glProgramUniform2ivNULL;
3303         programUniform2ui         = &glProgramUniform2uiNULL;
3304         programUniform2uiv        = &glProgramUniform2uivNULL;
3305         programUniform3d          = &glProgramUniform3dNULL;
3306         programUniform3dv         = &glProgramUniform3dvNULL;
3307         programUniform3f          = &glProgramUniform3fNULL;
3308         programUniform3fv         = &glProgramUniform3fvNULL;
3309         programUniform3i          = &glProgramUniform3iNULL;
3310         programUniform3iv         = &glProgramUniform3ivNULL;
3311         programUniform3ui         = &glProgramUniform3uiNULL;
3312         programUniform3uiv        = &glProgramUniform3uivNULL;
3313         programUniform4d          = &glProgramUniform4dNULL;
3314         programUniform4dv         = &glProgramUniform4dvNULL;
3315         programUniform4f          = &glProgramUniform4fNULL;
3316         programUniform4fv         = &glProgramUniform4fvNULL;
3317         programUniform4i          = &glProgramUniform4iNULL;
3318         programUniform4iv         = &glProgramUniform4ivNULL;
3319         programUniform4ui         = &glProgramUniform4uiNULL;
3320         programUniform4uiv        = &glProgramUniform4uivNULL;
3321         programUniformMatrix2dv   = &glProgramUniformMatrix2dvNULL;
3322         programUniformMatrix2fv   = &glProgramUniformMatrix2fvNULL;
3323         programUniformMatrix2x3dv = &glProgramUniformMatrix2x3dvNULL;
3324         programUniformMatrix2x3fv = &glProgramUniformMatrix2x3fvNULL;
3325         programUniformMatrix2x4dv = &glProgramUniformMatrix2x4dvNULL;
3326         programUniformMatrix2x4fv = &glProgramUniformMatrix2x4fvNULL;
3327         programUniformMatrix3dv   = &glProgramUniformMatrix3dvNULL;
3328         programUniformMatrix3fv   = &glProgramUniformMatrix3fvNULL;
3329         programUniformMatrix3x2dv = &glProgramUniformMatrix3x2dvNULL;
3330         programUniformMatrix3x2fv = &glProgramUniformMatrix3x2fvNULL;
3331         programUniformMatrix3x4dv = &glProgramUniformMatrix3x4dvNULL;
3332         programUniformMatrix3x4fv = &glProgramUniformMatrix3x4fvNULL;
3333         programUniformMatrix4dv   = &glProgramUniformMatrix4dvNULL;
3334         programUniformMatrix4fv   = &glProgramUniformMatrix4fvNULL;
3335         programUniformMatrix4x2dv = &glProgramUniformMatrix4x2dvNULL;
3336         programUniformMatrix4x2fv = &glProgramUniformMatrix4x2fvNULL;
3337         programUniformMatrix4x3dv = &glProgramUniformMatrix4x3dvNULL;
3338         programUniformMatrix4x3fv = &glProgramUniformMatrix4x3fvNULL;
3339         releaseShaderCompiler     = &glReleaseShaderCompilerNULL;
3340         scissorArrayv             = &glScissorArrayvNULL;
3341         scissorIndexed            = &glScissorIndexedNULL;
3342         scissorIndexedv           = &glScissorIndexedvNULL;
3343         shaderBinary              = &glShaderBinaryNULL;
3344         useProgramStages          = &glUseProgramStagesNULL;
3345         validateProgramPipeline   = &glValidateProgramPipelineNULL;
3346         vertexAttribL1d           = &glVertexAttribL1dNULL;
3347         vertexAttribL1dv          = &glVertexAttribL1dvNULL;
3348         vertexAttribL2d           = &glVertexAttribL2dNULL;
3349         vertexAttribL2dv          = &glVertexAttribL2dvNULL;
3350         vertexAttribL3d           = &glVertexAttribL3dNULL;
3351         vertexAttribL3dv          = &glVertexAttribL3dvNULL;
3352         vertexAttribL4d           = &glVertexAttribL4dNULL;
3353         vertexAttribL4dv          = &glVertexAttribL4dvNULL;
3354         vertexAttribLPointer      = &glVertexAttribLPointerNULL;
3355         viewportArrayv            = &glViewportArrayvNULL;
3356         viewportIndexedf          = &glViewportIndexedfNULL;
3357         viewportIndexedfv         = &glViewportIndexedfvNULL;
3358     }
3359 
3360     if (version >= gl::Version(4, 2))
3361     {
3362         bindImageTexture                  = &glBindImageTextureNULL;
3363         drawArraysInstancedBaseInstance   = &glDrawArraysInstancedBaseInstanceNULL;
3364         drawElementsInstancedBaseInstance = &glDrawElementsInstancedBaseInstanceNULL;
3365         drawElementsInstancedBaseVertexBaseInstance =
3366             &glDrawElementsInstancedBaseVertexBaseInstanceNULL;
3367         drawTransformFeedbackInstanced       = &glDrawTransformFeedbackInstancedNULL;
3368         drawTransformFeedbackStreamInstanced = &glDrawTransformFeedbackStreamInstancedNULL;
3369         getActiveAtomicCounterBufferiv       = &glGetActiveAtomicCounterBufferivNULL;
3370         getInternalformativ                  = &glGetInternalformativNULL;
3371         memoryBarrier                        = &glMemoryBarrierNULL;
3372         texStorage1D                         = &glTexStorage1DNULL;
3373         texStorage2D                         = &glTexStorage2DNULL;
3374         texStorage3D                         = &glTexStorage3DNULL;
3375     }
3376 
3377     if (version >= gl::Version(4, 3))
3378     {
3379         bindVertexBuffer                = &glBindVertexBufferNULL;
3380         clearBufferData                 = &glClearBufferDataNULL;
3381         clearBufferSubData              = &glClearBufferSubDataNULL;
3382         copyImageSubData                = &glCopyImageSubDataNULL;
3383         debugMessageCallback            = &glDebugMessageCallbackNULL;
3384         debugMessageControl             = &glDebugMessageControlNULL;
3385         debugMessageInsert              = &glDebugMessageInsertNULL;
3386         dispatchCompute                 = &glDispatchComputeNULL;
3387         dispatchComputeIndirect         = &glDispatchComputeIndirectNULL;
3388         framebufferParameteri           = &glFramebufferParameteriNULL;
3389         getDebugMessageLog              = &glGetDebugMessageLogNULL;
3390         getFramebufferParameteriv       = &glGetFramebufferParameterivNULL;
3391         getInternalformati64v           = &glGetInternalformati64vNULL;
3392         getObjectLabel                  = &glGetObjectLabelNULL;
3393         getObjectPtrLabel               = &glGetObjectPtrLabelNULL;
3394         getPointerv                     = &glGetPointervNULL;
3395         getProgramInterfaceiv           = &glGetProgramInterfaceivNULL;
3396         getProgramResourceIndex         = &glGetProgramResourceIndexNULL;
3397         getProgramResourceLocation      = &glGetProgramResourceLocationNULL;
3398         getProgramResourceLocationIndex = &glGetProgramResourceLocationIndexNULL;
3399         getProgramResourceName          = &glGetProgramResourceNameNULL;
3400         getProgramResourceiv            = &glGetProgramResourceivNULL;
3401         invalidateBufferData            = &glInvalidateBufferDataNULL;
3402         invalidateBufferSubData         = &glInvalidateBufferSubDataNULL;
3403         invalidateFramebuffer           = &glInvalidateFramebufferNULL;
3404         invalidateSubFramebuffer        = &glInvalidateSubFramebufferNULL;
3405         invalidateTexImage              = &glInvalidateTexImageNULL;
3406         invalidateTexSubImage           = &glInvalidateTexSubImageNULL;
3407         multiDrawArraysIndirect         = &glMultiDrawArraysIndirectNULL;
3408         multiDrawElementsIndirect       = &glMultiDrawElementsIndirectNULL;
3409         objectLabel                     = &glObjectLabelNULL;
3410         objectPtrLabel                  = &glObjectPtrLabelNULL;
3411         popDebugGroup                   = &glPopDebugGroupNULL;
3412         pushDebugGroup                  = &glPushDebugGroupNULL;
3413         shaderStorageBlockBinding       = &glShaderStorageBlockBindingNULL;
3414         texBufferRange                  = &glTexBufferRangeNULL;
3415         texStorage2DMultisample         = &glTexStorage2DMultisampleNULL;
3416         texStorage3DMultisample         = &glTexStorage3DMultisampleNULL;
3417         textureView                     = &glTextureViewNULL;
3418         vertexAttribBinding             = &glVertexAttribBindingNULL;
3419         vertexAttribFormat              = &glVertexAttribFormatNULL;
3420         vertexAttribIFormat             = &glVertexAttribIFormatNULL;
3421         vertexAttribLFormat             = &glVertexAttribLFormatNULL;
3422         vertexBindingDivisor            = &glVertexBindingDivisorNULL;
3423     }
3424 
3425     if (version >= gl::Version(4, 4))
3426     {
3427         bindBuffersBase   = &glBindBuffersBaseNULL;
3428         bindBuffersRange  = &glBindBuffersRangeNULL;
3429         bindImageTextures = &glBindImageTexturesNULL;
3430         bindSamplers      = &glBindSamplersNULL;
3431         bindTextures      = &glBindTexturesNULL;
3432         bindVertexBuffers = &glBindVertexBuffersNULL;
3433         bufferStorage     = &glBufferStorageNULL;
3434         clearTexImage     = &glClearTexImageNULL;
3435         clearTexSubImage  = &glClearTexSubImageNULL;
3436     }
3437 
3438     if (version >= gl::Version(4, 5))
3439     {
3440         bindTextureUnit                          = &glBindTextureUnitNULL;
3441         blitNamedFramebuffer                     = &glBlitNamedFramebufferNULL;
3442         checkNamedFramebufferStatus              = &glCheckNamedFramebufferStatusNULL;
3443         clearNamedBufferData                     = &glClearNamedBufferDataNULL;
3444         clearNamedBufferSubData                  = &glClearNamedBufferSubDataNULL;
3445         clearNamedFramebufferfi                  = &glClearNamedFramebufferfiNULL;
3446         clearNamedFramebufferfv                  = &glClearNamedFramebufferfvNULL;
3447         clearNamedFramebufferiv                  = &glClearNamedFramebufferivNULL;
3448         clearNamedFramebufferuiv                 = &glClearNamedFramebufferuivNULL;
3449         clipControl                              = &glClipControlNULL;
3450         compressedTextureSubImage1D              = &glCompressedTextureSubImage1DNULL;
3451         compressedTextureSubImage2D              = &glCompressedTextureSubImage2DNULL;
3452         compressedTextureSubImage3D              = &glCompressedTextureSubImage3DNULL;
3453         copyNamedBufferSubData                   = &glCopyNamedBufferSubDataNULL;
3454         copyTextureSubImage1D                    = &glCopyTextureSubImage1DNULL;
3455         copyTextureSubImage2D                    = &glCopyTextureSubImage2DNULL;
3456         copyTextureSubImage3D                    = &glCopyTextureSubImage3DNULL;
3457         createBuffers                            = &glCreateBuffersNULL;
3458         createFramebuffers                       = &glCreateFramebuffersNULL;
3459         createProgramPipelines                   = &glCreateProgramPipelinesNULL;
3460         createQueries                            = &glCreateQueriesNULL;
3461         createRenderbuffers                      = &glCreateRenderbuffersNULL;
3462         createSamplers                           = &glCreateSamplersNULL;
3463         createTextures                           = &glCreateTexturesNULL;
3464         createTransformFeedbacks                 = &glCreateTransformFeedbacksNULL;
3465         createVertexArrays                       = &glCreateVertexArraysNULL;
3466         disableVertexArrayAttrib                 = &glDisableVertexArrayAttribNULL;
3467         enableVertexArrayAttrib                  = &glEnableVertexArrayAttribNULL;
3468         flushMappedNamedBufferRange              = &glFlushMappedNamedBufferRangeNULL;
3469         generateTextureMipmap                    = &glGenerateTextureMipmapNULL;
3470         getCompressedTextureImage                = &glGetCompressedTextureImageNULL;
3471         getCompressedTextureSubImage             = &glGetCompressedTextureSubImageNULL;
3472         getGraphicsResetStatus                   = &glGetGraphicsResetStatusNULL;
3473         getNamedBufferParameteri64v              = &glGetNamedBufferParameteri64vNULL;
3474         getNamedBufferParameteriv                = &glGetNamedBufferParameterivNULL;
3475         getNamedBufferPointerv                   = &glGetNamedBufferPointervNULL;
3476         getNamedBufferSubData                    = &glGetNamedBufferSubDataNULL;
3477         getNamedFramebufferAttachmentParameteriv = &glGetNamedFramebufferAttachmentParameterivNULL;
3478         getNamedFramebufferParameteriv           = &glGetNamedFramebufferParameterivNULL;
3479         getNamedRenderbufferParameteriv          = &glGetNamedRenderbufferParameterivNULL;
3480         getQueryBufferObjecti64v                 = &glGetQueryBufferObjecti64vNULL;
3481         getQueryBufferObjectiv                   = &glGetQueryBufferObjectivNULL;
3482         getQueryBufferObjectui64v                = &glGetQueryBufferObjectui64vNULL;
3483         getQueryBufferObjectuiv                  = &glGetQueryBufferObjectuivNULL;
3484         getTextureImage                          = &glGetTextureImageNULL;
3485         getTextureLevelParameterfv               = &glGetTextureLevelParameterfvNULL;
3486         getTextureLevelParameteriv               = &glGetTextureLevelParameterivNULL;
3487         getTextureParameterIiv                   = &glGetTextureParameterIivNULL;
3488         getTextureParameterIuiv                  = &glGetTextureParameterIuivNULL;
3489         getTextureParameterfv                    = &glGetTextureParameterfvNULL;
3490         getTextureParameteriv                    = &glGetTextureParameterivNULL;
3491         getTextureSubImage                       = &glGetTextureSubImageNULL;
3492         getTransformFeedbacki64_v                = &glGetTransformFeedbacki64_vNULL;
3493         getTransformFeedbacki_v                  = &glGetTransformFeedbacki_vNULL;
3494         getTransformFeedbackiv                   = &glGetTransformFeedbackivNULL;
3495         getVertexArrayIndexed64iv                = &glGetVertexArrayIndexed64ivNULL;
3496         getVertexArrayIndexediv                  = &glGetVertexArrayIndexedivNULL;
3497         getVertexArrayiv                         = &glGetVertexArrayivNULL;
3498         getnCompressedTexImage                   = &glGetnCompressedTexImageNULL;
3499         getnTexImage                             = &glGetnTexImageNULL;
3500         getnUniformdv                            = &glGetnUniformdvNULL;
3501         getnUniformfv                            = &glGetnUniformfvNULL;
3502         getnUniformiv                            = &glGetnUniformivNULL;
3503         getnUniformuiv                           = &glGetnUniformuivNULL;
3504         invalidateNamedFramebufferData           = &glInvalidateNamedFramebufferDataNULL;
3505         invalidateNamedFramebufferSubData        = &glInvalidateNamedFramebufferSubDataNULL;
3506         mapNamedBuffer                           = &glMapNamedBufferNULL;
3507         mapNamedBufferRange                      = &glMapNamedBufferRangeNULL;
3508         memoryBarrierByRegion                    = &glMemoryBarrierByRegionNULL;
3509         namedBufferData                          = &glNamedBufferDataNULL;
3510         namedBufferStorage                       = &glNamedBufferStorageNULL;
3511         namedBufferSubData                       = &glNamedBufferSubDataNULL;
3512         namedFramebufferDrawBuffer               = &glNamedFramebufferDrawBufferNULL;
3513         namedFramebufferDrawBuffers              = &glNamedFramebufferDrawBuffersNULL;
3514         namedFramebufferParameteri               = &glNamedFramebufferParameteriNULL;
3515         namedFramebufferReadBuffer               = &glNamedFramebufferReadBufferNULL;
3516         namedFramebufferRenderbuffer             = &glNamedFramebufferRenderbufferNULL;
3517         namedFramebufferTexture                  = &glNamedFramebufferTextureNULL;
3518         namedFramebufferTextureLayer             = &glNamedFramebufferTextureLayerNULL;
3519         namedRenderbufferStorage                 = &glNamedRenderbufferStorageNULL;
3520         namedRenderbufferStorageMultisample      = &glNamedRenderbufferStorageMultisampleNULL;
3521         readnPixels                              = &glReadnPixelsNULL;
3522         textureBarrier                           = &glTextureBarrierNULL;
3523         textureBuffer                            = &glTextureBufferNULL;
3524         textureBufferRange                       = &glTextureBufferRangeNULL;
3525         textureParameterIiv                      = &glTextureParameterIivNULL;
3526         textureParameterIuiv                     = &glTextureParameterIuivNULL;
3527         textureParameterf                        = &glTextureParameterfNULL;
3528         textureParameterfv                       = &glTextureParameterfvNULL;
3529         textureParameteri                        = &glTextureParameteriNULL;
3530         textureParameteriv                       = &glTextureParameterivNULL;
3531         textureStorage1D                         = &glTextureStorage1DNULL;
3532         textureStorage2D                         = &glTextureStorage2DNULL;
3533         textureStorage2DMultisample              = &glTextureStorage2DMultisampleNULL;
3534         textureStorage3D                         = &glTextureStorage3DNULL;
3535         textureStorage3DMultisample              = &glTextureStorage3DMultisampleNULL;
3536         textureSubImage1D                        = &glTextureSubImage1DNULL;
3537         textureSubImage2D                        = &glTextureSubImage2DNULL;
3538         textureSubImage3D                        = &glTextureSubImage3DNULL;
3539         transformFeedbackBufferBase              = &glTransformFeedbackBufferBaseNULL;
3540         transformFeedbackBufferRange             = &glTransformFeedbackBufferRangeNULL;
3541         unmapNamedBuffer                         = &glUnmapNamedBufferNULL;
3542         vertexArrayAttribBinding                 = &glVertexArrayAttribBindingNULL;
3543         vertexArrayAttribFormat                  = &glVertexArrayAttribFormatNULL;
3544         vertexArrayAttribIFormat                 = &glVertexArrayAttribIFormatNULL;
3545         vertexArrayAttribLFormat                 = &glVertexArrayAttribLFormatNULL;
3546         vertexArrayBindingDivisor                = &glVertexArrayBindingDivisorNULL;
3547         vertexArrayElementBuffer                 = &glVertexArrayElementBufferNULL;
3548         vertexArrayVertexBuffer                  = &glVertexArrayVertexBufferNULL;
3549         vertexArrayVertexBuffers                 = &glVertexArrayVertexBuffersNULL;
3550     }
3551 
3552     if (extensions.count("GL_ARB_ES2_compatibility") != 0)
3553     {
3554         clearDepthf              = &glClearDepthfNULL;
3555         depthRangef              = &glDepthRangefNULL;
3556         getShaderPrecisionFormat = &glGetShaderPrecisionFormatNULL;
3557         releaseShaderCompiler    = &glReleaseShaderCompilerNULL;
3558         shaderBinary             = &glShaderBinaryNULL;
3559     }
3560 
3561     if (extensions.count("GL_ARB_ES3_1_compatibility") != 0)
3562     {
3563         memoryBarrierByRegion = &glMemoryBarrierByRegionNULL;
3564     }
3565 
3566     if (extensions.count("GL_ARB_ES3_2_compatibility") != 0)
3567     {
3568         primitiveBoundingBox = &glPrimitiveBoundingBoxNULL;
3569     }
3570 
3571     if (extensions.count("GL_ARB_base_instance") != 0)
3572     {
3573         drawArraysInstancedBaseInstance   = &glDrawArraysInstancedBaseInstanceNULL;
3574         drawElementsInstancedBaseInstance = &glDrawElementsInstancedBaseInstanceNULL;
3575         drawElementsInstancedBaseVertexBaseInstance =
3576             &glDrawElementsInstancedBaseVertexBaseInstanceNULL;
3577     }
3578 
3579     if (extensions.count("GL_ARB_blend_func_extended") != 0)
3580     {
3581         bindFragDataLocationIndexed = &glBindFragDataLocationIndexedNULL;
3582         getFragDataIndex            = &glGetFragDataIndexNULL;
3583     }
3584 
3585     if (extensions.count("GL_ARB_buffer_storage") != 0)
3586     {
3587         bufferStorage = &glBufferStorageNULL;
3588     }
3589 
3590     if (extensions.count("GL_ARB_clear_buffer_object") != 0)
3591     {
3592         clearBufferData    = &glClearBufferDataNULL;
3593         clearBufferSubData = &glClearBufferSubDataNULL;
3594     }
3595 
3596     if (extensions.count("GL_ARB_clear_texture") != 0)
3597     {
3598         clearTexImage    = &glClearTexImageNULL;
3599         clearTexSubImage = &glClearTexSubImageNULL;
3600     }
3601 
3602     if (extensions.count("GL_ARB_clip_control") != 0)
3603     {
3604         clipControl = &glClipControlNULL;
3605     }
3606 
3607     if (extensions.count("GL_ARB_color_buffer_float") != 0)
3608     {
3609         clampColor = &glClampColorNULL;
3610     }
3611 
3612     if (extensions.count("GL_ARB_compute_shader") != 0)
3613     {
3614         dispatchCompute         = &glDispatchComputeNULL;
3615         dispatchComputeIndirect = &glDispatchComputeIndirectNULL;
3616     }
3617 
3618     if (extensions.count("GL_ARB_copy_buffer") != 0)
3619     {
3620         copyBufferSubData = &glCopyBufferSubDataNULL;
3621     }
3622 
3623     if (extensions.count("GL_ARB_copy_image") != 0)
3624     {
3625         copyImageSubData = &glCopyImageSubDataNULL;
3626     }
3627 
3628     if (extensions.count("GL_ARB_debug_output") != 0)
3629     {
3630         debugMessageCallback = &glDebugMessageCallbackNULL;
3631         debugMessageControl  = &glDebugMessageControlNULL;
3632         debugMessageInsert   = &glDebugMessageInsertNULL;
3633         getDebugMessageLog   = &glGetDebugMessageLogNULL;
3634     }
3635 
3636     if (extensions.count("GL_ARB_direct_state_access") != 0)
3637     {
3638         bindTextureUnit                          = &glBindTextureUnitNULL;
3639         blitNamedFramebuffer                     = &glBlitNamedFramebufferNULL;
3640         checkNamedFramebufferStatus              = &glCheckNamedFramebufferStatusNULL;
3641         clearNamedBufferData                     = &glClearNamedBufferDataNULL;
3642         clearNamedBufferSubData                  = &glClearNamedBufferSubDataNULL;
3643         clearNamedFramebufferfi                  = &glClearNamedFramebufferfiNULL;
3644         clearNamedFramebufferfv                  = &glClearNamedFramebufferfvNULL;
3645         clearNamedFramebufferiv                  = &glClearNamedFramebufferivNULL;
3646         clearNamedFramebufferuiv                 = &glClearNamedFramebufferuivNULL;
3647         compressedTextureSubImage1D              = &glCompressedTextureSubImage1DNULL;
3648         compressedTextureSubImage2D              = &glCompressedTextureSubImage2DNULL;
3649         compressedTextureSubImage3D              = &glCompressedTextureSubImage3DNULL;
3650         copyNamedBufferSubData                   = &glCopyNamedBufferSubDataNULL;
3651         copyTextureSubImage1D                    = &glCopyTextureSubImage1DNULL;
3652         copyTextureSubImage2D                    = &glCopyTextureSubImage2DNULL;
3653         copyTextureSubImage3D                    = &glCopyTextureSubImage3DNULL;
3654         createBuffers                            = &glCreateBuffersNULL;
3655         createFramebuffers                       = &glCreateFramebuffersNULL;
3656         createProgramPipelines                   = &glCreateProgramPipelinesNULL;
3657         createQueries                            = &glCreateQueriesNULL;
3658         createRenderbuffers                      = &glCreateRenderbuffersNULL;
3659         createSamplers                           = &glCreateSamplersNULL;
3660         createTextures                           = &glCreateTexturesNULL;
3661         createTransformFeedbacks                 = &glCreateTransformFeedbacksNULL;
3662         createVertexArrays                       = &glCreateVertexArraysNULL;
3663         disableVertexArrayAttrib                 = &glDisableVertexArrayAttribNULL;
3664         enableVertexArrayAttrib                  = &glEnableVertexArrayAttribNULL;
3665         flushMappedNamedBufferRange              = &glFlushMappedNamedBufferRangeNULL;
3666         generateTextureMipmap                    = &glGenerateTextureMipmapNULL;
3667         getCompressedTextureImage                = &glGetCompressedTextureImageNULL;
3668         getNamedBufferParameteri64v              = &glGetNamedBufferParameteri64vNULL;
3669         getNamedBufferParameteriv                = &glGetNamedBufferParameterivNULL;
3670         getNamedBufferPointerv                   = &glGetNamedBufferPointervNULL;
3671         getNamedBufferSubData                    = &glGetNamedBufferSubDataNULL;
3672         getNamedFramebufferAttachmentParameteriv = &glGetNamedFramebufferAttachmentParameterivNULL;
3673         getNamedFramebufferParameteriv           = &glGetNamedFramebufferParameterivNULL;
3674         getNamedRenderbufferParameteriv          = &glGetNamedRenderbufferParameterivNULL;
3675         getQueryBufferObjecti64v                 = &glGetQueryBufferObjecti64vNULL;
3676         getQueryBufferObjectiv                   = &glGetQueryBufferObjectivNULL;
3677         getQueryBufferObjectui64v                = &glGetQueryBufferObjectui64vNULL;
3678         getQueryBufferObjectuiv                  = &glGetQueryBufferObjectuivNULL;
3679         getTextureImage                          = &glGetTextureImageNULL;
3680         getTextureLevelParameterfv               = &glGetTextureLevelParameterfvNULL;
3681         getTextureLevelParameteriv               = &glGetTextureLevelParameterivNULL;
3682         getTextureParameterIiv                   = &glGetTextureParameterIivNULL;
3683         getTextureParameterIuiv                  = &glGetTextureParameterIuivNULL;
3684         getTextureParameterfv                    = &glGetTextureParameterfvNULL;
3685         getTextureParameteriv                    = &glGetTextureParameterivNULL;
3686         getTransformFeedbacki64_v                = &glGetTransformFeedbacki64_vNULL;
3687         getTransformFeedbacki_v                  = &glGetTransformFeedbacki_vNULL;
3688         getTransformFeedbackiv                   = &glGetTransformFeedbackivNULL;
3689         getVertexArrayIndexed64iv                = &glGetVertexArrayIndexed64ivNULL;
3690         getVertexArrayIndexediv                  = &glGetVertexArrayIndexedivNULL;
3691         getVertexArrayiv                         = &glGetVertexArrayivNULL;
3692         invalidateNamedFramebufferData           = &glInvalidateNamedFramebufferDataNULL;
3693         invalidateNamedFramebufferSubData        = &glInvalidateNamedFramebufferSubDataNULL;
3694         mapNamedBuffer                           = &glMapNamedBufferNULL;
3695         mapNamedBufferRange                      = &glMapNamedBufferRangeNULL;
3696         namedBufferData                          = &glNamedBufferDataNULL;
3697         namedBufferStorage                       = &glNamedBufferStorageNULL;
3698         namedBufferSubData                       = &glNamedBufferSubDataNULL;
3699         namedFramebufferDrawBuffer               = &glNamedFramebufferDrawBufferNULL;
3700         namedFramebufferDrawBuffers              = &glNamedFramebufferDrawBuffersNULL;
3701         namedFramebufferParameteri               = &glNamedFramebufferParameteriNULL;
3702         namedFramebufferReadBuffer               = &glNamedFramebufferReadBufferNULL;
3703         namedFramebufferRenderbuffer             = &glNamedFramebufferRenderbufferNULL;
3704         namedFramebufferTexture                  = &glNamedFramebufferTextureNULL;
3705         namedFramebufferTextureLayer             = &glNamedFramebufferTextureLayerNULL;
3706         namedRenderbufferStorage                 = &glNamedRenderbufferStorageNULL;
3707         namedRenderbufferStorageMultisample      = &glNamedRenderbufferStorageMultisampleNULL;
3708         textureBuffer                            = &glTextureBufferNULL;
3709         textureBufferRange                       = &glTextureBufferRangeNULL;
3710         textureParameterIiv                      = &glTextureParameterIivNULL;
3711         textureParameterIuiv                     = &glTextureParameterIuivNULL;
3712         textureParameterf                        = &glTextureParameterfNULL;
3713         textureParameterfv                       = &glTextureParameterfvNULL;
3714         textureParameteri                        = &glTextureParameteriNULL;
3715         textureParameteriv                       = &glTextureParameterivNULL;
3716         textureStorage1D                         = &glTextureStorage1DNULL;
3717         textureStorage2D                         = &glTextureStorage2DNULL;
3718         textureStorage2DMultisample              = &glTextureStorage2DMultisampleNULL;
3719         textureStorage3D                         = &glTextureStorage3DNULL;
3720         textureStorage3DMultisample              = &glTextureStorage3DMultisampleNULL;
3721         textureSubImage1D                        = &glTextureSubImage1DNULL;
3722         textureSubImage2D                        = &glTextureSubImage2DNULL;
3723         textureSubImage3D                        = &glTextureSubImage3DNULL;
3724         transformFeedbackBufferBase              = &glTransformFeedbackBufferBaseNULL;
3725         transformFeedbackBufferRange             = &glTransformFeedbackBufferRangeNULL;
3726         unmapNamedBuffer                         = &glUnmapNamedBufferNULL;
3727         vertexArrayAttribBinding                 = &glVertexArrayAttribBindingNULL;
3728         vertexArrayAttribFormat                  = &glVertexArrayAttribFormatNULL;
3729         vertexArrayAttribIFormat                 = &glVertexArrayAttribIFormatNULL;
3730         vertexArrayAttribLFormat                 = &glVertexArrayAttribLFormatNULL;
3731         vertexArrayBindingDivisor                = &glVertexArrayBindingDivisorNULL;
3732         vertexArrayElementBuffer                 = &glVertexArrayElementBufferNULL;
3733         vertexArrayVertexBuffer                  = &glVertexArrayVertexBufferNULL;
3734         vertexArrayVertexBuffers                 = &glVertexArrayVertexBuffersNULL;
3735     }
3736 
3737     if (extensions.count("GL_ARB_draw_buffers") != 0)
3738     {
3739         drawBuffers = &glDrawBuffersNULL;
3740     }
3741 
3742     if (extensions.count("GL_ARB_draw_buffers_blend") != 0)
3743     {
3744         blendEquationSeparatei = &glBlendEquationSeparateiNULL;
3745         blendEquationi         = &glBlendEquationiNULL;
3746         blendFuncSeparatei     = &glBlendFuncSeparateiNULL;
3747         blendFunci             = &glBlendFunciNULL;
3748     }
3749 
3750     if (extensions.count("GL_ARB_draw_elements_base_vertex") != 0)
3751     {
3752         drawElementsBaseVertex          = &glDrawElementsBaseVertexNULL;
3753         drawElementsInstancedBaseVertex = &glDrawElementsInstancedBaseVertexNULL;
3754         drawRangeElementsBaseVertex     = &glDrawRangeElementsBaseVertexNULL;
3755         multiDrawElementsBaseVertex     = &glMultiDrawElementsBaseVertexNULL;
3756     }
3757 
3758     if (extensions.count("GL_ARB_draw_indirect") != 0)
3759     {
3760         drawArraysIndirect   = &glDrawArraysIndirectNULL;
3761         drawElementsIndirect = &glDrawElementsIndirectNULL;
3762     }
3763 
3764     if (extensions.count("GL_ARB_draw_instanced") != 0)
3765     {
3766         drawArraysInstanced   = &glDrawArraysInstancedNULL;
3767         drawElementsInstanced = &glDrawElementsInstancedNULL;
3768     }
3769 
3770     if (extensions.count("GL_ARB_fragment_program") != 0)
3771     {
3772         getProgramiv = &glGetProgramivNULL;
3773         isProgram    = &glIsProgramNULL;
3774     }
3775 
3776     if (extensions.count("GL_ARB_framebuffer_no_attachments") != 0)
3777     {
3778         framebufferParameteri     = &glFramebufferParameteriNULL;
3779         getFramebufferParameteriv = &glGetFramebufferParameterivNULL;
3780     }
3781 
3782     if (extensions.count("GL_ARB_framebuffer_object") != 0)
3783     {
3784         bindFramebuffer                     = &glBindFramebufferNULL;
3785         bindRenderbuffer                    = &glBindRenderbufferNULL;
3786         blitFramebuffer                     = &glBlitFramebufferNULL;
3787         checkFramebufferStatus              = &glCheckFramebufferStatusNULL;
3788         deleteFramebuffers                  = &glDeleteFramebuffersNULL;
3789         deleteRenderbuffers                 = &glDeleteRenderbuffersNULL;
3790         framebufferRenderbuffer             = &glFramebufferRenderbufferNULL;
3791         framebufferTexture1D                = &glFramebufferTexture1DNULL;
3792         framebufferTexture2D                = &glFramebufferTexture2DNULL;
3793         framebufferTexture3D                = &glFramebufferTexture3DNULL;
3794         framebufferTextureLayer             = &glFramebufferTextureLayerNULL;
3795         genFramebuffers                     = &glGenFramebuffersNULL;
3796         genRenderbuffers                    = &glGenRenderbuffersNULL;
3797         generateMipmap                      = &glGenerateMipmapNULL;
3798         getFramebufferAttachmentParameteriv = &glGetFramebufferAttachmentParameterivNULL;
3799         getRenderbufferParameteriv          = &glGetRenderbufferParameterivNULL;
3800         isFramebuffer                       = &glIsFramebufferNULL;
3801         isRenderbuffer                      = &glIsRenderbufferNULL;
3802         renderbufferStorage                 = &glRenderbufferStorageNULL;
3803         renderbufferStorageMultisample      = &glRenderbufferStorageMultisampleNULL;
3804     }
3805 
3806     if (extensions.count("GL_ARB_geometry_shader4") != 0)
3807     {
3808         framebufferTexture      = &glFramebufferTextureNULL;
3809         framebufferTextureLayer = &glFramebufferTextureLayerNULL;
3810         programParameteri       = &glProgramParameteriNULL;
3811     }
3812 
3813     if (extensions.count("GL_ARB_get_program_binary") != 0)
3814     {
3815         getProgramBinary  = &glGetProgramBinaryNULL;
3816         programBinary     = &glProgramBinaryNULL;
3817         programParameteri = &glProgramParameteriNULL;
3818     }
3819 
3820     if (extensions.count("GL_ARB_get_texture_sub_image") != 0)
3821     {
3822         getCompressedTextureSubImage = &glGetCompressedTextureSubImageNULL;
3823         getTextureSubImage           = &glGetTextureSubImageNULL;
3824     }
3825 
3826     if (extensions.count("GL_ARB_gpu_shader_fp64") != 0)
3827     {
3828         getUniformdv       = &glGetUniformdvNULL;
3829         uniform1d          = &glUniform1dNULL;
3830         uniform1dv         = &glUniform1dvNULL;
3831         uniform2d          = &glUniform2dNULL;
3832         uniform2dv         = &glUniform2dvNULL;
3833         uniform3d          = &glUniform3dNULL;
3834         uniform3dv         = &glUniform3dvNULL;
3835         uniform4d          = &glUniform4dNULL;
3836         uniform4dv         = &glUniform4dvNULL;
3837         uniformMatrix2dv   = &glUniformMatrix2dvNULL;
3838         uniformMatrix2x3dv = &glUniformMatrix2x3dvNULL;
3839         uniformMatrix2x4dv = &glUniformMatrix2x4dvNULL;
3840         uniformMatrix3dv   = &glUniformMatrix3dvNULL;
3841         uniformMatrix3x2dv = &glUniformMatrix3x2dvNULL;
3842         uniformMatrix3x4dv = &glUniformMatrix3x4dvNULL;
3843         uniformMatrix4dv   = &glUniformMatrix4dvNULL;
3844         uniformMatrix4x2dv = &glUniformMatrix4x2dvNULL;
3845         uniformMatrix4x3dv = &glUniformMatrix4x3dvNULL;
3846     }
3847 
3848     if (extensions.count("GL_ARB_imaging") != 0)
3849     {
3850         blendColor    = &glBlendColorNULL;
3851         blendEquation = &glBlendEquationNULL;
3852     }
3853 
3854     if (extensions.count("GL_ARB_instanced_arrays") != 0)
3855     {
3856         vertexAttribDivisor = &glVertexAttribDivisorNULL;
3857     }
3858 
3859     if (extensions.count("GL_ARB_internalformat_query") != 0)
3860     {
3861         getInternalformativ = &glGetInternalformativNULL;
3862     }
3863 
3864     if (extensions.count("GL_ARB_internalformat_query2") != 0)
3865     {
3866         getInternalformati64v = &glGetInternalformati64vNULL;
3867     }
3868 
3869     if (extensions.count("GL_ARB_invalidate_subdata") != 0)
3870     {
3871         invalidateBufferData     = &glInvalidateBufferDataNULL;
3872         invalidateBufferSubData  = &glInvalidateBufferSubDataNULL;
3873         invalidateFramebuffer    = &glInvalidateFramebufferNULL;
3874         invalidateSubFramebuffer = &glInvalidateSubFramebufferNULL;
3875         invalidateTexImage       = &glInvalidateTexImageNULL;
3876         invalidateTexSubImage    = &glInvalidateTexSubImageNULL;
3877     }
3878 
3879     if (extensions.count("GL_ARB_map_buffer_range") != 0)
3880     {
3881         flushMappedBufferRange = &glFlushMappedBufferRangeNULL;
3882         mapBufferRange         = &glMapBufferRangeNULL;
3883     }
3884 
3885     if (extensions.count("GL_ARB_multi_bind") != 0)
3886     {
3887         bindBuffersBase   = &glBindBuffersBaseNULL;
3888         bindBuffersRange  = &glBindBuffersRangeNULL;
3889         bindImageTextures = &glBindImageTexturesNULL;
3890         bindSamplers      = &glBindSamplersNULL;
3891         bindTextures      = &glBindTexturesNULL;
3892         bindVertexBuffers = &glBindVertexBuffersNULL;
3893     }
3894 
3895     if (extensions.count("GL_ARB_multi_draw_indirect") != 0)
3896     {
3897         multiDrawArraysIndirect   = &glMultiDrawArraysIndirectNULL;
3898         multiDrawElementsIndirect = &glMultiDrawElementsIndirectNULL;
3899     }
3900 
3901     if (extensions.count("GL_ARB_multisample") != 0)
3902     {
3903         sampleCoverage = &glSampleCoverageNULL;
3904     }
3905 
3906     if (extensions.count("GL_ARB_multitexture") != 0)
3907     {
3908         activeTexture = &glActiveTextureNULL;
3909     }
3910 
3911     if (extensions.count("GL_ARB_occlusion_query") != 0)
3912     {
3913         beginQuery        = &glBeginQueryNULL;
3914         deleteQueries     = &glDeleteQueriesNULL;
3915         endQuery          = &glEndQueryNULL;
3916         genQueries        = &glGenQueriesNULL;
3917         getQueryObjectiv  = &glGetQueryObjectivNULL;
3918         getQueryObjectuiv = &glGetQueryObjectuivNULL;
3919         getQueryiv        = &glGetQueryivNULL;
3920         isQuery           = &glIsQueryNULL;
3921     }
3922 
3923     if (extensions.count("GL_ARB_parallel_shader_compile") != 0)
3924     {
3925         maxShaderCompilerThreadsARB = &glMaxShaderCompilerThreadsARBNULL;
3926     }
3927 
3928     if (extensions.count("GL_ARB_point_parameters") != 0)
3929     {
3930         pointParameterf  = &glPointParameterfNULL;
3931         pointParameterfv = &glPointParameterfvNULL;
3932     }
3933 
3934     if (extensions.count("GL_ARB_program_interface_query") != 0)
3935     {
3936         getProgramInterfaceiv           = &glGetProgramInterfaceivNULL;
3937         getProgramResourceIndex         = &glGetProgramResourceIndexNULL;
3938         getProgramResourceLocation      = &glGetProgramResourceLocationNULL;
3939         getProgramResourceLocationIndex = &glGetProgramResourceLocationIndexNULL;
3940         getProgramResourceName          = &glGetProgramResourceNameNULL;
3941         getProgramResourceiv            = &glGetProgramResourceivNULL;
3942     }
3943 
3944     if (extensions.count("GL_ARB_provoking_vertex") != 0)
3945     {
3946         provokingVertex = &glProvokingVertexNULL;
3947     }
3948 
3949     if (extensions.count("GL_ARB_robustness") != 0)
3950     {
3951         getGraphicsResetStatus = &glGetGraphicsResetStatusNULL;
3952         getnCompressedTexImage = &glGetnCompressedTexImageNULL;
3953         getnTexImage           = &glGetnTexImageNULL;
3954         getnUniformdv          = &glGetnUniformdvNULL;
3955         getnUniformfv          = &glGetnUniformfvNULL;
3956         getnUniformiv          = &glGetnUniformivNULL;
3957         getnUniformuiv         = &glGetnUniformuivNULL;
3958         readnPixels            = &glReadnPixelsNULL;
3959     }
3960 
3961     if (extensions.count("GL_ARB_sample_shading") != 0)
3962     {
3963         minSampleShading = &glMinSampleShadingNULL;
3964     }
3965 
3966     if (extensions.count("GL_ARB_sampler_objects") != 0)
3967     {
3968         bindSampler             = &glBindSamplerNULL;
3969         deleteSamplers          = &glDeleteSamplersNULL;
3970         genSamplers             = &glGenSamplersNULL;
3971         getSamplerParameterIiv  = &glGetSamplerParameterIivNULL;
3972         getSamplerParameterIuiv = &glGetSamplerParameterIuivNULL;
3973         getSamplerParameterfv   = &glGetSamplerParameterfvNULL;
3974         getSamplerParameteriv   = &glGetSamplerParameterivNULL;
3975         isSampler               = &glIsSamplerNULL;
3976         samplerParameterIiv     = &glSamplerParameterIivNULL;
3977         samplerParameterIuiv    = &glSamplerParameterIuivNULL;
3978         samplerParameterf       = &glSamplerParameterfNULL;
3979         samplerParameterfv      = &glSamplerParameterfvNULL;
3980         samplerParameteri       = &glSamplerParameteriNULL;
3981         samplerParameteriv      = &glSamplerParameterivNULL;
3982     }
3983 
3984     if (extensions.count("GL_ARB_separate_shader_objects") != 0)
3985     {
3986         activeShaderProgram       = &glActiveShaderProgramNULL;
3987         bindProgramPipeline       = &glBindProgramPipelineNULL;
3988         createShaderProgramv      = &glCreateShaderProgramvNULL;
3989         deleteProgramPipelines    = &glDeleteProgramPipelinesNULL;
3990         genProgramPipelines       = &glGenProgramPipelinesNULL;
3991         getProgramPipelineInfoLog = &glGetProgramPipelineInfoLogNULL;
3992         getProgramPipelineiv      = &glGetProgramPipelineivNULL;
3993         isProgramPipeline         = &glIsProgramPipelineNULL;
3994         programParameteri         = &glProgramParameteriNULL;
3995         programUniform1d          = &glProgramUniform1dNULL;
3996         programUniform1dv         = &glProgramUniform1dvNULL;
3997         programUniform1f          = &glProgramUniform1fNULL;
3998         programUniform1fv         = &glProgramUniform1fvNULL;
3999         programUniform1i          = &glProgramUniform1iNULL;
4000         programUniform1iv         = &glProgramUniform1ivNULL;
4001         programUniform1ui         = &glProgramUniform1uiNULL;
4002         programUniform1uiv        = &glProgramUniform1uivNULL;
4003         programUniform2d          = &glProgramUniform2dNULL;
4004         programUniform2dv         = &glProgramUniform2dvNULL;
4005         programUniform2f          = &glProgramUniform2fNULL;
4006         programUniform2fv         = &glProgramUniform2fvNULL;
4007         programUniform2i          = &glProgramUniform2iNULL;
4008         programUniform2iv         = &glProgramUniform2ivNULL;
4009         programUniform2ui         = &glProgramUniform2uiNULL;
4010         programUniform2uiv        = &glProgramUniform2uivNULL;
4011         programUniform3d          = &glProgramUniform3dNULL;
4012         programUniform3dv         = &glProgramUniform3dvNULL;
4013         programUniform3f          = &glProgramUniform3fNULL;
4014         programUniform3fv         = &glProgramUniform3fvNULL;
4015         programUniform3i          = &glProgramUniform3iNULL;
4016         programUniform3iv         = &glProgramUniform3ivNULL;
4017         programUniform3ui         = &glProgramUniform3uiNULL;
4018         programUniform3uiv        = &glProgramUniform3uivNULL;
4019         programUniform4d          = &glProgramUniform4dNULL;
4020         programUniform4dv         = &glProgramUniform4dvNULL;
4021         programUniform4f          = &glProgramUniform4fNULL;
4022         programUniform4fv         = &glProgramUniform4fvNULL;
4023         programUniform4i          = &glProgramUniform4iNULL;
4024         programUniform4iv         = &glProgramUniform4ivNULL;
4025         programUniform4ui         = &glProgramUniform4uiNULL;
4026         programUniform4uiv        = &glProgramUniform4uivNULL;
4027         programUniformMatrix2dv   = &glProgramUniformMatrix2dvNULL;
4028         programUniformMatrix2fv   = &glProgramUniformMatrix2fvNULL;
4029         programUniformMatrix2x3dv = &glProgramUniformMatrix2x3dvNULL;
4030         programUniformMatrix2x3fv = &glProgramUniformMatrix2x3fvNULL;
4031         programUniformMatrix2x4dv = &glProgramUniformMatrix2x4dvNULL;
4032         programUniformMatrix2x4fv = &glProgramUniformMatrix2x4fvNULL;
4033         programUniformMatrix3dv   = &glProgramUniformMatrix3dvNULL;
4034         programUniformMatrix3fv   = &glProgramUniformMatrix3fvNULL;
4035         programUniformMatrix3x2dv = &glProgramUniformMatrix3x2dvNULL;
4036         programUniformMatrix3x2fv = &glProgramUniformMatrix3x2fvNULL;
4037         programUniformMatrix3x4dv = &glProgramUniformMatrix3x4dvNULL;
4038         programUniformMatrix3x4fv = &glProgramUniformMatrix3x4fvNULL;
4039         programUniformMatrix4dv   = &glProgramUniformMatrix4dvNULL;
4040         programUniformMatrix4fv   = &glProgramUniformMatrix4fvNULL;
4041         programUniformMatrix4x2dv = &glProgramUniformMatrix4x2dvNULL;
4042         programUniformMatrix4x2fv = &glProgramUniformMatrix4x2fvNULL;
4043         programUniformMatrix4x3dv = &glProgramUniformMatrix4x3dvNULL;
4044         programUniformMatrix4x3fv = &glProgramUniformMatrix4x3fvNULL;
4045         useProgramStages          = &glUseProgramStagesNULL;
4046         validateProgramPipeline   = &glValidateProgramPipelineNULL;
4047     }
4048 
4049     if (extensions.count("GL_ARB_shader_atomic_counters") != 0)
4050     {
4051         getActiveAtomicCounterBufferiv = &glGetActiveAtomicCounterBufferivNULL;
4052     }
4053 
4054     if (extensions.count("GL_ARB_shader_image_load_store") != 0)
4055     {
4056         bindImageTexture = &glBindImageTextureNULL;
4057         memoryBarrier    = &glMemoryBarrierNULL;
4058     }
4059 
4060     if (extensions.count("GL_ARB_shader_objects") != 0)
4061     {
4062         compileShader      = &glCompileShaderNULL;
4063         getActiveUniform   = &glGetActiveUniformNULL;
4064         getShaderSource    = &glGetShaderSourceNULL;
4065         getUniformLocation = &glGetUniformLocationNULL;
4066         getUniformfv       = &glGetUniformfvNULL;
4067         getUniformiv       = &glGetUniformivNULL;
4068         linkProgram        = &glLinkProgramNULL;
4069         shaderSource       = &glShaderSourceNULL;
4070         uniform1f          = &glUniform1fNULL;
4071         uniform1fv         = &glUniform1fvNULL;
4072         uniform1i          = &glUniform1iNULL;
4073         uniform1iv         = &glUniform1ivNULL;
4074         uniform2f          = &glUniform2fNULL;
4075         uniform2fv         = &glUniform2fvNULL;
4076         uniform2i          = &glUniform2iNULL;
4077         uniform2iv         = &glUniform2ivNULL;
4078         uniform3f          = &glUniform3fNULL;
4079         uniform3fv         = &glUniform3fvNULL;
4080         uniform3i          = &glUniform3iNULL;
4081         uniform3iv         = &glUniform3ivNULL;
4082         uniform4f          = &glUniform4fNULL;
4083         uniform4fv         = &glUniform4fvNULL;
4084         uniform4i          = &glUniform4iNULL;
4085         uniform4iv         = &glUniform4ivNULL;
4086         uniformMatrix2fv   = &glUniformMatrix2fvNULL;
4087         uniformMatrix3fv   = &glUniformMatrix3fvNULL;
4088         uniformMatrix4fv   = &glUniformMatrix4fvNULL;
4089         validateProgram    = &glValidateProgramNULL;
4090     }
4091 
4092     if (extensions.count("GL_ARB_shader_storage_buffer_object") != 0)
4093     {
4094         shaderStorageBlockBinding = &glShaderStorageBlockBindingNULL;
4095     }
4096 
4097     if (extensions.count("GL_ARB_shader_subroutine") != 0)
4098     {
4099         getActiveSubroutineName        = &glGetActiveSubroutineNameNULL;
4100         getActiveSubroutineUniformName = &glGetActiveSubroutineUniformNameNULL;
4101         getActiveSubroutineUniformiv   = &glGetActiveSubroutineUniformivNULL;
4102         getProgramStageiv              = &glGetProgramStageivNULL;
4103         getSubroutineIndex             = &glGetSubroutineIndexNULL;
4104         getSubroutineUniformLocation   = &glGetSubroutineUniformLocationNULL;
4105         getUniformSubroutineuiv        = &glGetUniformSubroutineuivNULL;
4106         uniformSubroutinesuiv          = &glUniformSubroutinesuivNULL;
4107     }
4108 
4109     if (extensions.count("GL_ARB_sync") != 0)
4110     {
4111         clientWaitSync = &glClientWaitSyncNULL;
4112         deleteSync     = &glDeleteSyncNULL;
4113         fenceSync      = &glFenceSyncNULL;
4114         getInteger64v  = &glGetInteger64vNULL;
4115         getSynciv      = &glGetSyncivNULL;
4116         isSync         = &glIsSyncNULL;
4117         waitSync       = &glWaitSyncNULL;
4118     }
4119 
4120     if (extensions.count("GL_ARB_tessellation_shader") != 0)
4121     {
4122         patchParameterfv = &glPatchParameterfvNULL;
4123         patchParameteri  = &glPatchParameteriNULL;
4124     }
4125 
4126     if (extensions.count("GL_ARB_texture_barrier") != 0)
4127     {
4128         textureBarrier = &glTextureBarrierNULL;
4129     }
4130 
4131     if (extensions.count("GL_ARB_texture_buffer_object") != 0)
4132     {
4133         texBuffer = &glTexBufferNULL;
4134     }
4135 
4136     if (extensions.count("GL_ARB_texture_buffer_range") != 0)
4137     {
4138         texBufferRange = &glTexBufferRangeNULL;
4139     }
4140 
4141     if (extensions.count("GL_ARB_texture_compression") != 0)
4142     {
4143         compressedTexImage1D    = &glCompressedTexImage1DNULL;
4144         compressedTexImage2D    = &glCompressedTexImage2DNULL;
4145         compressedTexImage3D    = &glCompressedTexImage3DNULL;
4146         compressedTexSubImage1D = &glCompressedTexSubImage1DNULL;
4147         compressedTexSubImage2D = &glCompressedTexSubImage2DNULL;
4148         compressedTexSubImage3D = &glCompressedTexSubImage3DNULL;
4149         getCompressedTexImage   = &glGetCompressedTexImageNULL;
4150     }
4151 
4152     if (extensions.count("GL_ARB_texture_multisample") != 0)
4153     {
4154         getMultisamplefv      = &glGetMultisamplefvNULL;
4155         sampleMaski           = &glSampleMaskiNULL;
4156         texImage2DMultisample = &glTexImage2DMultisampleNULL;
4157         texImage3DMultisample = &glTexImage3DMultisampleNULL;
4158     }
4159 
4160     if (extensions.count("GL_ARB_texture_storage") != 0)
4161     {
4162         texStorage1D = &glTexStorage1DNULL;
4163         texStorage2D = &glTexStorage2DNULL;
4164         texStorage3D = &glTexStorage3DNULL;
4165     }
4166 
4167     if (extensions.count("GL_ARB_texture_storage_multisample") != 0)
4168     {
4169         texStorage2DMultisample = &glTexStorage2DMultisampleNULL;
4170         texStorage3DMultisample = &glTexStorage3DMultisampleNULL;
4171     }
4172 
4173     if (extensions.count("GL_ARB_texture_view") != 0)
4174     {
4175         textureView = &glTextureViewNULL;
4176     }
4177 
4178     if (extensions.count("GL_ARB_timer_query") != 0)
4179     {
4180         getQueryObjecti64v  = &glGetQueryObjecti64vNULL;
4181         getQueryObjectui64v = &glGetQueryObjectui64vNULL;
4182         queryCounter        = &glQueryCounterNULL;
4183     }
4184 
4185     if (extensions.count("GL_ARB_transform_feedback2") != 0)
4186     {
4187         bindTransformFeedback    = &glBindTransformFeedbackNULL;
4188         deleteTransformFeedbacks = &glDeleteTransformFeedbacksNULL;
4189         drawTransformFeedback    = &glDrawTransformFeedbackNULL;
4190         genTransformFeedbacks    = &glGenTransformFeedbacksNULL;
4191         isTransformFeedback      = &glIsTransformFeedbackNULL;
4192         pauseTransformFeedback   = &glPauseTransformFeedbackNULL;
4193         resumeTransformFeedback  = &glResumeTransformFeedbackNULL;
4194     }
4195 
4196     if (extensions.count("GL_ARB_transform_feedback3") != 0)
4197     {
4198         beginQueryIndexed           = &glBeginQueryIndexedNULL;
4199         drawTransformFeedbackStream = &glDrawTransformFeedbackStreamNULL;
4200         endQueryIndexed             = &glEndQueryIndexedNULL;
4201         getQueryIndexediv           = &glGetQueryIndexedivNULL;
4202     }
4203 
4204     if (extensions.count("GL_ARB_transform_feedback_instanced") != 0)
4205     {
4206         drawTransformFeedbackInstanced       = &glDrawTransformFeedbackInstancedNULL;
4207         drawTransformFeedbackStreamInstanced = &glDrawTransformFeedbackStreamInstancedNULL;
4208     }
4209 
4210     if (extensions.count("GL_ARB_uniform_buffer_object") != 0)
4211     {
4212         bindBufferBase            = &glBindBufferBaseNULL;
4213         bindBufferRange           = &glBindBufferRangeNULL;
4214         getActiveUniformBlockName = &glGetActiveUniformBlockNameNULL;
4215         getActiveUniformBlockiv   = &glGetActiveUniformBlockivNULL;
4216         getActiveUniformName      = &glGetActiveUniformNameNULL;
4217         getActiveUniformsiv       = &glGetActiveUniformsivNULL;
4218         getIntegeri_v             = &glGetIntegeri_vNULL;
4219         getUniformBlockIndex      = &glGetUniformBlockIndexNULL;
4220         getUniformIndices         = &glGetUniformIndicesNULL;
4221         uniformBlockBinding       = &glUniformBlockBindingNULL;
4222     }
4223 
4224     if (extensions.count("GL_ARB_vertex_array_object") != 0)
4225     {
4226         bindVertexArray    = &glBindVertexArrayNULL;
4227         deleteVertexArrays = &glDeleteVertexArraysNULL;
4228         genVertexArrays    = &glGenVertexArraysNULL;
4229         isVertexArray      = &glIsVertexArrayNULL;
4230     }
4231 
4232     if (extensions.count("GL_ARB_vertex_attrib_64bit") != 0)
4233     {
4234         getVertexAttribLdv   = &glGetVertexAttribLdvNULL;
4235         vertexAttribL1d      = &glVertexAttribL1dNULL;
4236         vertexAttribL1dv     = &glVertexAttribL1dvNULL;
4237         vertexAttribL2d      = &glVertexAttribL2dNULL;
4238         vertexAttribL2dv     = &glVertexAttribL2dvNULL;
4239         vertexAttribL3d      = &glVertexAttribL3dNULL;
4240         vertexAttribL3dv     = &glVertexAttribL3dvNULL;
4241         vertexAttribL4d      = &glVertexAttribL4dNULL;
4242         vertexAttribL4dv     = &glVertexAttribL4dvNULL;
4243         vertexAttribLPointer = &glVertexAttribLPointerNULL;
4244     }
4245 
4246     if (extensions.count("GL_ARB_vertex_attrib_binding") != 0)
4247     {
4248         bindVertexBuffer     = &glBindVertexBufferNULL;
4249         vertexAttribBinding  = &glVertexAttribBindingNULL;
4250         vertexAttribFormat   = &glVertexAttribFormatNULL;
4251         vertexAttribIFormat  = &glVertexAttribIFormatNULL;
4252         vertexAttribLFormat  = &glVertexAttribLFormatNULL;
4253         vertexBindingDivisor = &glVertexBindingDivisorNULL;
4254     }
4255 
4256     if (extensions.count("GL_ARB_vertex_buffer_object") != 0)
4257     {
4258         bindBuffer           = &glBindBufferNULL;
4259         bufferData           = &glBufferDataNULL;
4260         bufferSubData        = &glBufferSubDataNULL;
4261         deleteBuffers        = &glDeleteBuffersNULL;
4262         genBuffers           = &glGenBuffersNULL;
4263         getBufferParameteriv = &glGetBufferParameterivNULL;
4264         getBufferPointerv    = &glGetBufferPointervNULL;
4265         getBufferSubData     = &glGetBufferSubDataNULL;
4266         isBuffer             = &glIsBufferNULL;
4267         mapBuffer            = &glMapBufferNULL;
4268         unmapBuffer          = &glUnmapBufferNULL;
4269     }
4270 
4271     if (extensions.count("GL_ARB_vertex_program") != 0)
4272     {
4273         disableVertexAttribArray = &glDisableVertexAttribArrayNULL;
4274         enableVertexAttribArray  = &glEnableVertexAttribArrayNULL;
4275         getProgramiv             = &glGetProgramivNULL;
4276         getVertexAttribPointerv  = &glGetVertexAttribPointervNULL;
4277         getVertexAttribdv        = &glGetVertexAttribdvNULL;
4278         getVertexAttribfv        = &glGetVertexAttribfvNULL;
4279         getVertexAttribiv        = &glGetVertexAttribivNULL;
4280         isProgram                = &glIsProgramNULL;
4281         vertexAttrib1d           = &glVertexAttrib1dNULL;
4282         vertexAttrib1dv          = &glVertexAttrib1dvNULL;
4283         vertexAttrib1f           = &glVertexAttrib1fNULL;
4284         vertexAttrib1fv          = &glVertexAttrib1fvNULL;
4285         vertexAttrib1s           = &glVertexAttrib1sNULL;
4286         vertexAttrib1sv          = &glVertexAttrib1svNULL;
4287         vertexAttrib2d           = &glVertexAttrib2dNULL;
4288         vertexAttrib2dv          = &glVertexAttrib2dvNULL;
4289         vertexAttrib2f           = &glVertexAttrib2fNULL;
4290         vertexAttrib2fv          = &glVertexAttrib2fvNULL;
4291         vertexAttrib2s           = &glVertexAttrib2sNULL;
4292         vertexAttrib2sv          = &glVertexAttrib2svNULL;
4293         vertexAttrib3d           = &glVertexAttrib3dNULL;
4294         vertexAttrib3dv          = &glVertexAttrib3dvNULL;
4295         vertexAttrib3f           = &glVertexAttrib3fNULL;
4296         vertexAttrib3fv          = &glVertexAttrib3fvNULL;
4297         vertexAttrib3s           = &glVertexAttrib3sNULL;
4298         vertexAttrib3sv          = &glVertexAttrib3svNULL;
4299         vertexAttrib4Nbv         = &glVertexAttrib4NbvNULL;
4300         vertexAttrib4Niv         = &glVertexAttrib4NivNULL;
4301         vertexAttrib4Nsv         = &glVertexAttrib4NsvNULL;
4302         vertexAttrib4Nub         = &glVertexAttrib4NubNULL;
4303         vertexAttrib4Nubv        = &glVertexAttrib4NubvNULL;
4304         vertexAttrib4Nuiv        = &glVertexAttrib4NuivNULL;
4305         vertexAttrib4Nusv        = &glVertexAttrib4NusvNULL;
4306         vertexAttrib4bv          = &glVertexAttrib4bvNULL;
4307         vertexAttrib4d           = &glVertexAttrib4dNULL;
4308         vertexAttrib4dv          = &glVertexAttrib4dvNULL;
4309         vertexAttrib4f           = &glVertexAttrib4fNULL;
4310         vertexAttrib4fv          = &glVertexAttrib4fvNULL;
4311         vertexAttrib4iv          = &glVertexAttrib4ivNULL;
4312         vertexAttrib4s           = &glVertexAttrib4sNULL;
4313         vertexAttrib4sv          = &glVertexAttrib4svNULL;
4314         vertexAttrib4ubv         = &glVertexAttrib4ubvNULL;
4315         vertexAttrib4uiv         = &glVertexAttrib4uivNULL;
4316         vertexAttrib4usv         = &glVertexAttrib4usvNULL;
4317         vertexAttribPointer      = &glVertexAttribPointerNULL;
4318     }
4319 
4320     if (extensions.count("GL_ARB_vertex_shader") != 0)
4321     {
4322         bindAttribLocation       = &glBindAttribLocationNULL;
4323         disableVertexAttribArray = &glDisableVertexAttribArrayNULL;
4324         enableVertexAttribArray  = &glEnableVertexAttribArrayNULL;
4325         getActiveAttrib          = &glGetActiveAttribNULL;
4326         getAttribLocation        = &glGetAttribLocationNULL;
4327         getVertexAttribPointerv  = &glGetVertexAttribPointervNULL;
4328         getVertexAttribdv        = &glGetVertexAttribdvNULL;
4329         getVertexAttribfv        = &glGetVertexAttribfvNULL;
4330         getVertexAttribiv        = &glGetVertexAttribivNULL;
4331         vertexAttrib1d           = &glVertexAttrib1dNULL;
4332         vertexAttrib1dv          = &glVertexAttrib1dvNULL;
4333         vertexAttrib1f           = &glVertexAttrib1fNULL;
4334         vertexAttrib1fv          = &glVertexAttrib1fvNULL;
4335         vertexAttrib1s           = &glVertexAttrib1sNULL;
4336         vertexAttrib1sv          = &glVertexAttrib1svNULL;
4337         vertexAttrib2d           = &glVertexAttrib2dNULL;
4338         vertexAttrib2dv          = &glVertexAttrib2dvNULL;
4339         vertexAttrib2f           = &glVertexAttrib2fNULL;
4340         vertexAttrib2fv          = &glVertexAttrib2fvNULL;
4341         vertexAttrib2s           = &glVertexAttrib2sNULL;
4342         vertexAttrib2sv          = &glVertexAttrib2svNULL;
4343         vertexAttrib3d           = &glVertexAttrib3dNULL;
4344         vertexAttrib3dv          = &glVertexAttrib3dvNULL;
4345         vertexAttrib3f           = &glVertexAttrib3fNULL;
4346         vertexAttrib3fv          = &glVertexAttrib3fvNULL;
4347         vertexAttrib3s           = &glVertexAttrib3sNULL;
4348         vertexAttrib3sv          = &glVertexAttrib3svNULL;
4349         vertexAttrib4Nbv         = &glVertexAttrib4NbvNULL;
4350         vertexAttrib4Niv         = &glVertexAttrib4NivNULL;
4351         vertexAttrib4Nsv         = &glVertexAttrib4NsvNULL;
4352         vertexAttrib4Nub         = &glVertexAttrib4NubNULL;
4353         vertexAttrib4Nubv        = &glVertexAttrib4NubvNULL;
4354         vertexAttrib4Nuiv        = &glVertexAttrib4NuivNULL;
4355         vertexAttrib4Nusv        = &glVertexAttrib4NusvNULL;
4356         vertexAttrib4bv          = &glVertexAttrib4bvNULL;
4357         vertexAttrib4d           = &glVertexAttrib4dNULL;
4358         vertexAttrib4dv          = &glVertexAttrib4dvNULL;
4359         vertexAttrib4f           = &glVertexAttrib4fNULL;
4360         vertexAttrib4fv          = &glVertexAttrib4fvNULL;
4361         vertexAttrib4iv          = &glVertexAttrib4ivNULL;
4362         vertexAttrib4s           = &glVertexAttrib4sNULL;
4363         vertexAttrib4sv          = &glVertexAttrib4svNULL;
4364         vertexAttrib4ubv         = &glVertexAttrib4ubvNULL;
4365         vertexAttrib4uiv         = &glVertexAttrib4uivNULL;
4366         vertexAttrib4usv         = &glVertexAttrib4usvNULL;
4367         vertexAttribPointer      = &glVertexAttribPointerNULL;
4368     }
4369 
4370     if (extensions.count("GL_ARB_vertex_type_2_10_10_10_rev") != 0)
4371     {
4372         vertexAttribP1ui  = &glVertexAttribP1uiNULL;
4373         vertexAttribP1uiv = &glVertexAttribP1uivNULL;
4374         vertexAttribP2ui  = &glVertexAttribP2uiNULL;
4375         vertexAttribP2uiv = &glVertexAttribP2uivNULL;
4376         vertexAttribP3ui  = &glVertexAttribP3uiNULL;
4377         vertexAttribP3uiv = &glVertexAttribP3uivNULL;
4378         vertexAttribP4ui  = &glVertexAttribP4uiNULL;
4379         vertexAttribP4uiv = &glVertexAttribP4uivNULL;
4380     }
4381 
4382     if (extensions.count("GL_ARB_viewport_array") != 0)
4383     {
4384         depthRangeArrayv  = &glDepthRangeArrayvNULL;
4385         depthRangeIndexed = &glDepthRangeIndexedNULL;
4386         getDoublei_v      = &glGetDoublei_vNULL;
4387         getFloati_v       = &glGetFloati_vNULL;
4388         scissorArrayv     = &glScissorArrayvNULL;
4389         scissorIndexed    = &glScissorIndexedNULL;
4390         scissorIndexedv   = &glScissorIndexedvNULL;
4391         viewportArrayv    = &glViewportArrayvNULL;
4392         viewportIndexedf  = &glViewportIndexedfNULL;
4393         viewportIndexedfv = &glViewportIndexedfvNULL;
4394     }
4395 
4396     if (extensions.count("GL_EXT_blend_color") != 0)
4397     {
4398         blendColor = &glBlendColorNULL;
4399     }
4400 
4401     if (extensions.count("GL_EXT_blend_equation_separate") != 0)
4402     {
4403         blendEquationSeparate = &glBlendEquationSeparateNULL;
4404     }
4405 
4406     if (extensions.count("GL_EXT_blend_func_separate") != 0)
4407     {
4408         blendFuncSeparate = &glBlendFuncSeparateNULL;
4409     }
4410 
4411     if (extensions.count("GL_EXT_copy_texture") != 0)
4412     {
4413         copyTexImage1D    = &glCopyTexImage1DNULL;
4414         copyTexImage2D    = &glCopyTexImage2DNULL;
4415         copyTexSubImage1D = &glCopyTexSubImage1DNULL;
4416         copyTexSubImage2D = &glCopyTexSubImage2DNULL;
4417         copyTexSubImage3D = &glCopyTexSubImage3DNULL;
4418     }
4419 
4420     if (extensions.count("GL_EXT_direct_state_access") != 0)
4421     {
4422         checkNamedFramebufferStatus              = &glCheckNamedFramebufferStatusNULL;
4423         clearNamedBufferData                     = &glClearNamedBufferDataNULL;
4424         clearNamedBufferSubData                  = &glClearNamedBufferSubDataNULL;
4425         compressedTextureSubImage1D              = &glCompressedTextureSubImage1DNULL;
4426         compressedTextureSubImage2D              = &glCompressedTextureSubImage2DNULL;
4427         compressedTextureSubImage3D              = &glCompressedTextureSubImage3DNULL;
4428         copyTextureSubImage1D                    = &glCopyTextureSubImage1DNULL;
4429         copyTextureSubImage2D                    = &glCopyTextureSubImage2DNULL;
4430         copyTextureSubImage3D                    = &glCopyTextureSubImage3DNULL;
4431         disableVertexArrayAttrib                 = &glDisableVertexArrayAttribNULL;
4432         enableVertexArrayAttrib                  = &glEnableVertexArrayAttribNULL;
4433         flushMappedNamedBufferRange              = &glFlushMappedNamedBufferRangeNULL;
4434         generateTextureMipmap                    = &glGenerateTextureMipmapNULL;
4435         getCompressedTextureImage                = &glGetCompressedTextureImageNULL;
4436         getDoublei_v                             = &glGetDoublei_vNULL;
4437         getFloati_v                              = &glGetFloati_vNULL;
4438         getFramebufferParameteriv                = &glGetFramebufferParameterivNULL;
4439         getNamedBufferParameteriv                = &glGetNamedBufferParameterivNULL;
4440         getNamedBufferPointerv                   = &glGetNamedBufferPointervNULL;
4441         getNamedBufferSubData                    = &glGetNamedBufferSubDataNULL;
4442         getNamedFramebufferAttachmentParameteriv = &glGetNamedFramebufferAttachmentParameterivNULL;
4443         getNamedFramebufferParameteriv           = &glGetNamedFramebufferParameterivNULL;
4444         getNamedRenderbufferParameteriv          = &glGetNamedRenderbufferParameterivNULL;
4445         getTextureImage                          = &glGetTextureImageNULL;
4446         getTextureLevelParameterfv               = &glGetTextureLevelParameterfvNULL;
4447         getTextureLevelParameteriv               = &glGetTextureLevelParameterivNULL;
4448         getTextureParameterIiv                   = &glGetTextureParameterIivNULL;
4449         getTextureParameterIuiv                  = &glGetTextureParameterIuivNULL;
4450         getTextureParameterfv                    = &glGetTextureParameterfvNULL;
4451         getTextureParameteriv                    = &glGetTextureParameterivNULL;
4452         mapNamedBuffer                           = &glMapNamedBufferNULL;
4453         mapNamedBufferRange                      = &glMapNamedBufferRangeNULL;
4454         namedBufferData                          = &glNamedBufferDataNULL;
4455         namedBufferStorage                       = &glNamedBufferStorageNULL;
4456         namedBufferSubData                       = &glNamedBufferSubDataNULL;
4457         namedFramebufferParameteri               = &glNamedFramebufferParameteriNULL;
4458         namedFramebufferRenderbuffer             = &glNamedFramebufferRenderbufferNULL;
4459         namedFramebufferTexture                  = &glNamedFramebufferTextureNULL;
4460         namedFramebufferTextureLayer             = &glNamedFramebufferTextureLayerNULL;
4461         namedRenderbufferStorage                 = &glNamedRenderbufferStorageNULL;
4462         namedRenderbufferStorageMultisample      = &glNamedRenderbufferStorageMultisampleNULL;
4463         programUniform1d                         = &glProgramUniform1dNULL;
4464         programUniform1dv                        = &glProgramUniform1dvNULL;
4465         programUniform2d                         = &glProgramUniform2dNULL;
4466         programUniform2dv                        = &glProgramUniform2dvNULL;
4467         programUniform3d                         = &glProgramUniform3dNULL;
4468         programUniform3dv                        = &glProgramUniform3dvNULL;
4469         programUniform4d                         = &glProgramUniform4dNULL;
4470         programUniform4dv                        = &glProgramUniform4dvNULL;
4471         programUniformMatrix2dv                  = &glProgramUniformMatrix2dvNULL;
4472         programUniformMatrix2x3dv                = &glProgramUniformMatrix2x3dvNULL;
4473         programUniformMatrix2x4dv                = &glProgramUniformMatrix2x4dvNULL;
4474         programUniformMatrix3dv                  = &glProgramUniformMatrix3dvNULL;
4475         programUniformMatrix3x2dv                = &glProgramUniformMatrix3x2dvNULL;
4476         programUniformMatrix3x4dv                = &glProgramUniformMatrix3x4dvNULL;
4477         programUniformMatrix4dv                  = &glProgramUniformMatrix4dvNULL;
4478         programUniformMatrix4x2dv                = &glProgramUniformMatrix4x2dvNULL;
4479         programUniformMatrix4x3dv                = &glProgramUniformMatrix4x3dvNULL;
4480         textureBuffer                            = &glTextureBufferNULL;
4481         textureBufferRange                       = &glTextureBufferRangeNULL;
4482         textureParameterIiv                      = &glTextureParameterIivNULL;
4483         textureParameterIuiv                     = &glTextureParameterIuivNULL;
4484         textureParameterf                        = &glTextureParameterfNULL;
4485         textureParameterfv                       = &glTextureParameterfvNULL;
4486         textureParameteri                        = &glTextureParameteriNULL;
4487         textureParameteriv                       = &glTextureParameterivNULL;
4488         textureStorage1D                         = &glTextureStorage1DNULL;
4489         textureStorage2D                         = &glTextureStorage2DNULL;
4490         textureStorage2DMultisample              = &glTextureStorage2DMultisampleNULL;
4491         textureStorage3D                         = &glTextureStorage3DNULL;
4492         textureStorage3DMultisample              = &glTextureStorage3DMultisampleNULL;
4493         textureSubImage1D                        = &glTextureSubImage1DNULL;
4494         textureSubImage2D                        = &glTextureSubImage2DNULL;
4495         textureSubImage3D                        = &glTextureSubImage3DNULL;
4496         unmapNamedBuffer                         = &glUnmapNamedBufferNULL;
4497     }
4498 
4499     if (extensions.count("GL_EXT_draw_range_elements") != 0)
4500     {
4501         drawRangeElements = &glDrawRangeElementsNULL;
4502     }
4503 
4504     if (extensions.count("GL_EXT_framebuffer_blit") != 0)
4505     {
4506         blitFramebuffer = &glBlitFramebufferNULL;
4507     }
4508 
4509     if (extensions.count("GL_EXT_framebuffer_multisample") != 0)
4510     {
4511         renderbufferStorageMultisample = &glRenderbufferStorageMultisampleNULL;
4512     }
4513 
4514     if (extensions.count("GL_EXT_framebuffer_object") != 0)
4515     {
4516         bindFramebuffer                     = &glBindFramebufferNULL;
4517         bindRenderbuffer                    = &glBindRenderbufferNULL;
4518         checkFramebufferStatus              = &glCheckFramebufferStatusNULL;
4519         deleteFramebuffers                  = &glDeleteFramebuffersNULL;
4520         deleteRenderbuffers                 = &glDeleteRenderbuffersNULL;
4521         framebufferRenderbuffer             = &glFramebufferRenderbufferNULL;
4522         framebufferTexture1D                = &glFramebufferTexture1DNULL;
4523         framebufferTexture2D                = &glFramebufferTexture2DNULL;
4524         framebufferTexture3D                = &glFramebufferTexture3DNULL;
4525         genFramebuffers                     = &glGenFramebuffersNULL;
4526         genRenderbuffers                    = &glGenRenderbuffersNULL;
4527         generateMipmap                      = &glGenerateMipmapNULL;
4528         getFramebufferAttachmentParameteriv = &glGetFramebufferAttachmentParameterivNULL;
4529         getRenderbufferParameteriv          = &glGetRenderbufferParameterivNULL;
4530         isFramebuffer                       = &glIsFramebufferNULL;
4531         isRenderbuffer                      = &glIsRenderbufferNULL;
4532         renderbufferStorage                 = &glRenderbufferStorageNULL;
4533     }
4534 
4535     if (extensions.count("GL_EXT_gpu_shader4") != 0)
4536     {
4537         bindFragDataLocation = &glBindFragDataLocationNULL;
4538         getFragDataLocation  = &glGetFragDataLocationNULL;
4539         getUniformuiv        = &glGetUniformuivNULL;
4540         uniform1ui           = &glUniform1uiNULL;
4541         uniform1uiv          = &glUniform1uivNULL;
4542         uniform2ui           = &glUniform2uiNULL;
4543         uniform2uiv          = &glUniform2uivNULL;
4544         uniform3ui           = &glUniform3uiNULL;
4545         uniform3uiv          = &glUniform3uivNULL;
4546         uniform4ui           = &glUniform4uiNULL;
4547         uniform4uiv          = &glUniform4uivNULL;
4548     }
4549 
4550     if (extensions.count("GL_EXT_point_parameters") != 0)
4551     {
4552         pointParameterf  = &glPointParameterfNULL;
4553         pointParameterfv = &glPointParameterfvNULL;
4554     }
4555 
4556     if (extensions.count("GL_EXT_polygon_offset") != 0)
4557     {
4558         polygonOffset = &glPolygonOffsetNULL;
4559     }
4560 
4561     if (extensions.count("GL_EXT_provoking_vertex") != 0)
4562     {
4563         provokingVertex = &glProvokingVertexNULL;
4564     }
4565 
4566     if (extensions.count("GL_EXT_shader_image_load_store") != 0)
4567     {
4568         bindImageTexture = &glBindImageTextureNULL;
4569         memoryBarrier    = &glMemoryBarrierNULL;
4570     }
4571 
4572     if (extensions.count("GL_EXT_subtexture") != 0)
4573     {
4574         texSubImage1D = &glTexSubImage1DNULL;
4575         texSubImage2D = &glTexSubImage2DNULL;
4576     }
4577 
4578     if (extensions.count("GL_EXT_texture3D") != 0)
4579     {
4580         texImage3D    = &glTexImage3DNULL;
4581         texSubImage3D = &glTexSubImage3DNULL;
4582     }
4583 
4584     if (extensions.count("GL_EXT_texture_array") != 0)
4585     {
4586         framebufferTextureLayer = &glFramebufferTextureLayerNULL;
4587     }
4588 
4589     if (extensions.count("GL_EXT_texture_buffer_object") != 0)
4590     {
4591         texBuffer = &glTexBufferNULL;
4592     }
4593 
4594     if (extensions.count("GL_EXT_texture_integer") != 0)
4595     {
4596         getTexParameterIiv  = &glGetTexParameterIivNULL;
4597         getTexParameterIuiv = &glGetTexParameterIuivNULL;
4598         texParameterIiv     = &glTexParameterIivNULL;
4599         texParameterIuiv    = &glTexParameterIuivNULL;
4600     }
4601 
4602     if (extensions.count("GL_EXT_texture_object") != 0)
4603     {
4604         bindTexture    = &glBindTextureNULL;
4605         deleteTextures = &glDeleteTexturesNULL;
4606         genTextures    = &glGenTexturesNULL;
4607         isTexture      = &glIsTextureNULL;
4608     }
4609 
4610     if (extensions.count("GL_EXT_timer_query") != 0)
4611     {
4612         getQueryObjecti64v  = &glGetQueryObjecti64vNULL;
4613         getQueryObjectui64v = &glGetQueryObjectui64vNULL;
4614     }
4615 
4616     if (extensions.count("GL_EXT_transform_feedback") != 0)
4617     {
4618         beginTransformFeedback      = &glBeginTransformFeedbackNULL;
4619         bindBufferBase              = &glBindBufferBaseNULL;
4620         bindBufferRange             = &glBindBufferRangeNULL;
4621         endTransformFeedback        = &glEndTransformFeedbackNULL;
4622         getTransformFeedbackVarying = &glGetTransformFeedbackVaryingNULL;
4623         transformFeedbackVaryings   = &glTransformFeedbackVaryingsNULL;
4624     }
4625 
4626     if (extensions.count("GL_EXT_vertex_array") != 0)
4627     {
4628         drawArrays  = &glDrawArraysNULL;
4629         getPointerv = &glGetPointervNULL;
4630     }
4631 
4632     if (extensions.count("GL_EXT_vertex_attrib_64bit") != 0)
4633     {
4634         getVertexAttribLdv   = &glGetVertexAttribLdvNULL;
4635         vertexAttribL1d      = &glVertexAttribL1dNULL;
4636         vertexAttribL1dv     = &glVertexAttribL1dvNULL;
4637         vertexAttribL2d      = &glVertexAttribL2dNULL;
4638         vertexAttribL2dv     = &glVertexAttribL2dvNULL;
4639         vertexAttribL3d      = &glVertexAttribL3dNULL;
4640         vertexAttribL3dv     = &glVertexAttribL3dvNULL;
4641         vertexAttribL4d      = &glVertexAttribL4dNULL;
4642         vertexAttribL4dv     = &glVertexAttribL4dvNULL;
4643         vertexAttribLPointer = &glVertexAttribLPointerNULL;
4644     }
4645 
4646     if (extensions.count("GL_KHR_debug") != 0)
4647     {
4648         debugMessageCallback = &glDebugMessageCallbackNULL;
4649         debugMessageControl  = &glDebugMessageControlNULL;
4650         debugMessageInsert   = &glDebugMessageInsertNULL;
4651         getDebugMessageLog   = &glGetDebugMessageLogNULL;
4652         getObjectLabel       = &glGetObjectLabelNULL;
4653         getObjectPtrLabel    = &glGetObjectPtrLabelNULL;
4654         getPointerv          = &glGetPointervNULL;
4655         objectLabel          = &glObjectLabelNULL;
4656         objectPtrLabel       = &glObjectPtrLabelNULL;
4657         popDebugGroup        = &glPopDebugGroupNULL;
4658         pushDebugGroup       = &glPushDebugGroupNULL;
4659     }
4660 
4661     if (extensions.count("GL_KHR_robustness") != 0)
4662     {
4663         getGraphicsResetStatus = &glGetGraphicsResetStatusNULL;
4664         getnUniformfv          = &glGetnUniformfvNULL;
4665         getnUniformiv          = &glGetnUniformivNULL;
4666         getnUniformuiv         = &glGetnUniformuivNULL;
4667         readnPixels            = &glReadnPixelsNULL;
4668     }
4669 
4670     if (extensions.count("GL_NV_geometry_program4") != 0)
4671     {
4672         framebufferTexture      = &glFramebufferTextureNULL;
4673         framebufferTextureLayer = &glFramebufferTextureLayerNULL;
4674     }
4675 
4676     if (extensions.count("GL_NV_vertex_program4") != 0)
4677     {
4678         getVertexAttribIiv   = &glGetVertexAttribIivNULL;
4679         getVertexAttribIuiv  = &glGetVertexAttribIuivNULL;
4680         vertexAttribI1i      = &glVertexAttribI1iNULL;
4681         vertexAttribI1iv     = &glVertexAttribI1ivNULL;
4682         vertexAttribI1ui     = &glVertexAttribI1uiNULL;
4683         vertexAttribI1uiv    = &glVertexAttribI1uivNULL;
4684         vertexAttribI2i      = &glVertexAttribI2iNULL;
4685         vertexAttribI2iv     = &glVertexAttribI2ivNULL;
4686         vertexAttribI2ui     = &glVertexAttribI2uiNULL;
4687         vertexAttribI2uiv    = &glVertexAttribI2uivNULL;
4688         vertexAttribI3i      = &glVertexAttribI3iNULL;
4689         vertexAttribI3iv     = &glVertexAttribI3ivNULL;
4690         vertexAttribI3ui     = &glVertexAttribI3uiNULL;
4691         vertexAttribI3uiv    = &glVertexAttribI3uivNULL;
4692         vertexAttribI4bv     = &glVertexAttribI4bvNULL;
4693         vertexAttribI4i      = &glVertexAttribI4iNULL;
4694         vertexAttribI4iv     = &glVertexAttribI4ivNULL;
4695         vertexAttribI4sv     = &glVertexAttribI4svNULL;
4696         vertexAttribI4ubv    = &glVertexAttribI4ubvNULL;
4697         vertexAttribI4ui     = &glVertexAttribI4uiNULL;
4698         vertexAttribI4uiv    = &glVertexAttribI4uivNULL;
4699         vertexAttribI4usv    = &glVertexAttribI4usvNULL;
4700         vertexAttribIPointer = &glVertexAttribIPointerNULL;
4701     }
4702 
4703     if (extensions.count("GL_OES_single_precision") != 0)
4704     {
4705         clearDepthf = &glClearDepthfNULL;
4706         depthRangef = &glDepthRangefNULL;
4707     }
4708 }
4709 
initProcsGLESNULL(const gl::Version & version,const std::set<std::string> & extensions)4710 void DispatchTableGL::initProcsGLESNULL(const gl::Version &version,
4711                                         const std::set<std::string> &extensions)
4712 {
4713     if (version >= gl::Version(2, 0))
4714     {
4715         activeTexture                       = &glActiveTextureNULL;
4716         attachShader                        = &glAttachShaderNULL;
4717         bindAttribLocation                  = &glBindAttribLocationNULL;
4718         bindBuffer                          = &glBindBufferNULL;
4719         bindFramebuffer                     = &glBindFramebufferNULL;
4720         bindRenderbuffer                    = &glBindRenderbufferNULL;
4721         bindTexture                         = &glBindTextureNULL;
4722         blendColor                          = &glBlendColorNULL;
4723         blendEquation                       = &glBlendEquationNULL;
4724         blendEquationSeparate               = &glBlendEquationSeparateNULL;
4725         blendFunc                           = &glBlendFuncNULL;
4726         blendFuncSeparate                   = &glBlendFuncSeparateNULL;
4727         bufferData                          = &glBufferDataNULL;
4728         bufferSubData                       = &glBufferSubDataNULL;
4729         checkFramebufferStatus              = &glCheckFramebufferStatusNULL;
4730         clear                               = &glClearNULL;
4731         clearColor                          = &glClearColorNULL;
4732         clearDepthf                         = &glClearDepthfNULL;
4733         clearStencil                        = &glClearStencilNULL;
4734         colorMask                           = &glColorMaskNULL;
4735         compileShader                       = &glCompileShaderNULL;
4736         compressedTexImage2D                = &glCompressedTexImage2DNULL;
4737         compressedTexSubImage2D             = &glCompressedTexSubImage2DNULL;
4738         copyTexImage2D                      = &glCopyTexImage2DNULL;
4739         copyTexSubImage2D                   = &glCopyTexSubImage2DNULL;
4740         createProgram                       = &glCreateProgramNULL;
4741         createShader                        = &glCreateShaderNULL;
4742         cullFace                            = &glCullFaceNULL;
4743         deleteBuffers                       = &glDeleteBuffersNULL;
4744         deleteFramebuffers                  = &glDeleteFramebuffersNULL;
4745         deleteProgram                       = &glDeleteProgramNULL;
4746         deleteRenderbuffers                 = &glDeleteRenderbuffersNULL;
4747         deleteShader                        = &glDeleteShaderNULL;
4748         deleteTextures                      = &glDeleteTexturesNULL;
4749         depthFunc                           = &glDepthFuncNULL;
4750         depthMask                           = &glDepthMaskNULL;
4751         depthRangef                         = &glDepthRangefNULL;
4752         detachShader                        = &glDetachShaderNULL;
4753         disable                             = &glDisableNULL;
4754         disableVertexAttribArray            = &glDisableVertexAttribArrayNULL;
4755         drawArrays                          = &glDrawArraysNULL;
4756         drawElements                        = &glDrawElementsNULL;
4757         enable                              = &glEnableNULL;
4758         enableVertexAttribArray             = &glEnableVertexAttribArrayNULL;
4759         finish                              = &glFinishNULL;
4760         flush                               = &glFlushNULL;
4761         framebufferRenderbuffer             = &glFramebufferRenderbufferNULL;
4762         framebufferTexture2D                = &glFramebufferTexture2DNULL;
4763         frontFace                           = &glFrontFaceNULL;
4764         genBuffers                          = &glGenBuffersNULL;
4765         genFramebuffers                     = &glGenFramebuffersNULL;
4766         genRenderbuffers                    = &glGenRenderbuffersNULL;
4767         genTextures                         = &glGenTexturesNULL;
4768         generateMipmap                      = &glGenerateMipmapNULL;
4769         getActiveAttrib                     = &glGetActiveAttribNULL;
4770         getActiveUniform                    = &glGetActiveUniformNULL;
4771         getAttachedShaders                  = &glGetAttachedShadersNULL;
4772         getAttribLocation                   = &glGetAttribLocationNULL;
4773         getBooleanv                         = &glGetBooleanvNULL;
4774         getBufferParameteriv                = &glGetBufferParameterivNULL;
4775         getError                            = &glGetErrorNULL;
4776         getFloatv                           = &glGetFloatvNULL;
4777         getFramebufferAttachmentParameteriv = &glGetFramebufferAttachmentParameterivNULL;
4778         getIntegerv                         = &glGetIntegervNULL;
4779         getProgramInfoLog                   = &glGetProgramInfoLogNULL;
4780         getProgramiv                        = &glGetProgramivNULL;
4781         getRenderbufferParameteriv          = &glGetRenderbufferParameterivNULL;
4782         getShaderInfoLog                    = &glGetShaderInfoLogNULL;
4783         getShaderPrecisionFormat            = &glGetShaderPrecisionFormatNULL;
4784         getShaderSource                     = &glGetShaderSourceNULL;
4785         getShaderiv                         = &glGetShaderivNULL;
4786         getString                           = &glGetStringNULL;
4787         getTexParameterfv                   = &glGetTexParameterfvNULL;
4788         getTexParameteriv                   = &glGetTexParameterivNULL;
4789         getUniformLocation                  = &glGetUniformLocationNULL;
4790         getUniformfv                        = &glGetUniformfvNULL;
4791         getUniformiv                        = &glGetUniformivNULL;
4792         getVertexAttribPointerv             = &glGetVertexAttribPointervNULL;
4793         getVertexAttribfv                   = &glGetVertexAttribfvNULL;
4794         getVertexAttribiv                   = &glGetVertexAttribivNULL;
4795         hint                                = &glHintNULL;
4796         isBuffer                            = &glIsBufferNULL;
4797         isEnabled                           = &glIsEnabledNULL;
4798         isFramebuffer                       = &glIsFramebufferNULL;
4799         isProgram                           = &glIsProgramNULL;
4800         isRenderbuffer                      = &glIsRenderbufferNULL;
4801         isShader                            = &glIsShaderNULL;
4802         isTexture                           = &glIsTextureNULL;
4803         lineWidth                           = &glLineWidthNULL;
4804         linkProgram                         = &glLinkProgramNULL;
4805         pixelStorei                         = &glPixelStoreiNULL;
4806         polygonOffset                       = &glPolygonOffsetNULL;
4807         readPixels                          = &glReadPixelsNULL;
4808         releaseShaderCompiler               = &glReleaseShaderCompilerNULL;
4809         renderbufferStorage                 = &glRenderbufferStorageNULL;
4810         sampleCoverage                      = &glSampleCoverageNULL;
4811         scissor                             = &glScissorNULL;
4812         shaderBinary                        = &glShaderBinaryNULL;
4813         shaderSource                        = &glShaderSourceNULL;
4814         stencilFunc                         = &glStencilFuncNULL;
4815         stencilFuncSeparate                 = &glStencilFuncSeparateNULL;
4816         stencilMask                         = &glStencilMaskNULL;
4817         stencilMaskSeparate                 = &glStencilMaskSeparateNULL;
4818         stencilOp                           = &glStencilOpNULL;
4819         stencilOpSeparate                   = &glStencilOpSeparateNULL;
4820         texImage2D                          = &glTexImage2DNULL;
4821         texParameterf                       = &glTexParameterfNULL;
4822         texParameterfv                      = &glTexParameterfvNULL;
4823         texParameteri                       = &glTexParameteriNULL;
4824         texParameteriv                      = &glTexParameterivNULL;
4825         texSubImage2D                       = &glTexSubImage2DNULL;
4826         uniform1f                           = &glUniform1fNULL;
4827         uniform1fv                          = &glUniform1fvNULL;
4828         uniform1i                           = &glUniform1iNULL;
4829         uniform1iv                          = &glUniform1ivNULL;
4830         uniform2f                           = &glUniform2fNULL;
4831         uniform2fv                          = &glUniform2fvNULL;
4832         uniform2i                           = &glUniform2iNULL;
4833         uniform2iv                          = &glUniform2ivNULL;
4834         uniform3f                           = &glUniform3fNULL;
4835         uniform3fv                          = &glUniform3fvNULL;
4836         uniform3i                           = &glUniform3iNULL;
4837         uniform3iv                          = &glUniform3ivNULL;
4838         uniform4f                           = &glUniform4fNULL;
4839         uniform4fv                          = &glUniform4fvNULL;
4840         uniform4i                           = &glUniform4iNULL;
4841         uniform4iv                          = &glUniform4ivNULL;
4842         uniformMatrix2fv                    = &glUniformMatrix2fvNULL;
4843         uniformMatrix3fv                    = &glUniformMatrix3fvNULL;
4844         uniformMatrix4fv                    = &glUniformMatrix4fvNULL;
4845         useProgram                          = &glUseProgramNULL;
4846         validateProgram                     = &glValidateProgramNULL;
4847         vertexAttrib1f                      = &glVertexAttrib1fNULL;
4848         vertexAttrib1fv                     = &glVertexAttrib1fvNULL;
4849         vertexAttrib2f                      = &glVertexAttrib2fNULL;
4850         vertexAttrib2fv                     = &glVertexAttrib2fvNULL;
4851         vertexAttrib3f                      = &glVertexAttrib3fNULL;
4852         vertexAttrib3fv                     = &glVertexAttrib3fvNULL;
4853         vertexAttrib4f                      = &glVertexAttrib4fNULL;
4854         vertexAttrib4fv                     = &glVertexAttrib4fvNULL;
4855         vertexAttribPointer                 = &glVertexAttribPointerNULL;
4856         viewport                            = &glViewportNULL;
4857     }
4858 
4859     if (version >= gl::Version(3, 0))
4860     {
4861         beginQuery                     = &glBeginQueryNULL;
4862         beginTransformFeedback         = &glBeginTransformFeedbackNULL;
4863         bindBufferBase                 = &glBindBufferBaseNULL;
4864         bindBufferRange                = &glBindBufferRangeNULL;
4865         bindSampler                    = &glBindSamplerNULL;
4866         bindTransformFeedback          = &glBindTransformFeedbackNULL;
4867         bindVertexArray                = &glBindVertexArrayNULL;
4868         blitFramebuffer                = &glBlitFramebufferNULL;
4869         clearBufferfi                  = &glClearBufferfiNULL;
4870         clearBufferfv                  = &glClearBufferfvNULL;
4871         clearBufferiv                  = &glClearBufferivNULL;
4872         clearBufferuiv                 = &glClearBufferuivNULL;
4873         clientWaitSync                 = &glClientWaitSyncNULL;
4874         compressedTexImage3D           = &glCompressedTexImage3DNULL;
4875         compressedTexSubImage3D        = &glCompressedTexSubImage3DNULL;
4876         copyBufferSubData              = &glCopyBufferSubDataNULL;
4877         copyTexSubImage3D              = &glCopyTexSubImage3DNULL;
4878         deleteQueries                  = &glDeleteQueriesNULL;
4879         deleteSamplers                 = &glDeleteSamplersNULL;
4880         deleteSync                     = &glDeleteSyncNULL;
4881         deleteTransformFeedbacks       = &glDeleteTransformFeedbacksNULL;
4882         deleteVertexArrays             = &glDeleteVertexArraysNULL;
4883         drawArraysInstanced            = &glDrawArraysInstancedNULL;
4884         drawBuffers                    = &glDrawBuffersNULL;
4885         drawElementsInstanced          = &glDrawElementsInstancedNULL;
4886         drawRangeElements              = &glDrawRangeElementsNULL;
4887         endQuery                       = &glEndQueryNULL;
4888         endTransformFeedback           = &glEndTransformFeedbackNULL;
4889         fenceSync                      = &glFenceSyncNULL;
4890         flushMappedBufferRange         = &glFlushMappedBufferRangeNULL;
4891         framebufferTextureLayer        = &glFramebufferTextureLayerNULL;
4892         genQueries                     = &glGenQueriesNULL;
4893         genSamplers                    = &glGenSamplersNULL;
4894         genTransformFeedbacks          = &glGenTransformFeedbacksNULL;
4895         genVertexArrays                = &glGenVertexArraysNULL;
4896         getActiveUniformBlockName      = &glGetActiveUniformBlockNameNULL;
4897         getActiveUniformBlockiv        = &glGetActiveUniformBlockivNULL;
4898         getActiveUniformsiv            = &glGetActiveUniformsivNULL;
4899         getBufferParameteri64v         = &glGetBufferParameteri64vNULL;
4900         getBufferPointerv              = &glGetBufferPointervNULL;
4901         getFragDataLocation            = &glGetFragDataLocationNULL;
4902         getInteger64i_v                = &glGetInteger64i_vNULL;
4903         getInteger64v                  = &glGetInteger64vNULL;
4904         getIntegeri_v                  = &glGetIntegeri_vNULL;
4905         getInternalformativ            = &glGetInternalformativNULL;
4906         getProgramBinary               = &glGetProgramBinaryNULL;
4907         getQueryObjectuiv              = &glGetQueryObjectuivNULL;
4908         getQueryiv                     = &glGetQueryivNULL;
4909         getSamplerParameterfv          = &glGetSamplerParameterfvNULL;
4910         getSamplerParameteriv          = &glGetSamplerParameterivNULL;
4911         getStringi                     = &glGetStringiNULL;
4912         getSynciv                      = &glGetSyncivNULL;
4913         getTransformFeedbackVarying    = &glGetTransformFeedbackVaryingNULL;
4914         getUniformBlockIndex           = &glGetUniformBlockIndexNULL;
4915         getUniformIndices              = &glGetUniformIndicesNULL;
4916         getUniformuiv                  = &glGetUniformuivNULL;
4917         getVertexAttribIiv             = &glGetVertexAttribIivNULL;
4918         getVertexAttribIuiv            = &glGetVertexAttribIuivNULL;
4919         invalidateFramebuffer          = &glInvalidateFramebufferNULL;
4920         invalidateSubFramebuffer       = &glInvalidateSubFramebufferNULL;
4921         isQuery                        = &glIsQueryNULL;
4922         isSampler                      = &glIsSamplerNULL;
4923         isSync                         = &glIsSyncNULL;
4924         isTransformFeedback            = &glIsTransformFeedbackNULL;
4925         isVertexArray                  = &glIsVertexArrayNULL;
4926         mapBufferRange                 = &glMapBufferRangeNULL;
4927         pauseTransformFeedback         = &glPauseTransformFeedbackNULL;
4928         programBinary                  = &glProgramBinaryNULL;
4929         programParameteri              = &glProgramParameteriNULL;
4930         readBuffer                     = &glReadBufferNULL;
4931         renderbufferStorageMultisample = &glRenderbufferStorageMultisampleNULL;
4932         resumeTransformFeedback        = &glResumeTransformFeedbackNULL;
4933         samplerParameterf              = &glSamplerParameterfNULL;
4934         samplerParameterfv             = &glSamplerParameterfvNULL;
4935         samplerParameteri              = &glSamplerParameteriNULL;
4936         samplerParameteriv             = &glSamplerParameterivNULL;
4937         texImage3D                     = &glTexImage3DNULL;
4938         texStorage2D                   = &glTexStorage2DNULL;
4939         texStorage3D                   = &glTexStorage3DNULL;
4940         texSubImage3D                  = &glTexSubImage3DNULL;
4941         transformFeedbackVaryings      = &glTransformFeedbackVaryingsNULL;
4942         uniform1ui                     = &glUniform1uiNULL;
4943         uniform1uiv                    = &glUniform1uivNULL;
4944         uniform2ui                     = &glUniform2uiNULL;
4945         uniform2uiv                    = &glUniform2uivNULL;
4946         uniform3ui                     = &glUniform3uiNULL;
4947         uniform3uiv                    = &glUniform3uivNULL;
4948         uniform4ui                     = &glUniform4uiNULL;
4949         uniform4uiv                    = &glUniform4uivNULL;
4950         uniformBlockBinding            = &glUniformBlockBindingNULL;
4951         uniformMatrix2x3fv             = &glUniformMatrix2x3fvNULL;
4952         uniformMatrix2x4fv             = &glUniformMatrix2x4fvNULL;
4953         uniformMatrix3x2fv             = &glUniformMatrix3x2fvNULL;
4954         uniformMatrix3x4fv             = &glUniformMatrix3x4fvNULL;
4955         uniformMatrix4x2fv             = &glUniformMatrix4x2fvNULL;
4956         uniformMatrix4x3fv             = &glUniformMatrix4x3fvNULL;
4957         unmapBuffer                    = &glUnmapBufferNULL;
4958         vertexAttribDivisor            = &glVertexAttribDivisorNULL;
4959         vertexAttribI4i                = &glVertexAttribI4iNULL;
4960         vertexAttribI4iv               = &glVertexAttribI4ivNULL;
4961         vertexAttribI4ui               = &glVertexAttribI4uiNULL;
4962         vertexAttribI4uiv              = &glVertexAttribI4uivNULL;
4963         vertexAttribIPointer           = &glVertexAttribIPointerNULL;
4964         waitSync                       = &glWaitSyncNULL;
4965     }
4966 
4967     if (version >= gl::Version(3, 1))
4968     {
4969         activeShaderProgram        = &glActiveShaderProgramNULL;
4970         bindImageTexture           = &glBindImageTextureNULL;
4971         bindProgramPipeline        = &glBindProgramPipelineNULL;
4972         bindVertexBuffer           = &glBindVertexBufferNULL;
4973         createShaderProgramv       = &glCreateShaderProgramvNULL;
4974         deleteProgramPipelines     = &glDeleteProgramPipelinesNULL;
4975         dispatchCompute            = &glDispatchComputeNULL;
4976         dispatchComputeIndirect    = &glDispatchComputeIndirectNULL;
4977         drawArraysIndirect         = &glDrawArraysIndirectNULL;
4978         drawElementsIndirect       = &glDrawElementsIndirectNULL;
4979         framebufferParameteri      = &glFramebufferParameteriNULL;
4980         genProgramPipelines        = &glGenProgramPipelinesNULL;
4981         getBooleani_v              = &glGetBooleani_vNULL;
4982         getFramebufferParameteriv  = &glGetFramebufferParameterivNULL;
4983         getMultisamplefv           = &glGetMultisamplefvNULL;
4984         getProgramInterfaceiv      = &glGetProgramInterfaceivNULL;
4985         getProgramPipelineInfoLog  = &glGetProgramPipelineInfoLogNULL;
4986         getProgramPipelineiv       = &glGetProgramPipelineivNULL;
4987         getProgramResourceIndex    = &glGetProgramResourceIndexNULL;
4988         getProgramResourceLocation = &glGetProgramResourceLocationNULL;
4989         getProgramResourceName     = &glGetProgramResourceNameNULL;
4990         getProgramResourceiv       = &glGetProgramResourceivNULL;
4991         getTexLevelParameterfv     = &glGetTexLevelParameterfvNULL;
4992         getTexLevelParameteriv     = &glGetTexLevelParameterivNULL;
4993         isProgramPipeline          = &glIsProgramPipelineNULL;
4994         memoryBarrier              = &glMemoryBarrierNULL;
4995         memoryBarrierByRegion      = &glMemoryBarrierByRegionNULL;
4996         programUniform1f           = &glProgramUniform1fNULL;
4997         programUniform1fv          = &glProgramUniform1fvNULL;
4998         programUniform1i           = &glProgramUniform1iNULL;
4999         programUniform1iv          = &glProgramUniform1ivNULL;
5000         programUniform1ui          = &glProgramUniform1uiNULL;
5001         programUniform1uiv         = &glProgramUniform1uivNULL;
5002         programUniform2f           = &glProgramUniform2fNULL;
5003         programUniform2fv          = &glProgramUniform2fvNULL;
5004         programUniform2i           = &glProgramUniform2iNULL;
5005         programUniform2iv          = &glProgramUniform2ivNULL;
5006         programUniform2ui          = &glProgramUniform2uiNULL;
5007         programUniform2uiv         = &glProgramUniform2uivNULL;
5008         programUniform3f           = &glProgramUniform3fNULL;
5009         programUniform3fv          = &glProgramUniform3fvNULL;
5010         programUniform3i           = &glProgramUniform3iNULL;
5011         programUniform3iv          = &glProgramUniform3ivNULL;
5012         programUniform3ui          = &glProgramUniform3uiNULL;
5013         programUniform3uiv         = &glProgramUniform3uivNULL;
5014         programUniform4f           = &glProgramUniform4fNULL;
5015         programUniform4fv          = &glProgramUniform4fvNULL;
5016         programUniform4i           = &glProgramUniform4iNULL;
5017         programUniform4iv          = &glProgramUniform4ivNULL;
5018         programUniform4ui          = &glProgramUniform4uiNULL;
5019         programUniform4uiv         = &glProgramUniform4uivNULL;
5020         programUniformMatrix2fv    = &glProgramUniformMatrix2fvNULL;
5021         programUniformMatrix2x3fv  = &glProgramUniformMatrix2x3fvNULL;
5022         programUniformMatrix2x4fv  = &glProgramUniformMatrix2x4fvNULL;
5023         programUniformMatrix3fv    = &glProgramUniformMatrix3fvNULL;
5024         programUniformMatrix3x2fv  = &glProgramUniformMatrix3x2fvNULL;
5025         programUniformMatrix3x4fv  = &glProgramUniformMatrix3x4fvNULL;
5026         programUniformMatrix4fv    = &glProgramUniformMatrix4fvNULL;
5027         programUniformMatrix4x2fv  = &glProgramUniformMatrix4x2fvNULL;
5028         programUniformMatrix4x3fv  = &glProgramUniformMatrix4x3fvNULL;
5029         sampleMaski                = &glSampleMaskiNULL;
5030         texStorage2DMultisample    = &glTexStorage2DMultisampleNULL;
5031         useProgramStages           = &glUseProgramStagesNULL;
5032         validateProgramPipeline    = &glValidateProgramPipelineNULL;
5033         vertexAttribBinding        = &glVertexAttribBindingNULL;
5034         vertexAttribFormat         = &glVertexAttribFormatNULL;
5035         vertexAttribIFormat        = &glVertexAttribIFormatNULL;
5036         vertexBindingDivisor       = &glVertexBindingDivisorNULL;
5037     }
5038 
5039     if (version >= gl::Version(3, 2))
5040     {
5041         blendBarrier                    = &glBlendBarrierNULL;
5042         blendEquationSeparatei          = &glBlendEquationSeparateiNULL;
5043         blendEquationi                  = &glBlendEquationiNULL;
5044         blendFuncSeparatei              = &glBlendFuncSeparateiNULL;
5045         blendFunci                      = &glBlendFunciNULL;
5046         colorMaski                      = &glColorMaskiNULL;
5047         copyImageSubData                = &glCopyImageSubDataNULL;
5048         debugMessageCallback            = &glDebugMessageCallbackNULL;
5049         debugMessageControl             = &glDebugMessageControlNULL;
5050         debugMessageInsert              = &glDebugMessageInsertNULL;
5051         disablei                        = &glDisableiNULL;
5052         drawElementsBaseVertex          = &glDrawElementsBaseVertexNULL;
5053         drawElementsInstancedBaseVertex = &glDrawElementsInstancedBaseVertexNULL;
5054         drawRangeElementsBaseVertex     = &glDrawRangeElementsBaseVertexNULL;
5055         enablei                         = &glEnableiNULL;
5056         framebufferTexture              = &glFramebufferTextureNULL;
5057         getDebugMessageLog              = &glGetDebugMessageLogNULL;
5058         getGraphicsResetStatus          = &glGetGraphicsResetStatusNULL;
5059         getObjectLabel                  = &glGetObjectLabelNULL;
5060         getObjectPtrLabel               = &glGetObjectPtrLabelNULL;
5061         getPointerv                     = &glGetPointervNULL;
5062         getSamplerParameterIiv          = &glGetSamplerParameterIivNULL;
5063         getSamplerParameterIuiv         = &glGetSamplerParameterIuivNULL;
5064         getTexParameterIiv              = &glGetTexParameterIivNULL;
5065         getTexParameterIuiv             = &glGetTexParameterIuivNULL;
5066         getnUniformfv                   = &glGetnUniformfvNULL;
5067         getnUniformiv                   = &glGetnUniformivNULL;
5068         getnUniformuiv                  = &glGetnUniformuivNULL;
5069         isEnabledi                      = &glIsEnablediNULL;
5070         minSampleShading                = &glMinSampleShadingNULL;
5071         objectLabel                     = &glObjectLabelNULL;
5072         objectPtrLabel                  = &glObjectPtrLabelNULL;
5073         patchParameteri                 = &glPatchParameteriNULL;
5074         popDebugGroup                   = &glPopDebugGroupNULL;
5075         primitiveBoundingBox            = &glPrimitiveBoundingBoxNULL;
5076         pushDebugGroup                  = &glPushDebugGroupNULL;
5077         readnPixels                     = &glReadnPixelsNULL;
5078         samplerParameterIiv             = &glSamplerParameterIivNULL;
5079         samplerParameterIuiv            = &glSamplerParameterIuivNULL;
5080         texBuffer                       = &glTexBufferNULL;
5081         texBufferRange                  = &glTexBufferRangeNULL;
5082         texParameterIiv                 = &glTexParameterIivNULL;
5083         texParameterIuiv                = &glTexParameterIuivNULL;
5084         texStorage3DMultisample         = &glTexStorage3DMultisampleNULL;
5085     }
5086 
5087     if (extensions.count("GL_EXT_base_instance") != 0)
5088     {
5089         drawArraysInstancedBaseInstance   = &glDrawArraysInstancedBaseInstanceNULL;
5090         drawElementsInstancedBaseInstance = &glDrawElementsInstancedBaseInstanceNULL;
5091         drawElementsInstancedBaseVertexBaseInstance =
5092             &glDrawElementsInstancedBaseVertexBaseInstanceNULL;
5093     }
5094 
5095     if (extensions.count("GL_EXT_blend_func_extended") != 0)
5096     {
5097         bindFragDataLocation            = &glBindFragDataLocationNULL;
5098         bindFragDataLocationIndexed     = &glBindFragDataLocationIndexedNULL;
5099         getFragDataIndex                = &glGetFragDataIndexNULL;
5100         getProgramResourceLocationIndex = &glGetProgramResourceLocationIndexNULL;
5101     }
5102 
5103     if (extensions.count("GL_EXT_buffer_storage") != 0)
5104     {
5105         bufferStorage = &glBufferStorageNULL;
5106     }
5107 
5108     if (extensions.count("GL_EXT_clear_texture") != 0)
5109     {
5110         clearTexImage    = &glClearTexImageNULL;
5111         clearTexSubImage = &glClearTexSubImageNULL;
5112     }
5113 
5114     if (extensions.count("GL_EXT_clip_control") != 0)
5115     {
5116         clipControl = &glClipControlNULL;
5117     }
5118 
5119     if (extensions.count("GL_EXT_copy_image") != 0)
5120     {
5121         copyImageSubData = &glCopyImageSubDataNULL;
5122     }
5123 
5124     if (extensions.count("GL_EXT_discard_framebuffer") != 0)
5125     {
5126         discardFramebufferEXT = &glDiscardFramebufferEXTNULL;
5127     }
5128 
5129     if (extensions.count("GL_EXT_disjoint_timer_query") != 0)
5130     {
5131         beginQuery          = &glBeginQueryNULL;
5132         deleteQueries       = &glDeleteQueriesNULL;
5133         endQuery            = &glEndQueryNULL;
5134         genQueries          = &glGenQueriesNULL;
5135         getQueryObjecti64v  = &glGetQueryObjecti64vNULL;
5136         getQueryObjectiv    = &glGetQueryObjectivNULL;
5137         getQueryObjectui64v = &glGetQueryObjectui64vNULL;
5138         getQueryObjectuiv   = &glGetQueryObjectuivNULL;
5139         getQueryiv          = &glGetQueryivNULL;
5140         isQuery             = &glIsQueryNULL;
5141         queryCounter        = &glQueryCounterNULL;
5142     }
5143 
5144     if (extensions.count("GL_EXT_draw_buffers") != 0)
5145     {
5146         drawBuffers = &glDrawBuffersNULL;
5147     }
5148 
5149     if (extensions.count("GL_EXT_draw_buffers_indexed") != 0)
5150     {
5151         blendEquationSeparatei = &glBlendEquationSeparateiNULL;
5152         blendEquationi         = &glBlendEquationiNULL;
5153         blendFuncSeparatei     = &glBlendFuncSeparateiNULL;
5154         blendFunci             = &glBlendFunciNULL;
5155         colorMaski             = &glColorMaskiNULL;
5156         disablei               = &glDisableiNULL;
5157         enablei                = &glEnableiNULL;
5158         isEnabledi             = &glIsEnablediNULL;
5159     }
5160 
5161     if (extensions.count("GL_EXT_draw_elements_base_vertex") != 0)
5162     {
5163         drawElementsBaseVertex          = &glDrawElementsBaseVertexNULL;
5164         drawElementsInstancedBaseVertex = &glDrawElementsInstancedBaseVertexNULL;
5165         drawRangeElementsBaseVertex     = &glDrawRangeElementsBaseVertexNULL;
5166         multiDrawElementsBaseVertex     = &glMultiDrawElementsBaseVertexNULL;
5167     }
5168 
5169     if (extensions.count("GL_EXT_draw_transform_feedback") != 0)
5170     {
5171         drawTransformFeedback          = &glDrawTransformFeedbackNULL;
5172         drawTransformFeedbackInstanced = &glDrawTransformFeedbackInstancedNULL;
5173     }
5174 
5175     if (extensions.count("GL_EXT_geometry_shader") != 0)
5176     {
5177         framebufferTexture = &glFramebufferTextureNULL;
5178     }
5179 
5180     if (extensions.count("GL_EXT_instanced_arrays") != 0)
5181     {
5182         vertexAttribDivisor = &glVertexAttribDivisorNULL;
5183     }
5184 
5185     if (extensions.count("GL_EXT_map_buffer_range") != 0)
5186     {
5187         flushMappedBufferRange = &glFlushMappedBufferRangeNULL;
5188         mapBufferRange         = &glMapBufferRangeNULL;
5189     }
5190 
5191     if (extensions.count("GL_EXT_multi_draw_indirect") != 0)
5192     {
5193         multiDrawArraysIndirect   = &glMultiDrawArraysIndirectNULL;
5194         multiDrawElementsIndirect = &glMultiDrawElementsIndirectNULL;
5195     }
5196 
5197     if (extensions.count("GL_EXT_multisampled_render_to_texture") != 0)
5198     {
5199         renderbufferStorageMultisample = &glRenderbufferStorageMultisampleNULL;
5200     }
5201 
5202     if (extensions.count("GL_EXT_multiview_draw_buffers") != 0)
5203     {
5204         getIntegeri_v = &glGetIntegeri_vNULL;
5205     }
5206 
5207     if (extensions.count("GL_EXT_occlusion_query_boolean") != 0)
5208     {
5209         beginQuery        = &glBeginQueryNULL;
5210         deleteQueries     = &glDeleteQueriesNULL;
5211         endQuery          = &glEndQueryNULL;
5212         genQueries        = &glGenQueriesNULL;
5213         getQueryObjectuiv = &glGetQueryObjectuivNULL;
5214         getQueryiv        = &glGetQueryivNULL;
5215         isQuery           = &glIsQueryNULL;
5216     }
5217 
5218     if (extensions.count("GL_EXT_primitive_bounding_box") != 0)
5219     {
5220         primitiveBoundingBox = &glPrimitiveBoundingBoxNULL;
5221     }
5222 
5223     if (extensions.count("GL_EXT_robustness") != 0)
5224     {
5225         getGraphicsResetStatus = &glGetGraphicsResetStatusNULL;
5226         getnUniformfv          = &glGetnUniformfvNULL;
5227         getnUniformiv          = &glGetnUniformivNULL;
5228         readnPixels            = &glReadnPixelsNULL;
5229     }
5230 
5231     if (extensions.count("GL_EXT_tessellation_shader") != 0)
5232     {
5233         patchParameteri = &glPatchParameteriNULL;
5234     }
5235 
5236     if (extensions.count("GL_EXT_texture_border_clamp") != 0)
5237     {
5238         getSamplerParameterIiv  = &glGetSamplerParameterIivNULL;
5239         getSamplerParameterIuiv = &glGetSamplerParameterIuivNULL;
5240         getTexParameterIiv      = &glGetTexParameterIivNULL;
5241         getTexParameterIuiv     = &glGetTexParameterIuivNULL;
5242         samplerParameterIiv     = &glSamplerParameterIivNULL;
5243         samplerParameterIuiv    = &glSamplerParameterIuivNULL;
5244         texParameterIiv         = &glTexParameterIivNULL;
5245         texParameterIuiv        = &glTexParameterIuivNULL;
5246     }
5247 
5248     if (extensions.count("GL_EXT_texture_buffer") != 0)
5249     {
5250         texBuffer      = &glTexBufferNULL;
5251         texBufferRange = &glTexBufferRangeNULL;
5252     }
5253 
5254     if (extensions.count("GL_EXT_texture_storage") != 0)
5255     {
5256         texStorage1D     = &glTexStorage1DNULL;
5257         texStorage2D     = &glTexStorage2DNULL;
5258         texStorage3D     = &glTexStorage3DNULL;
5259         textureStorage1D = &glTextureStorage1DNULL;
5260         textureStorage2D = &glTextureStorage2DNULL;
5261         textureStorage3D = &glTextureStorage3DNULL;
5262     }
5263 
5264     if (extensions.count("GL_EXT_texture_view") != 0)
5265     {
5266         textureView = &glTextureViewNULL;
5267     }
5268 
5269     if (extensions.count("GL_KHR_debug") != 0)
5270     {
5271         debugMessageCallback = &glDebugMessageCallbackNULL;
5272         debugMessageControl  = &glDebugMessageControlNULL;
5273         debugMessageInsert   = &glDebugMessageInsertNULL;
5274         getDebugMessageLog   = &glGetDebugMessageLogNULL;
5275         getObjectLabel       = &glGetObjectLabelNULL;
5276         getObjectPtrLabel    = &glGetObjectPtrLabelNULL;
5277         getPointerv          = &glGetPointervNULL;
5278         objectLabel          = &glObjectLabelNULL;
5279         objectPtrLabel       = &glObjectPtrLabelNULL;
5280         popDebugGroup        = &glPopDebugGroupNULL;
5281         pushDebugGroup       = &glPushDebugGroupNULL;
5282     }
5283 
5284     if (extensions.count("GL_KHR_robustness") != 0)
5285     {
5286         getGraphicsResetStatus = &glGetGraphicsResetStatusNULL;
5287         getnUniformfv          = &glGetnUniformfvNULL;
5288         getnUniformiv          = &glGetnUniformivNULL;
5289         getnUniformuiv         = &glGetnUniformuivNULL;
5290         readnPixels            = &glReadnPixelsNULL;
5291     }
5292 
5293     if (extensions.count("GL_OES_EGL_image") != 0)
5294     {
5295         eGLImageTargetRenderbufferStorageOES = &glEGLImageTargetRenderbufferStorageOESNULL;
5296         eGLImageTargetTexture2DOES           = &glEGLImageTargetTexture2DOESNULL;
5297     }
5298 
5299     if (extensions.count("GL_OES_copy_image") != 0)
5300     {
5301         copyImageSubData = &glCopyImageSubDataNULL;
5302     }
5303 
5304     if (extensions.count("GL_OES_draw_buffers_indexed") != 0)
5305     {
5306         blendEquationSeparatei = &glBlendEquationSeparateiNULL;
5307         blendEquationi         = &glBlendEquationiNULL;
5308         blendFuncSeparatei     = &glBlendFuncSeparateiNULL;
5309         blendFunci             = &glBlendFunciNULL;
5310         colorMaski             = &glColorMaskiNULL;
5311         disablei               = &glDisableiNULL;
5312         enablei                = &glEnableiNULL;
5313         isEnabledi             = &glIsEnablediNULL;
5314     }
5315 
5316     if (extensions.count("GL_OES_draw_elements_base_vertex") != 0)
5317     {
5318         drawElementsBaseVertex          = &glDrawElementsBaseVertexNULL;
5319         drawElementsInstancedBaseVertex = &glDrawElementsInstancedBaseVertexNULL;
5320         drawRangeElementsBaseVertex     = &glDrawRangeElementsBaseVertexNULL;
5321         multiDrawElementsBaseVertex     = &glMultiDrawElementsBaseVertexNULL;
5322     }
5323 
5324     if (extensions.count("GL_OES_geometry_shader") != 0)
5325     {
5326         framebufferTexture = &glFramebufferTextureNULL;
5327     }
5328 
5329     if (extensions.count("GL_OES_get_program_binary") != 0)
5330     {
5331         getProgramBinary = &glGetProgramBinaryNULL;
5332         programBinary    = &glProgramBinaryNULL;
5333     }
5334 
5335     if (extensions.count("GL_OES_mapbuffer") != 0)
5336     {
5337         getBufferPointerv = &glGetBufferPointervNULL;
5338         mapBuffer         = &glMapBufferNULL;
5339         unmapBuffer       = &glUnmapBufferNULL;
5340     }
5341 
5342     if (extensions.count("GL_OES_primitive_bounding_box") != 0)
5343     {
5344         primitiveBoundingBox = &glPrimitiveBoundingBoxNULL;
5345     }
5346 
5347     if (extensions.count("GL_OES_sample_shading") != 0)
5348     {
5349         minSampleShading = &glMinSampleShadingNULL;
5350     }
5351 
5352     if (extensions.count("GL_OES_tessellation_shader") != 0)
5353     {
5354         patchParameteri = &glPatchParameteriNULL;
5355     }
5356 
5357     if (extensions.count("GL_OES_texture_3D") != 0)
5358     {
5359         compressedTexImage3D    = &glCompressedTexImage3DNULL;
5360         compressedTexSubImage3D = &glCompressedTexSubImage3DNULL;
5361         copyTexSubImage3D       = &glCopyTexSubImage3DNULL;
5362         framebufferTexture3D    = &glFramebufferTexture3DNULL;
5363         texImage3D              = &glTexImage3DNULL;
5364         texSubImage3D           = &glTexSubImage3DNULL;
5365     }
5366 
5367     if (extensions.count("GL_OES_texture_border_clamp") != 0)
5368     {
5369         getSamplerParameterIiv  = &glGetSamplerParameterIivNULL;
5370         getSamplerParameterIuiv = &glGetSamplerParameterIuivNULL;
5371         getTexParameterIiv      = &glGetTexParameterIivNULL;
5372         getTexParameterIuiv     = &glGetTexParameterIuivNULL;
5373         samplerParameterIiv     = &glSamplerParameterIivNULL;
5374         samplerParameterIuiv    = &glSamplerParameterIuivNULL;
5375         texParameterIiv         = &glTexParameterIivNULL;
5376         texParameterIuiv        = &glTexParameterIuivNULL;
5377     }
5378 
5379     if (extensions.count("GL_OES_texture_buffer") != 0)
5380     {
5381         texBuffer      = &glTexBufferNULL;
5382         texBufferRange = &glTexBufferRangeNULL;
5383     }
5384 
5385     if (extensions.count("GL_OES_texture_storage_multisample_2d_array") != 0)
5386     {
5387         texStorage3DMultisample = &glTexStorage3DMultisampleNULL;
5388     }
5389 
5390     if (extensions.count("GL_OES_texture_view") != 0)
5391     {
5392         textureView = &glTextureViewNULL;
5393     }
5394 
5395     if (extensions.count("GL_OES_vertex_array_object") != 0)
5396     {
5397         bindVertexArray    = &glBindVertexArrayNULL;
5398         deleteVertexArrays = &glDeleteVertexArraysNULL;
5399         genVertexArrays    = &glGenVertexArraysNULL;
5400         isVertexArray      = &glIsVertexArrayNULL;
5401     }
5402 
5403     if (extensions.count("GL_OES_viewport_array") != 0)
5404     {
5405         disablei          = &glDisableiNULL;
5406         enablei           = &glEnableiNULL;
5407         getFloati_v       = &glGetFloati_vNULL;
5408         isEnabledi        = &glIsEnablediNULL;
5409         scissorArrayv     = &glScissorArrayvNULL;
5410         scissorIndexed    = &glScissorIndexedNULL;
5411         scissorIndexedv   = &glScissorIndexedvNULL;
5412         viewportArrayv    = &glViewportArrayvNULL;
5413         viewportIndexedf  = &glViewportIndexedfNULL;
5414         viewportIndexedfv = &glViewportIndexedfvNULL;
5415     }
5416 }
5417 
initProcsSharedExtensionsNULL(const std::set<std::string> & extensions)5418 void DispatchTableGL::initProcsSharedExtensionsNULL(const std::set<std::string> &extensions)
5419 {
5420     if (extensions.count("GL_EXT_blend_minmax") != 0)
5421     {
5422         blendEquation = &glBlendEquationNULL;
5423     }
5424 
5425     if (extensions.count("GL_EXT_debug_label") != 0)
5426     {
5427         getObjectLabel = &glGetObjectLabelNULL;
5428     }
5429 
5430     if (extensions.count("GL_EXT_debug_marker") != 0)
5431     {
5432         insertEventMarkerEXT = &glInsertEventMarkerEXTNULL;
5433         popGroupMarkerEXT    = &glPopGroupMarkerEXTNULL;
5434         pushGroupMarkerEXT   = &glPushGroupMarkerEXTNULL;
5435     }
5436 
5437     if (extensions.count("GL_EXT_draw_instanced") != 0)
5438     {
5439         drawArraysInstanced   = &glDrawArraysInstancedNULL;
5440         drawElementsInstanced = &glDrawElementsInstancedNULL;
5441     }
5442 
5443     if (extensions.count("GL_EXT_memory_object") != 0)
5444     {
5445         bufferStorageMemEXT               = &glBufferStorageMemEXTNULL;
5446         createMemoryObjectsEXT            = &glCreateMemoryObjectsEXTNULL;
5447         deleteMemoryObjectsEXT            = &glDeleteMemoryObjectsEXTNULL;
5448         getMemoryObjectParameterivEXT     = &glGetMemoryObjectParameterivEXTNULL;
5449         getUnsignedBytei_vEXT             = &glGetUnsignedBytei_vEXTNULL;
5450         getUnsignedBytevEXT               = &glGetUnsignedBytevEXTNULL;
5451         isMemoryObjectEXT                 = &glIsMemoryObjectEXTNULL;
5452         memoryObjectParameterivEXT        = &glMemoryObjectParameterivEXTNULL;
5453         namedBufferStorageMemEXT          = &glNamedBufferStorageMemEXTNULL;
5454         texStorageMem2DEXT                = &glTexStorageMem2DEXTNULL;
5455         texStorageMem2DMultisampleEXT     = &glTexStorageMem2DMultisampleEXTNULL;
5456         texStorageMem3DEXT                = &glTexStorageMem3DEXTNULL;
5457         texStorageMem3DMultisampleEXT     = &glTexStorageMem3DMultisampleEXTNULL;
5458         textureStorageMem2DEXT            = &glTextureStorageMem2DEXTNULL;
5459         textureStorageMem2DMultisampleEXT = &glTextureStorageMem2DMultisampleEXTNULL;
5460         textureStorageMem3DEXT            = &glTextureStorageMem3DEXTNULL;
5461         textureStorageMem3DMultisampleEXT = &glTextureStorageMem3DMultisampleEXTNULL;
5462     }
5463 
5464     if (extensions.count("GL_EXT_memory_object_fd") != 0)
5465     {
5466         importMemoryFdEXT = &glImportMemoryFdEXTNULL;
5467     }
5468 
5469     if (extensions.count("GL_EXT_memory_object_win32") != 0)
5470     {
5471         importMemoryWin32HandleEXT = &glImportMemoryWin32HandleEXTNULL;
5472         importMemoryWin32NameEXT   = &glImportMemoryWin32NameEXTNULL;
5473     }
5474 
5475     if (extensions.count("GL_EXT_multi_draw_arrays") != 0)
5476     {
5477         multiDrawArrays   = &glMultiDrawArraysNULL;
5478         multiDrawElements = &glMultiDrawElementsNULL;
5479     }
5480 
5481     if (extensions.count("GL_EXT_semaphore") != 0)
5482     {
5483         deleteSemaphoresEXT           = &glDeleteSemaphoresEXTNULL;
5484         genSemaphoresEXT              = &glGenSemaphoresEXTNULL;
5485         getSemaphoreParameterui64vEXT = &glGetSemaphoreParameterui64vEXTNULL;
5486         getUnsignedBytei_vEXT         = &glGetUnsignedBytei_vEXTNULL;
5487         getUnsignedBytevEXT           = &glGetUnsignedBytevEXTNULL;
5488         isSemaphoreEXT                = &glIsSemaphoreEXTNULL;
5489         semaphoreParameterui64vEXT    = &glSemaphoreParameterui64vEXTNULL;
5490         signalSemaphoreEXT            = &glSignalSemaphoreEXTNULL;
5491         waitSemaphoreEXT              = &glWaitSemaphoreEXTNULL;
5492     }
5493 
5494     if (extensions.count("GL_EXT_semaphore_fd") != 0)
5495     {
5496         importSemaphoreFdEXT = &glImportSemaphoreFdEXTNULL;
5497     }
5498 
5499     if (extensions.count("GL_EXT_semaphore_win32") != 0)
5500     {
5501         importSemaphoreWin32HandleEXT = &glImportSemaphoreWin32HandleEXTNULL;
5502         importSemaphoreWin32NameEXT   = &glImportSemaphoreWin32NameEXTNULL;
5503     }
5504 
5505     if (extensions.count("GL_EXT_separate_shader_objects") != 0)
5506     {
5507         activeShaderProgram       = &glActiveShaderProgramNULL;
5508         bindProgramPipeline       = &glBindProgramPipelineNULL;
5509         createShaderProgramv      = &glCreateShaderProgramvNULL;
5510         deleteProgramPipelines    = &glDeleteProgramPipelinesNULL;
5511         genProgramPipelines       = &glGenProgramPipelinesNULL;
5512         getProgramPipelineInfoLog = &glGetProgramPipelineInfoLogNULL;
5513         getProgramPipelineiv      = &glGetProgramPipelineivNULL;
5514         isProgramPipeline         = &glIsProgramPipelineNULL;
5515         programParameteri         = &glProgramParameteriNULL;
5516         programUniform1f          = &glProgramUniform1fNULL;
5517         programUniform1fv         = &glProgramUniform1fvNULL;
5518         programUniform1i          = &glProgramUniform1iNULL;
5519         programUniform1iv         = &glProgramUniform1ivNULL;
5520         programUniform1ui         = &glProgramUniform1uiNULL;
5521         programUniform1uiv        = &glProgramUniform1uivNULL;
5522         programUniform2f          = &glProgramUniform2fNULL;
5523         programUniform2fv         = &glProgramUniform2fvNULL;
5524         programUniform2i          = &glProgramUniform2iNULL;
5525         programUniform2iv         = &glProgramUniform2ivNULL;
5526         programUniform2ui         = &glProgramUniform2uiNULL;
5527         programUniform2uiv        = &glProgramUniform2uivNULL;
5528         programUniform3f          = &glProgramUniform3fNULL;
5529         programUniform3fv         = &glProgramUniform3fvNULL;
5530         programUniform3i          = &glProgramUniform3iNULL;
5531         programUniform3iv         = &glProgramUniform3ivNULL;
5532         programUniform3ui         = &glProgramUniform3uiNULL;
5533         programUniform3uiv        = &glProgramUniform3uivNULL;
5534         programUniform4f          = &glProgramUniform4fNULL;
5535         programUniform4fv         = &glProgramUniform4fvNULL;
5536         programUniform4i          = &glProgramUniform4iNULL;
5537         programUniform4iv         = &glProgramUniform4ivNULL;
5538         programUniform4ui         = &glProgramUniform4uiNULL;
5539         programUniform4uiv        = &glProgramUniform4uivNULL;
5540         programUniformMatrix2fv   = &glProgramUniformMatrix2fvNULL;
5541         programUniformMatrix2x3fv = &glProgramUniformMatrix2x3fvNULL;
5542         programUniformMatrix2x4fv = &glProgramUniformMatrix2x4fvNULL;
5543         programUniformMatrix3fv   = &glProgramUniformMatrix3fvNULL;
5544         programUniformMatrix3x2fv = &glProgramUniformMatrix3x2fvNULL;
5545         programUniformMatrix3x4fv = &glProgramUniformMatrix3x4fvNULL;
5546         programUniformMatrix4fv   = &glProgramUniformMatrix4fvNULL;
5547         programUniformMatrix4fv   = &glProgramUniformMatrix4fvNULL;
5548         programUniformMatrix4x2fv = &glProgramUniformMatrix4x2fvNULL;
5549         programUniformMatrix4x3fv = &glProgramUniformMatrix4x3fvNULL;
5550         useProgramStages          = &glUseProgramStagesNULL;
5551         validateProgramPipeline   = &glValidateProgramPipelineNULL;
5552     }
5553 
5554     if (extensions.count("GL_KHR_parallel_shader_compile") != 0)
5555     {
5556         maxShaderCompilerThreadsKHR = &glMaxShaderCompilerThreadsKHRNULL;
5557     }
5558 
5559     if (extensions.count("GL_NV_fence") != 0)
5560     {
5561         deleteFencesNV = &glDeleteFencesNVNULL;
5562         finishFenceNV  = &glFinishFenceNVNULL;
5563         genFencesNV    = &glGenFencesNVNULL;
5564         getFenceivNV   = &glGetFenceivNVNULL;
5565         isFenceNV      = &glIsFenceNVNULL;
5566         setFenceNV     = &glSetFenceNVNULL;
5567         testFenceNV    = &glTestFenceNVNULL;
5568     }
5569 
5570     if (extensions.count("GL_NV_framebuffer_mixed_samples") != 0)
5571     {
5572         coverageModulationNV = &glCoverageModulationNVNULL;
5573     }
5574 
5575     if (extensions.count("GL_NV_internalformat_sample_query") != 0)
5576     {
5577         getInternalformatSampleivNV = &glGetInternalformatSampleivNVNULL;
5578     }
5579 
5580     if (extensions.count("GL_NV_path_rendering") != 0)
5581     {
5582         coverFillPathInstancedNV              = &glCoverFillPathInstancedNVNULL;
5583         coverFillPathNV                       = &glCoverFillPathNVNULL;
5584         coverStrokePathInstancedNV            = &glCoverStrokePathInstancedNVNULL;
5585         coverStrokePathNV                     = &glCoverStrokePathNVNULL;
5586         deletePathsNV                         = &glDeletePathsNVNULL;
5587         genPathsNV                            = &glGenPathsNVNULL;
5588         getPathParameterfvNV                  = &glGetPathParameterfvNVNULL;
5589         getPathParameterivNV                  = &glGetPathParameterivNVNULL;
5590         isPathNV                              = &glIsPathNVNULL;
5591         matrixLoadfEXT                        = &glMatrixLoadfEXTNULL;
5592         pathCommandsNV                        = &glPathCommandsNVNULL;
5593         pathParameterfNV                      = &glPathParameterfNVNULL;
5594         pathParameteriNV                      = &glPathParameteriNVNULL;
5595         pathStencilFuncNV                     = &glPathStencilFuncNVNULL;
5596         programPathFragmentInputGenNV         = &glProgramPathFragmentInputGenNVNULL;
5597         stencilFillPathInstancedNV            = &glStencilFillPathInstancedNVNULL;
5598         stencilFillPathNV                     = &glStencilFillPathNVNULL;
5599         stencilStrokePathInstancedNV          = &glStencilStrokePathInstancedNVNULL;
5600         stencilStrokePathNV                   = &glStencilStrokePathNVNULL;
5601         stencilThenCoverFillPathInstancedNV   = &glStencilThenCoverFillPathInstancedNVNULL;
5602         stencilThenCoverFillPathNV            = &glStencilThenCoverFillPathNVNULL;
5603         stencilThenCoverStrokePathInstancedNV = &glStencilThenCoverStrokePathInstancedNVNULL;
5604         stencilThenCoverStrokePathNV          = &glStencilThenCoverStrokePathNVNULL;
5605     }
5606 
5607     if (extensions.count("GL_OVR_multiview") != 0)
5608     {
5609         framebufferTextureMultiviewOVR = &glFramebufferTextureMultiviewOVRNULL;
5610     }
5611 }
5612 #endif  // defined(ANGLE_ENABLE_OPENGL_NULL)
5613 
5614 }  // namespace rx
5615