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