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