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