1 //
2 // Copyright (c) 2015 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6
7 // FunctionsGL.cpp: Implements the FuntionsGL class to contain loaded GL functions
8
9 #include "libANGLE/renderer/gl/FunctionsGL.h"
10
11 #include <algorithm>
12
13 #include "common/string_utils.h"
14 #include "libANGLE/renderer/gl/renderergl_utils.h"
15
16 namespace rx
17 {
18
GetGLVersion(PFNGLGETSTRINGPROC getStringFunction,gl::Version * outVersion,StandardGL * outStandard)19 static void GetGLVersion(PFNGLGETSTRINGPROC getStringFunction, gl::Version *outVersion, StandardGL *outStandard)
20 {
21 const std::string version = reinterpret_cast<const char*>(getStringFunction(GL_VERSION));
22 if (version.find("OpenGL ES") == std::string::npos)
23 {
24 // OpenGL spec states the GL_VERSION string will be in the following format:
25 // <version number><space><vendor-specific information>
26 // The version number is either of the form major number.minor number or major
27 // number.minor number.release number, where the numbers all have one or more
28 // digits
29 *outStandard = STANDARD_GL_DESKTOP;
30 *outVersion = gl::Version(version[0] - '0', version[2] - '0');
31 }
32 else
33 {
34 // ES spec states that the GL_VERSION string will be in the following format:
35 // "OpenGL ES N.M vendor-specific information"
36 *outStandard = STANDARD_GL_ES;
37 *outVersion = gl::Version(version[10] - '0', version[12] - '0');
38 }
39 }
40
GetIndexedExtensions(PFNGLGETINTEGERVPROC getIntegerFunction,PFNGLGETSTRINGIPROC getStringIFunction)41 static std::vector<std::string> GetIndexedExtensions(PFNGLGETINTEGERVPROC getIntegerFunction, PFNGLGETSTRINGIPROC getStringIFunction)
42 {
43 std::vector<std::string> result;
44
45 GLint numExtensions;
46 getIntegerFunction(GL_NUM_EXTENSIONS, &numExtensions);
47
48 result.reserve(numExtensions);
49
50 for (GLint i = 0; i < numExtensions; i++)
51 {
52 result.push_back(reinterpret_cast<const char*>(getStringIFunction(GL_EXTENSIONS, i)));
53 }
54
55 return result;
56 }
57
58 template <typename T>
AssignGLEntryPoint(void * function,T * outFunction)59 static void AssignGLEntryPoint(void *function, T *outFunction)
60 {
61 *outFunction = reinterpret_cast<T>(function);
62 }
63
64 template <typename T>
AssignGLExtensionEntryPoint(const std::vector<std::string> & extensions,const char * requiredExtensionString,void * function,T * outFunction)65 static void AssignGLExtensionEntryPoint(const std::vector<std::string> &extensions, const char *requiredExtensionString,
66 void *function, T *outFunction)
67 {
68 std::vector<std::string> requiredExtensions;
69 angle::SplitStringAlongWhitespace(requiredExtensionString, &requiredExtensions);
70 for (const std::string& requiredExtension : requiredExtensions)
71 {
72 if (std::find(extensions.begin(), extensions.end(), requiredExtension) == extensions.end())
73 {
74 return;
75 }
76 }
77
78 *outFunction = reinterpret_cast<T>(function);
79 }
80
FunctionsGL()81 FunctionsGL::FunctionsGL()
82 : version(),
83 standard(),
84 extensions(),
85
86 blendFunc(nullptr),
87 clear(nullptr),
88 clearColor(nullptr),
89 clearDepth(nullptr),
90 clearStencil(nullptr),
91 colorMask(nullptr),
92 cullFace(nullptr),
93 depthFunc(nullptr),
94 depthMask(nullptr),
95 depthRange(nullptr),
96 disable(nullptr),
97 drawBuffer(nullptr),
98 enable(nullptr),
99 finish(nullptr),
100 flush(nullptr),
101 frontFace(nullptr),
102 getBooleanv(nullptr),
103 getDoublev(nullptr),
104 getError(nullptr),
105 getFloatv(nullptr),
106 getIntegerv(nullptr),
107 getString(nullptr),
108 getTexImage(nullptr),
109 getTexLevelParameterfv(nullptr),
110 getTexLevelParameteriv(nullptr),
111 getTexParameterfv(nullptr),
112 getTexParameteriv(nullptr),
113 hint(nullptr),
114 isEnabled(nullptr),
115 lineWidth(nullptr),
116 logicOp(nullptr),
117 pixelStoref(nullptr),
118 pixelStorei(nullptr),
119 pointSize(nullptr),
120 polygonMode(nullptr),
121 readBuffer(nullptr),
122 readPixels(nullptr),
123 scissor(nullptr),
124 stencilFunc(nullptr),
125 stencilMask(nullptr),
126 stencilOp(nullptr),
127 texImage1D(nullptr),
128 texImage2D(nullptr),
129 texParameterf(nullptr),
130 texParameterfv(nullptr),
131 texParameteri(nullptr),
132 texParameteriv(nullptr),
133 viewport(nullptr),
134
135 bindTexture(nullptr),
136 copyTexImage1D(nullptr),
137 copyTexImage2D(nullptr),
138 copyTexSubImage1D(nullptr),
139 copyTexSubImage2D(nullptr),
140 deleteTextures(nullptr),
141 drawArrays(nullptr),
142 drawElements(nullptr),
143 genTextures(nullptr),
144 isTexture(nullptr),
145 polygonOffset(nullptr),
146 texSubImage1D(nullptr),
147 texSubImage2D(nullptr),
148
149 blendColor(nullptr),
150 blendEquation(nullptr),
151 copyTexSubImage3D(nullptr),
152 drawRangeElements(nullptr),
153 texImage3D(nullptr),
154 texSubImage3D(nullptr),
155
156 deleteFencesNV(nullptr),
157 genFencesNV(nullptr),
158 isFenceNV(nullptr),
159 testFenceNV(nullptr),
160 getFenceivNV(nullptr),
161 finishFenceNV(nullptr),
162 setFenceNV(nullptr),
163
164 activeTexture(nullptr),
165 compressedTexImage1D(nullptr),
166 compressedTexImage2D(nullptr),
167 compressedTexImage3D(nullptr),
168 compressedTexSubImage1D(nullptr),
169 compressedTexSubImage2D(nullptr),
170 compressedTexSubImage3D(nullptr),
171 getCompressedTexImage(nullptr),
172 sampleCoverage(nullptr),
173
174 blendFuncSeparate(nullptr),
175 multiDrawArrays(nullptr),
176 multiDrawElements(nullptr),
177 pointParameterf(nullptr),
178 pointParameterfv(nullptr),
179 pointParameteri(nullptr),
180 pointParameteriv(nullptr),
181
182 beginQuery(nullptr),
183 bindBuffer(nullptr),
184 bufferData(nullptr),
185 bufferSubData(nullptr),
186 deleteBuffers(nullptr),
187 deleteQueries(nullptr),
188 endQuery(nullptr),
189 genBuffers(nullptr),
190 genQueries(nullptr),
191 getBufferParameteriv(nullptr),
192 getBufferPointerv(nullptr),
193 getBufferSubData(nullptr),
194 getQueryObjectiv(nullptr),
195 getQueryObjectuiv(nullptr),
196 getQueryiv(nullptr),
197 isBuffer(nullptr),
198 isQuery(nullptr),
199 mapBuffer(nullptr),
200 unmapBuffer(nullptr),
201
202 attachShader(nullptr),
203 bindAttribLocation(nullptr),
204 blendEquationSeparate(nullptr),
205 compileShader(nullptr),
206 createProgram(nullptr),
207 createShader(nullptr),
208 deleteProgram(nullptr),
209 deleteShader(nullptr),
210 detachShader(nullptr),
211 disableVertexAttribArray(nullptr),
212 drawBuffers(nullptr),
213 enableVertexAttribArray(nullptr),
214 getActiveAttrib(nullptr),
215 getActiveUniform(nullptr),
216 getAttachedShaders(nullptr),
217 getAttribLocation(nullptr),
218 getProgramInfoLog(nullptr),
219 getProgramiv(nullptr),
220 getShaderInfoLog(nullptr),
221 getShaderSource(nullptr),
222 getShaderiv(nullptr),
223 getUniformLocation(nullptr),
224 getUniformfv(nullptr),
225 getUniformiv(nullptr),
226 getVertexAttribPointerv(nullptr),
227 getVertexAttribdv(nullptr),
228 getVertexAttribfv(nullptr),
229 getVertexAttribiv(nullptr),
230 isProgram(nullptr),
231 isShader(nullptr),
232 linkProgram(nullptr),
233 shaderSource(nullptr),
234 stencilFuncSeparate(nullptr),
235 stencilMaskSeparate(nullptr),
236 stencilOpSeparate(nullptr),
237 uniform1f(nullptr),
238 uniform1fv(nullptr),
239 uniform1i(nullptr),
240 uniform1iv(nullptr),
241 uniform2f(nullptr),
242 uniform2fv(nullptr),
243 uniform2i(nullptr),
244 uniform2iv(nullptr),
245 uniform3f(nullptr),
246 uniform3fv(nullptr),
247 uniform3i(nullptr),
248 uniform3iv(nullptr),
249 uniform4f(nullptr),
250 uniform4fv(nullptr),
251 uniform4i(nullptr),
252 uniform4iv(nullptr),
253 uniformMatrix2fv(nullptr),
254 uniformMatrix3fv(nullptr),
255 uniformMatrix4fv(nullptr),
256 useProgram(nullptr),
257 validateProgram(nullptr),
258 vertexAttrib1d(nullptr),
259 vertexAttrib1dv(nullptr),
260 vertexAttrib1f(nullptr),
261 vertexAttrib1fv(nullptr),
262 vertexAttrib1s(nullptr),
263 vertexAttrib1sv(nullptr),
264 vertexAttrib2d(nullptr),
265 vertexAttrib2dv(nullptr),
266 vertexAttrib2f(nullptr),
267 vertexAttrib2fv(nullptr),
268 vertexAttrib2s(nullptr),
269 vertexAttrib2sv(nullptr),
270 vertexAttrib3d(nullptr),
271 vertexAttrib3dv(nullptr),
272 vertexAttrib3f(nullptr),
273 vertexAttrib3fv(nullptr),
274 vertexAttrib3s(nullptr),
275 vertexAttrib3sv(nullptr),
276 vertexAttrib4Nbv(nullptr),
277 vertexAttrib4Niv(nullptr),
278 vertexAttrib4Nsv(nullptr),
279 vertexAttrib4Nub(nullptr),
280 vertexAttrib4Nubv(nullptr),
281 vertexAttrib4Nuiv(nullptr),
282 vertexAttrib4Nusv(nullptr),
283 vertexAttrib4bv(nullptr),
284 vertexAttrib4d(nullptr),
285 vertexAttrib4dv(nullptr),
286 vertexAttrib4f(nullptr),
287 vertexAttrib4fv(nullptr),
288 vertexAttrib4iv(nullptr),
289 vertexAttrib4s(nullptr),
290 vertexAttrib4sv(nullptr),
291 vertexAttrib4ubv(nullptr),
292 vertexAttrib4uiv(nullptr),
293 vertexAttrib4usv(nullptr),
294 vertexAttribPointer(nullptr),
295
296 uniformMatrix2x3fv(nullptr),
297 uniformMatrix2x4fv(nullptr),
298 uniformMatrix3x2fv(nullptr),
299 uniformMatrix3x4fv(nullptr),
300 uniformMatrix4x2fv(nullptr),
301 uniformMatrix4x3fv(nullptr),
302
303 beginConditionalRender(nullptr),
304 beginTransformFeedback(nullptr),
305 bindBufferBase(nullptr),
306 bindBufferRange(nullptr),
307 bindFragDataLocation(nullptr),
308 bindFramebuffer(nullptr),
309 bindRenderbuffer(nullptr),
310 bindVertexArray(nullptr),
311 blitFramebuffer(nullptr),
312 checkFramebufferStatus(nullptr),
313 clampColor(nullptr),
314 clearBufferfi(nullptr),
315 clearBufferfv(nullptr),
316 clearBufferiv(nullptr),
317 clearBufferuiv(nullptr),
318 colorMaski(nullptr),
319 deleteFramebuffers(nullptr),
320 deleteRenderbuffers(nullptr),
321 deleteVertexArrays(nullptr),
322 disablei(nullptr),
323 enablei(nullptr),
324 endConditionalRender(nullptr),
325 endTransformFeedback(nullptr),
326 flushMappedBufferRange(nullptr),
327 framebufferRenderbuffer(nullptr),
328 framebufferTexture1D(nullptr),
329 framebufferTexture2D(nullptr),
330 framebufferTexture3D(nullptr),
331 framebufferTextureLayer(nullptr),
332 genFramebuffers(nullptr),
333 genRenderbuffers(nullptr),
334 genVertexArrays(nullptr),
335 generateMipmap(nullptr),
336 getBooleani_v(nullptr),
337 getFragDataLocation(nullptr),
338 getFramebufferAttachmentParameteriv(nullptr),
339 getIntegeri_v(nullptr),
340 getRenderbufferParameteriv(nullptr),
341 getStringi(nullptr),
342 getTexParameterIiv(nullptr),
343 getTexParameterIuiv(nullptr),
344 getTransformFeedbackVarying(nullptr),
345 getUniformuiv(nullptr),
346 getVertexAttribIiv(nullptr),
347 getVertexAttribIuiv(nullptr),
348 isEnabledi(nullptr),
349 isFramebuffer(nullptr),
350 isRenderbuffer(nullptr),
351 isVertexArray(nullptr),
352 mapBufferRange(nullptr),
353 renderbufferStorage(nullptr),
354 renderbufferStorageMultisample(nullptr),
355 texParameterIiv(nullptr),
356 texParameterIuiv(nullptr),
357 transformFeedbackVaryings(nullptr),
358 uniform1ui(nullptr),
359 uniform1uiv(nullptr),
360 uniform2ui(nullptr),
361 uniform2uiv(nullptr),
362 uniform3ui(nullptr),
363 uniform3uiv(nullptr),
364 uniform4ui(nullptr),
365 uniform4uiv(nullptr),
366 vertexAttribI1i(nullptr),
367 vertexAttribI1iv(nullptr),
368 vertexAttribI1ui(nullptr),
369 vertexAttribI1uiv(nullptr),
370 vertexAttribI2i(nullptr),
371 vertexAttribI2iv(nullptr),
372 vertexAttribI2ui(nullptr),
373 vertexAttribI2uiv(nullptr),
374 vertexAttribI3i(nullptr),
375 vertexAttribI3iv(nullptr),
376 vertexAttribI3ui(nullptr),
377 vertexAttribI3uiv(nullptr),
378 vertexAttribI4bv(nullptr),
379 vertexAttribI4i(nullptr),
380 vertexAttribI4iv(nullptr),
381 vertexAttribI4sv(nullptr),
382 vertexAttribI4ubv(nullptr),
383 vertexAttribI4ui(nullptr),
384 vertexAttribI4uiv(nullptr),
385 vertexAttribI4usv(nullptr),
386 vertexAttribIPointer(nullptr),
387
388 copyBufferSubData(nullptr),
389 drawArraysInstanced(nullptr),
390 drawElementsInstanced(nullptr),
391 getActiveUniformBlockName(nullptr),
392 getActiveUniformBlockiv(nullptr),
393 getActiveUniformName(nullptr),
394 getActiveUniformsiv(nullptr),
395 getUniformBlockIndex(nullptr),
396 getUniformIndices(nullptr),
397 primitiveRestartIndex(nullptr),
398 texBuffer(nullptr),
399 uniformBlockBinding(nullptr),
400
401 clientWaitSync(nullptr),
402 deleteSync(nullptr),
403 drawElementsBaseVertex(nullptr),
404 drawElementsInstancedBaseVertex(nullptr),
405 drawRangeElementsBaseVertex(nullptr),
406 fenceSync(nullptr),
407 framebufferTexture(nullptr),
408 getBufferParameteri64v(nullptr),
409 getInteger64i_v(nullptr),
410 getInteger64v(nullptr),
411 getMultisamplefv(nullptr),
412 getSynciv(nullptr),
413 isSync(nullptr),
414 multiDrawElementsBaseVertex(nullptr),
415 provokingVertex(nullptr),
416 sampleMaski(nullptr),
417 texImage2DMultisample(nullptr),
418 texImage3DMultisample(nullptr),
419 waitSync(nullptr),
420
421 matrixLoadEXT(nullptr),
422 genPathsNV(nullptr),
423 delPathsNV(nullptr),
424 pathCommandsNV(nullptr),
425 setPathParameterfNV(nullptr),
426 setPathParameteriNV(nullptr),
427 getPathParameterfNV(nullptr),
428 getPathParameteriNV(nullptr),
429 pathStencilFuncNV(nullptr),
430 stencilFillPathNV(nullptr),
431 stencilStrokePathNV(nullptr),
432 coverFillPathNV(nullptr),
433 coverStrokePathNV(nullptr),
434 stencilThenCoverFillPathNV(nullptr),
435 stencilThenCoverStrokePathNV(nullptr),
436 coverFillPathInstancedNV(nullptr),
437 coverStrokePathInstancedNV(nullptr),
438 stencilFillPathInstancedNV(nullptr),
439 stencilStrokePathInstancedNV(nullptr),
440 stencilThenCoverFillPathInstancedNV(nullptr),
441 stencilThenCoverStrokePathInstancedNV(nullptr),
442 programPathFragmentInputGenNV(nullptr),
443
444 bindFragDataLocationIndexed(nullptr),
445 bindSampler(nullptr),
446 deleteSamplers(nullptr),
447 genSamplers(nullptr),
448 getFragDataIndex(nullptr),
449 getQueryObjecti64v(nullptr),
450 getQueryObjectui64v(nullptr),
451 getSamplerParameterIiv(nullptr),
452 getSamplerParameterIuiv(nullptr),
453 getSamplerParameterfv(nullptr),
454 getSamplerParameteriv(nullptr),
455 isSampler(nullptr),
456 queryCounter(nullptr),
457 samplerParameterIiv(nullptr),
458 samplerParameterIuiv(nullptr),
459 samplerParameterf(nullptr),
460 samplerParameterfv(nullptr),
461 samplerParameteri(nullptr),
462 samplerParameteriv(nullptr),
463 vertexAttribDivisor(nullptr),
464 vertexAttribP1ui(nullptr),
465 vertexAttribP1uiv(nullptr),
466 vertexAttribP2ui(nullptr),
467 vertexAttribP2uiv(nullptr),
468 vertexAttribP3ui(nullptr),
469 vertexAttribP3uiv(nullptr),
470 vertexAttribP4ui(nullptr),
471 vertexAttribP4uiv(nullptr),
472
473 beginQueryIndexed(nullptr),
474 bindTransformFeedback(nullptr),
475 blendEquationSeparatei(nullptr),
476 blendEquationi(nullptr),
477 blendFuncSeparatei(nullptr),
478 blendFunci(nullptr),
479 deleteTransformFeedbacks(nullptr),
480 drawArraysIndirect(nullptr),
481 drawElementsIndirect(nullptr),
482 drawTransformFeedback(nullptr),
483 drawTransformFeedbackStream(nullptr),
484 endQueryIndexed(nullptr),
485 genTransformFeedbacks(nullptr),
486 getActiveSubroutineName(nullptr),
487 getActiveSubroutineUniformName(nullptr),
488 getActiveSubroutineUniformiv(nullptr),
489 getProgramStageiv(nullptr),
490 getQueryIndexediv(nullptr),
491 getSubroutineIndex(nullptr),
492 getSubroutineUniformLocation(nullptr),
493 getUniformSubroutineuiv(nullptr),
494 getUniformdv(nullptr),
495 isTransformFeedback(nullptr),
496 minSampleShading(nullptr),
497 patchParameterfv(nullptr),
498 patchParameteri(nullptr),
499 pauseTransformFeedback(nullptr),
500 resumeTransformFeedback(nullptr),
501 uniform1d(nullptr),
502 uniform1dv(nullptr),
503 uniform2d(nullptr),
504 uniform2dv(nullptr),
505 uniform3d(nullptr),
506 uniform3dv(nullptr),
507 uniform4d(nullptr),
508 uniform4dv(nullptr),
509 uniformMatrix2dv(nullptr),
510 uniformMatrix2x3dv(nullptr),
511 uniformMatrix2x4dv(nullptr),
512 uniformMatrix3dv(nullptr),
513 uniformMatrix3x2dv(nullptr),
514 uniformMatrix3x4dv(nullptr),
515 uniformMatrix4dv(nullptr),
516 uniformMatrix4x2dv(nullptr),
517 uniformMatrix4x3dv(nullptr),
518 uniformSubroutinesuiv(nullptr),
519
520 activeShaderProgram(nullptr),
521 bindProgramPipeline(nullptr),
522 clearDepthf(nullptr),
523 createShaderProgramv(nullptr),
524 deleteProgramPipelines(nullptr),
525 depthRangeArrayv(nullptr),
526 depthRangeIndexed(nullptr),
527 depthRangef(nullptr),
528 genProgramPipelines(nullptr),
529 getDoublei_v(nullptr),
530 getFloati_v(nullptr),
531 getProgramBinary(nullptr),
532 getProgramPipelineInfoLog(nullptr),
533 getProgramPipelineiv(nullptr),
534 getShaderPrecisionFormat(nullptr),
535 getVertexAttribLdv(nullptr),
536 isProgramPipeline(nullptr),
537 programBinary(nullptr),
538 programParameteri(nullptr),
539 programUniform1d(nullptr),
540 programUniform1dv(nullptr),
541 programUniform1f(nullptr),
542 programUniform1fv(nullptr),
543 programUniform1i(nullptr),
544 programUniform1iv(nullptr),
545 programUniform1ui(nullptr),
546 programUniform1uiv(nullptr),
547 programUniform2d(nullptr),
548 programUniform2dv(nullptr),
549 programUniform2f(nullptr),
550 programUniform2fv(nullptr),
551 programUniform2i(nullptr),
552 programUniform2iv(nullptr),
553 programUniform2ui(nullptr),
554 programUniform2uiv(nullptr),
555 programUniform3d(nullptr),
556 programUniform3dv(nullptr),
557 programUniform3f(nullptr),
558 programUniform3fv(nullptr),
559 programUniform3i(nullptr),
560 programUniform3iv(nullptr),
561 programUniform3ui(nullptr),
562 programUniform3uiv(nullptr),
563 programUniform4d(nullptr),
564 programUniform4dv(nullptr),
565 programUniform4f(nullptr),
566 programUniform4fv(nullptr),
567 programUniform4i(nullptr),
568 programUniform4iv(nullptr),
569 programUniform4ui(nullptr),
570 programUniform4uiv(nullptr),
571 programUniformMatrix2dv(nullptr),
572 programUniformMatrix2fv(nullptr),
573 programUniformMatrix2x3dv(nullptr),
574 programUniformMatrix2x3fv(nullptr),
575 programUniformMatrix2x4dv(nullptr),
576 programUniformMatrix2x4fv(nullptr),
577 programUniformMatrix3dv(nullptr),
578 programUniformMatrix3fv(nullptr),
579 programUniformMatrix3x2dv(nullptr),
580 programUniformMatrix3x2fv(nullptr),
581 programUniformMatrix3x4dv(nullptr),
582 programUniformMatrix3x4fv(nullptr),
583 programUniformMatrix4dv(nullptr),
584 programUniformMatrix4fv(nullptr),
585 programUniformMatrix4x2dv(nullptr),
586 programUniformMatrix4x2fv(nullptr),
587 programUniformMatrix4x3dv(nullptr),
588 programUniformMatrix4x3fv(nullptr),
589 releaseShaderCompiler(nullptr),
590 scissorArrayv(nullptr),
591 scissorIndexed(nullptr),
592 scissorIndexedv(nullptr),
593 shaderBinary(nullptr),
594 useProgramStages(nullptr),
595 validateProgramPipeline(nullptr),
596 vertexAttribL1d(nullptr),
597 vertexAttribL1dv(nullptr),
598 vertexAttribL2d(nullptr),
599 vertexAttribL2dv(nullptr),
600 vertexAttribL3d(nullptr),
601 vertexAttribL3dv(nullptr),
602 vertexAttribL4d(nullptr),
603 vertexAttribL4dv(nullptr),
604 vertexAttribLPointer(nullptr),
605 viewportArrayv(nullptr),
606 viewportIndexedf(nullptr),
607 viewportIndexedfv(nullptr),
608
609 bindImageTexture(nullptr),
610 drawArraysInstancedBaseInstance(nullptr),
611 drawElementsInstancedBaseInstance(nullptr),
612 drawElementsInstancedBaseVertexBaseInstance(nullptr),
613 drawTransformFeedbackInstanced(nullptr),
614 drawTransformFeedbackStreamInstanced(nullptr),
615 getActiveAtomicCounterBufferiv(nullptr),
616 getInternalformativ(nullptr),
617 memoryBarrier(nullptr),
618 texStorage1D(nullptr),
619 texStorage2D(nullptr),
620 texStorage3D(nullptr),
621
622 bindVertexBuffer(nullptr),
623 clearBufferData(nullptr),
624 clearBufferSubData(nullptr),
625 copyImageSubData(nullptr),
626 debugMessageCallback(nullptr),
627 debugMessageControl(nullptr),
628 debugMessageInsert(nullptr),
629 dispatchCompute(nullptr),
630 dispatchComputeIndirect(nullptr),
631 framebufferParameteri(nullptr),
632 getDebugMessageLog(nullptr),
633 getFramebufferParameteriv(nullptr),
634 getInternalformati64v(nullptr),
635 getPointerv(nullptr),
636 getObjectLabel(nullptr),
637 getObjectPtrLabel(nullptr),
638 getProgramInterfaceiv(nullptr),
639 getProgramResourceIndex(nullptr),
640 getProgramResourceLocation(nullptr),
641 getProgramResourceLocationIndex(nullptr),
642 getProgramResourceName(nullptr),
643 getProgramResourceiv(nullptr),
644 invalidateBufferData(nullptr),
645 invalidateBufferSubData(nullptr),
646 invalidateFramebuffer(nullptr),
647 invalidateSubFramebuffer(nullptr),
648 invalidateTexImage(nullptr),
649 invalidateTexSubImage(nullptr),
650 multiDrawArraysIndirect(nullptr),
651 multiDrawElementsIndirect(nullptr),
652 objectLabel(nullptr),
653 objectPtrLabel(nullptr),
654 popDebugGroup(nullptr),
655 pushDebugGroup(nullptr),
656 shaderStorageBlockBinding(nullptr),
657 texBufferRange(nullptr),
658 texStorage2DMultisample(nullptr),
659 texStorage3DMultisample(nullptr),
660 textureView(nullptr),
661 vertexAttribBinding(nullptr),
662 vertexAttribFormat(nullptr),
663 vertexAttribIFormat(nullptr),
664 vertexAttribLFormat(nullptr),
665 vertexBindingDivisor(nullptr),
666 coverageModulationNV(nullptr),
667
668 bindBuffersBase(nullptr),
669 bindBuffersRange(nullptr),
670 bindImageTextures(nullptr),
671 bindSamplers(nullptr),
672 bindTextures(nullptr),
673 bindVertexBuffers(nullptr),
674 bufferStorage(nullptr),
675 clearTexImage(nullptr),
676 clearTexSubImage(nullptr),
677
678 bindTextureUnit(nullptr),
679 blitNamedFramebuffer(nullptr),
680 checkNamedFramebufferStatus(nullptr),
681 clearNamedBufferData(nullptr),
682 clearNamedBufferSubData(nullptr),
683 clearNamedFramebufferfi(nullptr),
684 clearNamedFramebufferfv(nullptr),
685 clearNamedFramebufferiv(nullptr),
686 clearNamedFramebufferuiv(nullptr),
687 clipControl(nullptr),
688 compressedTextureSubImage1D(nullptr),
689 compressedTextureSubImage2D(nullptr),
690 compressedTextureSubImage3D(nullptr),
691 copyNamedBufferSubData(nullptr),
692 copyTextureSubImage1D(nullptr),
693 copyTextureSubImage2D(nullptr),
694 copyTextureSubImage3D(nullptr),
695 createBuffers(nullptr),
696 createFramebuffers(nullptr),
697 createProgramPipelines(nullptr),
698 createQueries(nullptr),
699 createRenderbuffers(nullptr),
700 createSamplers(nullptr),
701 createTextures(nullptr),
702 createTransformFeedbacks(nullptr),
703 createVertexArrays(nullptr),
704 disableVertexArrayAttrib(nullptr),
705 enableVertexArrayAttrib(nullptr),
706 flushMappedNamedBufferRange(nullptr),
707 generateTextureMipmap(nullptr),
708 getCompressedTextureImage(nullptr),
709 getCompressedTextureSubImage(nullptr),
710 getGraphicsResetStatus(nullptr),
711 getNamedBufferParameteri64v(nullptr),
712 getNamedBufferParameteriv(nullptr),
713 getNamedBufferPointerv(nullptr),
714 getNamedBufferSubData(nullptr),
715 getNamedFramebufferAttachmentParameteriv(nullptr),
716 getNamedFramebufferParameteriv(nullptr),
717 getNamedRenderbufferParameteriv(nullptr),
718 getQueryBufferObjecti64v(nullptr),
719 getQueryBufferObjectiv(nullptr),
720 getQueryBufferObjectui64v(nullptr),
721 getQueryBufferObjectuiv(nullptr),
722 getTextureImage(nullptr),
723 getTextureLevelParameterfv(nullptr),
724 getTextureLevelParameteriv(nullptr),
725 getTextureParameterIiv(nullptr),
726 getTextureParameterIuiv(nullptr),
727 getTextureParameterfv(nullptr),
728 getTextureParameteriv(nullptr),
729 getTextureSubImage(nullptr),
730 getTransformFeedbacki64_v(nullptr),
731 getTransformFeedbacki_v(nullptr),
732 getTransformFeedbackiv(nullptr),
733 getVertexArrayIndexed64iv(nullptr),
734 getVertexArrayIndexediv(nullptr),
735 getVertexArrayiv(nullptr),
736 getnCompressedTexImage(nullptr),
737 getnTexImage(nullptr),
738 getnUniformdv(nullptr),
739 getnUniformfv(nullptr),
740 getnUniformiv(nullptr),
741 getnUniformuiv(nullptr),
742 invalidateNamedFramebufferData(nullptr),
743 invalidateNamedFramebufferSubData(nullptr),
744 mapNamedBuffer(nullptr),
745 mapNamedBufferRange(nullptr),
746 memoryBarrierByRegion(nullptr),
747 namedBufferData(nullptr),
748 namedBufferStorage(nullptr),
749 namedBufferSubData(nullptr),
750 namedFramebufferDrawBuffer(nullptr),
751 namedFramebufferDrawBuffers(nullptr),
752 namedFramebufferParameteri(nullptr),
753 namedFramebufferReadBuffer(nullptr),
754 namedFramebufferRenderbuffer(nullptr),
755 namedFramebufferTexture(nullptr),
756 namedFramebufferTextureLayer(nullptr),
757 namedRenderbufferStorage(nullptr),
758 namedRenderbufferStorageMultisample(nullptr),
759 readnPixels(nullptr),
760 textureBarrier(nullptr),
761 textureBuffer(nullptr),
762 textureBufferRange(nullptr),
763 textureParameterIiv(nullptr),
764 textureParameterIuiv(nullptr),
765 textureParameterf(nullptr),
766 textureParameterfv(nullptr),
767 textureParameteri(nullptr),
768 textureParameteriv(nullptr),
769 textureStorage1D(nullptr),
770 textureStorage2D(nullptr),
771 textureStorage2DMultisample(nullptr),
772 textureStorage3D(nullptr),
773 textureStorage3DMultisample(nullptr),
774 textureSubImage1D(nullptr),
775 textureSubImage2D(nullptr),
776 textureSubImage3D(nullptr),
777 transformFeedbackBufferBase(nullptr),
778 transformFeedbackBufferRange(nullptr),
779 unmapNamedBuffer(nullptr),
780 vertexArrayAttribBinding(nullptr),
781 vertexArrayAttribFormat(nullptr),
782 vertexArrayAttribIFormat(nullptr),
783 vertexArrayAttribLFormat(nullptr),
784 vertexArrayBindingDivisor(nullptr),
785 vertexArrayElementBuffer(nullptr),
786 vertexArrayVertexBuffer(nullptr),
787 vertexArrayVertexBuffers(nullptr),
788 blendBarrier(nullptr),
789 primitiveBoundingBox(nullptr),
790 eglImageTargetRenderbufferStorageOES(nullptr),
791 eglImageTargetTexture2DOES(nullptr)
792 {
793 }
794
~FunctionsGL()795 FunctionsGL::~FunctionsGL()
796 {
797 }
798
initialize()799 void FunctionsGL::initialize()
800 {
801 // Grab the version number
802 AssignGLEntryPoint(loadProcAddress("glGetString"), &getString);
803 AssignGLEntryPoint(loadProcAddress("glGetIntegerv"), &getIntegerv);
804 GetGLVersion(getString, &version, &standard);
805
806 // Grab the GL extensions
807 if (isAtLeastGL(gl::Version(3, 0)) || isAtLeastGLES(gl::Version(3, 0)))
808 {
809 AssignGLEntryPoint(loadProcAddress("glGetStringi"), &getStringi);
810 extensions = GetIndexedExtensions(getIntegerv, getStringi);
811 }
812 else
813 {
814 const char *exts = reinterpret_cast<const char*>(getString(GL_EXTENSIONS));
815 angle::SplitStringAlongWhitespace(std::string(exts), &extensions);
816 }
817
818 // Load the entry points
819 switch (standard)
820 {
821 case STANDARD_GL_DESKTOP:
822 initializeProcsDesktopGL();
823 break;
824
825 case STANDARD_GL_ES:
826 initializeProcsGLES();
827 break;
828
829 default:
830 UNREACHABLE();
831 break;
832 }
833 }
834
initializeProcsDesktopGL()835 void FunctionsGL::initializeProcsDesktopGL()
836 {
837 // Check the context profile
838 profile = 0;
839 if (isAtLeastGL(gl::Version(3, 2)))
840 {
841 getIntegerv(GL_CONTEXT_PROFILE_MASK, &profile);
842 }
843
844 // clang-format off
845
846 // Load extensions
847 // Even though extensions are written against specific versions of GL, many drivers expose the extensions
848 // in even older versions. Always try loading the extensions regardless of GL version.
849
850 // GL_ARB_program_interface_query (loading only functions relevant to GL_NV_path_rendering here)
851 AssignGLExtensionEntryPoint(extensions, "GL_ARB_program_interface_query", loadProcAddress("glGetProgramInterfaceiv"), &getProgramInterfaceiv);
852 AssignGLExtensionEntryPoint(extensions, "GL_ARB_program_interface_query", loadProcAddress("glGetProgramResourceName"), &getProgramResourceName);
853 AssignGLExtensionEntryPoint(extensions, "GL_ARB_program_interface_query", loadProcAddress("glGetProgramResourceiv"), &getProgramResourceiv);
854
855 // GL_NV_path_rendering
856 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glMatrixLoadfEXT"), &matrixLoadEXT);
857 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glGenPathsNV"), &genPathsNV);
858 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glDeletePathsNV"), &delPathsNV);
859 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glPathCommandsNV"), &pathCommandsNV);
860 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glIsPathNV"), &isPathNV);
861 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glPathParameterfNV"), &setPathParameterfNV);
862 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glPathParameteriNV"), &setPathParameteriNV);
863 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glGetPathParameterfvNV"), &getPathParameterfNV);
864 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glGetPathParameterivNV"), &getPathParameteriNV);
865 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glPathStencilFuncNV"), &pathStencilFuncNV);
866 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glStencilFillPathNV"), &stencilFillPathNV);
867 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glStencilStrokePathNV"), &stencilStrokePathNV);
868 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glCoverFillPathNV"), &coverFillPathNV);
869 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glCoverStrokePathNV"), &coverStrokePathNV);
870 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glStencilThenCoverFillPathNV"), &stencilThenCoverFillPathNV);
871 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glStencilThenCoverStrokePathNV"), &stencilThenCoverStrokePathNV);
872 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glCoverFillPathInstancedNV"), &coverFillPathInstancedNV);
873 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glCoverStrokePathInstancedNV"), &coverStrokePathInstancedNV);
874 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glStencilFillPathInstancedNV"), &stencilFillPathInstancedNV);
875 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glStencilStrokePathInstancedNV"), &stencilStrokePathInstancedNV);
876 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glStencilThenCoverFillPathInstancedNV"), &stencilThenCoverFillPathInstancedNV);
877 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glStencilThenCoverStrokePathInstancedNV"), &stencilThenCoverStrokePathInstancedNV);
878 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glProgramPathFragmentInputGenNV"), &programPathFragmentInputGenNV);
879
880 // GL_NV_framebuffer_mixed_samples
881 AssignGLExtensionEntryPoint(extensions, "GL_NV_framebuffer_mixed_samples", loadProcAddress("glCoverageModulationNV"), &coverageModulationNV);
882
883 // GL_NV_fence
884 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glDeleteFencesNV"), &deleteFencesNV);
885 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glGenFencesNV"), &genFencesNV);
886 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glIsFenceNV"), &isFenceNV);
887 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glTestFenceNV"), &testFenceNV);
888 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glGetFenceivNV"), &getFenceivNV);
889 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glFinishFenceNV"), &finishFenceNV);
890 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glSetFenceNV"), &setFenceNV);
891
892 // GL_EXT_texture_storage
893 AssignGLExtensionEntryPoint(extensions, "GL_EXT_texture_storage", loadProcAddress("glTexStorage1DEXT"), &texStorage1D);
894 AssignGLExtensionEntryPoint(extensions, "GL_EXT_texture_storage", loadProcAddress("glTexStorage2DEXT"), &texStorage2D);
895 AssignGLExtensionEntryPoint(extensions, "GL_EXT_texture_storage GL_EXT_texture3D", loadProcAddress("glTexStorage3DEXT"), &texStorage3D);
896 AssignGLExtensionEntryPoint(extensions, "GL_EXT_texture_storage GL_EXT_direct_state_access", loadProcAddress("glTextureStorage1DEXT"), &textureStorage1D);
897 AssignGLExtensionEntryPoint(extensions, "GL_EXT_texture_storage GL_EXT_direct_state_access", loadProcAddress("glTextureStorage2DEXT"), &textureStorage2D);
898 AssignGLExtensionEntryPoint(extensions, "GL_EXT_texture_storage GL_EXT_direct_state_access GL_EXT_texture3D", loadProcAddress("glTextureStorage3DEXT"), &textureStorage3D);
899
900 // GL_ARB_vertex_array_object
901 AssignGLExtensionEntryPoint(extensions, "GL_ARB_vertex_array_object", loadProcAddress("glBindVertexArray"), &bindVertexArray);
902 AssignGLExtensionEntryPoint(extensions, "GL_ARB_vertex_array_object", loadProcAddress("glDeleteVertexArrays"), &deleteVertexArrays);
903 AssignGLExtensionEntryPoint(extensions, "GL_ARB_vertex_array_object", loadProcAddress("glGenVertexArrays"), &genVertexArrays);
904 AssignGLExtensionEntryPoint(extensions, "GL_ARB_vertex_array_object", loadProcAddress("glIsVertexArray"), &isVertexArray);
905
906 // GL_ARB_sync
907 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glClientWaitSync"), &clientWaitSync);
908 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glDeleteSync"), &deleteSync);
909 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glFenceSync"), &fenceSync);
910 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glGetInteger64i_v"), &getInteger64i_v);
911 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glGetInteger64v"), &getInteger64v);
912 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glGetSynciv"), &getSynciv);
913 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glIsSync"), &isSync);
914 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glWaitSync"), &waitSync);
915
916 // GL_EXT_framebuffer_object
917 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_object", loadProcAddress("glIsRenderbufferEXT"), &isRenderbuffer);
918 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_object", loadProcAddress("glBindRenderbufferEXT"), &bindRenderbuffer);
919 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_object", loadProcAddress("glDeleteRenderbuffersEXT"), &deleteRenderbuffers);
920 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_object", loadProcAddress("glGenRenderbuffersEXT"), &genRenderbuffers);
921 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_object", loadProcAddress("glRenderbufferStorageEXT"), &renderbufferStorage);
922 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_object", loadProcAddress("glGetRenderbufferParameterivEXT"), &getRenderbufferParameteriv);
923 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_object", loadProcAddress("glIsFramebufferEXT"), &isFramebuffer);
924 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_object", loadProcAddress("glBindFramebufferEXT"), &bindFramebuffer);
925 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_object", loadProcAddress("glDeleteFramebuffersEXT"), &deleteFramebuffers);
926 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_object", loadProcAddress("glGenFramebuffersEXT"), &genFramebuffers);
927 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_object", loadProcAddress("glCheckFramebufferStatusEXT"), &checkFramebufferStatus);
928 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_object", loadProcAddress("glFramebufferTexture1DEXT"), &framebufferTexture1D);
929 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_object", loadProcAddress("glFramebufferTexture2DEXT"), &framebufferTexture2D);
930 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_object", loadProcAddress("glFramebufferTexture3DEXT"), &framebufferTexture3D);
931 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_object", loadProcAddress("glFramebufferRenderbufferEXT"), &framebufferRenderbuffer);
932 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_object", loadProcAddress("glGetFramebufferAttachmentParameterivEXT"), &getFramebufferAttachmentParameteriv);
933 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_object", loadProcAddress("glGenerateMipmapEXT"), &generateMipmap);
934
935 // GL_EXT_framebuffer_blit
936 AssignGLExtensionEntryPoint(extensions, "GL_EXT_framebuffer_blit", loadProcAddress("glBlitFramebufferEXT"), &blitFramebuffer);
937
938 // GL_KHR_debug
939 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glDebugMessageControl"), &debugMessageControl);
940 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glDebugMessageInsert"), &debugMessageInsert);
941 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glDebugMessageCallback"), &debugMessageCallback);
942 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glGetDebugMessageLog"), &getDebugMessageLog);
943 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glGetPointerv"), &getPointerv);
944 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glPushDebugGroup"), &pushDebugGroup);
945 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glPopDebugGroup"), &popDebugGroup);
946 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glObjectLabel"), &objectLabel);
947 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glGetObjectLabel"), &getObjectLabel);
948 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glObjectPtrLabel"), &objectPtrLabel);
949 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glGetObjectPtrLabel"), &getObjectPtrLabel);
950
951 // GL_ARB_internalformat_query
952 AssignGLExtensionEntryPoint(extensions, "GL_ARB_internalformat_query", loadProcAddress("glGetInternalformativ"), &getInternalformativ);
953
954 // GL_ARB_ES2_compatibility
955 AssignGLExtensionEntryPoint(extensions, "GL_ARB_ES2_compatibility", loadProcAddress("glReleaseShaderCompiler"), &releaseShaderCompiler);
956 AssignGLExtensionEntryPoint(extensions, "GL_ARB_ES2_compatibility", loadProcAddress("glShaderBinary"), &shaderBinary);
957 AssignGLExtensionEntryPoint(extensions, "GL_ARB_ES2_compatibility", loadProcAddress("glGetShaderPrecisionFormat"), &getShaderPrecisionFormat);
958 AssignGLExtensionEntryPoint(extensions, "GL_ARB_ES2_compatibility", loadProcAddress("glDepthRangef"), &depthRangef);
959 AssignGLExtensionEntryPoint(extensions, "GL_ARB_ES2_compatibility", loadProcAddress("glClearDepthf"), &clearDepthf);
960
961 // GL_ARB_instanced_arrays
962 AssignGLExtensionEntryPoint(extensions, "GL_ARB_instanced_arrays", loadProcAddress("glVertexAttribDivisorARB"), &vertexAttribDivisor);
963
964 // GL_EXT_draw_instanced
965 AssignGLExtensionEntryPoint(extensions, "GL_EXT_draw_instanced", loadProcAddress("glDrawArraysInstancedEXT"), &drawArraysInstanced);
966 AssignGLExtensionEntryPoint(extensions, "GL_EXT_draw_instanced", loadProcAddress("glDrawElementsInstancedEXT"), &drawElementsInstanced);
967
968 // GL_ARB_draw_instanced
969 AssignGLExtensionEntryPoint(extensions, "GL_ARB_draw_instanced", loadProcAddress("glDrawArraysInstancedARB"), &drawArraysInstanced);
970 AssignGLExtensionEntryPoint(extensions, "GL_ARB_draw_instanced", loadProcAddress("glDrawElementsInstancedARB"), &drawElementsInstanced);
971
972 // GL_ARB_sampler_objects
973 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sampler_objects", loadProcAddress("glGenSamplers"), &genSamplers);
974 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sampler_objects", loadProcAddress("glDeleteSamplers"), &deleteSamplers);
975 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sampler_objects", loadProcAddress("glIsSampler"), &isSampler);
976 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sampler_objects", loadProcAddress("glBindSampler"), &bindSampler);
977 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sampler_objects", loadProcAddress("glSamplerParameteri"), &samplerParameteri);
978 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sampler_objects", loadProcAddress("glSamplerParameterf"), &samplerParameterf);
979 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sampler_objects", loadProcAddress("glSamplerParameteriv"), &samplerParameteriv);
980 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sampler_objects", loadProcAddress("glSamplerParameterfv"), &samplerParameterfv);
981 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sampler_objects", loadProcAddress("glSamplerParameterIiv"), &samplerParameterIiv);
982 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sampler_objects", loadProcAddress("glSamplerParameterIuiv"), &samplerParameterIuiv);
983 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sampler_objects", loadProcAddress("glGetSamplerParameteriv"), &getSamplerParameteriv);
984 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sampler_objects", loadProcAddress("glGetSamplerParameterfv"), &getSamplerParameterfv);
985 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sampler_objects", loadProcAddress("glGetSamplerParameterIiv"), &getSamplerParameterIiv);
986 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sampler_objects", loadProcAddress("glGetSamplerParameterIuiv"), &getSamplerParameterIuiv);
987
988 // GL_ARB_occlusion_query
989 AssignGLExtensionEntryPoint(extensions, "GL_ARB_occlusion_query", loadProcAddress("glGenQueriesARB"), &genQueries);
990 AssignGLExtensionEntryPoint(extensions, "GL_ARB_occlusion_query", loadProcAddress("glDeleteQueriesARB"), &deleteQueries);
991 AssignGLExtensionEntryPoint(extensions, "GL_ARB_occlusion_query", loadProcAddress("glIsQueryARB"), &isQuery);
992 AssignGLExtensionEntryPoint(extensions, "GL_ARB_occlusion_query", loadProcAddress("glBeginQueryARB"), &beginQuery);
993 AssignGLExtensionEntryPoint(extensions, "GL_ARB_occlusion_query", loadProcAddress("glEndQueryARB"), &endQuery);
994 AssignGLExtensionEntryPoint(extensions, "GL_ARB_occlusion_query", loadProcAddress("glGetQueryivARB"), &getQueryiv);
995 AssignGLExtensionEntryPoint(extensions, "GL_ARB_occlusion_query", loadProcAddress("glGetQueryObjectivARB"), &getQueryObjectiv);
996 AssignGLExtensionEntryPoint(extensions, "GL_ARB_occlusion_query", loadProcAddress("glGetQueryObjectuivARB"), &getQueryObjectuiv);
997
998 // EXT_transform_feedback
999 AssignGLExtensionEntryPoint(extensions, "EXT_transform_feedback", loadProcAddress("glBindBufferRangeEXT"), &bindBufferRange);
1000 AssignGLExtensionEntryPoint(extensions, "EXT_transform_feedback", loadProcAddress("glBindBufferBaseEXT"), &bindBufferBase);
1001 AssignGLExtensionEntryPoint(extensions, "EXT_transform_feedback", loadProcAddress("glBeginTransformFeedbackEXT"), &beginTransformFeedback);
1002 AssignGLExtensionEntryPoint(extensions, "EXT_transform_feedback", loadProcAddress("glEndTransformFeedbackEXT"), &endTransformFeedback);
1003 AssignGLExtensionEntryPoint(extensions, "EXT_transform_feedback", loadProcAddress("glTransformFeedbackVaryingsEXT"), &transformFeedbackVaryings);
1004 AssignGLExtensionEntryPoint(extensions, "EXT_transform_feedback", loadProcAddress("glGetTransformFeedbackVaryingEXT"), &getTransformFeedbackVarying);
1005
1006 // GL_ARB_transform_feedback2
1007 AssignGLExtensionEntryPoint(extensions, "GL_ARB_transform_feedback2", loadProcAddress("glBindTransformFeedback"), &bindTransformFeedback);
1008 AssignGLExtensionEntryPoint(extensions, "GL_ARB_transform_feedback2", loadProcAddress("glDeleteTransformFeedbacks"), &deleteTransformFeedbacks);
1009 AssignGLExtensionEntryPoint(extensions, "GL_ARB_transform_feedback2", loadProcAddress("glGenTransformFeedbacks"), &genTransformFeedbacks);
1010 AssignGLExtensionEntryPoint(extensions, "GL_ARB_transform_feedback2", loadProcAddress("glIsTransformFeedback"), &isTransformFeedback);
1011 AssignGLExtensionEntryPoint(extensions, "GL_ARB_transform_feedback2", loadProcAddress("glPauseTransformFeedback"), &pauseTransformFeedback);
1012 AssignGLExtensionEntryPoint(extensions, "GL_ARB_transform_feedback2", loadProcAddress("glResumeTransformFeedback"), &resumeTransformFeedback);
1013 AssignGLExtensionEntryPoint(extensions, "GL_ARB_transform_feedback2", loadProcAddress("glDrawTransformFeedback"), &drawTransformFeedback);
1014
1015 // GL_ARB_transform_feedback3
1016 AssignGLExtensionEntryPoint(extensions, "GL_ARB_transform_feedback3", loadProcAddress("glDrawTransformFeedbackStream"), &drawTransformFeedbackStream);
1017 AssignGLExtensionEntryPoint(extensions, "GL_ARB_transform_feedback3", loadProcAddress("glBeginQueryIndexed"), &beginQueryIndexed);
1018 AssignGLExtensionEntryPoint(extensions, "GL_ARB_transform_feedback3", loadProcAddress("glEndQueryIndexed"), &endQueryIndexed);
1019 AssignGLExtensionEntryPoint(extensions, "GL_ARB_transform_feedback3", loadProcAddress("glGetQueryIndexediv"), &getQueryIndexediv);
1020
1021 // GL_ARB_get_program_binary
1022 AssignGLExtensionEntryPoint(extensions, "GL_ARB_get_program_binary", loadProcAddress("glGetProgramBinary"), &getProgramBinary);
1023 AssignGLExtensionEntryPoint(extensions, "GL_ARB_get_program_binary", loadProcAddress("glProgramBinary"), &programBinary);
1024 AssignGLExtensionEntryPoint(extensions, "GL_ARB_get_program_binary", loadProcAddress("glProgramParameteri"), &programParameteri);
1025
1026 // GL_ARB_robustness
1027 AssignGLExtensionEntryPoint(extensions, "GL_ARB_robustness", loadProcAddress("glGetGraphicsResetStatusARB"), &getGraphicsResetStatus);
1028
1029 // GL_KHR_robustness
1030 AssignGLExtensionEntryPoint(extensions, "GL_KHR_robustness", loadProcAddress("glGetGraphicsResetStatus"), &getGraphicsResetStatus);
1031
1032 // 1.0
1033 if (isAtLeastGL(gl::Version(1, 0)))
1034 {
1035 AssignGLEntryPoint(loadProcAddress("glBlendFunc"), &blendFunc);
1036 AssignGLEntryPoint(loadProcAddress("glClear"), &clear);
1037 AssignGLEntryPoint(loadProcAddress("glClearColor"), &clearColor);
1038 AssignGLEntryPoint(loadProcAddress("glClearDepth"), &clearDepth);
1039 AssignGLEntryPoint(loadProcAddress("glClearStencil"), &clearStencil);
1040 AssignGLEntryPoint(loadProcAddress("glColorMask"), &colorMask);
1041 AssignGLEntryPoint(loadProcAddress("glCullFace"), &cullFace);
1042 AssignGLEntryPoint(loadProcAddress("glDepthFunc"), &depthFunc);
1043 AssignGLEntryPoint(loadProcAddress("glDepthMask"), &depthMask);
1044 AssignGLEntryPoint(loadProcAddress("glDepthRange"), &depthRange);
1045 AssignGLEntryPoint(loadProcAddress("glDisable"), &disable);
1046 AssignGLEntryPoint(loadProcAddress("glDrawBuffer"), &drawBuffer);
1047 AssignGLEntryPoint(loadProcAddress("glEnable"), &enable);
1048 AssignGLEntryPoint(loadProcAddress("glFinish"), &finish);
1049 AssignGLEntryPoint(loadProcAddress("glFlush"), &flush);
1050 AssignGLEntryPoint(loadProcAddress("glFrontFace"), &frontFace);
1051 AssignGLEntryPoint(loadProcAddress("glGetBooleanv"), &getBooleanv);
1052 AssignGLEntryPoint(loadProcAddress("glGetDoublev"), &getDoublev);
1053 AssignGLEntryPoint(loadProcAddress("glGetError"), &getError);
1054 AssignGLEntryPoint(loadProcAddress("glGetFloatv"), &getFloatv);
1055 AssignGLEntryPoint(loadProcAddress("glGetIntegerv"), &getIntegerv);
1056 AssignGLEntryPoint(loadProcAddress("glGetString"), &getString);
1057 AssignGLEntryPoint(loadProcAddress("glGetTexImage"), &getTexImage);
1058 AssignGLEntryPoint(loadProcAddress("glGetTexLevelParameterfv"), &getTexLevelParameterfv);
1059 AssignGLEntryPoint(loadProcAddress("glGetTexLevelParameteriv"), &getTexLevelParameteriv);
1060 AssignGLEntryPoint(loadProcAddress("glGetTexParameterfv"), &getTexParameterfv);
1061 AssignGLEntryPoint(loadProcAddress("glGetTexParameteriv"), &getTexParameteriv);
1062 AssignGLEntryPoint(loadProcAddress("glHint"), &hint);
1063 AssignGLEntryPoint(loadProcAddress("glIsEnabled"), &isEnabled);
1064 AssignGLEntryPoint(loadProcAddress("glLineWidth"), &lineWidth);
1065 AssignGLEntryPoint(loadProcAddress("glLogicOp"), &logicOp);
1066 AssignGLEntryPoint(loadProcAddress("glPixelStoref"), &pixelStoref);
1067 AssignGLEntryPoint(loadProcAddress("glPixelStorei"), &pixelStorei);
1068 AssignGLEntryPoint(loadProcAddress("glPointSize"), &pointSize);
1069 AssignGLEntryPoint(loadProcAddress("glPolygonMode"), &polygonMode);
1070 AssignGLEntryPoint(loadProcAddress("glReadBuffer"), &readBuffer);
1071 AssignGLEntryPoint(loadProcAddress("glReadPixels"), &readPixels);
1072 AssignGLEntryPoint(loadProcAddress("glScissor"), &scissor);
1073 AssignGLEntryPoint(loadProcAddress("glStencilFunc"), &stencilFunc);
1074 AssignGLEntryPoint(loadProcAddress("glStencilMask"), &stencilMask);
1075 AssignGLEntryPoint(loadProcAddress("glStencilOp"), &stencilOp);
1076 AssignGLEntryPoint(loadProcAddress("glTexImage1D"), &texImage1D);
1077 AssignGLEntryPoint(loadProcAddress("glTexImage2D"), &texImage2D);
1078 AssignGLEntryPoint(loadProcAddress("glTexParameterf"), &texParameterf);
1079 AssignGLEntryPoint(loadProcAddress("glTexParameterfv"), &texParameterfv);
1080 AssignGLEntryPoint(loadProcAddress("glTexParameteri"), &texParameteri);
1081 AssignGLEntryPoint(loadProcAddress("glTexParameteriv"), &texParameteriv);
1082 AssignGLEntryPoint(loadProcAddress("glViewport"), &viewport);
1083 }
1084
1085 // 1.1
1086 if (isAtLeastGL(gl::Version(1, 1)))
1087 {
1088 AssignGLEntryPoint(loadProcAddress("glBindTexture"), &bindTexture);
1089 AssignGLEntryPoint(loadProcAddress("glCopyTexImage1D"), ©TexImage1D);
1090 AssignGLEntryPoint(loadProcAddress("glCopyTexImage2D"), ©TexImage2D);
1091 AssignGLEntryPoint(loadProcAddress("glCopyTexSubImage1D"), ©TexSubImage1D);
1092 AssignGLEntryPoint(loadProcAddress("glCopyTexSubImage2D"), ©TexSubImage2D);
1093 AssignGLEntryPoint(loadProcAddress("glDeleteTextures"), &deleteTextures);
1094 AssignGLEntryPoint(loadProcAddress("glDrawArrays"), &drawArrays);
1095 AssignGLEntryPoint(loadProcAddress("glDrawElements"), &drawElements);
1096 AssignGLEntryPoint(loadProcAddress("glGenTextures"), &genTextures);
1097 AssignGLEntryPoint(loadProcAddress("glIsTexture"), &isTexture);
1098 AssignGLEntryPoint(loadProcAddress("glPolygonOffset"), &polygonOffset);
1099 AssignGLEntryPoint(loadProcAddress("glTexSubImage1D"), &texSubImage1D);
1100 AssignGLEntryPoint(loadProcAddress("glTexSubImage2D"), &texSubImage2D);
1101 }
1102
1103 // 1.2
1104 if (isAtLeastGL(gl::Version(1, 2)))
1105 {
1106 AssignGLEntryPoint(loadProcAddress("glBlendColor"), &blendColor);
1107 AssignGLEntryPoint(loadProcAddress("glBlendEquation"), &blendEquation);
1108 AssignGLEntryPoint(loadProcAddress("glCopyTexSubImage3D"), ©TexSubImage3D);
1109 AssignGLEntryPoint(loadProcAddress("glDrawRangeElements"), &drawRangeElements);
1110 AssignGLEntryPoint(loadProcAddress("glTexImage3D"), &texImage3D);
1111 AssignGLEntryPoint(loadProcAddress("glTexSubImage3D"), &texSubImage3D);
1112 }
1113
1114 // 1.3
1115 if (isAtLeastGL(gl::Version(1, 3)))
1116 {
1117 AssignGLEntryPoint(loadProcAddress("glActiveTexture"), &activeTexture);
1118 AssignGLEntryPoint(loadProcAddress("glCompressedTexImage1D"), &compressedTexImage1D);
1119 AssignGLEntryPoint(loadProcAddress("glCompressedTexImage2D"), &compressedTexImage2D);
1120 AssignGLEntryPoint(loadProcAddress("glCompressedTexImage3D"), &compressedTexImage3D);
1121 AssignGLEntryPoint(loadProcAddress("glCompressedTexSubImage1D"), &compressedTexSubImage1D);
1122 AssignGLEntryPoint(loadProcAddress("glCompressedTexSubImage2D"), &compressedTexSubImage2D);
1123 AssignGLEntryPoint(loadProcAddress("glCompressedTexSubImage3D"), &compressedTexSubImage3D);
1124 AssignGLEntryPoint(loadProcAddress("glGetCompressedTexImage"), &getCompressedTexImage);
1125 AssignGLEntryPoint(loadProcAddress("glSampleCoverage"), &sampleCoverage);
1126 }
1127
1128 // 1.4
1129 if (isAtLeastGL(gl::Version(1, 4)))
1130 {
1131 AssignGLEntryPoint(loadProcAddress("glBlendFuncSeparate"), &blendFuncSeparate);
1132 AssignGLEntryPoint(loadProcAddress("glMultiDrawArrays"), &multiDrawArrays);
1133 AssignGLEntryPoint(loadProcAddress("glMultiDrawElements"), &multiDrawElements);
1134 AssignGLEntryPoint(loadProcAddress("glPointParameterf"), &pointParameterf);
1135 AssignGLEntryPoint(loadProcAddress("glPointParameterfv"), &pointParameterfv);
1136 AssignGLEntryPoint(loadProcAddress("glPointParameteri"), &pointParameteri);
1137 AssignGLEntryPoint(loadProcAddress("glPointParameteriv"), &pointParameteriv);
1138 }
1139
1140 // 1.5
1141 if (isAtLeastGL(gl::Version(1, 5)))
1142 {
1143 AssignGLEntryPoint(loadProcAddress("glBeginQuery"), &beginQuery);
1144 AssignGLEntryPoint(loadProcAddress("glBindBuffer"), &bindBuffer);
1145 AssignGLEntryPoint(loadProcAddress("glBufferData"), &bufferData);
1146 AssignGLEntryPoint(loadProcAddress("glBufferSubData"), &bufferSubData);
1147 AssignGLEntryPoint(loadProcAddress("glDeleteBuffers"), &deleteBuffers);
1148 AssignGLEntryPoint(loadProcAddress("glDeleteQueries"), &deleteQueries);
1149 AssignGLEntryPoint(loadProcAddress("glEndQuery"), &endQuery);
1150 AssignGLEntryPoint(loadProcAddress("glGenBuffers"), &genBuffers);
1151 AssignGLEntryPoint(loadProcAddress("glGenQueries"), &genQueries);
1152 AssignGLEntryPoint(loadProcAddress("glGetBufferParameteriv"), &getBufferParameteriv);
1153 AssignGLEntryPoint(loadProcAddress("glGetBufferPointerv"), &getBufferPointerv);
1154 AssignGLEntryPoint(loadProcAddress("glGetBufferSubData"), &getBufferSubData);
1155 AssignGLEntryPoint(loadProcAddress("glGetQueryObjectiv"), &getQueryObjectiv);
1156 AssignGLEntryPoint(loadProcAddress("glGetQueryObjectuiv"), &getQueryObjectuiv);
1157 AssignGLEntryPoint(loadProcAddress("glGetQueryiv"), &getQueryiv);
1158 AssignGLEntryPoint(loadProcAddress("glIsBuffer"), &isBuffer);
1159 AssignGLEntryPoint(loadProcAddress("glIsQuery"), &isQuery);
1160 AssignGLEntryPoint(loadProcAddress("glMapBuffer"), &mapBuffer);
1161 AssignGLEntryPoint(loadProcAddress("glUnmapBuffer"), &unmapBuffer);
1162 }
1163
1164 // 2.0
1165 if (isAtLeastGL(gl::Version(2, 0)))
1166 {
1167 AssignGLEntryPoint(loadProcAddress("glAttachShader"), &attachShader);
1168 AssignGLEntryPoint(loadProcAddress("glBindAttribLocation"), &bindAttribLocation);
1169 AssignGLEntryPoint(loadProcAddress("glBlendEquationSeparate"), &blendEquationSeparate);
1170 AssignGLEntryPoint(loadProcAddress("glCompileShader"), &compileShader);
1171 AssignGLEntryPoint(loadProcAddress("glCreateProgram"), &createProgram);
1172 AssignGLEntryPoint(loadProcAddress("glCreateShader"), &createShader);
1173 AssignGLEntryPoint(loadProcAddress("glDeleteProgram"), &deleteProgram);
1174 AssignGLEntryPoint(loadProcAddress("glDeleteShader"), &deleteShader);
1175 AssignGLEntryPoint(loadProcAddress("glDetachShader"), &detachShader);
1176 AssignGLEntryPoint(loadProcAddress("glDisableVertexAttribArray"), &disableVertexAttribArray);
1177 AssignGLEntryPoint(loadProcAddress("glDrawBuffers"), &drawBuffers);
1178 AssignGLEntryPoint(loadProcAddress("glEnableVertexAttribArray"), &enableVertexAttribArray);
1179 AssignGLEntryPoint(loadProcAddress("glGetActiveAttrib"), &getActiveAttrib);
1180 AssignGLEntryPoint(loadProcAddress("glGetActiveUniform"), &getActiveUniform);
1181 AssignGLEntryPoint(loadProcAddress("glGetAttachedShaders"), &getAttachedShaders);
1182 AssignGLEntryPoint(loadProcAddress("glGetAttribLocation"), &getAttribLocation);
1183 AssignGLEntryPoint(loadProcAddress("glGetProgramInfoLog"), &getProgramInfoLog);
1184 AssignGLEntryPoint(loadProcAddress("glGetProgramiv"), &getProgramiv);
1185 AssignGLEntryPoint(loadProcAddress("glGetShaderInfoLog"), &getShaderInfoLog);
1186 AssignGLEntryPoint(loadProcAddress("glGetShaderSource"), &getShaderSource);
1187 AssignGLEntryPoint(loadProcAddress("glGetShaderiv"), &getShaderiv);
1188 AssignGLEntryPoint(loadProcAddress("glGetUniformLocation"), &getUniformLocation);
1189 AssignGLEntryPoint(loadProcAddress("glGetUniformfv"), &getUniformfv);
1190 AssignGLEntryPoint(loadProcAddress("glGetUniformiv"), &getUniformiv);
1191 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribPointerv"), &getVertexAttribPointerv);
1192 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribdv"), &getVertexAttribdv);
1193 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribfv"), &getVertexAttribfv);
1194 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribiv"), &getVertexAttribiv);
1195 AssignGLEntryPoint(loadProcAddress("glIsProgram"), &isProgram);
1196 AssignGLEntryPoint(loadProcAddress("glIsShader"), &isShader);
1197 AssignGLEntryPoint(loadProcAddress("glLinkProgram"), &linkProgram);
1198 AssignGLEntryPoint(loadProcAddress("glShaderSource"), &shaderSource);
1199 AssignGLEntryPoint(loadProcAddress("glStencilFuncSeparate"), &stencilFuncSeparate);
1200 AssignGLEntryPoint(loadProcAddress("glStencilMaskSeparate"), &stencilMaskSeparate);
1201 AssignGLEntryPoint(loadProcAddress("glStencilOpSeparate"), &stencilOpSeparate);
1202 AssignGLEntryPoint(loadProcAddress("glUniform1f"), &uniform1f);
1203 AssignGLEntryPoint(loadProcAddress("glUniform1fv"), &uniform1fv);
1204 AssignGLEntryPoint(loadProcAddress("glUniform1i"), &uniform1i);
1205 AssignGLEntryPoint(loadProcAddress("glUniform1iv"), &uniform1iv);
1206 AssignGLEntryPoint(loadProcAddress("glUniform2f"), &uniform2f);
1207 AssignGLEntryPoint(loadProcAddress("glUniform2fv"), &uniform2fv);
1208 AssignGLEntryPoint(loadProcAddress("glUniform2i"), &uniform2i);
1209 AssignGLEntryPoint(loadProcAddress("glUniform2iv"), &uniform2iv);
1210 AssignGLEntryPoint(loadProcAddress("glUniform3f"), &uniform3f);
1211 AssignGLEntryPoint(loadProcAddress("glUniform3fv"), &uniform3fv);
1212 AssignGLEntryPoint(loadProcAddress("glUniform3i"), &uniform3i);
1213 AssignGLEntryPoint(loadProcAddress("glUniform3iv"), &uniform3iv);
1214 AssignGLEntryPoint(loadProcAddress("glUniform4f"), &uniform4f);
1215 AssignGLEntryPoint(loadProcAddress("glUniform4fv"), &uniform4fv);
1216 AssignGLEntryPoint(loadProcAddress("glUniform4i"), &uniform4i);
1217 AssignGLEntryPoint(loadProcAddress("glUniform4iv"), &uniform4iv);
1218 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2fv"), &uniformMatrix2fv);
1219 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3fv"), &uniformMatrix3fv);
1220 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4fv"), &uniformMatrix4fv);
1221 AssignGLEntryPoint(loadProcAddress("glUseProgram"), &useProgram);
1222 AssignGLEntryPoint(loadProcAddress("glValidateProgram"), &validateProgram);
1223 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1d"), &vertexAttrib1d);
1224 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1dv"), &vertexAttrib1dv);
1225 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1f"), &vertexAttrib1f);
1226 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1fv"), &vertexAttrib1fv);
1227 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1s"), &vertexAttrib1s);
1228 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1sv"), &vertexAttrib1sv);
1229 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2d"), &vertexAttrib2d);
1230 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2dv"), &vertexAttrib2dv);
1231 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2f"), &vertexAttrib2f);
1232 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2fv"), &vertexAttrib2fv);
1233 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2s"), &vertexAttrib2s);
1234 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2sv"), &vertexAttrib2sv);
1235 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3d"), &vertexAttrib3d);
1236 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3dv"), &vertexAttrib3dv);
1237 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3f"), &vertexAttrib3f);
1238 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3fv"), &vertexAttrib3fv);
1239 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3s"), &vertexAttrib3s);
1240 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3sv"), &vertexAttrib3sv);
1241 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nbv"), &vertexAttrib4Nbv);
1242 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Niv"), &vertexAttrib4Niv);
1243 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nsv"), &vertexAttrib4Nsv);
1244 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nub"), &vertexAttrib4Nub);
1245 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nubv"), &vertexAttrib4Nubv);
1246 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nuiv"), &vertexAttrib4Nuiv);
1247 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nusv"), &vertexAttrib4Nusv);
1248 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4bv"), &vertexAttrib4bv);
1249 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4d"), &vertexAttrib4d);
1250 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4dv"), &vertexAttrib4dv);
1251 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4f"), &vertexAttrib4f);
1252 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4fv"), &vertexAttrib4fv);
1253 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4iv"), &vertexAttrib4iv);
1254 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4s"), &vertexAttrib4s);
1255 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4sv"), &vertexAttrib4sv);
1256 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4ubv"), &vertexAttrib4ubv);
1257 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4uiv"), &vertexAttrib4uiv);
1258 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4usv"), &vertexAttrib4usv);
1259 AssignGLEntryPoint(loadProcAddress("glVertexAttribPointer"), &vertexAttribPointer);
1260 }
1261
1262 // 2.1
1263 if (isAtLeastGL(gl::Version(2, 1)))
1264 {
1265 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2x3fv"), &uniformMatrix2x3fv);
1266 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2x4fv"), &uniformMatrix2x4fv);
1267 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3x2fv"), &uniformMatrix3x2fv);
1268 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3x4fv"), &uniformMatrix3x4fv);
1269 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4x2fv"), &uniformMatrix4x2fv);
1270 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4x3fv"), &uniformMatrix4x3fv);
1271 }
1272
1273 // 3.0
1274 if (isAtLeastGL(gl::Version(3, 0)))
1275 {
1276 AssignGLEntryPoint(loadProcAddress("glBeginConditionalRender"), &beginConditionalRender);
1277 AssignGLEntryPoint(loadProcAddress("glBeginTransformFeedback"), &beginTransformFeedback);
1278 AssignGLEntryPoint(loadProcAddress("glBindBufferBase"), &bindBufferBase);
1279 AssignGLEntryPoint(loadProcAddress("glBindBufferRange"), &bindBufferRange);
1280 AssignGLEntryPoint(loadProcAddress("glBindFragDataLocation"), &bindFragDataLocation);
1281 AssignGLEntryPoint(loadProcAddress("glBindFramebuffer"), &bindFramebuffer);
1282 AssignGLEntryPoint(loadProcAddress("glBindRenderbuffer"), &bindRenderbuffer);
1283 AssignGLEntryPoint(loadProcAddress("glBindVertexArray"), &bindVertexArray);
1284 AssignGLEntryPoint(loadProcAddress("glBlitFramebuffer"), &blitFramebuffer);
1285 AssignGLEntryPoint(loadProcAddress("glCheckFramebufferStatus"), &checkFramebufferStatus);
1286 AssignGLEntryPoint(loadProcAddress("glClampColor"), &clampColor);
1287 AssignGLEntryPoint(loadProcAddress("glClearBufferfi"), &clearBufferfi);
1288 AssignGLEntryPoint(loadProcAddress("glClearBufferfv"), &clearBufferfv);
1289 AssignGLEntryPoint(loadProcAddress("glClearBufferiv"), &clearBufferiv);
1290 AssignGLEntryPoint(loadProcAddress("glClearBufferuiv"), &clearBufferuiv);
1291 AssignGLEntryPoint(loadProcAddress("glColorMaski"), &colorMaski);
1292 AssignGLEntryPoint(loadProcAddress("glDeleteFramebuffers"), &deleteFramebuffers);
1293 AssignGLEntryPoint(loadProcAddress("glDeleteRenderbuffers"), &deleteRenderbuffers);
1294 AssignGLEntryPoint(loadProcAddress("glDeleteVertexArrays"), &deleteVertexArrays);
1295 AssignGLEntryPoint(loadProcAddress("glDisablei"), &disablei);
1296 AssignGLEntryPoint(loadProcAddress("glEnablei"), &enablei);
1297 AssignGLEntryPoint(loadProcAddress("glEndConditionalRender"), &endConditionalRender);
1298 AssignGLEntryPoint(loadProcAddress("glEndTransformFeedback"), &endTransformFeedback);
1299 AssignGLEntryPoint(loadProcAddress("glFlushMappedBufferRange"), &flushMappedBufferRange);
1300 AssignGLEntryPoint(loadProcAddress("glFramebufferRenderbuffer"), &framebufferRenderbuffer);
1301 AssignGLEntryPoint(loadProcAddress("glFramebufferTexture1D"), &framebufferTexture1D);
1302 AssignGLEntryPoint(loadProcAddress("glFramebufferTexture2D"), &framebufferTexture2D);
1303 AssignGLEntryPoint(loadProcAddress("glFramebufferTexture3D"), &framebufferTexture3D);
1304 AssignGLEntryPoint(loadProcAddress("glFramebufferTextureLayer"), &framebufferTextureLayer);
1305 AssignGLEntryPoint(loadProcAddress("glGenFramebuffers"), &genFramebuffers);
1306 AssignGLEntryPoint(loadProcAddress("glGenRenderbuffers"), &genRenderbuffers);
1307 AssignGLEntryPoint(loadProcAddress("glGenVertexArrays"), &genVertexArrays);
1308 AssignGLEntryPoint(loadProcAddress("glGenerateMipmap"), &generateMipmap);
1309 AssignGLEntryPoint(loadProcAddress("glGetBooleani_v"), &getBooleani_v);
1310 AssignGLEntryPoint(loadProcAddress("glGetFragDataLocation"), &getFragDataLocation);
1311 AssignGLEntryPoint(loadProcAddress("glGetFramebufferAttachmentParameteriv"), &getFramebufferAttachmentParameteriv);
1312 AssignGLEntryPoint(loadProcAddress("glGetIntegeri_v"), &getIntegeri_v);
1313 AssignGLEntryPoint(loadProcAddress("glGetRenderbufferParameteriv"), &getRenderbufferParameteriv);
1314 AssignGLEntryPoint(loadProcAddress("glGetStringi"), &getStringi);
1315 AssignGLEntryPoint(loadProcAddress("glGetTexParameterIiv"), &getTexParameterIiv);
1316 AssignGLEntryPoint(loadProcAddress("glGetTexParameterIuiv"), &getTexParameterIuiv);
1317 AssignGLEntryPoint(loadProcAddress("glGetTransformFeedbackVarying"), &getTransformFeedbackVarying);
1318 AssignGLEntryPoint(loadProcAddress("glGetUniformuiv"), &getUniformuiv);
1319 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribIiv"), &getVertexAttribIiv);
1320 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribIuiv"), &getVertexAttribIuiv);
1321 AssignGLEntryPoint(loadProcAddress("glIsEnabledi"), &isEnabledi);
1322 AssignGLEntryPoint(loadProcAddress("glIsFramebuffer"), &isFramebuffer);
1323 AssignGLEntryPoint(loadProcAddress("glIsRenderbuffer"), &isRenderbuffer);
1324 AssignGLEntryPoint(loadProcAddress("glIsVertexArray"), &isVertexArray);
1325 AssignGLEntryPoint(loadProcAddress("glMapBufferRange"), &mapBufferRange);
1326 AssignGLEntryPoint(loadProcAddress("glRenderbufferStorage"), &renderbufferStorage);
1327 AssignGLEntryPoint(loadProcAddress("glRenderbufferStorageMultisample"), &renderbufferStorageMultisample);
1328 AssignGLEntryPoint(loadProcAddress("glTexParameterIiv"), &texParameterIiv);
1329 AssignGLEntryPoint(loadProcAddress("glTexParameterIuiv"), &texParameterIuiv);
1330 AssignGLEntryPoint(loadProcAddress("glTransformFeedbackVaryings"), &transformFeedbackVaryings);
1331 AssignGLEntryPoint(loadProcAddress("glUniform1ui"), &uniform1ui);
1332 AssignGLEntryPoint(loadProcAddress("glUniform1uiv"), &uniform1uiv);
1333 AssignGLEntryPoint(loadProcAddress("glUniform2ui"), &uniform2ui);
1334 AssignGLEntryPoint(loadProcAddress("glUniform2uiv"), &uniform2uiv);
1335 AssignGLEntryPoint(loadProcAddress("glUniform3ui"), &uniform3ui);
1336 AssignGLEntryPoint(loadProcAddress("glUniform3uiv"), &uniform3uiv);
1337 AssignGLEntryPoint(loadProcAddress("glUniform4ui"), &uniform4ui);
1338 AssignGLEntryPoint(loadProcAddress("glUniform4uiv"), &uniform4uiv);
1339 AssignGLEntryPoint(loadProcAddress("glVertexAttribI1i"), &vertexAttribI1i);
1340 AssignGLEntryPoint(loadProcAddress("glVertexAttribI1iv"), &vertexAttribI1iv);
1341 AssignGLEntryPoint(loadProcAddress("glVertexAttribI1ui"), &vertexAttribI1ui);
1342 AssignGLEntryPoint(loadProcAddress("glVertexAttribI1uiv"), &vertexAttribI1uiv);
1343 AssignGLEntryPoint(loadProcAddress("glVertexAttribI2i"), &vertexAttribI2i);
1344 AssignGLEntryPoint(loadProcAddress("glVertexAttribI2iv"), &vertexAttribI2iv);
1345 AssignGLEntryPoint(loadProcAddress("glVertexAttribI2ui"), &vertexAttribI2ui);
1346 AssignGLEntryPoint(loadProcAddress("glVertexAttribI2uiv"), &vertexAttribI2uiv);
1347 AssignGLEntryPoint(loadProcAddress("glVertexAttribI3i"), &vertexAttribI3i);
1348 AssignGLEntryPoint(loadProcAddress("glVertexAttribI3iv"), &vertexAttribI3iv);
1349 AssignGLEntryPoint(loadProcAddress("glVertexAttribI3ui"), &vertexAttribI3ui);
1350 AssignGLEntryPoint(loadProcAddress("glVertexAttribI3uiv"), &vertexAttribI3uiv);
1351 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4bv"), &vertexAttribI4bv);
1352 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4i"), &vertexAttribI4i);
1353 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4iv"), &vertexAttribI4iv);
1354 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4sv"), &vertexAttribI4sv);
1355 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4ubv"), &vertexAttribI4ubv);
1356 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4ui"), &vertexAttribI4ui);
1357 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4uiv"), &vertexAttribI4uiv);
1358 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4usv"), &vertexAttribI4usv);
1359 AssignGLEntryPoint(loadProcAddress("glVertexAttribIPointer"), &vertexAttribIPointer);
1360 }
1361
1362 // 3.1
1363 if (isAtLeastGL(gl::Version(3, 1)))
1364 {
1365 AssignGLEntryPoint(loadProcAddress("glCopyBufferSubData"), ©BufferSubData);
1366 AssignGLEntryPoint(loadProcAddress("glDrawArraysInstanced"), &drawArraysInstanced);
1367 AssignGLEntryPoint(loadProcAddress("glDrawElementsInstanced"), &drawElementsInstanced);
1368 AssignGLEntryPoint(loadProcAddress("glGetActiveUniformBlockName"), &getActiveUniformBlockName);
1369 AssignGLEntryPoint(loadProcAddress("glGetActiveUniformBlockiv"), &getActiveUniformBlockiv);
1370 AssignGLEntryPoint(loadProcAddress("glGetActiveUniformName"), &getActiveUniformName);
1371 AssignGLEntryPoint(loadProcAddress("glGetActiveUniformsiv"), &getActiveUniformsiv);
1372 AssignGLEntryPoint(loadProcAddress("glGetUniformBlockIndex"), &getUniformBlockIndex);
1373 AssignGLEntryPoint(loadProcAddress("glGetUniformIndices"), &getUniformIndices);
1374 AssignGLEntryPoint(loadProcAddress("glPrimitiveRestartIndex"), &primitiveRestartIndex);
1375 AssignGLEntryPoint(loadProcAddress("glTexBuffer"), &texBuffer);
1376 AssignGLEntryPoint(loadProcAddress("glUniformBlockBinding"), &uniformBlockBinding);
1377 }
1378
1379 // 3.2
1380 if (isAtLeastGL(gl::Version(3, 2)))
1381 {
1382 AssignGLEntryPoint(loadProcAddress("glClientWaitSync"), &clientWaitSync);
1383 AssignGLEntryPoint(loadProcAddress("glDeleteSync"), &deleteSync);
1384 AssignGLEntryPoint(loadProcAddress("glDrawElementsBaseVertex"), &drawElementsBaseVertex);
1385 AssignGLEntryPoint(loadProcAddress("glDrawElementsInstancedBaseVertex"), &drawElementsInstancedBaseVertex);
1386 AssignGLEntryPoint(loadProcAddress("glDrawRangeElementsBaseVertex"), &drawRangeElementsBaseVertex);
1387 AssignGLEntryPoint(loadProcAddress("glFenceSync"), &fenceSync);
1388 AssignGLEntryPoint(loadProcAddress("glFramebufferTexture"), &framebufferTexture);
1389 AssignGLEntryPoint(loadProcAddress("glGetBufferParameteri64v"), &getBufferParameteri64v);
1390 AssignGLEntryPoint(loadProcAddress("glGetInteger64i_v"), &getInteger64i_v);
1391 AssignGLEntryPoint(loadProcAddress("glGetInteger64v"), &getInteger64v);
1392 AssignGLEntryPoint(loadProcAddress("glGetMultisamplefv"), &getMultisamplefv);
1393 AssignGLEntryPoint(loadProcAddress("glGetSynciv"), &getSynciv);
1394 AssignGLEntryPoint(loadProcAddress("glIsSync"), &isSync);
1395 AssignGLEntryPoint(loadProcAddress("glMultiDrawElementsBaseVertex"), &multiDrawElementsBaseVertex);
1396 AssignGLEntryPoint(loadProcAddress("glProvokingVertex"), &provokingVertex);
1397 AssignGLEntryPoint(loadProcAddress("glSampleMaski"), &sampleMaski);
1398 AssignGLEntryPoint(loadProcAddress("glTexImage2DMultisample"), &texImage2DMultisample);
1399 AssignGLEntryPoint(loadProcAddress("glTexImage3DMultisample"), &texImage3DMultisample);
1400 AssignGLEntryPoint(loadProcAddress("glWaitSync"), &waitSync);
1401 }
1402
1403 // 3.3
1404 if (isAtLeastGL(gl::Version(3, 3)))
1405 {
1406 AssignGLEntryPoint(loadProcAddress("glBindFragDataLocationIndexed"), &bindFragDataLocationIndexed);
1407 AssignGLEntryPoint(loadProcAddress("glBindSampler"), &bindSampler);
1408 AssignGLEntryPoint(loadProcAddress("glDeleteSamplers"), &deleteSamplers);
1409 AssignGLEntryPoint(loadProcAddress("glGenSamplers"), &genSamplers);
1410 AssignGLEntryPoint(loadProcAddress("glGetFragDataIndex"), &getFragDataIndex);
1411 AssignGLEntryPoint(loadProcAddress("glGetQueryObjecti64v"), &getQueryObjecti64v);
1412 AssignGLEntryPoint(loadProcAddress("glGetQueryObjectui64v"), &getQueryObjectui64v);
1413 AssignGLEntryPoint(loadProcAddress("glGetSamplerParameterIiv"), &getSamplerParameterIiv);
1414 AssignGLEntryPoint(loadProcAddress("glGetSamplerParameterIuiv"), &getSamplerParameterIuiv);
1415 AssignGLEntryPoint(loadProcAddress("glGetSamplerParameterfv"), &getSamplerParameterfv);
1416 AssignGLEntryPoint(loadProcAddress("glGetSamplerParameteriv"), &getSamplerParameteriv);
1417 AssignGLEntryPoint(loadProcAddress("glIsSampler"), &isSampler);
1418 AssignGLEntryPoint(loadProcAddress("glQueryCounter"), &queryCounter);
1419 AssignGLEntryPoint(loadProcAddress("glSamplerParameterIiv"), &samplerParameterIiv);
1420 AssignGLEntryPoint(loadProcAddress("glSamplerParameterIuiv"), &samplerParameterIuiv);
1421 AssignGLEntryPoint(loadProcAddress("glSamplerParameterf"), &samplerParameterf);
1422 AssignGLEntryPoint(loadProcAddress("glSamplerParameterfv"), &samplerParameterfv);
1423 AssignGLEntryPoint(loadProcAddress("glSamplerParameteri"), &samplerParameteri);
1424 AssignGLEntryPoint(loadProcAddress("glSamplerParameteriv"), &samplerParameteriv);
1425 AssignGLEntryPoint(loadProcAddress("glVertexAttribDivisor"), &vertexAttribDivisor);
1426 AssignGLEntryPoint(loadProcAddress("glVertexAttribP1ui"), &vertexAttribP1ui);
1427 AssignGLEntryPoint(loadProcAddress("glVertexAttribP1uiv"), &vertexAttribP1uiv);
1428 AssignGLEntryPoint(loadProcAddress("glVertexAttribP2ui"), &vertexAttribP2ui);
1429 AssignGLEntryPoint(loadProcAddress("glVertexAttribP2uiv"), &vertexAttribP2uiv);
1430 AssignGLEntryPoint(loadProcAddress("glVertexAttribP3ui"), &vertexAttribP3ui);
1431 AssignGLEntryPoint(loadProcAddress("glVertexAttribP3uiv"), &vertexAttribP3uiv);
1432 AssignGLEntryPoint(loadProcAddress("glVertexAttribP4ui"), &vertexAttribP4ui);
1433 AssignGLEntryPoint(loadProcAddress("glVertexAttribP4uiv"), &vertexAttribP4uiv);
1434 }
1435
1436 // 4.0
1437 if (isAtLeastGL(gl::Version(4, 0)))
1438 {
1439 AssignGLEntryPoint(loadProcAddress("glBeginQueryIndexed"), &beginQueryIndexed);
1440 AssignGLEntryPoint(loadProcAddress("glBindTransformFeedback"), &bindTransformFeedback);
1441 AssignGLEntryPoint(loadProcAddress("glBlendEquationSeparatei"), &blendEquationSeparatei);
1442 AssignGLEntryPoint(loadProcAddress("glBlendEquationi"), &blendEquationi);
1443 AssignGLEntryPoint(loadProcAddress("glBlendFuncSeparatei"), &blendFuncSeparatei);
1444 AssignGLEntryPoint(loadProcAddress("glBlendFunci"), &blendFunci);
1445 AssignGLEntryPoint(loadProcAddress("glDeleteTransformFeedbacks"), &deleteTransformFeedbacks);
1446 AssignGLEntryPoint(loadProcAddress("glDrawArraysIndirect"), &drawArraysIndirect);
1447 AssignGLEntryPoint(loadProcAddress("glDrawElementsIndirect"), &drawElementsIndirect);
1448 AssignGLEntryPoint(loadProcAddress("glDrawTransformFeedback"), &drawTransformFeedback);
1449 AssignGLEntryPoint(loadProcAddress("glDrawTransformFeedbackStream"), &drawTransformFeedbackStream);
1450 AssignGLEntryPoint(loadProcAddress("glEndQueryIndexed"), &endQueryIndexed);
1451 AssignGLEntryPoint(loadProcAddress("glGenTransformFeedbacks"), &genTransformFeedbacks);
1452 AssignGLEntryPoint(loadProcAddress("glGetActiveSubroutineName"), &getActiveSubroutineName);
1453 AssignGLEntryPoint(loadProcAddress("glGetActiveSubroutineUniformName"), &getActiveSubroutineUniformName);
1454 AssignGLEntryPoint(loadProcAddress("glGetActiveSubroutineUniformiv"), &getActiveSubroutineUniformiv);
1455 AssignGLEntryPoint(loadProcAddress("glGetProgramStageiv"), &getProgramStageiv);
1456 AssignGLEntryPoint(loadProcAddress("glGetQueryIndexediv"), &getQueryIndexediv);
1457 AssignGLEntryPoint(loadProcAddress("glGetSubroutineIndex"), &getSubroutineIndex);
1458 AssignGLEntryPoint(loadProcAddress("glGetSubroutineUniformLocation"), &getSubroutineUniformLocation);
1459 AssignGLEntryPoint(loadProcAddress("glGetUniformSubroutineuiv"), &getUniformSubroutineuiv);
1460 AssignGLEntryPoint(loadProcAddress("glGetUniformdv"), &getUniformdv);
1461 AssignGLEntryPoint(loadProcAddress("glIsTransformFeedback"), &isTransformFeedback);
1462 AssignGLEntryPoint(loadProcAddress("glMinSampleShading"), &minSampleShading);
1463 AssignGLEntryPoint(loadProcAddress("glPatchParameterfv"), &patchParameterfv);
1464 AssignGLEntryPoint(loadProcAddress("glPatchParameteri"), &patchParameteri);
1465 AssignGLEntryPoint(loadProcAddress("glPauseTransformFeedback"), &pauseTransformFeedback);
1466 AssignGLEntryPoint(loadProcAddress("glResumeTransformFeedback"), &resumeTransformFeedback);
1467 AssignGLEntryPoint(loadProcAddress("glUniform1d"), &uniform1d);
1468 AssignGLEntryPoint(loadProcAddress("glUniform1dv"), &uniform1dv);
1469 AssignGLEntryPoint(loadProcAddress("glUniform2d"), &uniform2d);
1470 AssignGLEntryPoint(loadProcAddress("glUniform2dv"), &uniform2dv);
1471 AssignGLEntryPoint(loadProcAddress("glUniform3d"), &uniform3d);
1472 AssignGLEntryPoint(loadProcAddress("glUniform3dv"), &uniform3dv);
1473 AssignGLEntryPoint(loadProcAddress("glUniform4d"), &uniform4d);
1474 AssignGLEntryPoint(loadProcAddress("glUniform4dv"), &uniform4dv);
1475 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2dv"), &uniformMatrix2dv);
1476 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2x3dv"), &uniformMatrix2x3dv);
1477 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2x4dv"), &uniformMatrix2x4dv);
1478 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3dv"), &uniformMatrix3dv);
1479 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3x2dv"), &uniformMatrix3x2dv);
1480 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3x4dv"), &uniformMatrix3x4dv);
1481 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4dv"), &uniformMatrix4dv);
1482 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4x2dv"), &uniformMatrix4x2dv);
1483 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4x3dv"), &uniformMatrix4x3dv);
1484 AssignGLEntryPoint(loadProcAddress("glUniformSubroutinesuiv"), &uniformSubroutinesuiv);
1485 }
1486
1487 // 4.1
1488 if (isAtLeastGL(gl::Version(4, 1)))
1489 {
1490 AssignGLEntryPoint(loadProcAddress("glActiveShaderProgram"), &activeShaderProgram);
1491 AssignGLEntryPoint(loadProcAddress("glBindProgramPipeline"), &bindProgramPipeline);
1492 AssignGLEntryPoint(loadProcAddress("glClearDepthf"), &clearDepthf);
1493 AssignGLEntryPoint(loadProcAddress("glCreateShaderProgramv"), &createShaderProgramv);
1494 AssignGLEntryPoint(loadProcAddress("glDeleteProgramPipelines"), &deleteProgramPipelines);
1495 AssignGLEntryPoint(loadProcAddress("glDepthRangeArrayv"), &depthRangeArrayv);
1496 AssignGLEntryPoint(loadProcAddress("glDepthRangeIndexed"), &depthRangeIndexed);
1497 AssignGLEntryPoint(loadProcAddress("glDepthRangef"), &depthRangef);
1498 AssignGLEntryPoint(loadProcAddress("glGenProgramPipelines"), &genProgramPipelines);
1499 AssignGLEntryPoint(loadProcAddress("glGetDoublei_v"), &getDoublei_v);
1500 AssignGLEntryPoint(loadProcAddress("glGetFloati_v"), &getFloati_v);
1501 AssignGLEntryPoint(loadProcAddress("glGetProgramBinary"), &getProgramBinary);
1502 AssignGLEntryPoint(loadProcAddress("glGetProgramPipelineInfoLog"), &getProgramPipelineInfoLog);
1503 AssignGLEntryPoint(loadProcAddress("glGetProgramPipelineiv"), &getProgramPipelineiv);
1504 AssignGLEntryPoint(loadProcAddress("glGetShaderPrecisionFormat"), &getShaderPrecisionFormat);
1505 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribLdv"), &getVertexAttribLdv);
1506 AssignGLEntryPoint(loadProcAddress("glIsProgramPipeline"), &isProgramPipeline);
1507 AssignGLEntryPoint(loadProcAddress("glProgramBinary"), &programBinary);
1508 AssignGLEntryPoint(loadProcAddress("glProgramParameteri"), &programParameteri);
1509 AssignGLEntryPoint(loadProcAddress("glProgramUniform1d"), &programUniform1d);
1510 AssignGLEntryPoint(loadProcAddress("glProgramUniform1dv"), &programUniform1dv);
1511 AssignGLEntryPoint(loadProcAddress("glProgramUniform1f"), &programUniform1f);
1512 AssignGLEntryPoint(loadProcAddress("glProgramUniform1fv"), &programUniform1fv);
1513 AssignGLEntryPoint(loadProcAddress("glProgramUniform1i"), &programUniform1i);
1514 AssignGLEntryPoint(loadProcAddress("glProgramUniform1iv"), &programUniform1iv);
1515 AssignGLEntryPoint(loadProcAddress("glProgramUniform1ui"), &programUniform1ui);
1516 AssignGLEntryPoint(loadProcAddress("glProgramUniform1uiv"), &programUniform1uiv);
1517 AssignGLEntryPoint(loadProcAddress("glProgramUniform2d"), &programUniform2d);
1518 AssignGLEntryPoint(loadProcAddress("glProgramUniform2dv"), &programUniform2dv);
1519 AssignGLEntryPoint(loadProcAddress("glProgramUniform2f"), &programUniform2f);
1520 AssignGLEntryPoint(loadProcAddress("glProgramUniform2fv"), &programUniform2fv);
1521 AssignGLEntryPoint(loadProcAddress("glProgramUniform2i"), &programUniform2i);
1522 AssignGLEntryPoint(loadProcAddress("glProgramUniform2iv"), &programUniform2iv);
1523 AssignGLEntryPoint(loadProcAddress("glProgramUniform2ui"), &programUniform2ui);
1524 AssignGLEntryPoint(loadProcAddress("glProgramUniform2uiv"), &programUniform2uiv);
1525 AssignGLEntryPoint(loadProcAddress("glProgramUniform3d"), &programUniform3d);
1526 AssignGLEntryPoint(loadProcAddress("glProgramUniform3dv"), &programUniform3dv);
1527 AssignGLEntryPoint(loadProcAddress("glProgramUniform3f"), &programUniform3f);
1528 AssignGLEntryPoint(loadProcAddress("glProgramUniform3fv"), &programUniform3fv);
1529 AssignGLEntryPoint(loadProcAddress("glProgramUniform3i"), &programUniform3i);
1530 AssignGLEntryPoint(loadProcAddress("glProgramUniform3iv"), &programUniform3iv);
1531 AssignGLEntryPoint(loadProcAddress("glProgramUniform3ui"), &programUniform3ui);
1532 AssignGLEntryPoint(loadProcAddress("glProgramUniform3uiv"), &programUniform3uiv);
1533 AssignGLEntryPoint(loadProcAddress("glProgramUniform4d"), &programUniform4d);
1534 AssignGLEntryPoint(loadProcAddress("glProgramUniform4dv"), &programUniform4dv);
1535 AssignGLEntryPoint(loadProcAddress("glProgramUniform4f"), &programUniform4f);
1536 AssignGLEntryPoint(loadProcAddress("glProgramUniform4fv"), &programUniform4fv);
1537 AssignGLEntryPoint(loadProcAddress("glProgramUniform4i"), &programUniform4i);
1538 AssignGLEntryPoint(loadProcAddress("glProgramUniform4iv"), &programUniform4iv);
1539 AssignGLEntryPoint(loadProcAddress("glProgramUniform4ui"), &programUniform4ui);
1540 AssignGLEntryPoint(loadProcAddress("glProgramUniform4uiv"), &programUniform4uiv);
1541 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2dv"), &programUniformMatrix2dv);
1542 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2fv"), &programUniformMatrix2fv);
1543 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2x3dv"), &programUniformMatrix2x3dv);
1544 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2x3fv"), &programUniformMatrix2x3fv);
1545 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2x4dv"), &programUniformMatrix2x4dv);
1546 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2x4fv"), &programUniformMatrix2x4fv);
1547 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3dv"), &programUniformMatrix3dv);
1548 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3fv"), &programUniformMatrix3fv);
1549 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3x2dv"), &programUniformMatrix3x2dv);
1550 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3x2fv"), &programUniformMatrix3x2fv);
1551 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3x4dv"), &programUniformMatrix3x4dv);
1552 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3x4fv"), &programUniformMatrix3x4fv);
1553 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4dv"), &programUniformMatrix4dv);
1554 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4fv"), &programUniformMatrix4fv);
1555 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4x2dv"), &programUniformMatrix4x2dv);
1556 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4x2fv"), &programUniformMatrix4x2fv);
1557 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4x3dv"), &programUniformMatrix4x3dv);
1558 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4x3fv"), &programUniformMatrix4x3fv);
1559 AssignGLEntryPoint(loadProcAddress("glReleaseShaderCompiler"), &releaseShaderCompiler);
1560 AssignGLEntryPoint(loadProcAddress("glScissorArrayv"), &scissorArrayv);
1561 AssignGLEntryPoint(loadProcAddress("glScissorIndexed"), &scissorIndexed);
1562 AssignGLEntryPoint(loadProcAddress("glScissorIndexedv"), &scissorIndexedv);
1563 AssignGLEntryPoint(loadProcAddress("glShaderBinary"), &shaderBinary);
1564 AssignGLEntryPoint(loadProcAddress("glUseProgramStages"), &useProgramStages);
1565 AssignGLEntryPoint(loadProcAddress("glValidateProgramPipeline"), &validateProgramPipeline);
1566 AssignGLEntryPoint(loadProcAddress("glVertexAttribL1d"), &vertexAttribL1d);
1567 AssignGLEntryPoint(loadProcAddress("glVertexAttribL1dv"), &vertexAttribL1dv);
1568 AssignGLEntryPoint(loadProcAddress("glVertexAttribL2d"), &vertexAttribL2d);
1569 AssignGLEntryPoint(loadProcAddress("glVertexAttribL2dv"), &vertexAttribL2dv);
1570 AssignGLEntryPoint(loadProcAddress("glVertexAttribL3d"), &vertexAttribL3d);
1571 AssignGLEntryPoint(loadProcAddress("glVertexAttribL3dv"), &vertexAttribL3dv);
1572 AssignGLEntryPoint(loadProcAddress("glVertexAttribL4d"), &vertexAttribL4d);
1573 AssignGLEntryPoint(loadProcAddress("glVertexAttribL4dv"), &vertexAttribL4dv);
1574 AssignGLEntryPoint(loadProcAddress("glVertexAttribLPointer"), &vertexAttribLPointer);
1575 AssignGLEntryPoint(loadProcAddress("glViewportArrayv"), &viewportArrayv);
1576 AssignGLEntryPoint(loadProcAddress("glViewportIndexedf"), &viewportIndexedf);
1577 AssignGLEntryPoint(loadProcAddress("glViewportIndexedfv"), &viewportIndexedfv);
1578 }
1579
1580 // 4.2
1581 if (isAtLeastGL(gl::Version(4, 2)))
1582 {
1583 AssignGLEntryPoint(loadProcAddress("glBindImageTexture"), &bindImageTexture);
1584 AssignGLEntryPoint(loadProcAddress("glDrawArraysInstancedBaseInstance"), &drawArraysInstancedBaseInstance);
1585 AssignGLEntryPoint(loadProcAddress("glDrawElementsInstancedBaseInstance"), &drawElementsInstancedBaseInstance);
1586 AssignGLEntryPoint(loadProcAddress("glDrawElementsInstancedBaseVertexBaseInstance"), &drawElementsInstancedBaseVertexBaseInstance);
1587 AssignGLEntryPoint(loadProcAddress("glDrawTransformFeedbackInstanced"), &drawTransformFeedbackInstanced);
1588 AssignGLEntryPoint(loadProcAddress("glDrawTransformFeedbackStreamInstanced"), &drawTransformFeedbackStreamInstanced);
1589 AssignGLEntryPoint(loadProcAddress("glGetActiveAtomicCounterBufferiv"), &getActiveAtomicCounterBufferiv);
1590 AssignGLEntryPoint(loadProcAddress("glGetInternalformativ"), &getInternalformativ);
1591 AssignGLEntryPoint(loadProcAddress("glMemoryBarrier"), &memoryBarrier);
1592 AssignGLEntryPoint(loadProcAddress("glTexStorage1D"), &texStorage1D);
1593 AssignGLEntryPoint(loadProcAddress("glTexStorage2D"), &texStorage2D);
1594 AssignGLEntryPoint(loadProcAddress("glTexStorage3D"), &texStorage3D);
1595 }
1596
1597 // 4.3
1598 if (isAtLeastGL(gl::Version(4, 3)))
1599 {
1600 AssignGLEntryPoint(loadProcAddress("glBindVertexBuffer"), &bindVertexBuffer);
1601 AssignGLEntryPoint(loadProcAddress("glClearBufferData"), &clearBufferData);
1602 AssignGLEntryPoint(loadProcAddress("glClearBufferSubData"), &clearBufferSubData);
1603 AssignGLEntryPoint(loadProcAddress("glCopyImageSubData"), ©ImageSubData);
1604 AssignGLEntryPoint(loadProcAddress("glDebugMessageCallback"), &debugMessageCallback);
1605 AssignGLEntryPoint(loadProcAddress("glDebugMessageControl"), &debugMessageControl);
1606 AssignGLEntryPoint(loadProcAddress("glDebugMessageInsert"), &debugMessageInsert);
1607 AssignGLEntryPoint(loadProcAddress("glDispatchCompute"), &dispatchCompute);
1608 AssignGLEntryPoint(loadProcAddress("glDispatchComputeIndirect"), &dispatchComputeIndirect);
1609 AssignGLEntryPoint(loadProcAddress("glFramebufferParameteri"), &framebufferParameteri);
1610 AssignGLEntryPoint(loadProcAddress("glGetDebugMessageLog"), &getDebugMessageLog);
1611 AssignGLEntryPoint(loadProcAddress("glGetFramebufferParameteriv"), &getFramebufferParameteriv);
1612 AssignGLEntryPoint(loadProcAddress("glGetInternalformati64v"), &getInternalformati64v);
1613 AssignGLEntryPoint(loadProcAddress("glGetPointerv"), &getPointerv);
1614 AssignGLEntryPoint(loadProcAddress("glGetObjectLabel"), &getObjectLabel);
1615 AssignGLEntryPoint(loadProcAddress("glGetObjectPtrLabel"), &getObjectPtrLabel);
1616 AssignGLEntryPoint(loadProcAddress("glGetProgramInterfaceiv"), &getProgramInterfaceiv);
1617 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceIndex"), &getProgramResourceIndex);
1618 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceLocation"), &getProgramResourceLocation);
1619 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceLocationIndex"), &getProgramResourceLocationIndex);
1620 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceName"), &getProgramResourceName);
1621 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceiv"), &getProgramResourceiv);
1622 AssignGLEntryPoint(loadProcAddress("glInvalidateBufferData"), &invalidateBufferData);
1623 AssignGLEntryPoint(loadProcAddress("glInvalidateBufferSubData"), &invalidateBufferSubData);
1624 AssignGLEntryPoint(loadProcAddress("glInvalidateFramebuffer"), &invalidateFramebuffer);
1625 AssignGLEntryPoint(loadProcAddress("glInvalidateSubFramebuffer"), &invalidateSubFramebuffer);
1626 AssignGLEntryPoint(loadProcAddress("glInvalidateTexImage"), &invalidateTexImage);
1627 AssignGLEntryPoint(loadProcAddress("glInvalidateTexSubImage"), &invalidateTexSubImage);
1628 AssignGLEntryPoint(loadProcAddress("glMultiDrawArraysIndirect"), &multiDrawArraysIndirect);
1629 AssignGLEntryPoint(loadProcAddress("glMultiDrawElementsIndirect"), &multiDrawElementsIndirect);
1630 AssignGLEntryPoint(loadProcAddress("glObjectLabel"), &objectLabel);
1631 AssignGLEntryPoint(loadProcAddress("glObjectPtrLabel"), &objectPtrLabel);
1632 AssignGLEntryPoint(loadProcAddress("glPopDebugGroup"), &popDebugGroup);
1633 AssignGLEntryPoint(loadProcAddress("glPushDebugGroup"), &pushDebugGroup);
1634 AssignGLEntryPoint(loadProcAddress("glShaderStorageBlockBinding"), &shaderStorageBlockBinding);
1635 AssignGLEntryPoint(loadProcAddress("glTexBufferRange"), &texBufferRange);
1636 AssignGLEntryPoint(loadProcAddress("glTexStorage2DMultisample"), &texStorage2DMultisample);
1637 AssignGLEntryPoint(loadProcAddress("glTexStorage3DMultisample"), &texStorage3DMultisample);
1638 AssignGLEntryPoint(loadProcAddress("glTextureView"), &textureView);
1639 AssignGLEntryPoint(loadProcAddress("glVertexAttribBinding"), &vertexAttribBinding);
1640 AssignGLEntryPoint(loadProcAddress("glVertexAttribFormat"), &vertexAttribFormat);
1641 AssignGLEntryPoint(loadProcAddress("glVertexAttribIFormat"), &vertexAttribIFormat);
1642 AssignGLEntryPoint(loadProcAddress("glVertexAttribLFormat"), &vertexAttribLFormat);
1643 AssignGLEntryPoint(loadProcAddress("glVertexBindingDivisor"), &vertexBindingDivisor);
1644 }
1645
1646 // 4.4
1647 if (isAtLeastGL(gl::Version(4, 4)))
1648 {
1649 AssignGLEntryPoint(loadProcAddress("glBindBuffersBase"), &bindBuffersBase);
1650 AssignGLEntryPoint(loadProcAddress("glBindBuffersRange"), &bindBuffersRange);
1651 AssignGLEntryPoint(loadProcAddress("glBindImageTextures"), &bindImageTextures);
1652 AssignGLEntryPoint(loadProcAddress("glBindSamplers"), &bindSamplers);
1653 AssignGLEntryPoint(loadProcAddress("glBindTextures"), &bindTextures);
1654 AssignGLEntryPoint(loadProcAddress("glBindVertexBuffers"), &bindVertexBuffers);
1655 AssignGLEntryPoint(loadProcAddress("glBufferStorage"), &bufferStorage);
1656 AssignGLEntryPoint(loadProcAddress("glClearTexImage"), &clearTexImage);
1657 AssignGLEntryPoint(loadProcAddress("glClearTexSubImage"), &clearTexSubImage);
1658 }
1659
1660 // 4.5
1661 if (isAtLeastGL(gl::Version(4, 5)))
1662 {
1663 AssignGLEntryPoint(loadProcAddress("glBindTextureUnit"), &bindTextureUnit);
1664 AssignGLEntryPoint(loadProcAddress("glBlitNamedFramebuffer"), &blitNamedFramebuffer);
1665 AssignGLEntryPoint(loadProcAddress("glCheckNamedFramebufferStatus"), &checkNamedFramebufferStatus);
1666 AssignGLEntryPoint(loadProcAddress("glClearNamedBufferData"), &clearNamedBufferData);
1667 AssignGLEntryPoint(loadProcAddress("glClearNamedBufferSubData"), &clearNamedBufferSubData);
1668 AssignGLEntryPoint(loadProcAddress("glClearNamedFramebufferfi"), &clearNamedFramebufferfi);
1669 AssignGLEntryPoint(loadProcAddress("glClearNamedFramebufferfv"), &clearNamedFramebufferfv);
1670 AssignGLEntryPoint(loadProcAddress("glClearNamedFramebufferiv"), &clearNamedFramebufferiv);
1671 AssignGLEntryPoint(loadProcAddress("glClearNamedFramebufferuiv"), &clearNamedFramebufferuiv);
1672 AssignGLEntryPoint(loadProcAddress("glClipControl"), &clipControl);
1673 AssignGLEntryPoint(loadProcAddress("glCompressedTextureSubImage1D"), &compressedTextureSubImage1D);
1674 AssignGLEntryPoint(loadProcAddress("glCompressedTextureSubImage2D"), &compressedTextureSubImage2D);
1675 AssignGLEntryPoint(loadProcAddress("glCompressedTextureSubImage3D"), &compressedTextureSubImage3D);
1676 AssignGLEntryPoint(loadProcAddress("glCopyNamedBufferSubData"), ©NamedBufferSubData);
1677 AssignGLEntryPoint(loadProcAddress("glCopyTextureSubImage1D"), ©TextureSubImage1D);
1678 AssignGLEntryPoint(loadProcAddress("glCopyTextureSubImage2D"), ©TextureSubImage2D);
1679 AssignGLEntryPoint(loadProcAddress("glCopyTextureSubImage3D"), ©TextureSubImage3D);
1680 AssignGLEntryPoint(loadProcAddress("glCreateBuffers"), &createBuffers);
1681 AssignGLEntryPoint(loadProcAddress("glCreateFramebuffers"), &createFramebuffers);
1682 AssignGLEntryPoint(loadProcAddress("glCreateProgramPipelines"), &createProgramPipelines);
1683 AssignGLEntryPoint(loadProcAddress("glCreateQueries"), &createQueries);
1684 AssignGLEntryPoint(loadProcAddress("glCreateRenderbuffers"), &createRenderbuffers);
1685 AssignGLEntryPoint(loadProcAddress("glCreateSamplers"), &createSamplers);
1686 AssignGLEntryPoint(loadProcAddress("glCreateTextures"), &createTextures);
1687 AssignGLEntryPoint(loadProcAddress("glCreateTransformFeedbacks"), &createTransformFeedbacks);
1688 AssignGLEntryPoint(loadProcAddress("glCreateVertexArrays"), &createVertexArrays);
1689 AssignGLEntryPoint(loadProcAddress("glDisableVertexArrayAttrib"), &disableVertexArrayAttrib);
1690 AssignGLEntryPoint(loadProcAddress("glEnableVertexArrayAttrib"), &enableVertexArrayAttrib);
1691 AssignGLEntryPoint(loadProcAddress("glFlushMappedNamedBufferRange"), &flushMappedNamedBufferRange);
1692 AssignGLEntryPoint(loadProcAddress("glGenerateTextureMipmap"), &generateTextureMipmap);
1693 AssignGLEntryPoint(loadProcAddress("glGetCompressedTextureImage"), &getCompressedTextureImage);
1694 AssignGLEntryPoint(loadProcAddress("glGetCompressedTextureSubImage"), &getCompressedTextureSubImage);
1695 AssignGLEntryPoint(loadProcAddress("glGetGraphicsResetStatus"), &getGraphicsResetStatus);
1696 AssignGLEntryPoint(loadProcAddress("glGetNamedBufferParameteri64v"), &getNamedBufferParameteri64v);
1697 AssignGLEntryPoint(loadProcAddress("glGetNamedBufferParameteriv"), &getNamedBufferParameteriv);
1698 AssignGLEntryPoint(loadProcAddress("glGetNamedBufferPointerv"), &getNamedBufferPointerv);
1699 AssignGLEntryPoint(loadProcAddress("glGetNamedBufferSubData"), &getNamedBufferSubData);
1700 AssignGLEntryPoint(loadProcAddress("glGetNamedFramebufferAttachmentParameteriv"), &getNamedFramebufferAttachmentParameteriv);
1701 AssignGLEntryPoint(loadProcAddress("glGetNamedFramebufferParameteriv"), &getNamedFramebufferParameteriv);
1702 AssignGLEntryPoint(loadProcAddress("glGetNamedRenderbufferParameteriv"), &getNamedRenderbufferParameteriv);
1703 AssignGLEntryPoint(loadProcAddress("glGetQueryBufferObjecti64v"), &getQueryBufferObjecti64v);
1704 AssignGLEntryPoint(loadProcAddress("glGetQueryBufferObjectiv"), &getQueryBufferObjectiv);
1705 AssignGLEntryPoint(loadProcAddress("glGetQueryBufferObjectui64v"), &getQueryBufferObjectui64v);
1706 AssignGLEntryPoint(loadProcAddress("glGetQueryBufferObjectuiv"), &getQueryBufferObjectuiv);
1707 AssignGLEntryPoint(loadProcAddress("glGetTextureImage"), &getTextureImage);
1708 AssignGLEntryPoint(loadProcAddress("glGetTextureLevelParameterfv"), &getTextureLevelParameterfv);
1709 AssignGLEntryPoint(loadProcAddress("glGetTextureLevelParameteriv"), &getTextureLevelParameteriv);
1710 AssignGLEntryPoint(loadProcAddress("glGetTextureParameterIiv"), &getTextureParameterIiv);
1711 AssignGLEntryPoint(loadProcAddress("glGetTextureParameterIuiv"), &getTextureParameterIuiv);
1712 AssignGLEntryPoint(loadProcAddress("glGetTextureParameterfv"), &getTextureParameterfv);
1713 AssignGLEntryPoint(loadProcAddress("glGetTextureParameteriv"), &getTextureParameteriv);
1714 AssignGLEntryPoint(loadProcAddress("glGetTextureSubImage"), &getTextureSubImage);
1715 AssignGLEntryPoint(loadProcAddress("glGetTransformFeedbacki64_v"), &getTransformFeedbacki64_v);
1716 AssignGLEntryPoint(loadProcAddress("glGetTransformFeedbacki_v"), &getTransformFeedbacki_v);
1717 AssignGLEntryPoint(loadProcAddress("glGetTransformFeedbackiv"), &getTransformFeedbackiv);
1718 AssignGLEntryPoint(loadProcAddress("glGetVertexArrayIndexed64iv"), &getVertexArrayIndexed64iv);
1719 AssignGLEntryPoint(loadProcAddress("glGetVertexArrayIndexediv"), &getVertexArrayIndexediv);
1720 AssignGLEntryPoint(loadProcAddress("glGetVertexArrayiv"), &getVertexArrayiv);
1721 AssignGLEntryPoint(loadProcAddress("glGetnCompressedTexImage"), &getnCompressedTexImage);
1722 AssignGLEntryPoint(loadProcAddress("glGetnTexImage"), &getnTexImage);
1723 AssignGLEntryPoint(loadProcAddress("glGetnUniformdv"), &getnUniformdv);
1724 AssignGLEntryPoint(loadProcAddress("glGetnUniformfv"), &getnUniformfv);
1725 AssignGLEntryPoint(loadProcAddress("glGetnUniformiv"), &getnUniformiv);
1726 AssignGLEntryPoint(loadProcAddress("glGetnUniformuiv"), &getnUniformuiv);
1727 AssignGLEntryPoint(loadProcAddress("glInvalidateNamedFramebufferData"), &invalidateNamedFramebufferData);
1728 AssignGLEntryPoint(loadProcAddress("glInvalidateNamedFramebufferSubData"), &invalidateNamedFramebufferSubData);
1729 AssignGLEntryPoint(loadProcAddress("glMapNamedBuffer"), &mapNamedBuffer);
1730 AssignGLEntryPoint(loadProcAddress("glMapNamedBufferRange"), &mapNamedBufferRange);
1731 AssignGLEntryPoint(loadProcAddress("glMemoryBarrierByRegion"), &memoryBarrierByRegion);
1732 AssignGLEntryPoint(loadProcAddress("glNamedBufferData"), &namedBufferData);
1733 AssignGLEntryPoint(loadProcAddress("glNamedBufferStorage"), &namedBufferStorage);
1734 AssignGLEntryPoint(loadProcAddress("glNamedBufferSubData"), &namedBufferSubData);
1735 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferDrawBuffer"), &namedFramebufferDrawBuffer);
1736 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferDrawBuffers"), &namedFramebufferDrawBuffers);
1737 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferParameteri"), &namedFramebufferParameteri);
1738 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferReadBuffer"), &namedFramebufferReadBuffer);
1739 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferRenderbuffer"), &namedFramebufferRenderbuffer);
1740 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferTexture"), &namedFramebufferTexture);
1741 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferTextureLayer"), &namedFramebufferTextureLayer);
1742 AssignGLEntryPoint(loadProcAddress("glNamedRenderbufferStorage"), &namedRenderbufferStorage);
1743 AssignGLEntryPoint(loadProcAddress("glNamedRenderbufferStorageMultisample"), &namedRenderbufferStorageMultisample);
1744 AssignGLEntryPoint(loadProcAddress("glReadnPixels"), &readnPixels);
1745 AssignGLEntryPoint(loadProcAddress("glTextureBarrier"), &textureBarrier);
1746 AssignGLEntryPoint(loadProcAddress("glTextureBuffer"), &textureBuffer);
1747 AssignGLEntryPoint(loadProcAddress("glTextureBufferRange"), &textureBufferRange);
1748 AssignGLEntryPoint(loadProcAddress("glTextureParameterIiv"), &textureParameterIiv);
1749 AssignGLEntryPoint(loadProcAddress("glTextureParameterIuiv"), &textureParameterIuiv);
1750 AssignGLEntryPoint(loadProcAddress("glTextureParameterf"), &textureParameterf);
1751 AssignGLEntryPoint(loadProcAddress("glTextureParameterfv"), &textureParameterfv);
1752 AssignGLEntryPoint(loadProcAddress("glTextureParameteri"), &textureParameteri);
1753 AssignGLEntryPoint(loadProcAddress("glTextureParameteriv"), &textureParameteriv);
1754 AssignGLEntryPoint(loadProcAddress("glTextureStorage1D"), &textureStorage1D);
1755 AssignGLEntryPoint(loadProcAddress("glTextureStorage2D"), &textureStorage2D);
1756 AssignGLEntryPoint(loadProcAddress("glTextureStorage2DMultisample"), &textureStorage2DMultisample);
1757 AssignGLEntryPoint(loadProcAddress("glTextureStorage3D"), &textureStorage3D);
1758 AssignGLEntryPoint(loadProcAddress("glTextureStorage3DMultisample"), &textureStorage3DMultisample);
1759 AssignGLEntryPoint(loadProcAddress("glTextureSubImage1D"), &textureSubImage1D);
1760 AssignGLEntryPoint(loadProcAddress("glTextureSubImage2D"), &textureSubImage2D);
1761 AssignGLEntryPoint(loadProcAddress("glTextureSubImage3D"), &textureSubImage3D);
1762 AssignGLEntryPoint(loadProcAddress("glTransformFeedbackBufferBase"), &transformFeedbackBufferBase);
1763 AssignGLEntryPoint(loadProcAddress("glTransformFeedbackBufferRange"), &transformFeedbackBufferRange);
1764 AssignGLEntryPoint(loadProcAddress("glUnmapNamedBuffer"), &unmapNamedBuffer);
1765 AssignGLEntryPoint(loadProcAddress("glVertexArrayAttribBinding"), &vertexArrayAttribBinding);
1766 AssignGLEntryPoint(loadProcAddress("glVertexArrayAttribFormat"), &vertexArrayAttribFormat);
1767 AssignGLEntryPoint(loadProcAddress("glVertexArrayAttribIFormat"), &vertexArrayAttribIFormat);
1768 AssignGLEntryPoint(loadProcAddress("glVertexArrayAttribLFormat"), &vertexArrayAttribLFormat);
1769 AssignGLEntryPoint(loadProcAddress("glVertexArrayBindingDivisor"), &vertexArrayBindingDivisor);
1770 AssignGLEntryPoint(loadProcAddress("glVertexArrayElementBuffer"), &vertexArrayElementBuffer);
1771 AssignGLEntryPoint(loadProcAddress("glVertexArrayVertexBuffer"), &vertexArrayVertexBuffer);
1772 AssignGLEntryPoint(loadProcAddress("glVertexArrayVertexBuffers"), &vertexArrayVertexBuffers);
1773 }
1774
1775 // clang-format on
1776 }
1777
initializeProcsGLES()1778 void FunctionsGL::initializeProcsGLES()
1779 {
1780 // No profiles in GLES
1781 profile = 0;
1782
1783 // clang-format off
1784
1785 // GL_NV_path_rendering
1786 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glMatrixLoadfEXT"), &matrixLoadEXT);
1787 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glGenPathsNV"), &genPathsNV);
1788 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glDeletePathsNV"), &delPathsNV);
1789 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glPathCommandsNV"), &pathCommandsNV);
1790 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glIsPathNV"), &isPathNV);
1791 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glPathParameterfNV"), &setPathParameterfNV);
1792 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glPathParameteriNV"), &setPathParameteriNV);
1793 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glGetPathParameterfvNV"), &getPathParameterfNV);
1794 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glGetPathParameterivNV"), &getPathParameteriNV);
1795 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glPathStencilFuncNV"), &pathStencilFuncNV);
1796 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glStencilFillPathNV"), &stencilFillPathNV);
1797 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glStencilStrokePathNV"), &stencilStrokePathNV);
1798 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glCoverFillPathNV"), &coverFillPathNV);
1799 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glCoverStrokePathNV"), &coverStrokePathNV);
1800 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glStencilThenCoverFillPathNV"), &stencilThenCoverFillPathNV);
1801 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glStencilThenCoverStrokePathNV"), &stencilThenCoverStrokePathNV);
1802 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glCoverFillPathInstancedNV"), &coverFillPathInstancedNV);
1803 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glCoverStrokePathInstancedNV"), &coverStrokePathInstancedNV);
1804 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glStencilFillPathInstancedNV"), &stencilFillPathInstancedNV);
1805 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glStencilStrokePathInstancedNV"), &stencilStrokePathInstancedNV);
1806 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glStencilThenCoverFillPathInstancedNV"), &stencilThenCoverFillPathInstancedNV);
1807 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glStencilThenCoverStrokePathInstancedNV"), &stencilThenCoverStrokePathInstancedNV);
1808 AssignGLExtensionEntryPoint(extensions, "GL_NV_path_rendering", loadProcAddress("glProgramPathFragmentInputGenNV"), &programPathFragmentInputGenNV);
1809
1810 // GL_OES_texture_3D
1811 AssignGLExtensionEntryPoint(extensions, "GL_OES_texture_3D", loadProcAddress("glTexImage3DOES"), &texImage3D);
1812 AssignGLExtensionEntryPoint(extensions, "GL_OES_texture_3D", loadProcAddress("glTexSubImage3DOES"), &texSubImage3D);
1813 AssignGLExtensionEntryPoint(extensions, "GL_OES_texture_3D", loadProcAddress("glCopyTexSubImage3DOES"), ©TexSubImage3D);
1814
1815 // GL_NV_framebuffer_mixed_samples
1816 AssignGLExtensionEntryPoint(extensions, "GL_NV_framebuffer_mixed_samples", loadProcAddress("glCoverageModulationNV"), &coverageModulationNV);
1817
1818 // GL_NV_fence
1819 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glDeleteFencesNV"), &deleteFencesNV);
1820 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glGenFencesNV"), &genFencesNV);
1821 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glIsFenceNV"), &isFenceNV);
1822 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glTestFenceNV"), &testFenceNV);
1823 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glGetFenceivNV"), &getFenceivNV);
1824 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glFinishFenceNV"), &finishFenceNV);
1825 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glSetFenceNV"), &setFenceNV);
1826
1827 // GL_EXT_texture_storage
1828 AssignGLExtensionEntryPoint(extensions, "GL_EXT_texture_storage", loadProcAddress("glTexStorage2DEXT"), &texStorage2D);
1829 AssignGLExtensionEntryPoint(extensions, "GL_EXT_texture_storage GL_OES_texture3D", loadProcAddress("glTexStorage3DEXT"), &texStorage3D);
1830
1831 // GL_OES_vertex_array_object
1832 AssignGLExtensionEntryPoint(extensions, "GL_OES_vertex_array_object", loadProcAddress("glBindVertexArray"), &bindVertexArray);
1833 AssignGLExtensionEntryPoint(extensions, "GL_OES_vertex_array_object", loadProcAddress("glDeleteVertexArrays"), &deleteVertexArrays);
1834 AssignGLExtensionEntryPoint(extensions, "GL_OES_vertex_array_object", loadProcAddress("glGenVertexArrays"), &genVertexArrays);
1835 AssignGLExtensionEntryPoint(extensions, "GL_OES_vertex_array_object", loadProcAddress("glIsVertexArray"), &isVertexArray);
1836
1837 // GL_EXT_map_buffer_range
1838 AssignGLExtensionEntryPoint(extensions, "GL_EXT_map_buffer_range", loadProcAddress("glMapBufferRangeEXT"), &mapBufferRange);
1839 AssignGLExtensionEntryPoint(extensions, "GL_EXT_map_buffer_range", loadProcAddress("glFlushMappedBufferRangeEXT"), &flushMappedBufferRange);
1840 AssignGLExtensionEntryPoint(extensions, "GL_EXT_map_buffer_range", loadProcAddress("glUnmapBufferOES"), &unmapBuffer);
1841
1842 // GL_OES_mapbuffer
1843 AssignGLExtensionEntryPoint(extensions, "GL_OES_mapbuffer", loadProcAddress("glMapBufferOES"), &mapBuffer);
1844 AssignGLExtensionEntryPoint(extensions, "GL_OES_mapbuffer", loadProcAddress("glUnmapBufferOES"), &unmapBuffer);
1845
1846 // GL_KHR_debug
1847 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glDebugMessageControlKHR"), &debugMessageControl);
1848 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glDebugMessageInsertKHR"), &debugMessageInsert);
1849 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glDebugMessageCallbackKHR"), &debugMessageCallback);
1850 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glGetDebugMessageLogKHR"), &getDebugMessageLog);
1851 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glGetPointervKHR"), &getPointerv);
1852 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glPushDebugGroupKHR"), &pushDebugGroup);
1853 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glPopDebugGroupKHR"), &popDebugGroup);
1854 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glObjectLabelKHR"), &objectLabel);
1855 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glGetObjectLabelKHR"), &getObjectLabel);
1856 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glObjectPtrLabelKHR"), &objectPtrLabel);
1857 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glGetObjectPtrLabelKHR"), &getObjectPtrLabel);
1858
1859 // GL_EXT_draw_instanced
1860 AssignGLExtensionEntryPoint(extensions, "GL_EXT_draw_instanced", loadProcAddress("glVertexAttribDivisorEXT"), &vertexAttribDivisor);
1861 AssignGLExtensionEntryPoint(extensions, "GL_EXT_draw_instanced", loadProcAddress("glDrawArraysInstancedEXT"), &drawArraysInstanced);
1862 AssignGLExtensionEntryPoint(extensions, "GL_EXT_draw_instanced", loadProcAddress("glDrawElementsInstancedEXT"), &drawElementsInstanced);
1863
1864 // GL_EXT_occlusion_query_boolean
1865 AssignGLExtensionEntryPoint(extensions, "GL_EXT_occlusion_query_boolean", loadProcAddress("glGenQueriesEXT"), &genQueries);
1866 AssignGLExtensionEntryPoint(extensions, "GL_EXT_occlusion_query_boolean", loadProcAddress("glDeleteQueriesEXT"), &deleteQueries);
1867 AssignGLExtensionEntryPoint(extensions, "GL_EXT_occlusion_query_boolean", loadProcAddress("glIsQueryEXT"), &isQuery);
1868 AssignGLExtensionEntryPoint(extensions, "GL_EXT_occlusion_query_boolean", loadProcAddress("glBeginQueryEXT"), &beginQuery);
1869 AssignGLExtensionEntryPoint(extensions, "GL_EXT_occlusion_query_boolean", loadProcAddress("glEndQueryEXT"), &endQuery);
1870 AssignGLExtensionEntryPoint(extensions, "GL_EXT_occlusion_query_boolean", loadProcAddress("glGetQueryivEXT"), &getQueryiv);
1871 AssignGLExtensionEntryPoint(extensions, "GL_EXT_occlusion_query_boolean", loadProcAddress("glGetQueryObjectuivEXT"), &getQueryObjectuiv);
1872
1873 // GL_EXT_disjoint_timer_query
1874 AssignGLExtensionEntryPoint(extensions, "GL_EXT_disjoint_timer_query", loadProcAddress("glGenQueriesEXT"), &genQueries);
1875 AssignGLExtensionEntryPoint(extensions, "GL_EXT_disjoint_timer_query", loadProcAddress("glDeleteQueriesEXT"), &deleteQueries);
1876 AssignGLExtensionEntryPoint(extensions, "GL_EXT_disjoint_timer_query", loadProcAddress("glIsQueryEXT"), &isQuery);
1877 AssignGLExtensionEntryPoint(extensions, "GL_EXT_disjoint_timer_query", loadProcAddress("glBeginQueryEXT"), &beginQuery);
1878 AssignGLExtensionEntryPoint(extensions, "GL_EXT_disjoint_timer_query", loadProcAddress("glEndQueryEXT"), &endQuery);
1879 AssignGLExtensionEntryPoint(extensions, "GL_EXT_disjoint_timer_query", loadProcAddress("glQueryCounterEXT"), &queryCounter);
1880 AssignGLExtensionEntryPoint(extensions, "GL_EXT_disjoint_timer_query", loadProcAddress("glGetQueryivEXT"), &getQueryiv);
1881 AssignGLExtensionEntryPoint(extensions, "GL_EXT_disjoint_timer_query", loadProcAddress("glGetQueryObjectivEXT"), &getQueryObjectiv);
1882 AssignGLExtensionEntryPoint(extensions, "GL_EXT_disjoint_timer_query", loadProcAddress("glGetQueryObjectuivEXT"), &getQueryObjectuiv);
1883 AssignGLExtensionEntryPoint(extensions, "GL_EXT_disjoint_timer_query", loadProcAddress("glGetQueryObjecti64vEXT"), &getQueryObjecti64v);
1884 AssignGLExtensionEntryPoint(extensions, "GL_EXT_disjoint_timer_query", loadProcAddress("glGetQueryObjectui64vEXT"), &getQueryObjectui64v);
1885
1886 // GL_OES_EGL_image
1887 AssignGLExtensionEntryPoint(extensions, "GL_OES_EGL_image", loadProcAddress("glEGLImageTargetRenderbufferStorageOES"), &eglImageTargetRenderbufferStorageOES);
1888 AssignGLExtensionEntryPoint(extensions, "GL_OES_EGL_image", loadProcAddress("glEGLImageTargetTexture2DOES"), &eglImageTargetTexture2DOES);
1889
1890 // GL_OES_get_program_binary
1891 AssignGLExtensionEntryPoint(extensions, "GL_OES_get_program_binary", loadProcAddress("glGetProgramBinaryOES"), &getProgramBinary);
1892 AssignGLExtensionEntryPoint(extensions, "GL_OES_get_program_binary", loadProcAddress("glProgramBinaryOES"), &programBinary);
1893
1894 // GL_EXT_robustness
1895 AssignGLExtensionEntryPoint(extensions, "GL_EXT_robustness", loadProcAddress("glGetGraphicsResetStatusEXT"), &getGraphicsResetStatus);
1896
1897 // GL_KHR_robustness
1898 AssignGLExtensionEntryPoint(extensions, "GL_KHR_robustness", loadProcAddress("glGetGraphicsResetStatusKHR"), &getGraphicsResetStatus);
1899
1900 // 2.0
1901 if (isAtLeastGLES(gl::Version(2, 0)))
1902 {
1903 AssignGLEntryPoint(loadProcAddress("glActiveTexture"), &activeTexture);
1904 AssignGLEntryPoint(loadProcAddress("glAttachShader"), &attachShader);
1905 AssignGLEntryPoint(loadProcAddress("glBindAttribLocation"), &bindAttribLocation);
1906 AssignGLEntryPoint(loadProcAddress("glBindBuffer"), &bindBuffer);
1907 AssignGLEntryPoint(loadProcAddress("glBindFramebuffer"), &bindFramebuffer);
1908 AssignGLEntryPoint(loadProcAddress("glBindRenderbuffer"), &bindRenderbuffer);
1909 AssignGLEntryPoint(loadProcAddress("glBindTexture"), &bindTexture);
1910 AssignGLEntryPoint(loadProcAddress("glBlendColor"), &blendColor);
1911 AssignGLEntryPoint(loadProcAddress("glBlendEquation"), &blendEquation);
1912 AssignGLEntryPoint(loadProcAddress("glBlendEquationSeparate"), &blendEquationSeparate);
1913 AssignGLEntryPoint(loadProcAddress("glBlendFunc"), &blendFunc);
1914 AssignGLEntryPoint(loadProcAddress("glBlendFuncSeparate"), &blendFuncSeparate);
1915 AssignGLEntryPoint(loadProcAddress("glBufferData"), &bufferData);
1916 AssignGLEntryPoint(loadProcAddress("glBufferSubData"), &bufferSubData);
1917 AssignGLEntryPoint(loadProcAddress("glCheckFramebufferStatus"), &checkFramebufferStatus);
1918 AssignGLEntryPoint(loadProcAddress("glClear"), &clear);
1919 AssignGLEntryPoint(loadProcAddress("glClearColor"), &clearColor);
1920 AssignGLEntryPoint(loadProcAddress("glClearDepthf"), &clearDepthf);
1921 AssignGLEntryPoint(loadProcAddress("glClearStencil"), &clearStencil);
1922 AssignGLEntryPoint(loadProcAddress("glColorMask"), &colorMask);
1923 AssignGLEntryPoint(loadProcAddress("glCompileShader"), &compileShader);
1924 AssignGLEntryPoint(loadProcAddress("glCompressedTexImage2D"), &compressedTexImage2D);
1925 AssignGLEntryPoint(loadProcAddress("glCompressedTexSubImage2D"), &compressedTexSubImage2D);
1926 AssignGLEntryPoint(loadProcAddress("glCopyTexImage2D"), ©TexImage2D);
1927 AssignGLEntryPoint(loadProcAddress("glCopyTexSubImage2D"), ©TexSubImage2D);
1928 AssignGLEntryPoint(loadProcAddress("glCreateProgram"), &createProgram);
1929 AssignGLEntryPoint(loadProcAddress("glCreateShader"), &createShader);
1930 AssignGLEntryPoint(loadProcAddress("glCullFace"), &cullFace);
1931 AssignGLEntryPoint(loadProcAddress("glDeleteBuffers"), &deleteBuffers);
1932 AssignGLEntryPoint(loadProcAddress("glDeleteFramebuffers"), &deleteFramebuffers);
1933 AssignGLEntryPoint(loadProcAddress("glDeleteProgram"), &deleteProgram);
1934 AssignGLEntryPoint(loadProcAddress("glDeleteRenderbuffers"), &deleteRenderbuffers);
1935 AssignGLEntryPoint(loadProcAddress("glDeleteShader"), &deleteShader);
1936 AssignGLEntryPoint(loadProcAddress("glDeleteTextures"), &deleteTextures);
1937 AssignGLEntryPoint(loadProcAddress("glDepthFunc"), &depthFunc);
1938 AssignGLEntryPoint(loadProcAddress("glDepthMask"), &depthMask);
1939 AssignGLEntryPoint(loadProcAddress("glDepthRangef"), &depthRangef);
1940 AssignGLEntryPoint(loadProcAddress("glDetachShader"), &detachShader);
1941 AssignGLEntryPoint(loadProcAddress("glDisable"), &disable);
1942 AssignGLEntryPoint(loadProcAddress("glDisableVertexAttribArray"), &disableVertexAttribArray);
1943 AssignGLEntryPoint(loadProcAddress("glDrawArrays"), &drawArrays);
1944 AssignGLEntryPoint(loadProcAddress("glDrawElements"), &drawElements);
1945 AssignGLEntryPoint(loadProcAddress("glEnable"), &enable);
1946 AssignGLEntryPoint(loadProcAddress("glEnableVertexAttribArray"), &enableVertexAttribArray);
1947 AssignGLEntryPoint(loadProcAddress("glFinish"), &finish);
1948 AssignGLEntryPoint(loadProcAddress("glFlush"), &flush);
1949 AssignGLEntryPoint(loadProcAddress("glFramebufferRenderbuffer"), &framebufferRenderbuffer);
1950 AssignGLEntryPoint(loadProcAddress("glFramebufferTexture2D"), &framebufferTexture2D);
1951 AssignGLEntryPoint(loadProcAddress("glFrontFace"), &frontFace);
1952 AssignGLEntryPoint(loadProcAddress("glGenBuffers"), &genBuffers);
1953 AssignGLEntryPoint(loadProcAddress("glGenerateMipmap"), &generateMipmap);
1954 AssignGLEntryPoint(loadProcAddress("glGenFramebuffers"), &genFramebuffers);
1955 AssignGLEntryPoint(loadProcAddress("glGenRenderbuffers"), &genRenderbuffers);
1956 AssignGLEntryPoint(loadProcAddress("glGenTextures"), &genTextures);
1957 AssignGLEntryPoint(loadProcAddress("glGetActiveAttrib"), &getActiveAttrib);
1958 AssignGLEntryPoint(loadProcAddress("glGetActiveUniform"), &getActiveUniform);
1959 AssignGLEntryPoint(loadProcAddress("glGetAttachedShaders"), &getAttachedShaders);
1960 AssignGLEntryPoint(loadProcAddress("glGetAttribLocation"), &getAttribLocation);
1961 AssignGLEntryPoint(loadProcAddress("glGetBooleanv"), &getBooleanv);
1962 AssignGLEntryPoint(loadProcAddress("glGetBufferParameteriv"), &getBufferParameteriv);
1963 AssignGLEntryPoint(loadProcAddress("glGetError"), &getError);
1964 AssignGLEntryPoint(loadProcAddress("glGetFloatv"), &getFloatv);
1965 AssignGLEntryPoint(loadProcAddress("glGetFramebufferAttachmentParameteriv"), &getFramebufferAttachmentParameteriv);
1966 AssignGLEntryPoint(loadProcAddress("glGetIntegerv"), &getIntegerv);
1967 AssignGLEntryPoint(loadProcAddress("glGetProgramiv"), &getProgramiv);
1968 AssignGLEntryPoint(loadProcAddress("glGetProgramInfoLog"), &getProgramInfoLog);
1969 AssignGLEntryPoint(loadProcAddress("glGetRenderbufferParameteriv"), &getRenderbufferParameteriv);
1970 AssignGLEntryPoint(loadProcAddress("glGetShaderiv"), &getShaderiv);
1971 AssignGLEntryPoint(loadProcAddress("glGetShaderInfoLog"), &getShaderInfoLog);
1972 AssignGLEntryPoint(loadProcAddress("glGetShaderPrecisionFormat"), &getShaderPrecisionFormat);
1973 AssignGLEntryPoint(loadProcAddress("glGetShaderSource"), &getShaderSource);
1974 AssignGLEntryPoint(loadProcAddress("glGetString"), &getString);
1975 AssignGLEntryPoint(loadProcAddress("glGetTexParameterfv"), &getTexParameterfv);
1976 AssignGLEntryPoint(loadProcAddress("glGetTexParameteriv"), &getTexParameteriv);
1977 AssignGLEntryPoint(loadProcAddress("glGetUniformfv"), &getUniformfv);
1978 AssignGLEntryPoint(loadProcAddress("glGetUniformiv"), &getUniformiv);
1979 AssignGLEntryPoint(loadProcAddress("glGetUniformLocation"), &getUniformLocation);
1980 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribfv"), &getVertexAttribfv);
1981 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribiv"), &getVertexAttribiv);
1982 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribPointerv"), &getVertexAttribPointerv);
1983 AssignGLEntryPoint(loadProcAddress("glHint"), &hint);
1984 AssignGLEntryPoint(loadProcAddress("glIsBuffer"), &isBuffer);
1985 AssignGLEntryPoint(loadProcAddress("glIsEnabled"), &isEnabled);
1986 AssignGLEntryPoint(loadProcAddress("glIsFramebuffer"), &isFramebuffer);
1987 AssignGLEntryPoint(loadProcAddress("glIsProgram"), &isProgram);
1988 AssignGLEntryPoint(loadProcAddress("glIsRenderbuffer"), &isRenderbuffer);
1989 AssignGLEntryPoint(loadProcAddress("glIsShader"), &isShader);
1990 AssignGLEntryPoint(loadProcAddress("glIsTexture"), &isTexture);
1991 AssignGLEntryPoint(loadProcAddress("glLineWidth"), &lineWidth);
1992 AssignGLEntryPoint(loadProcAddress("glLinkProgram"), &linkProgram);
1993 AssignGLEntryPoint(loadProcAddress("glPixelStorei"), &pixelStorei);
1994 AssignGLEntryPoint(loadProcAddress("glPolygonOffset"), &polygonOffset);
1995 AssignGLEntryPoint(loadProcAddress("glReadPixels"), &readPixels);
1996 AssignGLEntryPoint(loadProcAddress("glReleaseShaderCompiler"), &releaseShaderCompiler);
1997 AssignGLEntryPoint(loadProcAddress("glRenderbufferStorage"), &renderbufferStorage);
1998 AssignGLEntryPoint(loadProcAddress("glSampleCoverage"), &sampleCoverage);
1999 AssignGLEntryPoint(loadProcAddress("glScissor"), &scissor);
2000 AssignGLEntryPoint(loadProcAddress("glShaderBinary"), &shaderBinary);
2001 AssignGLEntryPoint(loadProcAddress("glShaderSource"), &shaderSource);
2002 AssignGLEntryPoint(loadProcAddress("glStencilFunc"), &stencilFunc);
2003 AssignGLEntryPoint(loadProcAddress("glStencilFuncSeparate"), &stencilFuncSeparate);
2004 AssignGLEntryPoint(loadProcAddress("glStencilMask"), &stencilMask);
2005 AssignGLEntryPoint(loadProcAddress("glStencilMaskSeparate"), &stencilMaskSeparate);
2006 AssignGLEntryPoint(loadProcAddress("glStencilOp"), &stencilOp);
2007 AssignGLEntryPoint(loadProcAddress("glStencilOpSeparate"), &stencilOpSeparate);
2008 AssignGLEntryPoint(loadProcAddress("glTexImage2D"), &texImage2D);
2009 AssignGLEntryPoint(loadProcAddress("glTexParameterf"), &texParameterf);
2010 AssignGLEntryPoint(loadProcAddress("glTexParameterfv"), &texParameterfv);
2011 AssignGLEntryPoint(loadProcAddress("glTexParameteri"), &texParameteri);
2012 AssignGLEntryPoint(loadProcAddress("glTexParameteriv"), &texParameteriv);
2013 AssignGLEntryPoint(loadProcAddress("glTexSubImage2D"), &texSubImage2D);
2014 AssignGLEntryPoint(loadProcAddress("glUniform1f"), &uniform1f);
2015 AssignGLEntryPoint(loadProcAddress("glUniform1fv"), &uniform1fv);
2016 AssignGLEntryPoint(loadProcAddress("glUniform1i"), &uniform1i);
2017 AssignGLEntryPoint(loadProcAddress("glUniform1iv"), &uniform1iv);
2018 AssignGLEntryPoint(loadProcAddress("glUniform2f"), &uniform2f);
2019 AssignGLEntryPoint(loadProcAddress("glUniform2fv"), &uniform2fv);
2020 AssignGLEntryPoint(loadProcAddress("glUniform2i"), &uniform2i);
2021 AssignGLEntryPoint(loadProcAddress("glUniform2iv"), &uniform2iv);
2022 AssignGLEntryPoint(loadProcAddress("glUniform3f"), &uniform3f);
2023 AssignGLEntryPoint(loadProcAddress("glUniform3fv"), &uniform3fv);
2024 AssignGLEntryPoint(loadProcAddress("glUniform3i"), &uniform3i);
2025 AssignGLEntryPoint(loadProcAddress("glUniform3iv"), &uniform3iv);
2026 AssignGLEntryPoint(loadProcAddress("glUniform4f"), &uniform4f);
2027 AssignGLEntryPoint(loadProcAddress("glUniform4fv"), &uniform4fv);
2028 AssignGLEntryPoint(loadProcAddress("glUniform4i"), &uniform4i);
2029 AssignGLEntryPoint(loadProcAddress("glUniform4iv"), &uniform4iv);
2030 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2fv"), &uniformMatrix2fv);
2031 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3fv"), &uniformMatrix3fv);
2032 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4fv"), &uniformMatrix4fv);
2033 AssignGLEntryPoint(loadProcAddress("glUseProgram"), &useProgram);
2034 AssignGLEntryPoint(loadProcAddress("glValidateProgram"), &validateProgram);
2035 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1f"), &vertexAttrib1f);
2036 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1fv"), &vertexAttrib1fv);
2037 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2f"), &vertexAttrib2f);
2038 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2fv"), &vertexAttrib2fv);
2039 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3f"), &vertexAttrib3f);
2040 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3fv"), &vertexAttrib3fv);
2041 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4f"), &vertexAttrib4f);
2042 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4fv"), &vertexAttrib4fv);
2043 AssignGLEntryPoint(loadProcAddress("glVertexAttribPointer"), &vertexAttribPointer);
2044 AssignGLEntryPoint(loadProcAddress("glViewport"), &viewport);
2045 }
2046
2047 // 3.0
2048 if (isAtLeastGLES(gl::Version(3, 0)))
2049 {
2050 AssignGLEntryPoint(loadProcAddress("glReadBuffer"), &readBuffer);
2051 AssignGLEntryPoint(loadProcAddress("glDrawRangeElements"), &drawRangeElements);
2052 AssignGLEntryPoint(loadProcAddress("glTexImage3D"), &texImage3D);
2053 AssignGLEntryPoint(loadProcAddress("glTexSubImage3D"), &texSubImage3D);
2054 AssignGLEntryPoint(loadProcAddress("glCopyTexSubImage3D"), ©TexSubImage3D);
2055 AssignGLEntryPoint(loadProcAddress("glCompressedTexImage3D"), &compressedTexImage3D);
2056 AssignGLEntryPoint(loadProcAddress("glCompressedTexSubImage3D"), &compressedTexSubImage3D);
2057 AssignGLEntryPoint(loadProcAddress("glGenQueries"), &genQueries);
2058 AssignGLEntryPoint(loadProcAddress("glDeleteQueries"), &deleteQueries);
2059 AssignGLEntryPoint(loadProcAddress("glIsQuery"), &isQuery);
2060 AssignGLEntryPoint(loadProcAddress("glBeginQuery"), &beginQuery);
2061 AssignGLEntryPoint(loadProcAddress("glEndQuery"), &endQuery);
2062 AssignGLEntryPoint(loadProcAddress("glGetQueryiv"), &getQueryiv);
2063 AssignGLEntryPoint(loadProcAddress("glGetQueryObjectuiv"), &getQueryObjectuiv);
2064 AssignGLEntryPoint(loadProcAddress("glUnmapBuffer"), &unmapBuffer);
2065 AssignGLEntryPoint(loadProcAddress("glGetBufferPointerv"), &getBufferPointerv);
2066 AssignGLEntryPoint(loadProcAddress("glDrawBuffers"), &drawBuffers);
2067 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2x3fv"), &uniformMatrix2x3fv);
2068 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3x2fv"), &uniformMatrix3x2fv);
2069 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2x4fv"), &uniformMatrix2x4fv);
2070 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4x2fv"), &uniformMatrix4x2fv);
2071 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3x4fv"), &uniformMatrix3x4fv);
2072 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4x3fv"), &uniformMatrix4x3fv);
2073 AssignGLEntryPoint(loadProcAddress("glBlitFramebuffer"), &blitFramebuffer);
2074 AssignGLEntryPoint(loadProcAddress("glRenderbufferStorageMultisample"), &renderbufferStorageMultisample);
2075 AssignGLEntryPoint(loadProcAddress("glFramebufferTextureLayer"), &framebufferTextureLayer);
2076 AssignGLEntryPoint(loadProcAddress("glMapBufferRange"), &mapBufferRange);
2077 AssignGLEntryPoint(loadProcAddress("glFlushMappedBufferRange"), &flushMappedBufferRange);
2078 AssignGLEntryPoint(loadProcAddress("glBindVertexArray"), &bindVertexArray);
2079 AssignGLEntryPoint(loadProcAddress("glDeleteVertexArrays"), &deleteVertexArrays);
2080 AssignGLEntryPoint(loadProcAddress("glGenVertexArrays"), &genVertexArrays);
2081 AssignGLEntryPoint(loadProcAddress("glIsVertexArray"), &isVertexArray);
2082 AssignGLEntryPoint(loadProcAddress("glGetIntegeri_v"), &getIntegeri_v);
2083 AssignGLEntryPoint(loadProcAddress("glBeginTransformFeedback"), &beginTransformFeedback);
2084 AssignGLEntryPoint(loadProcAddress("glEndTransformFeedback"), &endTransformFeedback);
2085 AssignGLEntryPoint(loadProcAddress("glBindBufferRange"), &bindBufferRange);
2086 AssignGLEntryPoint(loadProcAddress("glBindBufferBase"), &bindBufferBase);
2087 AssignGLEntryPoint(loadProcAddress("glTransformFeedbackVaryings"), &transformFeedbackVaryings);
2088 AssignGLEntryPoint(loadProcAddress("glGetTransformFeedbackVarying"), &getTransformFeedbackVarying);
2089 AssignGLEntryPoint(loadProcAddress("glVertexAttribIPointer"), &vertexAttribIPointer);
2090 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribIiv"), &getVertexAttribIiv);
2091 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribIuiv"), &getVertexAttribIuiv);
2092 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4i"), &vertexAttribI4i);
2093 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4ui"), &vertexAttribI4ui);
2094 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4iv"), &vertexAttribI4iv);
2095 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4uiv"), &vertexAttribI4uiv);
2096 AssignGLEntryPoint(loadProcAddress("glGetUniformuiv"), &getUniformuiv);
2097 AssignGLEntryPoint(loadProcAddress("glGetFragDataLocation"), &getFragDataLocation);
2098 AssignGLEntryPoint(loadProcAddress("glUniform1ui"), &uniform1ui);
2099 AssignGLEntryPoint(loadProcAddress("glUniform2ui"), &uniform2ui);
2100 AssignGLEntryPoint(loadProcAddress("glUniform3ui"), &uniform3ui);
2101 AssignGLEntryPoint(loadProcAddress("glUniform4ui"), &uniform4ui);
2102 AssignGLEntryPoint(loadProcAddress("glUniform1uiv"), &uniform1uiv);
2103 AssignGLEntryPoint(loadProcAddress("glUniform2uiv"), &uniform2uiv);
2104 AssignGLEntryPoint(loadProcAddress("glUniform3uiv"), &uniform3uiv);
2105 AssignGLEntryPoint(loadProcAddress("glUniform4uiv"), &uniform4uiv);
2106 AssignGLEntryPoint(loadProcAddress("glClearBufferiv"), &clearBufferiv);
2107 AssignGLEntryPoint(loadProcAddress("glClearBufferuiv"), &clearBufferuiv);
2108 AssignGLEntryPoint(loadProcAddress("glClearBufferfv"), &clearBufferfv);
2109 AssignGLEntryPoint(loadProcAddress("glClearBufferfi"), &clearBufferfi);
2110 AssignGLEntryPoint(loadProcAddress("glGetStringi"), &getStringi);
2111 AssignGLEntryPoint(loadProcAddress("glCopyBufferSubData"), ©BufferSubData);
2112 AssignGLEntryPoint(loadProcAddress("glGetUniformIndices"), &getUniformIndices);
2113 AssignGLEntryPoint(loadProcAddress("glGetActiveUniformsiv"), &getActiveUniformsiv);
2114 AssignGLEntryPoint(loadProcAddress("glGetUniformBlockIndex"), &getUniformBlockIndex);
2115 AssignGLEntryPoint(loadProcAddress("glGetActiveUniformBlockiv"), &getActiveUniformBlockiv);
2116 AssignGLEntryPoint(loadProcAddress("glGetActiveUniformBlockName"), &getActiveUniformBlockName);
2117 AssignGLEntryPoint(loadProcAddress("glUniformBlockBinding"), &uniformBlockBinding);
2118 AssignGLEntryPoint(loadProcAddress("glDrawArraysInstanced"), &drawArraysInstanced);
2119 AssignGLEntryPoint(loadProcAddress("glDrawElementsInstanced"), &drawElementsInstanced);
2120 AssignGLEntryPoint(loadProcAddress("glFenceSync"), &fenceSync);
2121 AssignGLEntryPoint(loadProcAddress("glIsSync"), &isSync);
2122 AssignGLEntryPoint(loadProcAddress("glDeleteSync"), &deleteSync);
2123 AssignGLEntryPoint(loadProcAddress("glClientWaitSync"), &clientWaitSync);
2124 AssignGLEntryPoint(loadProcAddress("glWaitSync"), &waitSync);
2125 AssignGLEntryPoint(loadProcAddress("glGetInteger64v"), &getInteger64v);
2126 AssignGLEntryPoint(loadProcAddress("glGetSynciv"), &getSynciv);
2127 AssignGLEntryPoint(loadProcAddress("glGetInteger64i_v"), &getInteger64i_v);
2128 AssignGLEntryPoint(loadProcAddress("glGetBufferParameteri64v"), &getBufferParameteri64v);
2129 AssignGLEntryPoint(loadProcAddress("glGenSamplers"), &genSamplers);
2130 AssignGLEntryPoint(loadProcAddress("glDeleteSamplers"), &deleteSamplers);
2131 AssignGLEntryPoint(loadProcAddress("glIsSampler"), &isSampler);
2132 AssignGLEntryPoint(loadProcAddress("glBindSampler"), &bindSampler);
2133 AssignGLEntryPoint(loadProcAddress("glSamplerParameteri"), &samplerParameteri);
2134 AssignGLEntryPoint(loadProcAddress("glSamplerParameteriv"), &samplerParameteriv);
2135 AssignGLEntryPoint(loadProcAddress("glSamplerParameterf"), &samplerParameterf);
2136 AssignGLEntryPoint(loadProcAddress("glSamplerParameterfv"), &samplerParameterfv);
2137 AssignGLEntryPoint(loadProcAddress("glGetSamplerParameteriv"), &getSamplerParameteriv);
2138 AssignGLEntryPoint(loadProcAddress("glGetSamplerParameterfv"), &getSamplerParameterfv);
2139 AssignGLEntryPoint(loadProcAddress("glVertexAttribDivisor"), &vertexAttribDivisor);
2140 AssignGLEntryPoint(loadProcAddress("glBindTransformFeedback"), &bindTransformFeedback);
2141 AssignGLEntryPoint(loadProcAddress("glDeleteTransformFeedbacks"), &deleteTransformFeedbacks);
2142 AssignGLEntryPoint(loadProcAddress("glGenTransformFeedbacks"), &genTransformFeedbacks);
2143 AssignGLEntryPoint(loadProcAddress("glIsTransformFeedback"), &isTransformFeedback);
2144 AssignGLEntryPoint(loadProcAddress("glPauseTransformFeedback"), &pauseTransformFeedback);
2145 AssignGLEntryPoint(loadProcAddress("glResumeTransformFeedback"), &resumeTransformFeedback);
2146 AssignGLEntryPoint(loadProcAddress("glGetProgramBinary"), &getProgramBinary);
2147 AssignGLEntryPoint(loadProcAddress("glProgramBinary"), &programBinary);
2148 AssignGLEntryPoint(loadProcAddress("glProgramParameteri"), &programParameteri);
2149 AssignGLEntryPoint(loadProcAddress("glInvalidateFramebuffer"), &invalidateFramebuffer);
2150 AssignGLEntryPoint(loadProcAddress("glInvalidateSubFramebuffer"), &invalidateSubFramebuffer);
2151 AssignGLEntryPoint(loadProcAddress("glTexStorage2D"), &texStorage2D);
2152 AssignGLEntryPoint(loadProcAddress("glTexStorage3D"), &texStorage3D);
2153 AssignGLEntryPoint(loadProcAddress("glGetInternalformativ"), &getInternalformativ);
2154 }
2155
2156 // 3.1
2157 if (isAtLeastGLES(gl::Version(3, 1)))
2158 {
2159 AssignGLEntryPoint(loadProcAddress("glDispatchCompute"), &dispatchCompute);
2160 AssignGLEntryPoint(loadProcAddress("glDispatchComputeIndirect"), &dispatchComputeIndirect);
2161 AssignGLEntryPoint(loadProcAddress("glDrawArraysIndirect"), &drawArraysIndirect);
2162 AssignGLEntryPoint(loadProcAddress("glDrawElementsIndirect"), &drawElementsIndirect);
2163 AssignGLEntryPoint(loadProcAddress("glFramebufferParameteri"), &framebufferParameteri);
2164 AssignGLEntryPoint(loadProcAddress("glGetFramebufferParameteriv"), &getFramebufferParameteriv);
2165 AssignGLEntryPoint(loadProcAddress("glGetProgramInterfaceiv"), &getProgramInterfaceiv);
2166 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceIndex"), &getProgramResourceIndex);
2167 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceName"), &getProgramResourceName);
2168 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceiv"), &getProgramResourceiv);
2169 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceLocation"), &getProgramResourceLocation);
2170 AssignGLEntryPoint(loadProcAddress("glUseProgramStages"), &useProgramStages);
2171 AssignGLEntryPoint(loadProcAddress("glActiveShaderProgram"), &activeShaderProgram);
2172 AssignGLEntryPoint(loadProcAddress("glCreateShaderProgramv"), &createShaderProgramv);
2173 AssignGLEntryPoint(loadProcAddress("glBindProgramPipeline"), &bindProgramPipeline);
2174 AssignGLEntryPoint(loadProcAddress("glDeleteProgramPipelines"), &deleteProgramPipelines);
2175 AssignGLEntryPoint(loadProcAddress("glGenProgramPipelines"), &genProgramPipelines);
2176 AssignGLEntryPoint(loadProcAddress("glIsProgramPipeline"), &isProgramPipeline);
2177 AssignGLEntryPoint(loadProcAddress("glGetProgramPipelineiv"), &getProgramPipelineiv);
2178 AssignGLEntryPoint(loadProcAddress("glProgramUniform1i"), &programUniform1i);
2179 AssignGLEntryPoint(loadProcAddress("glProgramUniform2i"), &programUniform2i);
2180 AssignGLEntryPoint(loadProcAddress("glProgramUniform3i"), &programUniform3i);
2181 AssignGLEntryPoint(loadProcAddress("glProgramUniform4i"), &programUniform4i);
2182 AssignGLEntryPoint(loadProcAddress("glProgramUniform1ui"), &programUniform1ui);
2183 AssignGLEntryPoint(loadProcAddress("glProgramUniform2ui"), &programUniform2ui);
2184 AssignGLEntryPoint(loadProcAddress("glProgramUniform3ui"), &programUniform3ui);
2185 AssignGLEntryPoint(loadProcAddress("glProgramUniform4ui"), &programUniform4ui);
2186 AssignGLEntryPoint(loadProcAddress("glProgramUniform1f"), &programUniform1f);
2187 AssignGLEntryPoint(loadProcAddress("glProgramUniform2f"), &programUniform2f);
2188 AssignGLEntryPoint(loadProcAddress("glProgramUniform3f"), &programUniform3f);
2189 AssignGLEntryPoint(loadProcAddress("glProgramUniform4f"), &programUniform4f);
2190 AssignGLEntryPoint(loadProcAddress("glProgramUniform1iv"), &programUniform1iv);
2191 AssignGLEntryPoint(loadProcAddress("glProgramUniform2iv"), &programUniform2iv);
2192 AssignGLEntryPoint(loadProcAddress("glProgramUniform3iv"), &programUniform3iv);
2193 AssignGLEntryPoint(loadProcAddress("glProgramUniform4iv"), &programUniform4iv);
2194 AssignGLEntryPoint(loadProcAddress("glProgramUniform1uiv"), &programUniform1uiv);
2195 AssignGLEntryPoint(loadProcAddress("glProgramUniform2uiv"), &programUniform2uiv);
2196 AssignGLEntryPoint(loadProcAddress("glProgramUniform3uiv"), &programUniform3uiv);
2197 AssignGLEntryPoint(loadProcAddress("glProgramUniform4uiv"), &programUniform4uiv);
2198 AssignGLEntryPoint(loadProcAddress("glProgramUniform1fv"), &programUniform1fv);
2199 AssignGLEntryPoint(loadProcAddress("glProgramUniform2fv"), &programUniform2fv);
2200 AssignGLEntryPoint(loadProcAddress("glProgramUniform3fv"), &programUniform3fv);
2201 AssignGLEntryPoint(loadProcAddress("glProgramUniform4fv"), &programUniform4fv);
2202 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2fv"), &programUniformMatrix2fv);
2203 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3fv"), &programUniformMatrix3fv);
2204 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4fv"), &programUniformMatrix4fv);
2205 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2x3fv"), &programUniformMatrix2x3fv);
2206 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3x2fv"), &programUniformMatrix3x2fv);
2207 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2x4fv"), &programUniformMatrix2x4fv);
2208 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4x2fv"), &programUniformMatrix4x2fv);
2209 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3x4fv"), &programUniformMatrix3x4fv);
2210 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4x3fv"), &programUniformMatrix4x3fv);
2211 AssignGLEntryPoint(loadProcAddress("glValidateProgramPipeline"), &validateProgramPipeline);
2212 AssignGLEntryPoint(loadProcAddress("glGetProgramPipelineInfoLog"), &getProgramPipelineInfoLog);
2213 AssignGLEntryPoint(loadProcAddress("glBindImageTexture"), &bindImageTexture);
2214 AssignGLEntryPoint(loadProcAddress("glGetBooleani_v"), &getBooleani_v);
2215 AssignGLEntryPoint(loadProcAddress("glMemoryBarrier"), &memoryBarrier);
2216 AssignGLEntryPoint(loadProcAddress("glMemoryBarrierByRegion"), &memoryBarrierByRegion);
2217 AssignGLEntryPoint(loadProcAddress("glTexStorage2DMultisample"), &texStorage2DMultisample);
2218 AssignGLEntryPoint(loadProcAddress("glGetMultisamplefv"), &getMultisamplefv);
2219 AssignGLEntryPoint(loadProcAddress("glSampleMaski"), &sampleMaski);
2220 AssignGLEntryPoint(loadProcAddress("glGetTexLevelParameteriv"), &getTexLevelParameteriv);
2221 AssignGLEntryPoint(loadProcAddress("glGetTexLevelParameterfv"), &getTexLevelParameterfv);
2222 AssignGLEntryPoint(loadProcAddress("glBindVertexBuffer"), &bindVertexBuffer);
2223 AssignGLEntryPoint(loadProcAddress("glVertexAttribFormat"), &vertexAttribFormat);
2224 AssignGLEntryPoint(loadProcAddress("glVertexAttribIFormat"), &vertexAttribIFormat);
2225 AssignGLEntryPoint(loadProcAddress("glVertexAttribBinding"), &vertexAttribBinding);
2226 AssignGLEntryPoint(loadProcAddress("glVertexBindingDivisor"), &vertexBindingDivisor);
2227 }
2228
2229 // 3.2
2230 if (isAtLeastGLES(gl::Version(3, 2)))
2231 {
2232 AssignGLEntryPoint(loadProcAddress("glBlendBarrier"), &blendBarrier);
2233 AssignGLEntryPoint(loadProcAddress("glCopyImageSubData"), ©ImageSubData);
2234 AssignGLEntryPoint(loadProcAddress("glDebugMessageControl"), &debugMessageControl);
2235 AssignGLEntryPoint(loadProcAddress("glDebugMessageInsert"), &debugMessageInsert);
2236 AssignGLEntryPoint(loadProcAddress("glDebugMessageCallback"), &debugMessageCallback);
2237 AssignGLEntryPoint(loadProcAddress("glGetDebugMessageLog"), &getDebugMessageLog);
2238 AssignGLEntryPoint(loadProcAddress("glPushDebugGroup"), &pushDebugGroup);
2239 AssignGLEntryPoint(loadProcAddress("glPopDebugGroup"), &popDebugGroup);
2240 AssignGLEntryPoint(loadProcAddress("glObjectLabel"), &objectLabel);
2241 AssignGLEntryPoint(loadProcAddress("glGetObjectLabel"), &getObjectLabel);
2242 AssignGLEntryPoint(loadProcAddress("glObjectPtrLabel"), &objectPtrLabel);
2243 AssignGLEntryPoint(loadProcAddress("glGetObjectPtrLabel"), &getObjectPtrLabel);
2244 AssignGLEntryPoint(loadProcAddress("glGetPointerv"), &getPointerv);
2245 AssignGLEntryPoint(loadProcAddress("glEnablei"), &enablei);
2246 AssignGLEntryPoint(loadProcAddress("glDisablei"), &disablei);
2247 AssignGLEntryPoint(loadProcAddress("glBlendEquationi"), &blendEquationi);
2248 AssignGLEntryPoint(loadProcAddress("glBlendEquationSeparatei"), &blendEquationSeparatei);
2249 AssignGLEntryPoint(loadProcAddress("glBlendFunci"), &blendFunci);
2250 AssignGLEntryPoint(loadProcAddress("glBlendFuncSeparatei"), &blendFuncSeparatei);
2251 AssignGLEntryPoint(loadProcAddress("glColorMaski"), &colorMaski);
2252 AssignGLEntryPoint(loadProcAddress("glIsEnabledi"), &isEnabledi);
2253 AssignGLEntryPoint(loadProcAddress("glDrawElementsBaseVertex"), &drawElementsBaseVertex);
2254 AssignGLEntryPoint(loadProcAddress("glDrawRangeElementsBaseVertex"), &drawRangeElementsBaseVertex);
2255 AssignGLEntryPoint(loadProcAddress("glDrawElementsInstancedBaseVertex"), &drawElementsInstancedBaseVertex);
2256 AssignGLEntryPoint(loadProcAddress("glFramebufferTexture"), &framebufferTexture);
2257 AssignGLEntryPoint(loadProcAddress("glPrimitiveBoundingBox"), &primitiveBoundingBox);
2258 AssignGLEntryPoint(loadProcAddress("glGetGraphicsResetStatus"), &getGraphicsResetStatus);
2259 AssignGLEntryPoint(loadProcAddress("glReadnPixels"), &readnPixels);
2260 AssignGLEntryPoint(loadProcAddress("glGetnUniformfv"), &getnUniformfv);
2261 AssignGLEntryPoint(loadProcAddress("glGetnUniformiv"), &getnUniformiv);
2262 AssignGLEntryPoint(loadProcAddress("glGetnUniformuiv"), &getnUniformuiv);
2263 AssignGLEntryPoint(loadProcAddress("glMinSampleShading"), &minSampleShading);
2264 AssignGLEntryPoint(loadProcAddress("glPatchParameteri"), &patchParameteri);
2265 AssignGLEntryPoint(loadProcAddress("glTexParameterIiv"), &texParameterIiv);
2266 AssignGLEntryPoint(loadProcAddress("glTexParameterIuiv"), &texParameterIuiv);
2267 AssignGLEntryPoint(loadProcAddress("glGetTexParameterIiv"), &getTexParameterIiv);
2268 AssignGLEntryPoint(loadProcAddress("glGetTexParameterIuiv"), &getTexParameterIuiv);
2269 AssignGLEntryPoint(loadProcAddress("glSamplerParameterIiv"), &samplerParameterIiv);
2270 AssignGLEntryPoint(loadProcAddress("glSamplerParameterIuiv"), &samplerParameterIuiv);
2271 AssignGLEntryPoint(loadProcAddress("glGetSamplerParameterIiv"), &getSamplerParameterIiv);
2272 AssignGLEntryPoint(loadProcAddress("glGetSamplerParameterIuiv"), &getSamplerParameterIuiv);
2273 AssignGLEntryPoint(loadProcAddress("glTexBuffer"), &texBuffer);
2274 AssignGLEntryPoint(loadProcAddress("glTexBufferRange"), &texBufferRange);
2275 AssignGLEntryPoint(loadProcAddress("glTexStorage3DMultisample"), &texStorage3DMultisample);
2276 }
2277
2278 // clang-format on
2279 }
2280
isAtLeastGL(const gl::Version & glVersion) const2281 bool FunctionsGL::isAtLeastGL(const gl::Version &glVersion) const
2282 {
2283 return standard == STANDARD_GL_DESKTOP && version >= glVersion;
2284 }
2285
isAtMostGL(const gl::Version & glVersion) const2286 bool FunctionsGL::isAtMostGL(const gl::Version &glVersion) const
2287 {
2288 return standard == STANDARD_GL_DESKTOP && glVersion >= version;
2289 }
2290
isAtLeastGLES(const gl::Version & glesVersion) const2291 bool FunctionsGL::isAtLeastGLES(const gl::Version &glesVersion) const
2292 {
2293 return standard == STANDARD_GL_ES && version >= glesVersion;
2294 }
2295
isAtMostGLES(const gl::Version & glesVersion) const2296 bool FunctionsGL::isAtMostGLES(const gl::Version &glesVersion) const
2297 {
2298 return standard == STANDARD_GL_ES && glesVersion >= version;
2299 }
2300
hasExtension(const std::string & ext) const2301 bool FunctionsGL::hasExtension(const std::string &ext) const
2302 {
2303 return std::find(extensions.begin(), extensions.end(), ext) != extensions.end();
2304 }
2305
hasGLExtension(const std::string & ext) const2306 bool FunctionsGL::hasGLExtension(const std::string &ext) const
2307 {
2308 return standard == STANDARD_GL_DESKTOP && hasExtension(ext);
2309 }
2310
hasGLESExtension(const std::string & ext) const2311 bool FunctionsGL::hasGLESExtension(const std::string &ext) const
2312 {
2313 return standard == STANDARD_GL_ES && hasExtension(ext);
2314 }
2315
2316 }
2317