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