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