blob: 153ece44455ec7408ec27a251b5fef91b8316b3e [file] [log] [blame]
Geoff Lang56cf9af2015-02-17 10:16:49 -05001//
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"
Jacek Cabanfa60f692015-04-27 18:23:44 +020010
11#include <algorithm>
12
Geoff Langa4903b72015-03-02 16:02:48 -080013#include "libANGLE/renderer/gl/renderergl_utils.h"
Geoff Lang56cf9af2015-02-17 10:16:49 -050014
15namespace rx
16{
17
Geoff Langa4903b72015-03-02 16:02:48 -080018static void GetGLVersion(PFNGLGETSTRINGPROC getStringFunction, GLuint *outMajorVersion, GLuint *outMinorVersion,
19 bool *outIsES)
20{
21 const std::string version = reinterpret_cast<const char*>(getStringFunction(GL_VERSION));
22 if (version.find("OpenGL ES") == std::string::npos)
23 {
24 // ES spec states that the GL_VERSION string will be in the following format:
25 // "OpenGL ES N.M vendor-specific information"
26 *outIsES = false;
27 *outMajorVersion = version[0] - '0';
28 *outMinorVersion = version[2] - '0';
29 }
30 else
31 {
32 // OpenGL spec states the GL_VERSION string will be in the following format:
33 // <version number><space><vendor-specific information>
34 // The version number is either of the form major number.minor number or major
35 // number.minor number.release number, where the numbers all have one or more
36 // digits
37 *outIsES = true;
38 *outMajorVersion = version[10] - '0';
39 *outMinorVersion = version[12] - '0';
40 }
41}
42
43static std::vector<std::string> GetNonIndexedExtensions(PFNGLGETSTRINGPROC getStringFunction)
44{
45 std::vector<std::string> result;
46
47 std::istringstream stream(reinterpret_cast<const char*>(getStringFunction(GL_EXTENSIONS)));
48 std::string extension;
49 while (std::getline(stream, extension, ' '))
50 {
51 result.push_back(extension);
52 }
53
54 return result;
55}
56
57static std::vector<std::string> GetIndexedExtensions(PFNGLGETINTEGERVPROC getIntegerFunction, PFNGLGETSTRINGIPROC getStringIFunction)
58{
59 std::vector<std::string> result;
60
61 GLint numExtensions;
62 getIntegerFunction(GL_NUM_EXTENSIONS, &numExtensions);
63
64 result.reserve(numExtensions);
65
66 for (GLint i = 0; i < numExtensions; i++)
67 {
68 result.push_back(reinterpret_cast<const char*>(getStringIFunction(GL_EXTENSIONS, i)));
69 }
70
71 return result;
72}
73
Geoff Lang56cf9af2015-02-17 10:16:49 -050074template <typename T>
75static void AssignGLEntryPoint(void *function, T *outFunction)
76{
77 *outFunction = reinterpret_cast<T>(function);
78}
79
Geoff Langa4903b72015-03-02 16:02:48 -080080template <typename T>
81static void AssignGLExtensionEntryPoint(const std::vector<std::string> &extensions, const std::string &extension, void *function, T *outFunction)
82{
83 if (std::find(extensions.begin(), extensions.end(), extension) != extensions.end())
84 {
85 *outFunction = reinterpret_cast<T>(function);
86 }
87}
88
Geoff Lang56cf9af2015-02-17 10:16:49 -050089FunctionsGL::FunctionsGL()
Geoff Langa4903b72015-03-02 16:02:48 -080090 : majorVersion(0),
91 minorVersion(0),
92 openGLES(false),
93 extensions(),
94
95 blendFunc(nullptr),
Geoff Lang56cf9af2015-02-17 10:16:49 -050096 clear(nullptr),
97 clearColor(nullptr),
98 clearDepth(nullptr),
99 clearStencil(nullptr),
100 colorMask(nullptr),
101 cullFace(nullptr),
102 depthFunc(nullptr),
103 depthMask(nullptr),
104 depthRange(nullptr),
105 disable(nullptr),
106 drawBuffer(nullptr),
107 enable(nullptr),
108 finish(nullptr),
109 flush(nullptr),
110 frontFace(nullptr),
111 getBooleanv(nullptr),
112 getDoublev(nullptr),
113 getError(nullptr),
114 getFloatv(nullptr),
115 getIntegerv(nullptr),
116 getString(nullptr),
117 getTexImage(nullptr),
118 getTexLevelParameterfv(nullptr),
119 getTexLevelParameteriv(nullptr),
120 getTexParameterfv(nullptr),
121 getTexParameteriv(nullptr),
122 hint(nullptr),
123 isEnabled(nullptr),
124 lineWidth(nullptr),
125 logicOp(nullptr),
126 pixelStoref(nullptr),
127 pixelStorei(nullptr),
128 pointSize(nullptr),
129 polygonMode(nullptr),
130 readBuffer(nullptr),
131 readPixels(nullptr),
132 scissor(nullptr),
133 stencilFunc(nullptr),
134 stencilMask(nullptr),
135 stencilOp(nullptr),
136 texImage1D(nullptr),
137 texImage2D(nullptr),
138 texParameterf(nullptr),
139 texParameterfv(nullptr),
140 texParameteri(nullptr),
141 texParameteriv(nullptr),
142 viewport(nullptr),
143
144 bindTexture(nullptr),
145 copyTexImage1D(nullptr),
146 copyTexImage2D(nullptr),
147 copyTexSubImage1D(nullptr),
148 copyTexSubImage2D(nullptr),
149 deleteTextures(nullptr),
150 drawArrays(nullptr),
151 drawElements(nullptr),
152 genTextures(nullptr),
153 isTexture(nullptr),
154 polygonOffset(nullptr),
155 texSubImage1D(nullptr),
156 texSubImage2D(nullptr),
157
158 blendColor(nullptr),
159 blendEquation(nullptr),
160 copyTexSubImage3D(nullptr),
161 drawRangeElements(nullptr),
162 texImage3D(nullptr),
163 texSubImage3D(nullptr),
164
Geoff Langb11ad262015-04-09 14:43:34 -0400165 deleteFencesNV(nullptr),
166 genFencesNV(nullptr),
167 isFenceNV(nullptr),
168 testFenceNV(nullptr),
169 getFenceivNV(nullptr),
170 finishFenceNV(nullptr),
171 setFenceNV(nullptr),
172
Geoff Lang56cf9af2015-02-17 10:16:49 -0500173 activeTexture(nullptr),
174 compressedTexImage1D(nullptr),
175 compressedTexImage2D(nullptr),
176 compressedTexImage3D(nullptr),
177 compressedTexSubImage1D(nullptr),
178 compressedTexSubImage2D(nullptr),
179 compressedTexSubImage3D(nullptr),
180 getCompressedTexImage(nullptr),
181 sampleCoverage(nullptr),
182
183 blendFuncSeparate(nullptr),
184 multiDrawArrays(nullptr),
185 multiDrawElements(nullptr),
186 pointParameterf(nullptr),
187 pointParameterfv(nullptr),
188 pointParameteri(nullptr),
189 pointParameteriv(nullptr),
190
191 beginQuery(nullptr),
192 bindBuffer(nullptr),
193 bufferData(nullptr),
194 bufferSubData(nullptr),
195 deleteBuffers(nullptr),
196 deleteQueries(nullptr),
197 endQuery(nullptr),
198 genBuffers(nullptr),
199 genQueries(nullptr),
200 getBufferParameteriv(nullptr),
201 getBufferPointerv(nullptr),
202 getBufferSubData(nullptr),
203 getQueryObjectiv(nullptr),
204 getQueryObjectuiv(nullptr),
205 getQueryiv(nullptr),
206 isBuffer(nullptr),
207 isQuery(nullptr),
208 mapBuffer(nullptr),
209 unmapBuffer(nullptr),
210
211 attachShader(nullptr),
212 bindAttribLocation(nullptr),
213 blendEquationSeparate(nullptr),
214 compileShader(nullptr),
215 createProgram(nullptr),
216 createShader(nullptr),
217 deleteProgram(nullptr),
218 deleteShader(nullptr),
219 detachShader(nullptr),
220 disableVertexAttribArray(nullptr),
221 drawBuffers(nullptr),
222 enableVertexAttribArray(nullptr),
223 getActiveAttrib(nullptr),
224 getActiveUniform(nullptr),
225 getAttachedShaders(nullptr),
226 getAttribLocation(nullptr),
227 getProgramInfoLog(nullptr),
228 getProgramiv(nullptr),
229 getShaderInfoLog(nullptr),
230 getShaderSource(nullptr),
231 getShaderiv(nullptr),
232 getUniformLocation(nullptr),
233 getUniformfv(nullptr),
234 getUniformiv(nullptr),
235 getVertexAttribPointerv(nullptr),
236 getVertexAttribdv(nullptr),
237 getVertexAttribfv(nullptr),
238 getVertexAttribiv(nullptr),
239 isProgram(nullptr),
240 isShader(nullptr),
241 linkProgram(nullptr),
242 shaderSource(nullptr),
243 stencilFuncSeparate(nullptr),
244 stencilMaskSeparate(nullptr),
245 stencilOpSeparate(nullptr),
246 uniform1f(nullptr),
247 uniform1fv(nullptr),
248 uniform1i(nullptr),
249 uniform1iv(nullptr),
250 uniform2f(nullptr),
251 uniform2fv(nullptr),
252 uniform2i(nullptr),
253 uniform2iv(nullptr),
254 uniform3f(nullptr),
255 uniform3fv(nullptr),
256 uniform3i(nullptr),
257 uniform3iv(nullptr),
258 uniform4f(nullptr),
259 uniform4fv(nullptr),
260 uniform4i(nullptr),
261 uniform4iv(nullptr),
262 uniformMatrix2fv(nullptr),
263 uniformMatrix3fv(nullptr),
264 uniformMatrix4fv(nullptr),
265 useProgram(nullptr),
266 validateProgram(nullptr),
267 vertexAttrib1d(nullptr),
268 vertexAttrib1dv(nullptr),
269 vertexAttrib1f(nullptr),
270 vertexAttrib1fv(nullptr),
271 vertexAttrib1s(nullptr),
272 vertexAttrib1sv(nullptr),
273 vertexAttrib2d(nullptr),
274 vertexAttrib2dv(nullptr),
275 vertexAttrib2f(nullptr),
276 vertexAttrib2fv(nullptr),
277 vertexAttrib2s(nullptr),
278 vertexAttrib2sv(nullptr),
279 vertexAttrib3d(nullptr),
280 vertexAttrib3dv(nullptr),
281 vertexAttrib3f(nullptr),
282 vertexAttrib3fv(nullptr),
283 vertexAttrib3s(nullptr),
284 vertexAttrib3sv(nullptr),
285 vertexAttrib4Nbv(nullptr),
286 vertexAttrib4Niv(nullptr),
287 vertexAttrib4Nsv(nullptr),
288 vertexAttrib4Nub(nullptr),
289 vertexAttrib4Nubv(nullptr),
290 vertexAttrib4Nuiv(nullptr),
291 vertexAttrib4Nusv(nullptr),
292 vertexAttrib4bv(nullptr),
293 vertexAttrib4d(nullptr),
294 vertexAttrib4dv(nullptr),
295 vertexAttrib4f(nullptr),
296 vertexAttrib4fv(nullptr),
297 vertexAttrib4iv(nullptr),
298 vertexAttrib4s(nullptr),
299 vertexAttrib4sv(nullptr),
300 vertexAttrib4ubv(nullptr),
301 vertexAttrib4uiv(nullptr),
302 vertexAttrib4usv(nullptr),
303 vertexAttribPointer(nullptr),
304
305 uniformMatrix2x3fv(nullptr),
306 uniformMatrix2x4fv(nullptr),
307 uniformMatrix3x2fv(nullptr),
308 uniformMatrix3x4fv(nullptr),
309 uniformMatrix4x2fv(nullptr),
310 uniformMatrix4x3fv(nullptr),
311
312 beginConditionalRender(nullptr),
313 beginTransformFeedback(nullptr),
314 bindBufferBase(nullptr),
315 bindBufferRange(nullptr),
316 bindFragDataLocation(nullptr),
317 bindFramebuffer(nullptr),
318 bindRenderbuffer(nullptr),
319 bindVertexArray(nullptr),
320 blitFramebuffer(nullptr),
321 checkFramebufferStatus(nullptr),
322 clampColor(nullptr),
323 clearBufferfi(nullptr),
324 clearBufferfv(nullptr),
325 clearBufferiv(nullptr),
326 clearBufferuiv(nullptr),
327 colorMaski(nullptr),
328 deleteFramebuffers(nullptr),
329 deleteRenderbuffers(nullptr),
330 deleteVertexArrays(nullptr),
331 disablei(nullptr),
332 enablei(nullptr),
333 endConditionalRender(nullptr),
334 endTransformFeedback(nullptr),
335 flushMappedBufferRange(nullptr),
336 framebufferRenderbuffer(nullptr),
337 framebufferTexture1D(nullptr),
338 framebufferTexture2D(nullptr),
339 framebufferTexture3D(nullptr),
340 framebufferTextureLayer(nullptr),
341 genFramebuffers(nullptr),
342 genRenderbuffers(nullptr),
343 genVertexArrays(nullptr),
344 generateMipmap(nullptr),
345 getBooleani_v(nullptr),
346 getFragDataLocation(nullptr),
347 getFramebufferAttachmentParameteriv(nullptr),
348 getIntegeri_v(nullptr),
349 getRenderbufferParameteriv(nullptr),
350 getStringi(nullptr),
351 getTexParameterIiv(nullptr),
352 getTexParameterIuiv(nullptr),
353 getTransformFeedbackVarying(nullptr),
354 getUniformuiv(nullptr),
355 getVertexAttribIiv(nullptr),
356 getVertexAttribIuiv(nullptr),
357 isEnabledi(nullptr),
358 isFramebuffer(nullptr),
359 isRenderbuffer(nullptr),
360 isVertexArray(nullptr),
361 mapBufferRange(nullptr),
362 renderbufferStorage(nullptr),
363 renderbufferStorageMultisample(nullptr),
364 texParameterIiv(nullptr),
365 texParameterIuiv(nullptr),
366 transformFeedbackVaryings(nullptr),
367 uniform1ui(nullptr),
368 uniform1uiv(nullptr),
369 uniform2ui(nullptr),
370 uniform2uiv(nullptr),
371 uniform3ui(nullptr),
372 uniform3uiv(nullptr),
373 uniform4ui(nullptr),
374 uniform4uiv(nullptr),
375 vertexAttribI1i(nullptr),
376 vertexAttribI1iv(nullptr),
377 vertexAttribI1ui(nullptr),
378 vertexAttribI1uiv(nullptr),
379 vertexAttribI2i(nullptr),
380 vertexAttribI2iv(nullptr),
381 vertexAttribI2ui(nullptr),
382 vertexAttribI2uiv(nullptr),
383 vertexAttribI3i(nullptr),
384 vertexAttribI3iv(nullptr),
385 vertexAttribI3ui(nullptr),
386 vertexAttribI3uiv(nullptr),
387 vertexAttribI4bv(nullptr),
388 vertexAttribI4i(nullptr),
389 vertexAttribI4iv(nullptr),
390 vertexAttribI4sv(nullptr),
391 vertexAttribI4ubv(nullptr),
392 vertexAttribI4ui(nullptr),
393 vertexAttribI4uiv(nullptr),
394 vertexAttribI4usv(nullptr),
395 vertexAttribIPointer(nullptr),
396
397 copyBufferSubData(nullptr),
398 drawArraysInstanced(nullptr),
399 drawElementsInstanced(nullptr),
400 getActiveUniformBlockName(nullptr),
401 getActiveUniformBlockiv(nullptr),
402 getActiveUniformName(nullptr),
403 getActiveUniformsiv(nullptr),
404 getUniformBlockIndex(nullptr),
405 getUniformIndices(nullptr),
406 primitiveRestartIndex(nullptr),
407 texBuffer(nullptr),
408 uniformBlockBinding(nullptr),
409
410 clientWaitSync(nullptr),
411 deleteSync(nullptr),
412 drawElementsBaseVertex(nullptr),
413 drawElementsInstancedBaseVertex(nullptr),
414 drawRangeElementsBaseVertex(nullptr),
415 fenceSync(nullptr),
416 framebufferTexture(nullptr),
417 getBufferParameteri64v(nullptr),
418 getInteger64i_v(nullptr),
419 getInteger64v(nullptr),
420 getMultisamplefv(nullptr),
421 getSynciv(nullptr),
422 isSync(nullptr),
423 multiDrawElementsBaseVertex(nullptr),
424 provokingVertex(nullptr),
425 sampleMaski(nullptr),
426 texImage2DMultisample(nullptr),
427 texImage3DMultisample(nullptr),
428 waitSync(nullptr),
429
430 bindFragDataLocationIndexed(nullptr),
431 bindSampler(nullptr),
432 deleteSamplers(nullptr),
433 genSamplers(nullptr),
434 getFragDataIndex(nullptr),
435 getQueryObjecti64v(nullptr),
436 getQueryObjectui64v(nullptr),
437 getSamplerParameterIiv(nullptr),
438 getSamplerParameterIuiv(nullptr),
439 getSamplerParameterfv(nullptr),
440 getSamplerParameteriv(nullptr),
441 isSampler(nullptr),
442 queryCounter(nullptr),
443 samplerParameterIiv(nullptr),
444 samplerParameterIuiv(nullptr),
445 samplerParameterf(nullptr),
446 samplerParameterfv(nullptr),
447 samplerParameteri(nullptr),
448 samplerParameteriv(nullptr),
449 vertexAttribDivisor(nullptr),
450 vertexAttribP1ui(nullptr),
451 vertexAttribP1uiv(nullptr),
452 vertexAttribP2ui(nullptr),
453 vertexAttribP2uiv(nullptr),
454 vertexAttribP3ui(nullptr),
455 vertexAttribP3uiv(nullptr),
456 vertexAttribP4ui(nullptr),
457 vertexAttribP4uiv(nullptr),
458
459 beginQueryIndexed(nullptr),
460 bindTransformFeedback(nullptr),
461 blendEquationSeparatei(nullptr),
462 blendEquationi(nullptr),
463 blendFuncSeparatei(nullptr),
464 blendFunci(nullptr),
465 deleteTransformFeedbacks(nullptr),
466 drawArraysIndirect(nullptr),
467 drawElementsIndirect(nullptr),
468 drawTransformFeedback(nullptr),
469 drawTransformFeedbackStream(nullptr),
470 endQueryIndexed(nullptr),
471 genTransformFeedbacks(nullptr),
472 getActiveSubroutineName(nullptr),
473 getActiveSubroutineUniformName(nullptr),
474 getActiveSubroutineUniformiv(nullptr),
475 getProgramStageiv(nullptr),
476 getQueryIndexediv(nullptr),
477 getSubroutineIndex(nullptr),
478 getSubroutineUniformLocation(nullptr),
479 getUniformSubroutineuiv(nullptr),
480 getUniformdv(nullptr),
481 isTransformFeedback(nullptr),
482 minSampleShading(nullptr),
483 patchParameterfv(nullptr),
484 patchParameteri(nullptr),
485 pauseTransformFeedback(nullptr),
486 resumeTransformFeedback(nullptr),
487 uniform1d(nullptr),
488 uniform1dv(nullptr),
489 uniform2d(nullptr),
490 uniform2dv(nullptr),
491 uniform3d(nullptr),
492 uniform3dv(nullptr),
493 uniform4d(nullptr),
494 uniform4dv(nullptr),
495 uniformMatrix2dv(nullptr),
496 uniformMatrix2x3dv(nullptr),
497 uniformMatrix2x4dv(nullptr),
498 uniformMatrix3dv(nullptr),
499 uniformMatrix3x2dv(nullptr),
500 uniformMatrix3x4dv(nullptr),
501 uniformMatrix4dv(nullptr),
502 uniformMatrix4x2dv(nullptr),
503 uniformMatrix4x3dv(nullptr),
504 uniformSubroutinesuiv(nullptr),
505
506 activeShaderProgram(nullptr),
507 bindProgramPipeline(nullptr),
508 clearDepthf(nullptr),
509 createShaderProgramv(nullptr),
510 deleteProgramPipelines(nullptr),
511 depthRangeArrayv(nullptr),
512 depthRangeIndexed(nullptr),
513 depthRangef(nullptr),
514 genProgramPipelines(nullptr),
515 getDoublei_v(nullptr),
516 getFloati_v(nullptr),
517 getProgramBinary(nullptr),
518 getProgramPipelineInfoLog(nullptr),
519 getProgramPipelineiv(nullptr),
520 getShaderPrecisionFormat(nullptr),
521 getVertexAttribLdv(nullptr),
522 isProgramPipeline(nullptr),
523 programBinary(nullptr),
524 programParameteri(nullptr),
525 programUniform1d(nullptr),
526 programUniform1dv(nullptr),
527 programUniform1f(nullptr),
528 programUniform1fv(nullptr),
529 programUniform1i(nullptr),
530 programUniform1iv(nullptr),
531 programUniform1ui(nullptr),
532 programUniform1uiv(nullptr),
533 programUniform2d(nullptr),
534 programUniform2dv(nullptr),
535 programUniform2f(nullptr),
536 programUniform2fv(nullptr),
537 programUniform2i(nullptr),
538 programUniform2iv(nullptr),
539 programUniform2ui(nullptr),
540 programUniform2uiv(nullptr),
541 programUniform3d(nullptr),
542 programUniform3dv(nullptr),
543 programUniform3f(nullptr),
544 programUniform3fv(nullptr),
545 programUniform3i(nullptr),
546 programUniform3iv(nullptr),
547 programUniform3ui(nullptr),
548 programUniform3uiv(nullptr),
549 programUniform4d(nullptr),
550 programUniform4dv(nullptr),
551 programUniform4f(nullptr),
552 programUniform4fv(nullptr),
553 programUniform4i(nullptr),
554 programUniform4iv(nullptr),
555 programUniform4ui(nullptr),
556 programUniform4uiv(nullptr),
557 programUniformMatrix2dv(nullptr),
558 programUniformMatrix2fv(nullptr),
559 programUniformMatrix2x3dv(nullptr),
560 programUniformMatrix2x3fv(nullptr),
561 programUniformMatrix2x4dv(nullptr),
562 programUniformMatrix2x4fv(nullptr),
563 programUniformMatrix3dv(nullptr),
564 programUniformMatrix3fv(nullptr),
565 programUniformMatrix3x2dv(nullptr),
566 programUniformMatrix3x2fv(nullptr),
567 programUniformMatrix3x4dv(nullptr),
568 programUniformMatrix3x4fv(nullptr),
569 programUniformMatrix4dv(nullptr),
570 programUniformMatrix4fv(nullptr),
571 programUniformMatrix4x2dv(nullptr),
572 programUniformMatrix4x2fv(nullptr),
573 programUniformMatrix4x3dv(nullptr),
574 programUniformMatrix4x3fv(nullptr),
575 releaseShaderCompiler(nullptr),
576 scissorArrayv(nullptr),
577 scissorIndexed(nullptr),
578 scissorIndexedv(nullptr),
579 shaderBinary(nullptr),
580 useProgramStages(nullptr),
581 validateProgramPipeline(nullptr),
582 vertexAttribL1d(nullptr),
583 vertexAttribL1dv(nullptr),
584 vertexAttribL2d(nullptr),
585 vertexAttribL2dv(nullptr),
586 vertexAttribL3d(nullptr),
587 vertexAttribL3dv(nullptr),
588 vertexAttribL4d(nullptr),
589 vertexAttribL4dv(nullptr),
590 vertexAttribLPointer(nullptr),
591 viewportArrayv(nullptr),
592 viewportIndexedf(nullptr),
593 viewportIndexedfv(nullptr),
594
595 bindImageTexture(nullptr),
596 drawArraysInstancedBaseInstance(nullptr),
597 drawElementsInstancedBaseInstance(nullptr),
598 drawElementsInstancedBaseVertexBaseInstance(nullptr),
599 drawTransformFeedbackInstanced(nullptr),
600 drawTransformFeedbackStreamInstanced(nullptr),
601 getActiveAtomicCounterBufferiv(nullptr),
602 getInternalformativ(nullptr),
603 memoryBarrier(nullptr),
604 texStorage1D(nullptr),
605 texStorage2D(nullptr),
606 texStorage3D(nullptr),
607
608 bindVertexBuffer(nullptr),
609 clearBufferData(nullptr),
610 clearBufferSubData(nullptr),
611 copyImageSubData(nullptr),
612 debugMessageCallback(nullptr),
613 debugMessageControl(nullptr),
614 debugMessageInsert(nullptr),
615 dispatchCompute(nullptr),
616 dispatchComputeIndirect(nullptr),
617 framebufferParameteri(nullptr),
618 getDebugMessageLog(nullptr),
619 getFramebufferParameteriv(nullptr),
620 getInternalformati64v(nullptr),
621 getObjectLabel(nullptr),
622 getObjectPtrLabel(nullptr),
623 getProgramInterfaceiv(nullptr),
624 getProgramResourceIndex(nullptr),
625 getProgramResourceLocation(nullptr),
626 getProgramResourceLocationIndex(nullptr),
627 getProgramResourceName(nullptr),
628 getProgramResourceiv(nullptr),
629 invalidateBufferData(nullptr),
630 invalidateBufferSubData(nullptr),
631 invalidateFramebuffer(nullptr),
632 invalidateSubFramebuffer(nullptr),
633 invalidateTexImage(nullptr),
634 invalidateTexSubImage(nullptr),
635 multiDrawArraysIndirect(nullptr),
636 multiDrawElementsIndirect(nullptr),
637 objectLabel(nullptr),
638 objectPtrLabel(nullptr),
639 popDebugGroup(nullptr),
640 pushDebugGroup(nullptr),
641 shaderStorageBlockBinding(nullptr),
642 texBufferRange(nullptr),
643 texStorage2DMultisample(nullptr),
644 texStorage3DMultisample(nullptr),
645 textureView(nullptr),
646 vertexAttribBinding(nullptr),
647 vertexAttribFormat(nullptr),
648 vertexAttribIFormat(nullptr),
649 vertexAttribLFormat(nullptr),
650 vertexBindingDivisor(nullptr),
651
652 bindBuffersBase(nullptr),
653 bindBuffersRange(nullptr),
654 bindImageTextures(nullptr),
655 bindSamplers(nullptr),
656 bindTextures(nullptr),
657 bindVertexBuffers(nullptr),
658 bufferStorage(nullptr),
659 clearTexImage(nullptr),
660 clearTexSubImage(nullptr),
661
662 bindTextureUnit(nullptr),
663 blitNamedFramebuffer(nullptr),
664 checkNamedFramebufferStatus(nullptr),
665 clearNamedBufferData(nullptr),
666 clearNamedBufferSubData(nullptr),
667 clearNamedFramebufferfi(nullptr),
668 clearNamedFramebufferfv(nullptr),
669 clearNamedFramebufferiv(nullptr),
670 clearNamedFramebufferuiv(nullptr),
671 clipControl(nullptr),
672 compressedTextureSubImage1D(nullptr),
673 compressedTextureSubImage2D(nullptr),
674 compressedTextureSubImage3D(nullptr),
675 copyNamedBufferSubData(nullptr),
676 copyTextureSubImage1D(nullptr),
677 copyTextureSubImage2D(nullptr),
678 copyTextureSubImage3D(nullptr),
679 createBuffers(nullptr),
680 createFramebuffers(nullptr),
681 createProgramPipelines(nullptr),
682 createQueries(nullptr),
683 createRenderbuffers(nullptr),
684 createSamplers(nullptr),
685 createTextures(nullptr),
686 createTransformFeedbacks(nullptr),
687 createVertexArrays(nullptr),
688 disableVertexArrayAttrib(nullptr),
689 enableVertexArrayAttrib(nullptr),
690 flushMappedNamedBufferRange(nullptr),
691 generateTextureMipmap(nullptr),
692 getCompressedTextureImage(nullptr),
693 getCompressedTextureSubImage(nullptr),
694 getGraphicsResetStatus(nullptr),
695 getNamedBufferParameteri64v(nullptr),
696 getNamedBufferParameteriv(nullptr),
697 getNamedBufferPointerv(nullptr),
698 getNamedBufferSubData(nullptr),
699 getNamedFramebufferAttachmentParameteriv(nullptr),
700 getNamedFramebufferParameteriv(nullptr),
701 getNamedRenderbufferParameteriv(nullptr),
702 getQueryBufferObjecti64v(nullptr),
703 getQueryBufferObjectiv(nullptr),
704 getQueryBufferObjectui64v(nullptr),
705 getQueryBufferObjectuiv(nullptr),
706 getTextureImage(nullptr),
707 getTextureLevelParameterfv(nullptr),
708 getTextureLevelParameteriv(nullptr),
709 getTextureParameterIiv(nullptr),
710 getTextureParameterIuiv(nullptr),
711 getTextureParameterfv(nullptr),
712 getTextureParameteriv(nullptr),
713 getTextureSubImage(nullptr),
714 getTransformFeedbacki64_v(nullptr),
715 getTransformFeedbacki_v(nullptr),
716 getTransformFeedbackiv(nullptr),
717 getVertexArrayIndexed64iv(nullptr),
718 getVertexArrayIndexediv(nullptr),
719 getVertexArrayiv(nullptr),
720 getnCompressedTexImage(nullptr),
721 getnTexImage(nullptr),
722 getnUniformdv(nullptr),
723 getnUniformfv(nullptr),
724 getnUniformiv(nullptr),
725 getnUniformuiv(nullptr),
726 invalidateNamedFramebufferData(nullptr),
727 invalidateNamedFramebufferSubData(nullptr),
728 mapNamedBuffer(nullptr),
729 mapNamedBufferRange(nullptr),
730 memoryBarrierByRegion(nullptr),
731 namedBufferData(nullptr),
732 namedBufferStorage(nullptr),
733 namedBufferSubData(nullptr),
734 namedFramebufferDrawBuffer(nullptr),
735 namedFramebufferDrawBuffers(nullptr),
736 namedFramebufferParameteri(nullptr),
737 namedFramebufferReadBuffer(nullptr),
738 namedFramebufferRenderbuffer(nullptr),
739 namedFramebufferTexture(nullptr),
740 namedFramebufferTextureLayer(nullptr),
741 namedRenderbufferStorage(nullptr),
742 namedRenderbufferStorageMultisample(nullptr),
743 readnPixels(nullptr),
744 textureBarrier(nullptr),
745 textureBuffer(nullptr),
746 textureBufferRange(nullptr),
747 textureParameterIiv(nullptr),
748 textureParameterIuiv(nullptr),
749 textureParameterf(nullptr),
750 textureParameterfv(nullptr),
751 textureParameteri(nullptr),
752 textureParameteriv(nullptr),
753 textureStorage1D(nullptr),
754 textureStorage2D(nullptr),
755 textureStorage2DMultisample(nullptr),
756 textureStorage3D(nullptr),
757 textureStorage3DMultisample(nullptr),
758 textureSubImage1D(nullptr),
759 textureSubImage2D(nullptr),
760 textureSubImage3D(nullptr),
761 transformFeedbackBufferBase(nullptr),
762 transformFeedbackBufferRange(nullptr),
763 unmapNamedBuffer(nullptr),
764 vertexArrayAttribBinding(nullptr),
765 vertexArrayAttribFormat(nullptr),
766 vertexArrayAttribIFormat(nullptr),
767 vertexArrayAttribLFormat(nullptr),
768 vertexArrayBindingDivisor(nullptr),
769 vertexArrayElementBuffer(nullptr),
770 vertexArrayVertexBuffer(nullptr),
771 vertexArrayVertexBuffers(nullptr)
772{
773}
774
775FunctionsGL::~FunctionsGL()
776{
777}
778
Geoff Langa4903b72015-03-02 16:02:48 -0800779void FunctionsGL::initialize()
Geoff Lang56cf9af2015-02-17 10:16:49 -0500780{
Geoff Langa4903b72015-03-02 16:02:48 -0800781 // Grab the version number
782 AssignGLEntryPoint(loadProcAddress("glGetString"), &getString);
783 GetGLVersion(getString, &majorVersion, &minorVersion, &openGLES);
784
785 // Grab the GL extensions
786 if (majorVersion > 3 || majorVersion == 3 && minorVersion >= 0)
787 {
788 AssignGLEntryPoint(loadProcAddress("glGetIntegerv"), &getIntegerv);
789 AssignGLEntryPoint(loadProcAddress("glGetStringi"), &getStringi);
790 extensions = GetIndexedExtensions(getIntegerv, getStringi);
791 }
792 else
793 {
794 extensions = GetNonIndexedExtensions(getString);
795 }
796
Geoff Lang56cf9af2015-02-17 10:16:49 -0500797 // 1.0
798 if (majorVersion > 1 || majorVersion == 1 && minorVersion >= 0)
799 {
800 AssignGLEntryPoint(loadProcAddress("glBlendFunc"), &blendFunc);
801 AssignGLEntryPoint(loadProcAddress("glClear"), &clear);
802 AssignGLEntryPoint(loadProcAddress("glClearColor"), &clearColor);
803 AssignGLEntryPoint(loadProcAddress("glClearDepth"), &clearDepth);
804 AssignGLEntryPoint(loadProcAddress("glClearStencil"), &clearStencil);
805 AssignGLEntryPoint(loadProcAddress("glColorMask"), &colorMask);
806 AssignGLEntryPoint(loadProcAddress("glCullFace"), &cullFace);
807 AssignGLEntryPoint(loadProcAddress("glDepthFunc"), &depthFunc);
808 AssignGLEntryPoint(loadProcAddress("glDepthMask"), &depthMask);
809 AssignGLEntryPoint(loadProcAddress("glDepthRange"), &depthRange);
810 AssignGLEntryPoint(loadProcAddress("glDisable"), &disable);
811 AssignGLEntryPoint(loadProcAddress("glDrawBuffer"), &drawBuffer);
812 AssignGLEntryPoint(loadProcAddress("glEnable"), &enable);
813 AssignGLEntryPoint(loadProcAddress("glFinish"), &finish);
814 AssignGLEntryPoint(loadProcAddress("glFlush"), &flush);
815 AssignGLEntryPoint(loadProcAddress("glFrontFace"), &frontFace);
816 AssignGLEntryPoint(loadProcAddress("glGetBooleanv"), &getBooleanv);
817 AssignGLEntryPoint(loadProcAddress("glGetDoublev"), &getDoublev);
818 AssignGLEntryPoint(loadProcAddress("glGetError"), &getError);
819 AssignGLEntryPoint(loadProcAddress("glGetFloatv"), &getFloatv);
820 AssignGLEntryPoint(loadProcAddress("glGetIntegerv"), &getIntegerv);
821 AssignGLEntryPoint(loadProcAddress("glGetString"), &getString);
822 AssignGLEntryPoint(loadProcAddress("glGetTexImage"), &getTexImage);
823 AssignGLEntryPoint(loadProcAddress("glGetTexLevelParameterfv"), &getTexLevelParameterfv);
824 AssignGLEntryPoint(loadProcAddress("glGetTexLevelParameteriv"), &getTexLevelParameteriv);
825 AssignGLEntryPoint(loadProcAddress("glGetTexParameterfv"), &getTexParameterfv);
826 AssignGLEntryPoint(loadProcAddress("glGetTexParameteriv"), &getTexParameteriv);
827 AssignGLEntryPoint(loadProcAddress("glHint"), &hint);
828 AssignGLEntryPoint(loadProcAddress("glIsEnabled"), &isEnabled);
829 AssignGLEntryPoint(loadProcAddress("glLineWidth"), &lineWidth);
830 AssignGLEntryPoint(loadProcAddress("glLogicOp"), &logicOp);
831 AssignGLEntryPoint(loadProcAddress("glPixelStoref"), &pixelStoref);
832 AssignGLEntryPoint(loadProcAddress("glPixelStorei"), &pixelStorei);
833 AssignGLEntryPoint(loadProcAddress("glPointSize"), &pointSize);
834 AssignGLEntryPoint(loadProcAddress("glPolygonMode"), &polygonMode);
835 AssignGLEntryPoint(loadProcAddress("glReadBuffer"), &readBuffer);
836 AssignGLEntryPoint(loadProcAddress("glReadPixels"), &readPixels);
837 AssignGLEntryPoint(loadProcAddress("glScissor"), &scissor);
838 AssignGLEntryPoint(loadProcAddress("glStencilFunc"), &stencilFunc);
839 AssignGLEntryPoint(loadProcAddress("glStencilMask"), &stencilMask);
840 AssignGLEntryPoint(loadProcAddress("glStencilOp"), &stencilOp);
841 AssignGLEntryPoint(loadProcAddress("glTexImage1D"), &texImage1D);
842 AssignGLEntryPoint(loadProcAddress("glTexImage2D"), &texImage2D);
843 AssignGLEntryPoint(loadProcAddress("glTexParameterf"), &texParameterf);
844 AssignGLEntryPoint(loadProcAddress("glTexParameterfv"), &texParameterfv);
845 AssignGLEntryPoint(loadProcAddress("glTexParameteri"), &texParameteri);
846 AssignGLEntryPoint(loadProcAddress("glTexParameteriv"), &texParameteriv);
847 AssignGLEntryPoint(loadProcAddress("glViewport"), &viewport);
848 }
849
850 // 1.1
851 if (majorVersion > 1 || majorVersion == 1 && minorVersion >= 1)
852 {
853 AssignGLEntryPoint(loadProcAddress("glBindTexture"), &bindTexture);
854 AssignGLEntryPoint(loadProcAddress("glCopyTexImage1D"), &copyTexImage1D);
855 AssignGLEntryPoint(loadProcAddress("glCopyTexImage2D"), &copyTexImage2D);
856 AssignGLEntryPoint(loadProcAddress("glCopyTexSubImage1D"), &copyTexSubImage1D);
857 AssignGLEntryPoint(loadProcAddress("glCopyTexSubImage2D"), &copyTexSubImage2D);
858 AssignGLEntryPoint(loadProcAddress("glDeleteTextures"), &deleteTextures);
859 AssignGLEntryPoint(loadProcAddress("glDrawArrays"), &drawArrays);
860 AssignGLEntryPoint(loadProcAddress("glDrawElements"), &drawElements);
861 AssignGLEntryPoint(loadProcAddress("glGenTextures"), &genTextures);
862 AssignGLEntryPoint(loadProcAddress("glIsTexture"), &isTexture);
863 AssignGLEntryPoint(loadProcAddress("glPolygonOffset"), &polygonOffset);
864 AssignGLEntryPoint(loadProcAddress("glTexSubImage1D"), &texSubImage1D);
865 AssignGLEntryPoint(loadProcAddress("glTexSubImage2D"), &texSubImage2D);
866 }
867
868 // 1.2
869 if (majorVersion > 1 || majorVersion == 1 && minorVersion >= 2)
870 {
871 AssignGLEntryPoint(loadProcAddress("glBlendColor"), &blendColor);
872 AssignGLEntryPoint(loadProcAddress("glBlendEquation"), &blendEquation);
873 AssignGLEntryPoint(loadProcAddress("glCopyTexSubImage3D"), &copyTexSubImage3D);
874 AssignGLEntryPoint(loadProcAddress("glDrawRangeElements"), &drawRangeElements);
875 AssignGLEntryPoint(loadProcAddress("glTexImage3D"), &texImage3D);
876 AssignGLEntryPoint(loadProcAddress("glTexSubImage3D"), &texSubImage3D);
Geoff Langb11ad262015-04-09 14:43:34 -0400877
878 // Extensions
879 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glDeleteFencesNV"), &deleteFencesNV);
880 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glGenFencesNV"), &genFencesNV);
881 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glIsFenceNV"), &isFenceNV);
882 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glTestFenceNV"), &testFenceNV);
883 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glGetFenceivNV"), &getFenceivNV);
884 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glFinishFenceNV"), &finishFenceNV);
885 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glSetFenceNV"), &setFenceNV);
Geoff Lang56cf9af2015-02-17 10:16:49 -0500886 }
887
888 // 1.3
889 if (majorVersion > 1 || majorVersion == 1 && minorVersion >= 3)
890 {
891 AssignGLEntryPoint(loadProcAddress("glActiveTexture"), &activeTexture);
892 AssignGLEntryPoint(loadProcAddress("glCompressedTexImage1D"), &compressedTexImage1D);
893 AssignGLEntryPoint(loadProcAddress("glCompressedTexImage2D"), &compressedTexImage2D);
894 AssignGLEntryPoint(loadProcAddress("glCompressedTexImage3D"), &compressedTexImage3D);
895 AssignGLEntryPoint(loadProcAddress("glCompressedTexSubImage1D"), &compressedTexSubImage1D);
896 AssignGLEntryPoint(loadProcAddress("glCompressedTexSubImage2D"), &compressedTexSubImage2D);
897 AssignGLEntryPoint(loadProcAddress("glCompressedTexSubImage3D"), &compressedTexSubImage3D);
898 AssignGLEntryPoint(loadProcAddress("glGetCompressedTexImage"), &getCompressedTexImage);
899 AssignGLEntryPoint(loadProcAddress("glSampleCoverage"), &sampleCoverage);
900 }
901
902 // 1.4
903 if (majorVersion > 1 || majorVersion == 1 && minorVersion >= 4)
904 {
905 AssignGLEntryPoint(loadProcAddress("glBlendFuncSeparate"), &blendFuncSeparate);
906 AssignGLEntryPoint(loadProcAddress("glMultiDrawArrays"), &multiDrawArrays);
907 AssignGLEntryPoint(loadProcAddress("glMultiDrawElements"), &multiDrawElements);
908 AssignGLEntryPoint(loadProcAddress("glPointParameterf"), &pointParameterf);
909 AssignGLEntryPoint(loadProcAddress("glPointParameterfv"), &pointParameterfv);
910 AssignGLEntryPoint(loadProcAddress("glPointParameteri"), &pointParameteri);
911 AssignGLEntryPoint(loadProcAddress("glPointParameteriv"), &pointParameteriv);
912 }
913
914 // 1.5
915 if (majorVersion > 1 || majorVersion == 1 && minorVersion >= 5)
916 {
917 AssignGLEntryPoint(loadProcAddress("glBeginQuery"), &beginQuery);
918 AssignGLEntryPoint(loadProcAddress("glBindBuffer"), &bindBuffer);
919 AssignGLEntryPoint(loadProcAddress("glBufferData"), &bufferData);
920 AssignGLEntryPoint(loadProcAddress("glBufferSubData"), &bufferSubData);
921 AssignGLEntryPoint(loadProcAddress("glDeleteBuffers"), &deleteBuffers);
922 AssignGLEntryPoint(loadProcAddress("glDeleteQueries"), &deleteQueries);
923 AssignGLEntryPoint(loadProcAddress("glEndQuery"), &endQuery);
924 AssignGLEntryPoint(loadProcAddress("glGenBuffers"), &genBuffers);
925 AssignGLEntryPoint(loadProcAddress("glGenQueries"), &genQueries);
926 AssignGLEntryPoint(loadProcAddress("glGetBufferParameteriv"), &getBufferParameteriv);
927 AssignGLEntryPoint(loadProcAddress("glGetBufferPointerv"), &getBufferPointerv);
928 AssignGLEntryPoint(loadProcAddress("glGetBufferSubData"), &getBufferSubData);
929 AssignGLEntryPoint(loadProcAddress("glGetQueryObjectiv"), &getQueryObjectiv);
930 AssignGLEntryPoint(loadProcAddress("glGetQueryObjectuiv"), &getQueryObjectuiv);
931 AssignGLEntryPoint(loadProcAddress("glGetQueryiv"), &getQueryiv);
932 AssignGLEntryPoint(loadProcAddress("glIsBuffer"), &isBuffer);
933 AssignGLEntryPoint(loadProcAddress("glIsQuery"), &isQuery);
934 AssignGLEntryPoint(loadProcAddress("glMapBuffer"), &mapBuffer);
935 AssignGLEntryPoint(loadProcAddress("glUnmapBuffer"), &unmapBuffer);
936 }
937
938 // 2.0
939 if (majorVersion > 2 || majorVersion == 2 && minorVersion >= 0)
940 {
941 AssignGLEntryPoint(loadProcAddress("glAttachShader"), &attachShader);
942 AssignGLEntryPoint(loadProcAddress("glBindAttribLocation"), &bindAttribLocation);
943 AssignGLEntryPoint(loadProcAddress("glBlendEquationSeparate"), &blendEquationSeparate);
944 AssignGLEntryPoint(loadProcAddress("glCompileShader"), &compileShader);
945 AssignGLEntryPoint(loadProcAddress("glCreateProgram"), &createProgram);
946 AssignGLEntryPoint(loadProcAddress("glCreateShader"), &createShader);
947 AssignGLEntryPoint(loadProcAddress("glDeleteProgram"), &deleteProgram);
948 AssignGLEntryPoint(loadProcAddress("glDeleteShader"), &deleteShader);
949 AssignGLEntryPoint(loadProcAddress("glDetachShader"), &detachShader);
950 AssignGLEntryPoint(loadProcAddress("glDisableVertexAttribArray"), &disableVertexAttribArray);
951 AssignGLEntryPoint(loadProcAddress("glDrawBuffers"), &drawBuffers);
952 AssignGLEntryPoint(loadProcAddress("glEnableVertexAttribArray"), &enableVertexAttribArray);
953 AssignGLEntryPoint(loadProcAddress("glGetActiveAttrib"), &getActiveAttrib);
954 AssignGLEntryPoint(loadProcAddress("glGetActiveUniform"), &getActiveUniform);
955 AssignGLEntryPoint(loadProcAddress("glGetAttachedShaders"), &getAttachedShaders);
956 AssignGLEntryPoint(loadProcAddress("glGetAttribLocation"), &getAttribLocation);
957 AssignGLEntryPoint(loadProcAddress("glGetProgramInfoLog"), &getProgramInfoLog);
958 AssignGLEntryPoint(loadProcAddress("glGetProgramiv"), &getProgramiv);
959 AssignGLEntryPoint(loadProcAddress("glGetShaderInfoLog"), &getShaderInfoLog);
960 AssignGLEntryPoint(loadProcAddress("glGetShaderSource"), &getShaderSource);
961 AssignGLEntryPoint(loadProcAddress("glGetShaderiv"), &getShaderiv);
962 AssignGLEntryPoint(loadProcAddress("glGetUniformLocation"), &getUniformLocation);
963 AssignGLEntryPoint(loadProcAddress("glGetUniformfv"), &getUniformfv);
964 AssignGLEntryPoint(loadProcAddress("glGetUniformiv"), &getUniformiv);
965 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribPointerv"), &getVertexAttribPointerv);
966 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribdv"), &getVertexAttribdv);
967 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribfv"), &getVertexAttribfv);
968 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribiv"), &getVertexAttribiv);
969 AssignGLEntryPoint(loadProcAddress("glIsProgram"), &isProgram);
970 AssignGLEntryPoint(loadProcAddress("glIsShader"), &isShader);
971 AssignGLEntryPoint(loadProcAddress("glLinkProgram"), &linkProgram);
972 AssignGLEntryPoint(loadProcAddress("glShaderSource"), &shaderSource);
973 AssignGLEntryPoint(loadProcAddress("glStencilFuncSeparate"), &stencilFuncSeparate);
974 AssignGLEntryPoint(loadProcAddress("glStencilMaskSeparate"), &stencilMaskSeparate);
975 AssignGLEntryPoint(loadProcAddress("glStencilOpSeparate"), &stencilOpSeparate);
976 AssignGLEntryPoint(loadProcAddress("glUniform1f"), &uniform1f);
977 AssignGLEntryPoint(loadProcAddress("glUniform1fv"), &uniform1fv);
978 AssignGLEntryPoint(loadProcAddress("glUniform1i"), &uniform1i);
979 AssignGLEntryPoint(loadProcAddress("glUniform1iv"), &uniform1iv);
980 AssignGLEntryPoint(loadProcAddress("glUniform2f"), &uniform2f);
981 AssignGLEntryPoint(loadProcAddress("glUniform2fv"), &uniform2fv);
982 AssignGLEntryPoint(loadProcAddress("glUniform2i"), &uniform2i);
983 AssignGLEntryPoint(loadProcAddress("glUniform2iv"), &uniform2iv);
984 AssignGLEntryPoint(loadProcAddress("glUniform3f"), &uniform3f);
985 AssignGLEntryPoint(loadProcAddress("glUniform3fv"), &uniform3fv);
986 AssignGLEntryPoint(loadProcAddress("glUniform3i"), &uniform3i);
987 AssignGLEntryPoint(loadProcAddress("glUniform3iv"), &uniform3iv);
988 AssignGLEntryPoint(loadProcAddress("glUniform4f"), &uniform4f);
989 AssignGLEntryPoint(loadProcAddress("glUniform4fv"), &uniform4fv);
990 AssignGLEntryPoint(loadProcAddress("glUniform4i"), &uniform4i);
991 AssignGLEntryPoint(loadProcAddress("glUniform4iv"), &uniform4iv);
992 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2fv"), &uniformMatrix2fv);
993 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3fv"), &uniformMatrix3fv);
994 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4fv"), &uniformMatrix4fv);
995 AssignGLEntryPoint(loadProcAddress("glUseProgram"), &useProgram);
996 AssignGLEntryPoint(loadProcAddress("glValidateProgram"), &validateProgram);
997 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1d"), &vertexAttrib1d);
998 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1dv"), &vertexAttrib1dv);
999 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1f"), &vertexAttrib1f);
1000 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1fv"), &vertexAttrib1fv);
1001 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1s"), &vertexAttrib1s);
1002 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1sv"), &vertexAttrib1sv);
1003 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2d"), &vertexAttrib2d);
1004 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2dv"), &vertexAttrib2dv);
1005 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2f"), &vertexAttrib2f);
1006 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2fv"), &vertexAttrib2fv);
1007 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2s"), &vertexAttrib2s);
1008 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2sv"), &vertexAttrib2sv);
1009 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3d"), &vertexAttrib3d);
1010 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3dv"), &vertexAttrib3dv);
1011 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3f"), &vertexAttrib3f);
1012 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3fv"), &vertexAttrib3fv);
1013 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3s"), &vertexAttrib3s);
1014 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3sv"), &vertexAttrib3sv);
1015 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nbv"), &vertexAttrib4Nbv);
1016 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Niv"), &vertexAttrib4Niv);
1017 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nsv"), &vertexAttrib4Nsv);
1018 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nub"), &vertexAttrib4Nub);
1019 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nubv"), &vertexAttrib4Nubv);
1020 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nuiv"), &vertexAttrib4Nuiv);
1021 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nusv"), &vertexAttrib4Nusv);
1022 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4bv"), &vertexAttrib4bv);
1023 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4d"), &vertexAttrib4d);
1024 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4dv"), &vertexAttrib4dv);
1025 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4f"), &vertexAttrib4f);
1026 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4fv"), &vertexAttrib4fv);
1027 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4iv"), &vertexAttrib4iv);
1028 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4s"), &vertexAttrib4s);
1029 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4sv"), &vertexAttrib4sv);
1030 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4ubv"), &vertexAttrib4ubv);
1031 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4uiv"), &vertexAttrib4uiv);
1032 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4usv"), &vertexAttrib4usv);
1033 AssignGLEntryPoint(loadProcAddress("glVertexAttribPointer"), &vertexAttribPointer);
1034 }
1035
1036 // 2.1
1037 if (majorVersion > 2 || majorVersion == 2 && minorVersion >= 1)
1038 {
1039 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2x3fv"), &uniformMatrix2x3fv);
1040 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2x4fv"), &uniformMatrix2x4fv);
1041 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3x2fv"), &uniformMatrix3x2fv);
1042 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3x4fv"), &uniformMatrix3x4fv);
1043 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4x2fv"), &uniformMatrix4x2fv);
1044 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4x3fv"), &uniformMatrix4x3fv);
1045 }
1046
1047 // 3.0
1048 if (majorVersion > 3 || majorVersion == 3 && minorVersion >= 0)
1049 {
1050 AssignGLEntryPoint(loadProcAddress("glBeginConditionalRender"), &beginConditionalRender);
1051 AssignGLEntryPoint(loadProcAddress("glBeginTransformFeedback"), &beginTransformFeedback);
1052 AssignGLEntryPoint(loadProcAddress("glBindBufferBase"), &bindBufferBase);
1053 AssignGLEntryPoint(loadProcAddress("glBindBufferRange"), &bindBufferRange);
1054 AssignGLEntryPoint(loadProcAddress("glBindFragDataLocation"), &bindFragDataLocation);
1055 AssignGLEntryPoint(loadProcAddress("glBindFramebuffer"), &bindFramebuffer);
1056 AssignGLEntryPoint(loadProcAddress("glBindRenderbuffer"), &bindRenderbuffer);
1057 AssignGLEntryPoint(loadProcAddress("glBindVertexArray"), &bindVertexArray);
1058 AssignGLEntryPoint(loadProcAddress("glBlitFramebuffer"), &blitFramebuffer);
1059 AssignGLEntryPoint(loadProcAddress("glCheckFramebufferStatus"), &checkFramebufferStatus);
1060 AssignGLEntryPoint(loadProcAddress("glClampColor"), &clampColor);
1061 AssignGLEntryPoint(loadProcAddress("glClearBufferfi"), &clearBufferfi);
1062 AssignGLEntryPoint(loadProcAddress("glClearBufferfv"), &clearBufferfv);
1063 AssignGLEntryPoint(loadProcAddress("glClearBufferiv"), &clearBufferiv);
1064 AssignGLEntryPoint(loadProcAddress("glClearBufferuiv"), &clearBufferuiv);
1065 AssignGLEntryPoint(loadProcAddress("glColorMaski"), &colorMaski);
1066 AssignGLEntryPoint(loadProcAddress("glDeleteFramebuffers"), &deleteFramebuffers);
1067 AssignGLEntryPoint(loadProcAddress("glDeleteRenderbuffers"), &deleteRenderbuffers);
1068 AssignGLEntryPoint(loadProcAddress("glDeleteVertexArrays"), &deleteVertexArrays);
1069 AssignGLEntryPoint(loadProcAddress("glDisablei"), &disablei);
1070 AssignGLEntryPoint(loadProcAddress("glEnablei"), &enablei);
1071 AssignGLEntryPoint(loadProcAddress("glEndConditionalRender"), &endConditionalRender);
1072 AssignGLEntryPoint(loadProcAddress("glEndTransformFeedback"), &endTransformFeedback);
1073 AssignGLEntryPoint(loadProcAddress("glFlushMappedBufferRange"), &flushMappedBufferRange);
1074 AssignGLEntryPoint(loadProcAddress("glFramebufferRenderbuffer"), &framebufferRenderbuffer);
1075 AssignGLEntryPoint(loadProcAddress("glFramebufferTexture1D"), &framebufferTexture1D);
1076 AssignGLEntryPoint(loadProcAddress("glFramebufferTexture2D"), &framebufferTexture2D);
1077 AssignGLEntryPoint(loadProcAddress("glFramebufferTexture3D"), &framebufferTexture3D);
1078 AssignGLEntryPoint(loadProcAddress("glFramebufferTextureLayer"), &framebufferTextureLayer);
1079 AssignGLEntryPoint(loadProcAddress("glGenFramebuffers"), &genFramebuffers);
1080 AssignGLEntryPoint(loadProcAddress("glGenRenderbuffers"), &genRenderbuffers);
1081 AssignGLEntryPoint(loadProcAddress("glGenVertexArrays"), &genVertexArrays);
1082 AssignGLEntryPoint(loadProcAddress("glGenerateMipmap"), &generateMipmap);
1083 AssignGLEntryPoint(loadProcAddress("glGetBooleani_v"), &getBooleani_v);
1084 AssignGLEntryPoint(loadProcAddress("glGetFragDataLocation"), &getFragDataLocation);
1085 AssignGLEntryPoint(loadProcAddress("glGetFramebufferAttachmentParameteriv"), &getFramebufferAttachmentParameteriv);
1086 AssignGLEntryPoint(loadProcAddress("glGetIntegeri_v"), &getIntegeri_v);
1087 AssignGLEntryPoint(loadProcAddress("glGetRenderbufferParameteriv"), &getRenderbufferParameteriv);
1088 AssignGLEntryPoint(loadProcAddress("glGetStringi"), &getStringi);
1089 AssignGLEntryPoint(loadProcAddress("glGetTexParameterIiv"), &getTexParameterIiv);
1090 AssignGLEntryPoint(loadProcAddress("glGetTexParameterIuiv"), &getTexParameterIuiv);
1091 AssignGLEntryPoint(loadProcAddress("glGetTransformFeedbackVarying"), &getTransformFeedbackVarying);
1092 AssignGLEntryPoint(loadProcAddress("glGetUniformuiv"), &getUniformuiv);
1093 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribIiv"), &getVertexAttribIiv);
1094 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribIuiv"), &getVertexAttribIuiv);
1095 AssignGLEntryPoint(loadProcAddress("glIsEnabledi"), &isEnabledi);
1096 AssignGLEntryPoint(loadProcAddress("glIsFramebuffer"), &isFramebuffer);
1097 AssignGLEntryPoint(loadProcAddress("glIsRenderbuffer"), &isRenderbuffer);
1098 AssignGLEntryPoint(loadProcAddress("glIsVertexArray"), &isVertexArray);
1099 AssignGLEntryPoint(loadProcAddress("glMapBufferRange"), &mapBufferRange);
1100 AssignGLEntryPoint(loadProcAddress("glRenderbufferStorage"), &renderbufferStorage);
1101 AssignGLEntryPoint(loadProcAddress("glRenderbufferStorageMultisample"), &renderbufferStorageMultisample);
1102 AssignGLEntryPoint(loadProcAddress("glTexParameterIiv"), &texParameterIiv);
1103 AssignGLEntryPoint(loadProcAddress("glTexParameterIuiv"), &texParameterIuiv);
1104 AssignGLEntryPoint(loadProcAddress("glTransformFeedbackVaryings"), &transformFeedbackVaryings);
1105 AssignGLEntryPoint(loadProcAddress("glUniform1ui"), &uniform1ui);
1106 AssignGLEntryPoint(loadProcAddress("glUniform1uiv"), &uniform1uiv);
1107 AssignGLEntryPoint(loadProcAddress("glUniform2ui"), &uniform2ui);
1108 AssignGLEntryPoint(loadProcAddress("glUniform2uiv"), &uniform2uiv);
1109 AssignGLEntryPoint(loadProcAddress("glUniform3ui"), &uniform3ui);
1110 AssignGLEntryPoint(loadProcAddress("glUniform3uiv"), &uniform3uiv);
1111 AssignGLEntryPoint(loadProcAddress("glUniform4ui"), &uniform4ui);
1112 AssignGLEntryPoint(loadProcAddress("glUniform4uiv"), &uniform4uiv);
1113 AssignGLEntryPoint(loadProcAddress("glVertexAttribI1i"), &vertexAttribI1i);
1114 AssignGLEntryPoint(loadProcAddress("glVertexAttribI1iv"), &vertexAttribI1iv);
1115 AssignGLEntryPoint(loadProcAddress("glVertexAttribI1ui"), &vertexAttribI1ui);
1116 AssignGLEntryPoint(loadProcAddress("glVertexAttribI1uiv"), &vertexAttribI1uiv);
1117 AssignGLEntryPoint(loadProcAddress("glVertexAttribI2i"), &vertexAttribI2i);
1118 AssignGLEntryPoint(loadProcAddress("glVertexAttribI2iv"), &vertexAttribI2iv);
1119 AssignGLEntryPoint(loadProcAddress("glVertexAttribI2ui"), &vertexAttribI2ui);
1120 AssignGLEntryPoint(loadProcAddress("glVertexAttribI2uiv"), &vertexAttribI2uiv);
1121 AssignGLEntryPoint(loadProcAddress("glVertexAttribI3i"), &vertexAttribI3i);
1122 AssignGLEntryPoint(loadProcAddress("glVertexAttribI3iv"), &vertexAttribI3iv);
1123 AssignGLEntryPoint(loadProcAddress("glVertexAttribI3ui"), &vertexAttribI3ui);
1124 AssignGLEntryPoint(loadProcAddress("glVertexAttribI3uiv"), &vertexAttribI3uiv);
1125 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4bv"), &vertexAttribI4bv);
1126 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4i"), &vertexAttribI4i);
1127 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4iv"), &vertexAttribI4iv);
1128 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4sv"), &vertexAttribI4sv);
1129 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4ubv"), &vertexAttribI4ubv);
1130 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4ui"), &vertexAttribI4ui);
1131 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4uiv"), &vertexAttribI4uiv);
1132 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4usv"), &vertexAttribI4usv);
1133 AssignGLEntryPoint(loadProcAddress("glVertexAttribIPointer"), &vertexAttribIPointer);
Geoff Langa4903b72015-03-02 16:02:48 -08001134
1135 // Extensions
1136 AssignGLExtensionEntryPoint(extensions, "GL_ARB_internalformat_query", loadProcAddress("glGetInternalformativ"), &getInternalformativ);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001137 }
1138
1139 // 3.1
1140 if (majorVersion > 3 || majorVersion == 3 && minorVersion >= 1)
1141 {
1142 AssignGLEntryPoint(loadProcAddress("glCopyBufferSubData"), &copyBufferSubData);
1143 AssignGLEntryPoint(loadProcAddress("glDrawArraysInstanced"), &drawArraysInstanced);
1144 AssignGLEntryPoint(loadProcAddress("glDrawElementsInstanced"), &drawElementsInstanced);
1145 AssignGLEntryPoint(loadProcAddress("glGetActiveUniformBlockName"), &getActiveUniformBlockName);
1146 AssignGLEntryPoint(loadProcAddress("glGetActiveUniformBlockiv"), &getActiveUniformBlockiv);
1147 AssignGLEntryPoint(loadProcAddress("glGetActiveUniformName"), &getActiveUniformName);
1148 AssignGLEntryPoint(loadProcAddress("glGetActiveUniformsiv"), &getActiveUniformsiv);
1149 AssignGLEntryPoint(loadProcAddress("glGetUniformBlockIndex"), &getUniformBlockIndex);
1150 AssignGLEntryPoint(loadProcAddress("glGetUniformIndices"), &getUniformIndices);
1151 AssignGLEntryPoint(loadProcAddress("glPrimitiveRestartIndex"), &primitiveRestartIndex);
1152 AssignGLEntryPoint(loadProcAddress("glTexBuffer"), &texBuffer);
1153 AssignGLEntryPoint(loadProcAddress("glUniformBlockBinding"), &uniformBlockBinding);
Geoff Lang7d433dd2015-04-02 11:21:20 -04001154
1155 // Extensions
1156 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glClientWaitSync"), &clientWaitSync);
1157 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glDeleteSync"), &deleteSync);
1158 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glFenceSync"), &fenceSync);
1159 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glGetInteger64i_v"), &getInteger64i_v);
1160 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glGetInteger64v"), &getInteger64v);
1161 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glGetSynciv"), &getSynciv);
1162 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glIsSync"), &isSync);
1163 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glWaitSync"), &waitSync);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001164 }
1165
1166 // 3.2
1167 if (majorVersion > 3 || majorVersion == 3 && minorVersion >= 2)
1168 {
1169 AssignGLEntryPoint(loadProcAddress("glClientWaitSync"), &clientWaitSync);
1170 AssignGLEntryPoint(loadProcAddress("glDeleteSync"), &deleteSync);
1171 AssignGLEntryPoint(loadProcAddress("glDrawElementsBaseVertex"), &drawElementsBaseVertex);
1172 AssignGLEntryPoint(loadProcAddress("glDrawElementsInstancedBaseVertex"), &drawElementsInstancedBaseVertex);
1173 AssignGLEntryPoint(loadProcAddress("glDrawRangeElementsBaseVertex"), &drawRangeElementsBaseVertex);
1174 AssignGLEntryPoint(loadProcAddress("glFenceSync"), &fenceSync);
1175 AssignGLEntryPoint(loadProcAddress("glFramebufferTexture"), &framebufferTexture);
1176 AssignGLEntryPoint(loadProcAddress("glGetBufferParameteri64v"), &getBufferParameteri64v);
1177 AssignGLEntryPoint(loadProcAddress("glGetInteger64i_v"), &getInteger64i_v);
1178 AssignGLEntryPoint(loadProcAddress("glGetInteger64v"), &getInteger64v);
1179 AssignGLEntryPoint(loadProcAddress("glGetMultisamplefv"), &getMultisamplefv);
1180 AssignGLEntryPoint(loadProcAddress("glGetSynciv"), &getSynciv);
1181 AssignGLEntryPoint(loadProcAddress("glIsSync"), &isSync);
1182 AssignGLEntryPoint(loadProcAddress("glMultiDrawElementsBaseVertex"), &multiDrawElementsBaseVertex);
1183 AssignGLEntryPoint(loadProcAddress("glProvokingVertex"), &provokingVertex);
1184 AssignGLEntryPoint(loadProcAddress("glSampleMaski"), &sampleMaski);
1185 AssignGLEntryPoint(loadProcAddress("glTexImage2DMultisample"), &texImage2DMultisample);
1186 AssignGLEntryPoint(loadProcAddress("glTexImage3DMultisample"), &texImage3DMultisample);
1187 AssignGLEntryPoint(loadProcAddress("glWaitSync"), &waitSync);
1188 }
1189
1190 // 3.3
1191 if (majorVersion > 3 || majorVersion == 3 && minorVersion >= 3)
1192 {
1193 AssignGLEntryPoint(loadProcAddress("glBindFragDataLocationIndexed"), &bindFragDataLocationIndexed);
1194 AssignGLEntryPoint(loadProcAddress("glBindSampler"), &bindSampler);
1195 AssignGLEntryPoint(loadProcAddress("glDeleteSamplers"), &deleteSamplers);
1196 AssignGLEntryPoint(loadProcAddress("glGenSamplers"), &genSamplers);
1197 AssignGLEntryPoint(loadProcAddress("glGetFragDataIndex"), &getFragDataIndex);
1198 AssignGLEntryPoint(loadProcAddress("glGetQueryObjecti64v"), &getQueryObjecti64v);
1199 AssignGLEntryPoint(loadProcAddress("glGetQueryObjectui64v"), &getQueryObjectui64v);
1200 AssignGLEntryPoint(loadProcAddress("glGetSamplerParameterIiv"), &getSamplerParameterIiv);
1201 AssignGLEntryPoint(loadProcAddress("glGetSamplerParameterIuiv"), &getSamplerParameterIuiv);
1202 AssignGLEntryPoint(loadProcAddress("glGetSamplerParameterfv"), &getSamplerParameterfv);
1203 AssignGLEntryPoint(loadProcAddress("glGetSamplerParameteriv"), &getSamplerParameteriv);
1204 AssignGLEntryPoint(loadProcAddress("glIsSampler"), &isSampler);
1205 AssignGLEntryPoint(loadProcAddress("glQueryCounter"), &queryCounter);
1206 AssignGLEntryPoint(loadProcAddress("glSamplerParameterIiv"), &samplerParameterIiv);
1207 AssignGLEntryPoint(loadProcAddress("glSamplerParameterIuiv"), &samplerParameterIuiv);
1208 AssignGLEntryPoint(loadProcAddress("glSamplerParameterf"), &samplerParameterf);
1209 AssignGLEntryPoint(loadProcAddress("glSamplerParameterfv"), &samplerParameterfv);
1210 AssignGLEntryPoint(loadProcAddress("glSamplerParameteri"), &samplerParameteri);
1211 AssignGLEntryPoint(loadProcAddress("glSamplerParameteriv"), &samplerParameteriv);
1212 AssignGLEntryPoint(loadProcAddress("glVertexAttribDivisor"), &vertexAttribDivisor);
1213 AssignGLEntryPoint(loadProcAddress("glVertexAttribP1ui"), &vertexAttribP1ui);
1214 AssignGLEntryPoint(loadProcAddress("glVertexAttribP1uiv"), &vertexAttribP1uiv);
1215 AssignGLEntryPoint(loadProcAddress("glVertexAttribP2ui"), &vertexAttribP2ui);
1216 AssignGLEntryPoint(loadProcAddress("glVertexAttribP2uiv"), &vertexAttribP2uiv);
1217 AssignGLEntryPoint(loadProcAddress("glVertexAttribP3ui"), &vertexAttribP3ui);
1218 AssignGLEntryPoint(loadProcAddress("glVertexAttribP3uiv"), &vertexAttribP3uiv);
1219 AssignGLEntryPoint(loadProcAddress("glVertexAttribP4ui"), &vertexAttribP4ui);
1220 AssignGLEntryPoint(loadProcAddress("glVertexAttribP4uiv"), &vertexAttribP4uiv);
1221 }
1222
1223 // 4.0
1224 if (majorVersion > 4 || majorVersion == 4 && minorVersion >= 0)
1225 {
1226 AssignGLEntryPoint(loadProcAddress("glBeginQueryIndexed"), &beginQueryIndexed);
1227 AssignGLEntryPoint(loadProcAddress("glBindTransformFeedback"), &bindTransformFeedback);
1228 AssignGLEntryPoint(loadProcAddress("glBlendEquationSeparatei"), &blendEquationSeparatei);
1229 AssignGLEntryPoint(loadProcAddress("glBlendEquationi"), &blendEquationi);
1230 AssignGLEntryPoint(loadProcAddress("glBlendFuncSeparatei"), &blendFuncSeparatei);
1231 AssignGLEntryPoint(loadProcAddress("glBlendFunci"), &blendFunci);
1232 AssignGLEntryPoint(loadProcAddress("glDeleteTransformFeedbacks"), &deleteTransformFeedbacks);
1233 AssignGLEntryPoint(loadProcAddress("glDrawArraysIndirect"), &drawArraysIndirect);
1234 AssignGLEntryPoint(loadProcAddress("glDrawElementsIndirect"), &drawElementsIndirect);
1235 AssignGLEntryPoint(loadProcAddress("glDrawTransformFeedback"), &drawTransformFeedback);
1236 AssignGLEntryPoint(loadProcAddress("glDrawTransformFeedbackStream"), &drawTransformFeedbackStream);
1237 AssignGLEntryPoint(loadProcAddress("glEndQueryIndexed"), &endQueryIndexed);
1238 AssignGLEntryPoint(loadProcAddress("glGenTransformFeedbacks"), &genTransformFeedbacks);
1239 AssignGLEntryPoint(loadProcAddress("glGetActiveSubroutineName"), &getActiveSubroutineName);
1240 AssignGLEntryPoint(loadProcAddress("glGetActiveSubroutineUniformName"), &getActiveSubroutineUniformName);
1241 AssignGLEntryPoint(loadProcAddress("glGetActiveSubroutineUniformiv"), &getActiveSubroutineUniformiv);
1242 AssignGLEntryPoint(loadProcAddress("glGetProgramStageiv"), &getProgramStageiv);
1243 AssignGLEntryPoint(loadProcAddress("glGetQueryIndexediv"), &getQueryIndexediv);
1244 AssignGLEntryPoint(loadProcAddress("glGetSubroutineIndex"), &getSubroutineIndex);
1245 AssignGLEntryPoint(loadProcAddress("glGetSubroutineUniformLocation"), &getSubroutineUniformLocation);
1246 AssignGLEntryPoint(loadProcAddress("glGetUniformSubroutineuiv"), &getUniformSubroutineuiv);
1247 AssignGLEntryPoint(loadProcAddress("glGetUniformdv"), &getUniformdv);
1248 AssignGLEntryPoint(loadProcAddress("glIsTransformFeedback"), &isTransformFeedback);
1249 AssignGLEntryPoint(loadProcAddress("glMinSampleShading"), &minSampleShading);
1250 AssignGLEntryPoint(loadProcAddress("glPatchParameterfv"), &patchParameterfv);
1251 AssignGLEntryPoint(loadProcAddress("glPatchParameteri"), &patchParameteri);
1252 AssignGLEntryPoint(loadProcAddress("glPauseTransformFeedback"), &pauseTransformFeedback);
1253 AssignGLEntryPoint(loadProcAddress("glResumeTransformFeedback"), &resumeTransformFeedback);
1254 AssignGLEntryPoint(loadProcAddress("glUniform1d"), &uniform1d);
1255 AssignGLEntryPoint(loadProcAddress("glUniform1dv"), &uniform1dv);
1256 AssignGLEntryPoint(loadProcAddress("glUniform2d"), &uniform2d);
1257 AssignGLEntryPoint(loadProcAddress("glUniform2dv"), &uniform2dv);
1258 AssignGLEntryPoint(loadProcAddress("glUniform3d"), &uniform3d);
1259 AssignGLEntryPoint(loadProcAddress("glUniform3dv"), &uniform3dv);
1260 AssignGLEntryPoint(loadProcAddress("glUniform4d"), &uniform4d);
1261 AssignGLEntryPoint(loadProcAddress("glUniform4dv"), &uniform4dv);
1262 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2dv"), &uniformMatrix2dv);
1263 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2x3dv"), &uniformMatrix2x3dv);
1264 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2x4dv"), &uniformMatrix2x4dv);
1265 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3dv"), &uniformMatrix3dv);
1266 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3x2dv"), &uniformMatrix3x2dv);
1267 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3x4dv"), &uniformMatrix3x4dv);
1268 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4dv"), &uniformMatrix4dv);
1269 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4x2dv"), &uniformMatrix4x2dv);
1270 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4x3dv"), &uniformMatrix4x3dv);
1271 AssignGLEntryPoint(loadProcAddress("glUniformSubroutinesuiv"), &uniformSubroutinesuiv);
1272 }
1273
1274 // 4.0
1275 if (majorVersion > 4 || majorVersion == 4 && minorVersion >= 1)
1276 {
1277 AssignGLEntryPoint(loadProcAddress("glActiveShaderProgram"), &activeShaderProgram);
1278 AssignGLEntryPoint(loadProcAddress("glBindProgramPipeline"), &bindProgramPipeline);
1279 AssignGLEntryPoint(loadProcAddress("glClearDepthf"), &clearDepthf);
1280 AssignGLEntryPoint(loadProcAddress("glCreateShaderProgramv"), &createShaderProgramv);
1281 AssignGLEntryPoint(loadProcAddress("glDeleteProgramPipelines"), &deleteProgramPipelines);
1282 AssignGLEntryPoint(loadProcAddress("glDepthRangeArrayv"), &depthRangeArrayv);
1283 AssignGLEntryPoint(loadProcAddress("glDepthRangeIndexed"), &depthRangeIndexed);
1284 AssignGLEntryPoint(loadProcAddress("glDepthRangef"), &depthRangef);
1285 AssignGLEntryPoint(loadProcAddress("glGenProgramPipelines"), &genProgramPipelines);
1286 AssignGLEntryPoint(loadProcAddress("glGetDoublei_v"), &getDoublei_v);
1287 AssignGLEntryPoint(loadProcAddress("glGetFloati_v"), &getFloati_v);
1288 AssignGLEntryPoint(loadProcAddress("glGetProgramBinary"), &getProgramBinary);
1289 AssignGLEntryPoint(loadProcAddress("glGetProgramPipelineInfoLog"), &getProgramPipelineInfoLog);
1290 AssignGLEntryPoint(loadProcAddress("glGetProgramPipelineiv"), &getProgramPipelineiv);
1291 AssignGLEntryPoint(loadProcAddress("glGetShaderPrecisionFormat"), &getShaderPrecisionFormat);
1292 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribLdv"), &getVertexAttribLdv);
1293 AssignGLEntryPoint(loadProcAddress("glIsProgramPipeline"), &isProgramPipeline);
1294 AssignGLEntryPoint(loadProcAddress("glProgramBinary"), &programBinary);
1295 AssignGLEntryPoint(loadProcAddress("glProgramParameteri"), &programParameteri);
1296 AssignGLEntryPoint(loadProcAddress("glProgramUniform1d"), &programUniform1d);
1297 AssignGLEntryPoint(loadProcAddress("glProgramUniform1dv"), &programUniform1dv);
1298 AssignGLEntryPoint(loadProcAddress("glProgramUniform1f"), &programUniform1f);
1299 AssignGLEntryPoint(loadProcAddress("glProgramUniform1fv"), &programUniform1fv);
1300 AssignGLEntryPoint(loadProcAddress("glProgramUniform1i"), &programUniform1i);
1301 AssignGLEntryPoint(loadProcAddress("glProgramUniform1iv"), &programUniform1iv);
1302 AssignGLEntryPoint(loadProcAddress("glProgramUniform1ui"), &programUniform1ui);
1303 AssignGLEntryPoint(loadProcAddress("glProgramUniform1uiv"), &programUniform1uiv);
1304 AssignGLEntryPoint(loadProcAddress("glProgramUniform2d"), &programUniform2d);
1305 AssignGLEntryPoint(loadProcAddress("glProgramUniform2dv"), &programUniform2dv);
1306 AssignGLEntryPoint(loadProcAddress("glProgramUniform2f"), &programUniform2f);
1307 AssignGLEntryPoint(loadProcAddress("glProgramUniform2fv"), &programUniform2fv);
1308 AssignGLEntryPoint(loadProcAddress("glProgramUniform2i"), &programUniform2i);
1309 AssignGLEntryPoint(loadProcAddress("glProgramUniform2iv"), &programUniform2iv);
1310 AssignGLEntryPoint(loadProcAddress("glProgramUniform2ui"), &programUniform2ui);
1311 AssignGLEntryPoint(loadProcAddress("glProgramUniform2uiv"), &programUniform2uiv);
1312 AssignGLEntryPoint(loadProcAddress("glProgramUniform3d"), &programUniform3d);
1313 AssignGLEntryPoint(loadProcAddress("glProgramUniform3dv"), &programUniform3dv);
1314 AssignGLEntryPoint(loadProcAddress("glProgramUniform3f"), &programUniform3f);
1315 AssignGLEntryPoint(loadProcAddress("glProgramUniform3fv"), &programUniform3fv);
1316 AssignGLEntryPoint(loadProcAddress("glProgramUniform3i"), &programUniform3i);
1317 AssignGLEntryPoint(loadProcAddress("glProgramUniform3iv"), &programUniform3iv);
1318 AssignGLEntryPoint(loadProcAddress("glProgramUniform3ui"), &programUniform3ui);
1319 AssignGLEntryPoint(loadProcAddress("glProgramUniform3uiv"), &programUniform3uiv);
1320 AssignGLEntryPoint(loadProcAddress("glProgramUniform4d"), &programUniform4d);
1321 AssignGLEntryPoint(loadProcAddress("glProgramUniform4dv"), &programUniform4dv);
1322 AssignGLEntryPoint(loadProcAddress("glProgramUniform4f"), &programUniform4f);
1323 AssignGLEntryPoint(loadProcAddress("glProgramUniform4fv"), &programUniform4fv);
1324 AssignGLEntryPoint(loadProcAddress("glProgramUniform4i"), &programUniform4i);
1325 AssignGLEntryPoint(loadProcAddress("glProgramUniform4iv"), &programUniform4iv);
1326 AssignGLEntryPoint(loadProcAddress("glProgramUniform4ui"), &programUniform4ui);
1327 AssignGLEntryPoint(loadProcAddress("glProgramUniform4uiv"), &programUniform4uiv);
1328 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2dv"), &programUniformMatrix2dv);
1329 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2fv"), &programUniformMatrix2fv);
1330 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2x3dv"), &programUniformMatrix2x3dv);
1331 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2x3fv"), &programUniformMatrix2x3fv);
1332 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2x4dv"), &programUniformMatrix2x4dv);
1333 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2x4fv"), &programUniformMatrix2x4fv);
1334 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3dv"), &programUniformMatrix3dv);
1335 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3fv"), &programUniformMatrix3fv);
1336 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3x2dv"), &programUniformMatrix3x2dv);
1337 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3x2fv"), &programUniformMatrix3x2fv);
1338 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3x4dv"), &programUniformMatrix3x4dv);
1339 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3x4fv"), &programUniformMatrix3x4fv);
1340 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4dv"), &programUniformMatrix4dv);
1341 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4fv"), &programUniformMatrix4fv);
1342 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4x2dv"), &programUniformMatrix4x2dv);
1343 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4x2fv"), &programUniformMatrix4x2fv);
1344 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4x3dv"), &programUniformMatrix4x3dv);
1345 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4x3fv"), &programUniformMatrix4x3fv);
1346 AssignGLEntryPoint(loadProcAddress("glReleaseShaderCompiler"), &releaseShaderCompiler);
1347 AssignGLEntryPoint(loadProcAddress("glScissorArrayv"), &scissorArrayv);
1348 AssignGLEntryPoint(loadProcAddress("glScissorIndexed"), &scissorIndexed);
1349 AssignGLEntryPoint(loadProcAddress("glScissorIndexedv"), &scissorIndexedv);
1350 AssignGLEntryPoint(loadProcAddress("glShaderBinary"), &shaderBinary);
1351 AssignGLEntryPoint(loadProcAddress("glUseProgramStages"), &useProgramStages);
1352 AssignGLEntryPoint(loadProcAddress("glValidateProgramPipeline"), &validateProgramPipeline);
1353 AssignGLEntryPoint(loadProcAddress("glVertexAttribL1d"), &vertexAttribL1d);
1354 AssignGLEntryPoint(loadProcAddress("glVertexAttribL1dv"), &vertexAttribL1dv);
1355 AssignGLEntryPoint(loadProcAddress("glVertexAttribL2d"), &vertexAttribL2d);
1356 AssignGLEntryPoint(loadProcAddress("glVertexAttribL2dv"), &vertexAttribL2dv);
1357 AssignGLEntryPoint(loadProcAddress("glVertexAttribL3d"), &vertexAttribL3d);
1358 AssignGLEntryPoint(loadProcAddress("glVertexAttribL3dv"), &vertexAttribL3dv);
1359 AssignGLEntryPoint(loadProcAddress("glVertexAttribL4d"), &vertexAttribL4d);
1360 AssignGLEntryPoint(loadProcAddress("glVertexAttribL4dv"), &vertexAttribL4dv);
1361 AssignGLEntryPoint(loadProcAddress("glVertexAttribLPointer"), &vertexAttribLPointer);
1362 AssignGLEntryPoint(loadProcAddress("glViewportArrayv"), &viewportArrayv);
1363 AssignGLEntryPoint(loadProcAddress("glViewportIndexedf"), &viewportIndexedf);
1364 AssignGLEntryPoint(loadProcAddress("glViewportIndexedfv"), &viewportIndexedfv);
1365 }
1366
1367 // 4.2
1368 if (majorVersion > 4 || majorVersion == 4 && minorVersion >= 2)
1369 {
1370 AssignGLEntryPoint(loadProcAddress("glBindImageTexture"), &bindImageTexture);
1371 AssignGLEntryPoint(loadProcAddress("glDrawArraysInstancedBaseInstance"), &drawArraysInstancedBaseInstance);
1372 AssignGLEntryPoint(loadProcAddress("glDrawElementsInstancedBaseInstance"), &drawElementsInstancedBaseInstance);
1373 AssignGLEntryPoint(loadProcAddress("glDrawElementsInstancedBaseVertexBaseInstance"), &drawElementsInstancedBaseVertexBaseInstance);
1374 AssignGLEntryPoint(loadProcAddress("glDrawTransformFeedbackInstanced"), &drawTransformFeedbackInstanced);
1375 AssignGLEntryPoint(loadProcAddress("glDrawTransformFeedbackStreamInstanced"), &drawTransformFeedbackStreamInstanced);
1376 AssignGLEntryPoint(loadProcAddress("glGetActiveAtomicCounterBufferiv"), &getActiveAtomicCounterBufferiv);
1377 AssignGLEntryPoint(loadProcAddress("glGetInternalformativ"), &getInternalformativ);
1378 AssignGLEntryPoint(loadProcAddress("glMemoryBarrier"), &memoryBarrier);
1379 AssignGLEntryPoint(loadProcAddress("glTexStorage1D"), &texStorage1D);
1380 AssignGLEntryPoint(loadProcAddress("glTexStorage2D"), &texStorage2D);
1381 AssignGLEntryPoint(loadProcAddress("glTexStorage3D"), &texStorage3D);
1382 }
1383
1384 // 4.3
1385 if (majorVersion > 4 || majorVersion == 4 && minorVersion >= 3)
1386 {
1387 AssignGLEntryPoint(loadProcAddress("glBindVertexBuffer"), &bindVertexBuffer);
1388 AssignGLEntryPoint(loadProcAddress("glClearBufferData"), &clearBufferData);
1389 AssignGLEntryPoint(loadProcAddress("glClearBufferSubData"), &clearBufferSubData);
1390 AssignGLEntryPoint(loadProcAddress("glCopyImageSubData"), &copyImageSubData);
1391 AssignGLEntryPoint(loadProcAddress("glDebugMessageCallback"), &debugMessageCallback);
1392 AssignGLEntryPoint(loadProcAddress("glDebugMessageControl"), &debugMessageControl);
1393 AssignGLEntryPoint(loadProcAddress("glDebugMessageInsert"), &debugMessageInsert);
1394 AssignGLEntryPoint(loadProcAddress("glDispatchCompute"), &dispatchCompute);
1395 AssignGLEntryPoint(loadProcAddress("glDispatchComputeIndirect"), &dispatchComputeIndirect);
1396 AssignGLEntryPoint(loadProcAddress("glFramebufferParameteri"), &framebufferParameteri);
1397 AssignGLEntryPoint(loadProcAddress("glGetDebugMessageLog"), &getDebugMessageLog);
1398 AssignGLEntryPoint(loadProcAddress("glGetFramebufferParameteriv"), &getFramebufferParameteriv);
1399 AssignGLEntryPoint(loadProcAddress("glGetInternalformati64v"), &getInternalformati64v);
1400 AssignGLEntryPoint(loadProcAddress("glGetObjectLabel"), &getObjectLabel);
1401 AssignGLEntryPoint(loadProcAddress("glGetObjectPtrLabel"), &getObjectPtrLabel);
1402 AssignGLEntryPoint(loadProcAddress("glGetProgramInterfaceiv"), &getProgramInterfaceiv);
1403 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceIndex"), &getProgramResourceIndex);
1404 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceLocation"), &getProgramResourceLocation);
1405 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceLocationIndex"), &getProgramResourceLocationIndex);
1406 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceName"), &getProgramResourceName);
1407 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceiv"), &getProgramResourceiv);
1408 AssignGLEntryPoint(loadProcAddress("glInvalidateBufferData"), &invalidateBufferData);
1409 AssignGLEntryPoint(loadProcAddress("glInvalidateBufferSubData"), &invalidateBufferSubData);
1410 AssignGLEntryPoint(loadProcAddress("glInvalidateFramebuffer"), &invalidateFramebuffer);
1411 AssignGLEntryPoint(loadProcAddress("glInvalidateSubFramebuffer"), &invalidateSubFramebuffer);
1412 AssignGLEntryPoint(loadProcAddress("glInvalidateTexImage"), &invalidateTexImage);
1413 AssignGLEntryPoint(loadProcAddress("glInvalidateTexSubImage"), &invalidateTexSubImage);
1414 AssignGLEntryPoint(loadProcAddress("glMultiDrawArraysIndirect"), &multiDrawArraysIndirect);
1415 AssignGLEntryPoint(loadProcAddress("glMultiDrawElementsIndirect"), &multiDrawElementsIndirect);
1416 AssignGLEntryPoint(loadProcAddress("glObjectLabel"), &objectLabel);
1417 AssignGLEntryPoint(loadProcAddress("glObjectPtrLabel"), &objectPtrLabel);
1418 AssignGLEntryPoint(loadProcAddress("glPopDebugGroup"), &popDebugGroup);
1419 AssignGLEntryPoint(loadProcAddress("glPushDebugGroup"), &pushDebugGroup);
1420 AssignGLEntryPoint(loadProcAddress("glShaderStorageBlockBinding"), &shaderStorageBlockBinding);
1421 AssignGLEntryPoint(loadProcAddress("glTexBufferRange"), &texBufferRange);
1422 AssignGLEntryPoint(loadProcAddress("glTexStorage2DMultisample"), &texStorage2DMultisample);
1423 AssignGLEntryPoint(loadProcAddress("glTexStorage3DMultisample"), &texStorage3DMultisample);
1424 AssignGLEntryPoint(loadProcAddress("glTextureView"), &textureView);
1425 AssignGLEntryPoint(loadProcAddress("glVertexAttribBinding"), &vertexAttribBinding);
1426 AssignGLEntryPoint(loadProcAddress("glVertexAttribFormat"), &vertexAttribFormat);
1427 AssignGLEntryPoint(loadProcAddress("glVertexAttribIFormat"), &vertexAttribIFormat);
1428 AssignGLEntryPoint(loadProcAddress("glVertexAttribLFormat"), &vertexAttribLFormat);
1429 AssignGLEntryPoint(loadProcAddress("glVertexBindingDivisor"), &vertexBindingDivisor);
1430 }
1431
1432 // 4.4
1433 if (majorVersion > 4 || majorVersion == 4 && minorVersion >= 4)
1434 {
1435 AssignGLEntryPoint(loadProcAddress("glBindBuffersBase"), &bindBuffersBase);
1436 AssignGLEntryPoint(loadProcAddress("glBindBuffersRange"), &bindBuffersRange);
1437 AssignGLEntryPoint(loadProcAddress("glBindImageTextures"), &bindImageTextures);
1438 AssignGLEntryPoint(loadProcAddress("glBindSamplers"), &bindSamplers);
1439 AssignGLEntryPoint(loadProcAddress("glBindTextures"), &bindTextures);
1440 AssignGLEntryPoint(loadProcAddress("glBindVertexBuffers"), &bindVertexBuffers);
1441 AssignGLEntryPoint(loadProcAddress("glBufferStorage"), &bufferStorage);
1442 AssignGLEntryPoint(loadProcAddress("glClearTexImage"), &clearTexImage);
1443 AssignGLEntryPoint(loadProcAddress("glClearTexSubImage"), &clearTexSubImage);
1444 }
1445
1446 // 4.5
1447 if (majorVersion > 4 || majorVersion == 4 && minorVersion >= 5)
1448 {
1449 AssignGLEntryPoint(loadProcAddress("glBindTextureUnit"), &bindTextureUnit);
1450 AssignGLEntryPoint(loadProcAddress("glBlitNamedFramebuffer"), &blitNamedFramebuffer);
1451 AssignGLEntryPoint(loadProcAddress("glCheckNamedFramebufferStatus"), &checkNamedFramebufferStatus);
1452 AssignGLEntryPoint(loadProcAddress("glClearNamedBufferData"), &clearNamedBufferData);
1453 AssignGLEntryPoint(loadProcAddress("glClearNamedBufferSubData"), &clearNamedBufferSubData);
1454 AssignGLEntryPoint(loadProcAddress("glClearNamedFramebufferfi"), &clearNamedFramebufferfi);
1455 AssignGLEntryPoint(loadProcAddress("glClearNamedFramebufferfv"), &clearNamedFramebufferfv);
1456 AssignGLEntryPoint(loadProcAddress("glClearNamedFramebufferiv"), &clearNamedFramebufferiv);
1457 AssignGLEntryPoint(loadProcAddress("glClearNamedFramebufferuiv"), &clearNamedFramebufferuiv);
1458 AssignGLEntryPoint(loadProcAddress("glClipControl"), &clipControl);
1459 AssignGLEntryPoint(loadProcAddress("glCompressedTextureSubImage1D"), &compressedTextureSubImage1D);
1460 AssignGLEntryPoint(loadProcAddress("glCompressedTextureSubImage2D"), &compressedTextureSubImage2D);
1461 AssignGLEntryPoint(loadProcAddress("glCompressedTextureSubImage3D"), &compressedTextureSubImage3D);
1462 AssignGLEntryPoint(loadProcAddress("glCopyNamedBufferSubData"), &copyNamedBufferSubData);
1463 AssignGLEntryPoint(loadProcAddress("glCopyTextureSubImage1D"), &copyTextureSubImage1D);
1464 AssignGLEntryPoint(loadProcAddress("glCopyTextureSubImage2D"), &copyTextureSubImage2D);
1465 AssignGLEntryPoint(loadProcAddress("glCopyTextureSubImage3D"), &copyTextureSubImage3D);
1466 AssignGLEntryPoint(loadProcAddress("glCreateBuffers"), &createBuffers);
1467 AssignGLEntryPoint(loadProcAddress("glCreateFramebuffers"), &createFramebuffers);
1468 AssignGLEntryPoint(loadProcAddress("glCreateProgramPipelines"), &createProgramPipelines);
1469 AssignGLEntryPoint(loadProcAddress("glCreateQueries"), &createQueries);
1470 AssignGLEntryPoint(loadProcAddress("glCreateRenderbuffers"), &createRenderbuffers);
1471 AssignGLEntryPoint(loadProcAddress("glCreateSamplers"), &createSamplers);
1472 AssignGLEntryPoint(loadProcAddress("glCreateTextures"), &createTextures);
1473 AssignGLEntryPoint(loadProcAddress("glCreateTransformFeedbacks"), &createTransformFeedbacks);
1474 AssignGLEntryPoint(loadProcAddress("glCreateVertexArrays"), &createVertexArrays);
1475 AssignGLEntryPoint(loadProcAddress("glDisableVertexArrayAttrib"), &disableVertexArrayAttrib);
1476 AssignGLEntryPoint(loadProcAddress("glEnableVertexArrayAttrib"), &enableVertexArrayAttrib);
1477 AssignGLEntryPoint(loadProcAddress("glFlushMappedNamedBufferRange"), &flushMappedNamedBufferRange);
1478 AssignGLEntryPoint(loadProcAddress("glGenerateTextureMipmap"), &generateTextureMipmap);
1479 AssignGLEntryPoint(loadProcAddress("glGetCompressedTextureImage"), &getCompressedTextureImage);
1480 AssignGLEntryPoint(loadProcAddress("glGetCompressedTextureSubImage"), &getCompressedTextureSubImage);
1481 AssignGLEntryPoint(loadProcAddress("glGetGraphicsResetStatus"), &getGraphicsResetStatus);
1482 AssignGLEntryPoint(loadProcAddress("glGetNamedBufferParameteri64v"), &getNamedBufferParameteri64v);
1483 AssignGLEntryPoint(loadProcAddress("glGetNamedBufferParameteriv"), &getNamedBufferParameteriv);
1484 AssignGLEntryPoint(loadProcAddress("glGetNamedBufferPointerv"), &getNamedBufferPointerv);
1485 AssignGLEntryPoint(loadProcAddress("glGetNamedBufferSubData"), &getNamedBufferSubData);
1486 AssignGLEntryPoint(loadProcAddress("glGetNamedFramebufferAttachmentParameteriv"), &getNamedFramebufferAttachmentParameteriv);
1487 AssignGLEntryPoint(loadProcAddress("glGetNamedFramebufferParameteriv"), &getNamedFramebufferParameteriv);
1488 AssignGLEntryPoint(loadProcAddress("glGetNamedRenderbufferParameteriv"), &getNamedRenderbufferParameteriv);
1489 AssignGLEntryPoint(loadProcAddress("glGetQueryBufferObjecti64v"), &getQueryBufferObjecti64v);
1490 AssignGLEntryPoint(loadProcAddress("glGetQueryBufferObjectiv"), &getQueryBufferObjectiv);
1491 AssignGLEntryPoint(loadProcAddress("glGetQueryBufferObjectui64v"), &getQueryBufferObjectui64v);
1492 AssignGLEntryPoint(loadProcAddress("glGetQueryBufferObjectuiv"), &getQueryBufferObjectuiv);
1493 AssignGLEntryPoint(loadProcAddress("glGetTextureImage"), &getTextureImage);
1494 AssignGLEntryPoint(loadProcAddress("glGetTextureLevelParameterfv"), &getTextureLevelParameterfv);
1495 AssignGLEntryPoint(loadProcAddress("glGetTextureLevelParameteriv"), &getTextureLevelParameteriv);
1496 AssignGLEntryPoint(loadProcAddress("glGetTextureParameterIiv"), &getTextureParameterIiv);
1497 AssignGLEntryPoint(loadProcAddress("glGetTextureParameterIuiv"), &getTextureParameterIuiv);
1498 AssignGLEntryPoint(loadProcAddress("glGetTextureParameterfv"), &getTextureParameterfv);
1499 AssignGLEntryPoint(loadProcAddress("glGetTextureParameteriv"), &getTextureParameteriv);
1500 AssignGLEntryPoint(loadProcAddress("glGetTextureSubImage"), &getTextureSubImage);
1501 AssignGLEntryPoint(loadProcAddress("glGetTransformFeedbacki64_v"), &getTransformFeedbacki64_v);
1502 AssignGLEntryPoint(loadProcAddress("glGetTransformFeedbacki_v"), &getTransformFeedbacki_v);
1503 AssignGLEntryPoint(loadProcAddress("glGetTransformFeedbackiv"), &getTransformFeedbackiv);
1504 AssignGLEntryPoint(loadProcAddress("glGetVertexArrayIndexed64iv"), &getVertexArrayIndexed64iv);
1505 AssignGLEntryPoint(loadProcAddress("glGetVertexArrayIndexediv"), &getVertexArrayIndexediv);
1506 AssignGLEntryPoint(loadProcAddress("glGetVertexArrayiv"), &getVertexArrayiv);
1507 AssignGLEntryPoint(loadProcAddress("glGetnCompressedTexImage"), &getnCompressedTexImage);
1508 AssignGLEntryPoint(loadProcAddress("glGetnTexImage"), &getnTexImage);
1509 AssignGLEntryPoint(loadProcAddress("glGetnUniformdv"), &getnUniformdv);
1510 AssignGLEntryPoint(loadProcAddress("glGetnUniformfv"), &getnUniformfv);
1511 AssignGLEntryPoint(loadProcAddress("glGetnUniformiv"), &getnUniformiv);
1512 AssignGLEntryPoint(loadProcAddress("glGetnUniformuiv"), &getnUniformuiv);
1513 AssignGLEntryPoint(loadProcAddress("glInvalidateNamedFramebufferData"), &invalidateNamedFramebufferData);
1514 AssignGLEntryPoint(loadProcAddress("glInvalidateNamedFramebufferSubData"), &invalidateNamedFramebufferSubData);
1515 AssignGLEntryPoint(loadProcAddress("glMapNamedBuffer"), &mapNamedBuffer);
1516 AssignGLEntryPoint(loadProcAddress("glMapNamedBufferRange"), &mapNamedBufferRange);
1517 AssignGLEntryPoint(loadProcAddress("glMemoryBarrierByRegion"), &memoryBarrierByRegion);
1518 AssignGLEntryPoint(loadProcAddress("glNamedBufferData"), &namedBufferData);
1519 AssignGLEntryPoint(loadProcAddress("glNamedBufferStorage"), &namedBufferStorage);
1520 AssignGLEntryPoint(loadProcAddress("glNamedBufferSubData"), &namedBufferSubData);
1521 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferDrawBuffer"), &namedFramebufferDrawBuffer);
1522 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferDrawBuffers"), &namedFramebufferDrawBuffers);
1523 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferParameteri"), &namedFramebufferParameteri);
1524 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferReadBuffer"), &namedFramebufferReadBuffer);
1525 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferRenderbuffer"), &namedFramebufferRenderbuffer);
1526 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferTexture"), &namedFramebufferTexture);
1527 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferTextureLayer"), &namedFramebufferTextureLayer);
1528 AssignGLEntryPoint(loadProcAddress("glNamedRenderbufferStorage"), &namedRenderbufferStorage);
1529 AssignGLEntryPoint(loadProcAddress("glNamedRenderbufferStorageMultisample"), &namedRenderbufferStorageMultisample);
1530 AssignGLEntryPoint(loadProcAddress("glReadnPixels"), &readnPixels);
1531 AssignGLEntryPoint(loadProcAddress("glTextureBarrier"), &textureBarrier);
1532 AssignGLEntryPoint(loadProcAddress("glTextureBuffer"), &textureBuffer);
1533 AssignGLEntryPoint(loadProcAddress("glTextureBufferRange"), &textureBufferRange);
1534 AssignGLEntryPoint(loadProcAddress("glTextureParameterIiv"), &textureParameterIiv);
1535 AssignGLEntryPoint(loadProcAddress("glTextureParameterIuiv"), &textureParameterIuiv);
1536 AssignGLEntryPoint(loadProcAddress("glTextureParameterf"), &textureParameterf);
1537 AssignGLEntryPoint(loadProcAddress("glTextureParameterfv"), &textureParameterfv);
1538 AssignGLEntryPoint(loadProcAddress("glTextureParameteri"), &textureParameteri);
1539 AssignGLEntryPoint(loadProcAddress("glTextureParameteriv"), &textureParameteriv);
1540 AssignGLEntryPoint(loadProcAddress("glTextureStorage1D"), &textureStorage1D);
1541 AssignGLEntryPoint(loadProcAddress("glTextureStorage2D"), &textureStorage2D);
1542 AssignGLEntryPoint(loadProcAddress("glTextureStorage2DMultisample"), &textureStorage2DMultisample);
1543 AssignGLEntryPoint(loadProcAddress("glTextureStorage3D"), &textureStorage3D);
1544 AssignGLEntryPoint(loadProcAddress("glTextureStorage3DMultisample"), &textureStorage3DMultisample);
1545 AssignGLEntryPoint(loadProcAddress("glTextureSubImage1D"), &textureSubImage1D);
1546 AssignGLEntryPoint(loadProcAddress("glTextureSubImage2D"), &textureSubImage2D);
1547 AssignGLEntryPoint(loadProcAddress("glTextureSubImage3D"), &textureSubImage3D);
1548 AssignGLEntryPoint(loadProcAddress("glTransformFeedbackBufferBase"), &transformFeedbackBufferBase);
1549 AssignGLEntryPoint(loadProcAddress("glTransformFeedbackBufferRange"), &transformFeedbackBufferRange);
1550 AssignGLEntryPoint(loadProcAddress("glUnmapNamedBuffer"), &unmapNamedBuffer);
1551 AssignGLEntryPoint(loadProcAddress("glVertexArrayAttribBinding"), &vertexArrayAttribBinding);
1552 AssignGLEntryPoint(loadProcAddress("glVertexArrayAttribFormat"), &vertexArrayAttribFormat);
1553 AssignGLEntryPoint(loadProcAddress("glVertexArrayAttribIFormat"), &vertexArrayAttribIFormat);
1554 AssignGLEntryPoint(loadProcAddress("glVertexArrayAttribLFormat"), &vertexArrayAttribLFormat);
1555 AssignGLEntryPoint(loadProcAddress("glVertexArrayBindingDivisor"), &vertexArrayBindingDivisor);
1556 AssignGLEntryPoint(loadProcAddress("glVertexArrayElementBuffer"), &vertexArrayElementBuffer);
1557 AssignGLEntryPoint(loadProcAddress("glVertexArrayVertexBuffer"), &vertexArrayVertexBuffer);
1558 AssignGLEntryPoint(loadProcAddress("glVertexArrayVertexBuffers"), &vertexArrayVertexBuffers);
1559 }
1560}
1561
1562}