blob: fcb771d9357c984556a42c6de8f39a29df610132 [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),
Geoff Langb80360f2015-05-04 15:01:31 -0400621 getPointerv(nullptr),
Geoff Lang56cf9af2015-02-17 10:16:49 -0500622 getObjectLabel(nullptr),
623 getObjectPtrLabel(nullptr),
624 getProgramInterfaceiv(nullptr),
625 getProgramResourceIndex(nullptr),
626 getProgramResourceLocation(nullptr),
627 getProgramResourceLocationIndex(nullptr),
628 getProgramResourceName(nullptr),
629 getProgramResourceiv(nullptr),
630 invalidateBufferData(nullptr),
631 invalidateBufferSubData(nullptr),
632 invalidateFramebuffer(nullptr),
633 invalidateSubFramebuffer(nullptr),
634 invalidateTexImage(nullptr),
635 invalidateTexSubImage(nullptr),
636 multiDrawArraysIndirect(nullptr),
637 multiDrawElementsIndirect(nullptr),
638 objectLabel(nullptr),
639 objectPtrLabel(nullptr),
640 popDebugGroup(nullptr),
641 pushDebugGroup(nullptr),
642 shaderStorageBlockBinding(nullptr),
643 texBufferRange(nullptr),
644 texStorage2DMultisample(nullptr),
645 texStorage3DMultisample(nullptr),
646 textureView(nullptr),
647 vertexAttribBinding(nullptr),
648 vertexAttribFormat(nullptr),
649 vertexAttribIFormat(nullptr),
650 vertexAttribLFormat(nullptr),
651 vertexBindingDivisor(nullptr),
652
653 bindBuffersBase(nullptr),
654 bindBuffersRange(nullptr),
655 bindImageTextures(nullptr),
656 bindSamplers(nullptr),
657 bindTextures(nullptr),
658 bindVertexBuffers(nullptr),
659 bufferStorage(nullptr),
660 clearTexImage(nullptr),
661 clearTexSubImage(nullptr),
662
663 bindTextureUnit(nullptr),
664 blitNamedFramebuffer(nullptr),
665 checkNamedFramebufferStatus(nullptr),
666 clearNamedBufferData(nullptr),
667 clearNamedBufferSubData(nullptr),
668 clearNamedFramebufferfi(nullptr),
669 clearNamedFramebufferfv(nullptr),
670 clearNamedFramebufferiv(nullptr),
671 clearNamedFramebufferuiv(nullptr),
672 clipControl(nullptr),
673 compressedTextureSubImage1D(nullptr),
674 compressedTextureSubImage2D(nullptr),
675 compressedTextureSubImage3D(nullptr),
676 copyNamedBufferSubData(nullptr),
677 copyTextureSubImage1D(nullptr),
678 copyTextureSubImage2D(nullptr),
679 copyTextureSubImage3D(nullptr),
680 createBuffers(nullptr),
681 createFramebuffers(nullptr),
682 createProgramPipelines(nullptr),
683 createQueries(nullptr),
684 createRenderbuffers(nullptr),
685 createSamplers(nullptr),
686 createTextures(nullptr),
687 createTransformFeedbacks(nullptr),
688 createVertexArrays(nullptr),
689 disableVertexArrayAttrib(nullptr),
690 enableVertexArrayAttrib(nullptr),
691 flushMappedNamedBufferRange(nullptr),
692 generateTextureMipmap(nullptr),
693 getCompressedTextureImage(nullptr),
694 getCompressedTextureSubImage(nullptr),
695 getGraphicsResetStatus(nullptr),
696 getNamedBufferParameteri64v(nullptr),
697 getNamedBufferParameteriv(nullptr),
698 getNamedBufferPointerv(nullptr),
699 getNamedBufferSubData(nullptr),
700 getNamedFramebufferAttachmentParameteriv(nullptr),
701 getNamedFramebufferParameteriv(nullptr),
702 getNamedRenderbufferParameteriv(nullptr),
703 getQueryBufferObjecti64v(nullptr),
704 getQueryBufferObjectiv(nullptr),
705 getQueryBufferObjectui64v(nullptr),
706 getQueryBufferObjectuiv(nullptr),
707 getTextureImage(nullptr),
708 getTextureLevelParameterfv(nullptr),
709 getTextureLevelParameteriv(nullptr),
710 getTextureParameterIiv(nullptr),
711 getTextureParameterIuiv(nullptr),
712 getTextureParameterfv(nullptr),
713 getTextureParameteriv(nullptr),
714 getTextureSubImage(nullptr),
715 getTransformFeedbacki64_v(nullptr),
716 getTransformFeedbacki_v(nullptr),
717 getTransformFeedbackiv(nullptr),
718 getVertexArrayIndexed64iv(nullptr),
719 getVertexArrayIndexediv(nullptr),
720 getVertexArrayiv(nullptr),
721 getnCompressedTexImage(nullptr),
722 getnTexImage(nullptr),
723 getnUniformdv(nullptr),
724 getnUniformfv(nullptr),
725 getnUniformiv(nullptr),
726 getnUniformuiv(nullptr),
727 invalidateNamedFramebufferData(nullptr),
728 invalidateNamedFramebufferSubData(nullptr),
729 mapNamedBuffer(nullptr),
730 mapNamedBufferRange(nullptr),
731 memoryBarrierByRegion(nullptr),
732 namedBufferData(nullptr),
733 namedBufferStorage(nullptr),
734 namedBufferSubData(nullptr),
735 namedFramebufferDrawBuffer(nullptr),
736 namedFramebufferDrawBuffers(nullptr),
737 namedFramebufferParameteri(nullptr),
738 namedFramebufferReadBuffer(nullptr),
739 namedFramebufferRenderbuffer(nullptr),
740 namedFramebufferTexture(nullptr),
741 namedFramebufferTextureLayer(nullptr),
742 namedRenderbufferStorage(nullptr),
743 namedRenderbufferStorageMultisample(nullptr),
744 readnPixels(nullptr),
745 textureBarrier(nullptr),
746 textureBuffer(nullptr),
747 textureBufferRange(nullptr),
748 textureParameterIiv(nullptr),
749 textureParameterIuiv(nullptr),
750 textureParameterf(nullptr),
751 textureParameterfv(nullptr),
752 textureParameteri(nullptr),
753 textureParameteriv(nullptr),
754 textureStorage1D(nullptr),
755 textureStorage2D(nullptr),
756 textureStorage2DMultisample(nullptr),
757 textureStorage3D(nullptr),
758 textureStorage3DMultisample(nullptr),
759 textureSubImage1D(nullptr),
760 textureSubImage2D(nullptr),
761 textureSubImage3D(nullptr),
762 transformFeedbackBufferBase(nullptr),
763 transformFeedbackBufferRange(nullptr),
764 unmapNamedBuffer(nullptr),
765 vertexArrayAttribBinding(nullptr),
766 vertexArrayAttribFormat(nullptr),
767 vertexArrayAttribIFormat(nullptr),
768 vertexArrayAttribLFormat(nullptr),
769 vertexArrayBindingDivisor(nullptr),
770 vertexArrayElementBuffer(nullptr),
771 vertexArrayVertexBuffer(nullptr),
772 vertexArrayVertexBuffers(nullptr)
773{
774}
775
776FunctionsGL::~FunctionsGL()
777{
778}
779
Geoff Langa4903b72015-03-02 16:02:48 -0800780void FunctionsGL::initialize()
Geoff Lang56cf9af2015-02-17 10:16:49 -0500781{
Geoff Langa4903b72015-03-02 16:02:48 -0800782 // Grab the version number
783 AssignGLEntryPoint(loadProcAddress("glGetString"), &getString);
784 GetGLVersion(getString, &majorVersion, &minorVersion, &openGLES);
785
786 // Grab the GL extensions
Corentin Wallez92d77062015-05-04 12:41:54 -0400787 if (majorVersion >= 3)
Geoff Langa4903b72015-03-02 16:02:48 -0800788 {
789 AssignGLEntryPoint(loadProcAddress("glGetIntegerv"), &getIntegerv);
790 AssignGLEntryPoint(loadProcAddress("glGetStringi"), &getStringi);
791 extensions = GetIndexedExtensions(getIntegerv, getStringi);
792 }
793 else
794 {
795 extensions = GetNonIndexedExtensions(getString);
796 }
797
Geoff Lang56cf9af2015-02-17 10:16:49 -0500798 // 1.0
Corentin Wallez92d77062015-05-04 12:41:54 -0400799 if (majorVersion >= 1)
Geoff Lang56cf9af2015-02-17 10:16:49 -0500800 {
801 AssignGLEntryPoint(loadProcAddress("glBlendFunc"), &blendFunc);
802 AssignGLEntryPoint(loadProcAddress("glClear"), &clear);
803 AssignGLEntryPoint(loadProcAddress("glClearColor"), &clearColor);
804 AssignGLEntryPoint(loadProcAddress("glClearDepth"), &clearDepth);
805 AssignGLEntryPoint(loadProcAddress("glClearStencil"), &clearStencil);
806 AssignGLEntryPoint(loadProcAddress("glColorMask"), &colorMask);
807 AssignGLEntryPoint(loadProcAddress("glCullFace"), &cullFace);
808 AssignGLEntryPoint(loadProcAddress("glDepthFunc"), &depthFunc);
809 AssignGLEntryPoint(loadProcAddress("glDepthMask"), &depthMask);
810 AssignGLEntryPoint(loadProcAddress("glDepthRange"), &depthRange);
811 AssignGLEntryPoint(loadProcAddress("glDisable"), &disable);
812 AssignGLEntryPoint(loadProcAddress("glDrawBuffer"), &drawBuffer);
813 AssignGLEntryPoint(loadProcAddress("glEnable"), &enable);
814 AssignGLEntryPoint(loadProcAddress("glFinish"), &finish);
815 AssignGLEntryPoint(loadProcAddress("glFlush"), &flush);
816 AssignGLEntryPoint(loadProcAddress("glFrontFace"), &frontFace);
817 AssignGLEntryPoint(loadProcAddress("glGetBooleanv"), &getBooleanv);
818 AssignGLEntryPoint(loadProcAddress("glGetDoublev"), &getDoublev);
819 AssignGLEntryPoint(loadProcAddress("glGetError"), &getError);
820 AssignGLEntryPoint(loadProcAddress("glGetFloatv"), &getFloatv);
821 AssignGLEntryPoint(loadProcAddress("glGetIntegerv"), &getIntegerv);
822 AssignGLEntryPoint(loadProcAddress("glGetString"), &getString);
823 AssignGLEntryPoint(loadProcAddress("glGetTexImage"), &getTexImage);
824 AssignGLEntryPoint(loadProcAddress("glGetTexLevelParameterfv"), &getTexLevelParameterfv);
825 AssignGLEntryPoint(loadProcAddress("glGetTexLevelParameteriv"), &getTexLevelParameteriv);
826 AssignGLEntryPoint(loadProcAddress("glGetTexParameterfv"), &getTexParameterfv);
827 AssignGLEntryPoint(loadProcAddress("glGetTexParameteriv"), &getTexParameteriv);
828 AssignGLEntryPoint(loadProcAddress("glHint"), &hint);
829 AssignGLEntryPoint(loadProcAddress("glIsEnabled"), &isEnabled);
830 AssignGLEntryPoint(loadProcAddress("glLineWidth"), &lineWidth);
831 AssignGLEntryPoint(loadProcAddress("glLogicOp"), &logicOp);
832 AssignGLEntryPoint(loadProcAddress("glPixelStoref"), &pixelStoref);
833 AssignGLEntryPoint(loadProcAddress("glPixelStorei"), &pixelStorei);
834 AssignGLEntryPoint(loadProcAddress("glPointSize"), &pointSize);
835 AssignGLEntryPoint(loadProcAddress("glPolygonMode"), &polygonMode);
836 AssignGLEntryPoint(loadProcAddress("glReadBuffer"), &readBuffer);
837 AssignGLEntryPoint(loadProcAddress("glReadPixels"), &readPixels);
838 AssignGLEntryPoint(loadProcAddress("glScissor"), &scissor);
839 AssignGLEntryPoint(loadProcAddress("glStencilFunc"), &stencilFunc);
840 AssignGLEntryPoint(loadProcAddress("glStencilMask"), &stencilMask);
841 AssignGLEntryPoint(loadProcAddress("glStencilOp"), &stencilOp);
842 AssignGLEntryPoint(loadProcAddress("glTexImage1D"), &texImage1D);
843 AssignGLEntryPoint(loadProcAddress("glTexImage2D"), &texImage2D);
844 AssignGLEntryPoint(loadProcAddress("glTexParameterf"), &texParameterf);
845 AssignGLEntryPoint(loadProcAddress("glTexParameterfv"), &texParameterfv);
846 AssignGLEntryPoint(loadProcAddress("glTexParameteri"), &texParameteri);
847 AssignGLEntryPoint(loadProcAddress("glTexParameteriv"), &texParameteriv);
848 AssignGLEntryPoint(loadProcAddress("glViewport"), &viewport);
849 }
850
851 // 1.1
Corentin Wallez92d77062015-05-04 12:41:54 -0400852 if (majorVersion > 1 || (majorVersion == 1 && minorVersion >= 1))
Geoff Lang56cf9af2015-02-17 10:16:49 -0500853 {
854 AssignGLEntryPoint(loadProcAddress("glBindTexture"), &bindTexture);
855 AssignGLEntryPoint(loadProcAddress("glCopyTexImage1D"), &copyTexImage1D);
856 AssignGLEntryPoint(loadProcAddress("glCopyTexImage2D"), &copyTexImage2D);
857 AssignGLEntryPoint(loadProcAddress("glCopyTexSubImage1D"), &copyTexSubImage1D);
858 AssignGLEntryPoint(loadProcAddress("glCopyTexSubImage2D"), &copyTexSubImage2D);
859 AssignGLEntryPoint(loadProcAddress("glDeleteTextures"), &deleteTextures);
860 AssignGLEntryPoint(loadProcAddress("glDrawArrays"), &drawArrays);
861 AssignGLEntryPoint(loadProcAddress("glDrawElements"), &drawElements);
862 AssignGLEntryPoint(loadProcAddress("glGenTextures"), &genTextures);
863 AssignGLEntryPoint(loadProcAddress("glIsTexture"), &isTexture);
864 AssignGLEntryPoint(loadProcAddress("glPolygonOffset"), &polygonOffset);
865 AssignGLEntryPoint(loadProcAddress("glTexSubImage1D"), &texSubImage1D);
866 AssignGLEntryPoint(loadProcAddress("glTexSubImage2D"), &texSubImage2D);
Geoff Langb80360f2015-05-04 15:01:31 -0400867
868 // Extensions
869 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glDebugMessageControl"), &debugMessageControl);
870 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glDebugMessageInsert"), &debugMessageInsert);
871 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glDebugMessageCallback"), &debugMessageCallback);
872 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glGetDebugMessageLog"), &getDebugMessageLog);
873 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glGetPointerv"), &getPointerv);
874 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glPushDebugGroup"), &pushDebugGroup);
875 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glPopDebugGroup"), &popDebugGroup);
876 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glObjectLabel"), &objectLabel);
877 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glGetObjectLabel"), &getObjectLabel);
878 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glObjectPtrLabel"), &objectPtrLabel);
879 AssignGLExtensionEntryPoint(extensions, "GL_KHR_debug", loadProcAddress("glGetObjectPtrLabel"), &getObjectPtrLabel);
Geoff Lang56cf9af2015-02-17 10:16:49 -0500880 }
881
882 // 1.2
Corentin Wallez92d77062015-05-04 12:41:54 -0400883 if (majorVersion > 1 || (majorVersion == 1 && minorVersion >= 2))
Geoff Lang56cf9af2015-02-17 10:16:49 -0500884 {
885 AssignGLEntryPoint(loadProcAddress("glBlendColor"), &blendColor);
886 AssignGLEntryPoint(loadProcAddress("glBlendEquation"), &blendEquation);
887 AssignGLEntryPoint(loadProcAddress("glCopyTexSubImage3D"), &copyTexSubImage3D);
888 AssignGLEntryPoint(loadProcAddress("glDrawRangeElements"), &drawRangeElements);
889 AssignGLEntryPoint(loadProcAddress("glTexImage3D"), &texImage3D);
890 AssignGLEntryPoint(loadProcAddress("glTexSubImage3D"), &texSubImage3D);
Geoff Langb11ad262015-04-09 14:43:34 -0400891
892 // Extensions
893 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glDeleteFencesNV"), &deleteFencesNV);
894 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glGenFencesNV"), &genFencesNV);
895 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glIsFenceNV"), &isFenceNV);
896 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glTestFenceNV"), &testFenceNV);
897 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glGetFenceivNV"), &getFenceivNV);
898 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glFinishFenceNV"), &finishFenceNV);
899 AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glSetFenceNV"), &setFenceNV);
Geoff Lang56cf9af2015-02-17 10:16:49 -0500900 }
901
902 // 1.3
Corentin Wallez92d77062015-05-04 12:41:54 -0400903 if (majorVersion > 1 || (majorVersion == 1 && minorVersion >= 3))
Geoff Lang56cf9af2015-02-17 10:16:49 -0500904 {
905 AssignGLEntryPoint(loadProcAddress("glActiveTexture"), &activeTexture);
906 AssignGLEntryPoint(loadProcAddress("glCompressedTexImage1D"), &compressedTexImage1D);
907 AssignGLEntryPoint(loadProcAddress("glCompressedTexImage2D"), &compressedTexImage2D);
908 AssignGLEntryPoint(loadProcAddress("glCompressedTexImage3D"), &compressedTexImage3D);
909 AssignGLEntryPoint(loadProcAddress("glCompressedTexSubImage1D"), &compressedTexSubImage1D);
910 AssignGLEntryPoint(loadProcAddress("glCompressedTexSubImage2D"), &compressedTexSubImage2D);
911 AssignGLEntryPoint(loadProcAddress("glCompressedTexSubImage3D"), &compressedTexSubImage3D);
912 AssignGLEntryPoint(loadProcAddress("glGetCompressedTexImage"), &getCompressedTexImage);
913 AssignGLEntryPoint(loadProcAddress("glSampleCoverage"), &sampleCoverage);
914 }
915
916 // 1.4
Corentin Wallez92d77062015-05-04 12:41:54 -0400917 if (majorVersion > 1 || (majorVersion == 1 && minorVersion >= 4))
Geoff Lang56cf9af2015-02-17 10:16:49 -0500918 {
919 AssignGLEntryPoint(loadProcAddress("glBlendFuncSeparate"), &blendFuncSeparate);
920 AssignGLEntryPoint(loadProcAddress("glMultiDrawArrays"), &multiDrawArrays);
921 AssignGLEntryPoint(loadProcAddress("glMultiDrawElements"), &multiDrawElements);
922 AssignGLEntryPoint(loadProcAddress("glPointParameterf"), &pointParameterf);
923 AssignGLEntryPoint(loadProcAddress("glPointParameterfv"), &pointParameterfv);
924 AssignGLEntryPoint(loadProcAddress("glPointParameteri"), &pointParameteri);
925 AssignGLEntryPoint(loadProcAddress("glPointParameteriv"), &pointParameteriv);
926 }
927
928 // 1.5
Corentin Wallez92d77062015-05-04 12:41:54 -0400929 if (majorVersion > 1 || (majorVersion == 1 && minorVersion >= 5))
Geoff Lang56cf9af2015-02-17 10:16:49 -0500930 {
931 AssignGLEntryPoint(loadProcAddress("glBeginQuery"), &beginQuery);
932 AssignGLEntryPoint(loadProcAddress("glBindBuffer"), &bindBuffer);
933 AssignGLEntryPoint(loadProcAddress("glBufferData"), &bufferData);
934 AssignGLEntryPoint(loadProcAddress("glBufferSubData"), &bufferSubData);
935 AssignGLEntryPoint(loadProcAddress("glDeleteBuffers"), &deleteBuffers);
936 AssignGLEntryPoint(loadProcAddress("glDeleteQueries"), &deleteQueries);
937 AssignGLEntryPoint(loadProcAddress("glEndQuery"), &endQuery);
938 AssignGLEntryPoint(loadProcAddress("glGenBuffers"), &genBuffers);
939 AssignGLEntryPoint(loadProcAddress("glGenQueries"), &genQueries);
940 AssignGLEntryPoint(loadProcAddress("glGetBufferParameteriv"), &getBufferParameteriv);
941 AssignGLEntryPoint(loadProcAddress("glGetBufferPointerv"), &getBufferPointerv);
942 AssignGLEntryPoint(loadProcAddress("glGetBufferSubData"), &getBufferSubData);
943 AssignGLEntryPoint(loadProcAddress("glGetQueryObjectiv"), &getQueryObjectiv);
944 AssignGLEntryPoint(loadProcAddress("glGetQueryObjectuiv"), &getQueryObjectuiv);
945 AssignGLEntryPoint(loadProcAddress("glGetQueryiv"), &getQueryiv);
946 AssignGLEntryPoint(loadProcAddress("glIsBuffer"), &isBuffer);
947 AssignGLEntryPoint(loadProcAddress("glIsQuery"), &isQuery);
948 AssignGLEntryPoint(loadProcAddress("glMapBuffer"), &mapBuffer);
949 AssignGLEntryPoint(loadProcAddress("glUnmapBuffer"), &unmapBuffer);
950 }
951
952 // 2.0
Corentin Wallez92d77062015-05-04 12:41:54 -0400953 if (majorVersion >= 2)
Geoff Lang56cf9af2015-02-17 10:16:49 -0500954 {
955 AssignGLEntryPoint(loadProcAddress("glAttachShader"), &attachShader);
956 AssignGLEntryPoint(loadProcAddress("glBindAttribLocation"), &bindAttribLocation);
957 AssignGLEntryPoint(loadProcAddress("glBlendEquationSeparate"), &blendEquationSeparate);
958 AssignGLEntryPoint(loadProcAddress("glCompileShader"), &compileShader);
959 AssignGLEntryPoint(loadProcAddress("glCreateProgram"), &createProgram);
960 AssignGLEntryPoint(loadProcAddress("glCreateShader"), &createShader);
961 AssignGLEntryPoint(loadProcAddress("glDeleteProgram"), &deleteProgram);
962 AssignGLEntryPoint(loadProcAddress("glDeleteShader"), &deleteShader);
963 AssignGLEntryPoint(loadProcAddress("glDetachShader"), &detachShader);
964 AssignGLEntryPoint(loadProcAddress("glDisableVertexAttribArray"), &disableVertexAttribArray);
965 AssignGLEntryPoint(loadProcAddress("glDrawBuffers"), &drawBuffers);
966 AssignGLEntryPoint(loadProcAddress("glEnableVertexAttribArray"), &enableVertexAttribArray);
967 AssignGLEntryPoint(loadProcAddress("glGetActiveAttrib"), &getActiveAttrib);
968 AssignGLEntryPoint(loadProcAddress("glGetActiveUniform"), &getActiveUniform);
969 AssignGLEntryPoint(loadProcAddress("glGetAttachedShaders"), &getAttachedShaders);
970 AssignGLEntryPoint(loadProcAddress("glGetAttribLocation"), &getAttribLocation);
971 AssignGLEntryPoint(loadProcAddress("glGetProgramInfoLog"), &getProgramInfoLog);
972 AssignGLEntryPoint(loadProcAddress("glGetProgramiv"), &getProgramiv);
973 AssignGLEntryPoint(loadProcAddress("glGetShaderInfoLog"), &getShaderInfoLog);
974 AssignGLEntryPoint(loadProcAddress("glGetShaderSource"), &getShaderSource);
975 AssignGLEntryPoint(loadProcAddress("glGetShaderiv"), &getShaderiv);
976 AssignGLEntryPoint(loadProcAddress("glGetUniformLocation"), &getUniformLocation);
977 AssignGLEntryPoint(loadProcAddress("glGetUniformfv"), &getUniformfv);
978 AssignGLEntryPoint(loadProcAddress("glGetUniformiv"), &getUniformiv);
979 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribPointerv"), &getVertexAttribPointerv);
980 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribdv"), &getVertexAttribdv);
981 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribfv"), &getVertexAttribfv);
982 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribiv"), &getVertexAttribiv);
983 AssignGLEntryPoint(loadProcAddress("glIsProgram"), &isProgram);
984 AssignGLEntryPoint(loadProcAddress("glIsShader"), &isShader);
985 AssignGLEntryPoint(loadProcAddress("glLinkProgram"), &linkProgram);
986 AssignGLEntryPoint(loadProcAddress("glShaderSource"), &shaderSource);
987 AssignGLEntryPoint(loadProcAddress("glStencilFuncSeparate"), &stencilFuncSeparate);
988 AssignGLEntryPoint(loadProcAddress("glStencilMaskSeparate"), &stencilMaskSeparate);
989 AssignGLEntryPoint(loadProcAddress("glStencilOpSeparate"), &stencilOpSeparate);
990 AssignGLEntryPoint(loadProcAddress("glUniform1f"), &uniform1f);
991 AssignGLEntryPoint(loadProcAddress("glUniform1fv"), &uniform1fv);
992 AssignGLEntryPoint(loadProcAddress("glUniform1i"), &uniform1i);
993 AssignGLEntryPoint(loadProcAddress("glUniform1iv"), &uniform1iv);
994 AssignGLEntryPoint(loadProcAddress("glUniform2f"), &uniform2f);
995 AssignGLEntryPoint(loadProcAddress("glUniform2fv"), &uniform2fv);
996 AssignGLEntryPoint(loadProcAddress("glUniform2i"), &uniform2i);
997 AssignGLEntryPoint(loadProcAddress("glUniform2iv"), &uniform2iv);
998 AssignGLEntryPoint(loadProcAddress("glUniform3f"), &uniform3f);
999 AssignGLEntryPoint(loadProcAddress("glUniform3fv"), &uniform3fv);
1000 AssignGLEntryPoint(loadProcAddress("glUniform3i"), &uniform3i);
1001 AssignGLEntryPoint(loadProcAddress("glUniform3iv"), &uniform3iv);
1002 AssignGLEntryPoint(loadProcAddress("glUniform4f"), &uniform4f);
1003 AssignGLEntryPoint(loadProcAddress("glUniform4fv"), &uniform4fv);
1004 AssignGLEntryPoint(loadProcAddress("glUniform4i"), &uniform4i);
1005 AssignGLEntryPoint(loadProcAddress("glUniform4iv"), &uniform4iv);
1006 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2fv"), &uniformMatrix2fv);
1007 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3fv"), &uniformMatrix3fv);
1008 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4fv"), &uniformMatrix4fv);
1009 AssignGLEntryPoint(loadProcAddress("glUseProgram"), &useProgram);
1010 AssignGLEntryPoint(loadProcAddress("glValidateProgram"), &validateProgram);
1011 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1d"), &vertexAttrib1d);
1012 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1dv"), &vertexAttrib1dv);
1013 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1f"), &vertexAttrib1f);
1014 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1fv"), &vertexAttrib1fv);
1015 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1s"), &vertexAttrib1s);
1016 AssignGLEntryPoint(loadProcAddress("glVertexAttrib1sv"), &vertexAttrib1sv);
1017 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2d"), &vertexAttrib2d);
1018 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2dv"), &vertexAttrib2dv);
1019 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2f"), &vertexAttrib2f);
1020 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2fv"), &vertexAttrib2fv);
1021 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2s"), &vertexAttrib2s);
1022 AssignGLEntryPoint(loadProcAddress("glVertexAttrib2sv"), &vertexAttrib2sv);
1023 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3d"), &vertexAttrib3d);
1024 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3dv"), &vertexAttrib3dv);
1025 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3f"), &vertexAttrib3f);
1026 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3fv"), &vertexAttrib3fv);
1027 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3s"), &vertexAttrib3s);
1028 AssignGLEntryPoint(loadProcAddress("glVertexAttrib3sv"), &vertexAttrib3sv);
1029 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nbv"), &vertexAttrib4Nbv);
1030 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Niv"), &vertexAttrib4Niv);
1031 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nsv"), &vertexAttrib4Nsv);
1032 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nub"), &vertexAttrib4Nub);
1033 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nubv"), &vertexAttrib4Nubv);
1034 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nuiv"), &vertexAttrib4Nuiv);
1035 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4Nusv"), &vertexAttrib4Nusv);
1036 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4bv"), &vertexAttrib4bv);
1037 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4d"), &vertexAttrib4d);
1038 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4dv"), &vertexAttrib4dv);
1039 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4f"), &vertexAttrib4f);
1040 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4fv"), &vertexAttrib4fv);
1041 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4iv"), &vertexAttrib4iv);
1042 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4s"), &vertexAttrib4s);
1043 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4sv"), &vertexAttrib4sv);
1044 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4ubv"), &vertexAttrib4ubv);
1045 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4uiv"), &vertexAttrib4uiv);
1046 AssignGLEntryPoint(loadProcAddress("glVertexAttrib4usv"), &vertexAttrib4usv);
1047 AssignGLEntryPoint(loadProcAddress("glVertexAttribPointer"), &vertexAttribPointer);
1048 }
1049
1050 // 2.1
Corentin Wallez92d77062015-05-04 12:41:54 -04001051 if (majorVersion > 2 || (majorVersion == 2 && minorVersion >= 1))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001052 {
1053 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2x3fv"), &uniformMatrix2x3fv);
1054 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2x4fv"), &uniformMatrix2x4fv);
1055 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3x2fv"), &uniformMatrix3x2fv);
1056 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3x4fv"), &uniformMatrix3x4fv);
1057 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4x2fv"), &uniformMatrix4x2fv);
1058 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4x3fv"), &uniformMatrix4x3fv);
1059 }
1060
1061 // 3.0
Corentin Wallez92d77062015-05-04 12:41:54 -04001062 if (majorVersion >= 3)
Geoff Lang56cf9af2015-02-17 10:16:49 -05001063 {
1064 AssignGLEntryPoint(loadProcAddress("glBeginConditionalRender"), &beginConditionalRender);
1065 AssignGLEntryPoint(loadProcAddress("glBeginTransformFeedback"), &beginTransformFeedback);
1066 AssignGLEntryPoint(loadProcAddress("glBindBufferBase"), &bindBufferBase);
1067 AssignGLEntryPoint(loadProcAddress("glBindBufferRange"), &bindBufferRange);
1068 AssignGLEntryPoint(loadProcAddress("glBindFragDataLocation"), &bindFragDataLocation);
1069 AssignGLEntryPoint(loadProcAddress("glBindFramebuffer"), &bindFramebuffer);
1070 AssignGLEntryPoint(loadProcAddress("glBindRenderbuffer"), &bindRenderbuffer);
1071 AssignGLEntryPoint(loadProcAddress("glBindVertexArray"), &bindVertexArray);
1072 AssignGLEntryPoint(loadProcAddress("glBlitFramebuffer"), &blitFramebuffer);
1073 AssignGLEntryPoint(loadProcAddress("glCheckFramebufferStatus"), &checkFramebufferStatus);
1074 AssignGLEntryPoint(loadProcAddress("glClampColor"), &clampColor);
1075 AssignGLEntryPoint(loadProcAddress("glClearBufferfi"), &clearBufferfi);
1076 AssignGLEntryPoint(loadProcAddress("glClearBufferfv"), &clearBufferfv);
1077 AssignGLEntryPoint(loadProcAddress("glClearBufferiv"), &clearBufferiv);
1078 AssignGLEntryPoint(loadProcAddress("glClearBufferuiv"), &clearBufferuiv);
1079 AssignGLEntryPoint(loadProcAddress("glColorMaski"), &colorMaski);
1080 AssignGLEntryPoint(loadProcAddress("glDeleteFramebuffers"), &deleteFramebuffers);
1081 AssignGLEntryPoint(loadProcAddress("glDeleteRenderbuffers"), &deleteRenderbuffers);
1082 AssignGLEntryPoint(loadProcAddress("glDeleteVertexArrays"), &deleteVertexArrays);
1083 AssignGLEntryPoint(loadProcAddress("glDisablei"), &disablei);
1084 AssignGLEntryPoint(loadProcAddress("glEnablei"), &enablei);
1085 AssignGLEntryPoint(loadProcAddress("glEndConditionalRender"), &endConditionalRender);
1086 AssignGLEntryPoint(loadProcAddress("glEndTransformFeedback"), &endTransformFeedback);
1087 AssignGLEntryPoint(loadProcAddress("glFlushMappedBufferRange"), &flushMappedBufferRange);
1088 AssignGLEntryPoint(loadProcAddress("glFramebufferRenderbuffer"), &framebufferRenderbuffer);
1089 AssignGLEntryPoint(loadProcAddress("glFramebufferTexture1D"), &framebufferTexture1D);
1090 AssignGLEntryPoint(loadProcAddress("glFramebufferTexture2D"), &framebufferTexture2D);
1091 AssignGLEntryPoint(loadProcAddress("glFramebufferTexture3D"), &framebufferTexture3D);
1092 AssignGLEntryPoint(loadProcAddress("glFramebufferTextureLayer"), &framebufferTextureLayer);
1093 AssignGLEntryPoint(loadProcAddress("glGenFramebuffers"), &genFramebuffers);
1094 AssignGLEntryPoint(loadProcAddress("glGenRenderbuffers"), &genRenderbuffers);
1095 AssignGLEntryPoint(loadProcAddress("glGenVertexArrays"), &genVertexArrays);
1096 AssignGLEntryPoint(loadProcAddress("glGenerateMipmap"), &generateMipmap);
1097 AssignGLEntryPoint(loadProcAddress("glGetBooleani_v"), &getBooleani_v);
1098 AssignGLEntryPoint(loadProcAddress("glGetFragDataLocation"), &getFragDataLocation);
1099 AssignGLEntryPoint(loadProcAddress("glGetFramebufferAttachmentParameteriv"), &getFramebufferAttachmentParameteriv);
1100 AssignGLEntryPoint(loadProcAddress("glGetIntegeri_v"), &getIntegeri_v);
1101 AssignGLEntryPoint(loadProcAddress("glGetRenderbufferParameteriv"), &getRenderbufferParameteriv);
1102 AssignGLEntryPoint(loadProcAddress("glGetStringi"), &getStringi);
1103 AssignGLEntryPoint(loadProcAddress("glGetTexParameterIiv"), &getTexParameterIiv);
1104 AssignGLEntryPoint(loadProcAddress("glGetTexParameterIuiv"), &getTexParameterIuiv);
1105 AssignGLEntryPoint(loadProcAddress("glGetTransformFeedbackVarying"), &getTransformFeedbackVarying);
1106 AssignGLEntryPoint(loadProcAddress("glGetUniformuiv"), &getUniformuiv);
1107 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribIiv"), &getVertexAttribIiv);
1108 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribIuiv"), &getVertexAttribIuiv);
1109 AssignGLEntryPoint(loadProcAddress("glIsEnabledi"), &isEnabledi);
1110 AssignGLEntryPoint(loadProcAddress("glIsFramebuffer"), &isFramebuffer);
1111 AssignGLEntryPoint(loadProcAddress("glIsRenderbuffer"), &isRenderbuffer);
1112 AssignGLEntryPoint(loadProcAddress("glIsVertexArray"), &isVertexArray);
1113 AssignGLEntryPoint(loadProcAddress("glMapBufferRange"), &mapBufferRange);
1114 AssignGLEntryPoint(loadProcAddress("glRenderbufferStorage"), &renderbufferStorage);
1115 AssignGLEntryPoint(loadProcAddress("glRenderbufferStorageMultisample"), &renderbufferStorageMultisample);
1116 AssignGLEntryPoint(loadProcAddress("glTexParameterIiv"), &texParameterIiv);
1117 AssignGLEntryPoint(loadProcAddress("glTexParameterIuiv"), &texParameterIuiv);
1118 AssignGLEntryPoint(loadProcAddress("glTransformFeedbackVaryings"), &transformFeedbackVaryings);
1119 AssignGLEntryPoint(loadProcAddress("glUniform1ui"), &uniform1ui);
1120 AssignGLEntryPoint(loadProcAddress("glUniform1uiv"), &uniform1uiv);
1121 AssignGLEntryPoint(loadProcAddress("glUniform2ui"), &uniform2ui);
1122 AssignGLEntryPoint(loadProcAddress("glUniform2uiv"), &uniform2uiv);
1123 AssignGLEntryPoint(loadProcAddress("glUniform3ui"), &uniform3ui);
1124 AssignGLEntryPoint(loadProcAddress("glUniform3uiv"), &uniform3uiv);
1125 AssignGLEntryPoint(loadProcAddress("glUniform4ui"), &uniform4ui);
1126 AssignGLEntryPoint(loadProcAddress("glUniform4uiv"), &uniform4uiv);
1127 AssignGLEntryPoint(loadProcAddress("glVertexAttribI1i"), &vertexAttribI1i);
1128 AssignGLEntryPoint(loadProcAddress("glVertexAttribI1iv"), &vertexAttribI1iv);
1129 AssignGLEntryPoint(loadProcAddress("glVertexAttribI1ui"), &vertexAttribI1ui);
1130 AssignGLEntryPoint(loadProcAddress("glVertexAttribI1uiv"), &vertexAttribI1uiv);
1131 AssignGLEntryPoint(loadProcAddress("glVertexAttribI2i"), &vertexAttribI2i);
1132 AssignGLEntryPoint(loadProcAddress("glVertexAttribI2iv"), &vertexAttribI2iv);
1133 AssignGLEntryPoint(loadProcAddress("glVertexAttribI2ui"), &vertexAttribI2ui);
1134 AssignGLEntryPoint(loadProcAddress("glVertexAttribI2uiv"), &vertexAttribI2uiv);
1135 AssignGLEntryPoint(loadProcAddress("glVertexAttribI3i"), &vertexAttribI3i);
1136 AssignGLEntryPoint(loadProcAddress("glVertexAttribI3iv"), &vertexAttribI3iv);
1137 AssignGLEntryPoint(loadProcAddress("glVertexAttribI3ui"), &vertexAttribI3ui);
1138 AssignGLEntryPoint(loadProcAddress("glVertexAttribI3uiv"), &vertexAttribI3uiv);
1139 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4bv"), &vertexAttribI4bv);
1140 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4i"), &vertexAttribI4i);
1141 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4iv"), &vertexAttribI4iv);
1142 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4sv"), &vertexAttribI4sv);
1143 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4ubv"), &vertexAttribI4ubv);
1144 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4ui"), &vertexAttribI4ui);
1145 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4uiv"), &vertexAttribI4uiv);
1146 AssignGLEntryPoint(loadProcAddress("glVertexAttribI4usv"), &vertexAttribI4usv);
1147 AssignGLEntryPoint(loadProcAddress("glVertexAttribIPointer"), &vertexAttribIPointer);
Geoff Langa4903b72015-03-02 16:02:48 -08001148
1149 // Extensions
1150 AssignGLExtensionEntryPoint(extensions, "GL_ARB_internalformat_query", loadProcAddress("glGetInternalformativ"), &getInternalformativ);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001151 }
1152
1153 // 3.1
Corentin Wallez92d77062015-05-04 12:41:54 -04001154 if (majorVersion > 3 || (majorVersion == 3 && minorVersion >= 1))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001155 {
1156 AssignGLEntryPoint(loadProcAddress("glCopyBufferSubData"), &copyBufferSubData);
1157 AssignGLEntryPoint(loadProcAddress("glDrawArraysInstanced"), &drawArraysInstanced);
1158 AssignGLEntryPoint(loadProcAddress("glDrawElementsInstanced"), &drawElementsInstanced);
1159 AssignGLEntryPoint(loadProcAddress("glGetActiveUniformBlockName"), &getActiveUniformBlockName);
1160 AssignGLEntryPoint(loadProcAddress("glGetActiveUniformBlockiv"), &getActiveUniformBlockiv);
1161 AssignGLEntryPoint(loadProcAddress("glGetActiveUniformName"), &getActiveUniformName);
1162 AssignGLEntryPoint(loadProcAddress("glGetActiveUniformsiv"), &getActiveUniformsiv);
1163 AssignGLEntryPoint(loadProcAddress("glGetUniformBlockIndex"), &getUniformBlockIndex);
1164 AssignGLEntryPoint(loadProcAddress("glGetUniformIndices"), &getUniformIndices);
1165 AssignGLEntryPoint(loadProcAddress("glPrimitiveRestartIndex"), &primitiveRestartIndex);
1166 AssignGLEntryPoint(loadProcAddress("glTexBuffer"), &texBuffer);
1167 AssignGLEntryPoint(loadProcAddress("glUniformBlockBinding"), &uniformBlockBinding);
Geoff Lang7d433dd2015-04-02 11:21:20 -04001168
1169 // Extensions
1170 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glClientWaitSync"), &clientWaitSync);
1171 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glDeleteSync"), &deleteSync);
1172 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glFenceSync"), &fenceSync);
1173 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glGetInteger64i_v"), &getInteger64i_v);
1174 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glGetInteger64v"), &getInteger64v);
1175 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glGetSynciv"), &getSynciv);
1176 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glIsSync"), &isSync);
1177 AssignGLExtensionEntryPoint(extensions, "GL_ARB_sync", loadProcAddress("glWaitSync"), &waitSync);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001178 }
1179
1180 // 3.2
Corentin Wallez92d77062015-05-04 12:41:54 -04001181 if (majorVersion > 3 || (majorVersion == 3 && minorVersion >= 2))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001182 {
1183 AssignGLEntryPoint(loadProcAddress("glClientWaitSync"), &clientWaitSync);
1184 AssignGLEntryPoint(loadProcAddress("glDeleteSync"), &deleteSync);
1185 AssignGLEntryPoint(loadProcAddress("glDrawElementsBaseVertex"), &drawElementsBaseVertex);
1186 AssignGLEntryPoint(loadProcAddress("glDrawElementsInstancedBaseVertex"), &drawElementsInstancedBaseVertex);
1187 AssignGLEntryPoint(loadProcAddress("glDrawRangeElementsBaseVertex"), &drawRangeElementsBaseVertex);
1188 AssignGLEntryPoint(loadProcAddress("glFenceSync"), &fenceSync);
1189 AssignGLEntryPoint(loadProcAddress("glFramebufferTexture"), &framebufferTexture);
1190 AssignGLEntryPoint(loadProcAddress("glGetBufferParameteri64v"), &getBufferParameteri64v);
1191 AssignGLEntryPoint(loadProcAddress("glGetInteger64i_v"), &getInteger64i_v);
1192 AssignGLEntryPoint(loadProcAddress("glGetInteger64v"), &getInteger64v);
1193 AssignGLEntryPoint(loadProcAddress("glGetMultisamplefv"), &getMultisamplefv);
1194 AssignGLEntryPoint(loadProcAddress("glGetSynciv"), &getSynciv);
1195 AssignGLEntryPoint(loadProcAddress("glIsSync"), &isSync);
1196 AssignGLEntryPoint(loadProcAddress("glMultiDrawElementsBaseVertex"), &multiDrawElementsBaseVertex);
1197 AssignGLEntryPoint(loadProcAddress("glProvokingVertex"), &provokingVertex);
1198 AssignGLEntryPoint(loadProcAddress("glSampleMaski"), &sampleMaski);
1199 AssignGLEntryPoint(loadProcAddress("glTexImage2DMultisample"), &texImage2DMultisample);
1200 AssignGLEntryPoint(loadProcAddress("glTexImage3DMultisample"), &texImage3DMultisample);
1201 AssignGLEntryPoint(loadProcAddress("glWaitSync"), &waitSync);
1202 }
1203
1204 // 3.3
Corentin Wallez92d77062015-05-04 12:41:54 -04001205 if (majorVersion > 3 || (majorVersion == 3 && minorVersion >= 3))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001206 {
1207 AssignGLEntryPoint(loadProcAddress("glBindFragDataLocationIndexed"), &bindFragDataLocationIndexed);
1208 AssignGLEntryPoint(loadProcAddress("glBindSampler"), &bindSampler);
1209 AssignGLEntryPoint(loadProcAddress("glDeleteSamplers"), &deleteSamplers);
1210 AssignGLEntryPoint(loadProcAddress("glGenSamplers"), &genSamplers);
1211 AssignGLEntryPoint(loadProcAddress("glGetFragDataIndex"), &getFragDataIndex);
1212 AssignGLEntryPoint(loadProcAddress("glGetQueryObjecti64v"), &getQueryObjecti64v);
1213 AssignGLEntryPoint(loadProcAddress("glGetQueryObjectui64v"), &getQueryObjectui64v);
1214 AssignGLEntryPoint(loadProcAddress("glGetSamplerParameterIiv"), &getSamplerParameterIiv);
1215 AssignGLEntryPoint(loadProcAddress("glGetSamplerParameterIuiv"), &getSamplerParameterIuiv);
1216 AssignGLEntryPoint(loadProcAddress("glGetSamplerParameterfv"), &getSamplerParameterfv);
1217 AssignGLEntryPoint(loadProcAddress("glGetSamplerParameteriv"), &getSamplerParameteriv);
1218 AssignGLEntryPoint(loadProcAddress("glIsSampler"), &isSampler);
1219 AssignGLEntryPoint(loadProcAddress("glQueryCounter"), &queryCounter);
1220 AssignGLEntryPoint(loadProcAddress("glSamplerParameterIiv"), &samplerParameterIiv);
1221 AssignGLEntryPoint(loadProcAddress("glSamplerParameterIuiv"), &samplerParameterIuiv);
1222 AssignGLEntryPoint(loadProcAddress("glSamplerParameterf"), &samplerParameterf);
1223 AssignGLEntryPoint(loadProcAddress("glSamplerParameterfv"), &samplerParameterfv);
1224 AssignGLEntryPoint(loadProcAddress("glSamplerParameteri"), &samplerParameteri);
1225 AssignGLEntryPoint(loadProcAddress("glSamplerParameteriv"), &samplerParameteriv);
1226 AssignGLEntryPoint(loadProcAddress("glVertexAttribDivisor"), &vertexAttribDivisor);
1227 AssignGLEntryPoint(loadProcAddress("glVertexAttribP1ui"), &vertexAttribP1ui);
1228 AssignGLEntryPoint(loadProcAddress("glVertexAttribP1uiv"), &vertexAttribP1uiv);
1229 AssignGLEntryPoint(loadProcAddress("glVertexAttribP2ui"), &vertexAttribP2ui);
1230 AssignGLEntryPoint(loadProcAddress("glVertexAttribP2uiv"), &vertexAttribP2uiv);
1231 AssignGLEntryPoint(loadProcAddress("glVertexAttribP3ui"), &vertexAttribP3ui);
1232 AssignGLEntryPoint(loadProcAddress("glVertexAttribP3uiv"), &vertexAttribP3uiv);
1233 AssignGLEntryPoint(loadProcAddress("glVertexAttribP4ui"), &vertexAttribP4ui);
1234 AssignGLEntryPoint(loadProcAddress("glVertexAttribP4uiv"), &vertexAttribP4uiv);
1235 }
1236
1237 // 4.0
Corentin Wallez92d77062015-05-04 12:41:54 -04001238 if (majorVersion >= 4)
Geoff Lang56cf9af2015-02-17 10:16:49 -05001239 {
1240 AssignGLEntryPoint(loadProcAddress("glBeginQueryIndexed"), &beginQueryIndexed);
1241 AssignGLEntryPoint(loadProcAddress("glBindTransformFeedback"), &bindTransformFeedback);
1242 AssignGLEntryPoint(loadProcAddress("glBlendEquationSeparatei"), &blendEquationSeparatei);
1243 AssignGLEntryPoint(loadProcAddress("glBlendEquationi"), &blendEquationi);
1244 AssignGLEntryPoint(loadProcAddress("glBlendFuncSeparatei"), &blendFuncSeparatei);
1245 AssignGLEntryPoint(loadProcAddress("glBlendFunci"), &blendFunci);
1246 AssignGLEntryPoint(loadProcAddress("glDeleteTransformFeedbacks"), &deleteTransformFeedbacks);
1247 AssignGLEntryPoint(loadProcAddress("glDrawArraysIndirect"), &drawArraysIndirect);
1248 AssignGLEntryPoint(loadProcAddress("glDrawElementsIndirect"), &drawElementsIndirect);
1249 AssignGLEntryPoint(loadProcAddress("glDrawTransformFeedback"), &drawTransformFeedback);
1250 AssignGLEntryPoint(loadProcAddress("glDrawTransformFeedbackStream"), &drawTransformFeedbackStream);
1251 AssignGLEntryPoint(loadProcAddress("glEndQueryIndexed"), &endQueryIndexed);
1252 AssignGLEntryPoint(loadProcAddress("glGenTransformFeedbacks"), &genTransformFeedbacks);
1253 AssignGLEntryPoint(loadProcAddress("glGetActiveSubroutineName"), &getActiveSubroutineName);
1254 AssignGLEntryPoint(loadProcAddress("glGetActiveSubroutineUniformName"), &getActiveSubroutineUniformName);
1255 AssignGLEntryPoint(loadProcAddress("glGetActiveSubroutineUniformiv"), &getActiveSubroutineUniformiv);
1256 AssignGLEntryPoint(loadProcAddress("glGetProgramStageiv"), &getProgramStageiv);
1257 AssignGLEntryPoint(loadProcAddress("glGetQueryIndexediv"), &getQueryIndexediv);
1258 AssignGLEntryPoint(loadProcAddress("glGetSubroutineIndex"), &getSubroutineIndex);
1259 AssignGLEntryPoint(loadProcAddress("glGetSubroutineUniformLocation"), &getSubroutineUniformLocation);
1260 AssignGLEntryPoint(loadProcAddress("glGetUniformSubroutineuiv"), &getUniformSubroutineuiv);
1261 AssignGLEntryPoint(loadProcAddress("glGetUniformdv"), &getUniformdv);
1262 AssignGLEntryPoint(loadProcAddress("glIsTransformFeedback"), &isTransformFeedback);
1263 AssignGLEntryPoint(loadProcAddress("glMinSampleShading"), &minSampleShading);
1264 AssignGLEntryPoint(loadProcAddress("glPatchParameterfv"), &patchParameterfv);
1265 AssignGLEntryPoint(loadProcAddress("glPatchParameteri"), &patchParameteri);
1266 AssignGLEntryPoint(loadProcAddress("glPauseTransformFeedback"), &pauseTransformFeedback);
1267 AssignGLEntryPoint(loadProcAddress("glResumeTransformFeedback"), &resumeTransformFeedback);
1268 AssignGLEntryPoint(loadProcAddress("glUniform1d"), &uniform1d);
1269 AssignGLEntryPoint(loadProcAddress("glUniform1dv"), &uniform1dv);
1270 AssignGLEntryPoint(loadProcAddress("glUniform2d"), &uniform2d);
1271 AssignGLEntryPoint(loadProcAddress("glUniform2dv"), &uniform2dv);
1272 AssignGLEntryPoint(loadProcAddress("glUniform3d"), &uniform3d);
1273 AssignGLEntryPoint(loadProcAddress("glUniform3dv"), &uniform3dv);
1274 AssignGLEntryPoint(loadProcAddress("glUniform4d"), &uniform4d);
1275 AssignGLEntryPoint(loadProcAddress("glUniform4dv"), &uniform4dv);
1276 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2dv"), &uniformMatrix2dv);
1277 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2x3dv"), &uniformMatrix2x3dv);
1278 AssignGLEntryPoint(loadProcAddress("glUniformMatrix2x4dv"), &uniformMatrix2x4dv);
1279 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3dv"), &uniformMatrix3dv);
1280 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3x2dv"), &uniformMatrix3x2dv);
1281 AssignGLEntryPoint(loadProcAddress("glUniformMatrix3x4dv"), &uniformMatrix3x4dv);
1282 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4dv"), &uniformMatrix4dv);
1283 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4x2dv"), &uniformMatrix4x2dv);
1284 AssignGLEntryPoint(loadProcAddress("glUniformMatrix4x3dv"), &uniformMatrix4x3dv);
1285 AssignGLEntryPoint(loadProcAddress("glUniformSubroutinesuiv"), &uniformSubroutinesuiv);
1286 }
1287
Corentin Wallez92d77062015-05-04 12:41:54 -04001288 // 4.1
1289 if (majorVersion > 4 || (majorVersion == 4 && minorVersion >= 1))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001290 {
1291 AssignGLEntryPoint(loadProcAddress("glActiveShaderProgram"), &activeShaderProgram);
1292 AssignGLEntryPoint(loadProcAddress("glBindProgramPipeline"), &bindProgramPipeline);
1293 AssignGLEntryPoint(loadProcAddress("glClearDepthf"), &clearDepthf);
1294 AssignGLEntryPoint(loadProcAddress("glCreateShaderProgramv"), &createShaderProgramv);
1295 AssignGLEntryPoint(loadProcAddress("glDeleteProgramPipelines"), &deleteProgramPipelines);
1296 AssignGLEntryPoint(loadProcAddress("glDepthRangeArrayv"), &depthRangeArrayv);
1297 AssignGLEntryPoint(loadProcAddress("glDepthRangeIndexed"), &depthRangeIndexed);
1298 AssignGLEntryPoint(loadProcAddress("glDepthRangef"), &depthRangef);
1299 AssignGLEntryPoint(loadProcAddress("glGenProgramPipelines"), &genProgramPipelines);
1300 AssignGLEntryPoint(loadProcAddress("glGetDoublei_v"), &getDoublei_v);
1301 AssignGLEntryPoint(loadProcAddress("glGetFloati_v"), &getFloati_v);
1302 AssignGLEntryPoint(loadProcAddress("glGetProgramBinary"), &getProgramBinary);
1303 AssignGLEntryPoint(loadProcAddress("glGetProgramPipelineInfoLog"), &getProgramPipelineInfoLog);
1304 AssignGLEntryPoint(loadProcAddress("glGetProgramPipelineiv"), &getProgramPipelineiv);
1305 AssignGLEntryPoint(loadProcAddress("glGetShaderPrecisionFormat"), &getShaderPrecisionFormat);
1306 AssignGLEntryPoint(loadProcAddress("glGetVertexAttribLdv"), &getVertexAttribLdv);
1307 AssignGLEntryPoint(loadProcAddress("glIsProgramPipeline"), &isProgramPipeline);
1308 AssignGLEntryPoint(loadProcAddress("glProgramBinary"), &programBinary);
1309 AssignGLEntryPoint(loadProcAddress("glProgramParameteri"), &programParameteri);
1310 AssignGLEntryPoint(loadProcAddress("glProgramUniform1d"), &programUniform1d);
1311 AssignGLEntryPoint(loadProcAddress("glProgramUniform1dv"), &programUniform1dv);
1312 AssignGLEntryPoint(loadProcAddress("glProgramUniform1f"), &programUniform1f);
1313 AssignGLEntryPoint(loadProcAddress("glProgramUniform1fv"), &programUniform1fv);
1314 AssignGLEntryPoint(loadProcAddress("glProgramUniform1i"), &programUniform1i);
1315 AssignGLEntryPoint(loadProcAddress("glProgramUniform1iv"), &programUniform1iv);
1316 AssignGLEntryPoint(loadProcAddress("glProgramUniform1ui"), &programUniform1ui);
1317 AssignGLEntryPoint(loadProcAddress("glProgramUniform1uiv"), &programUniform1uiv);
1318 AssignGLEntryPoint(loadProcAddress("glProgramUniform2d"), &programUniform2d);
1319 AssignGLEntryPoint(loadProcAddress("glProgramUniform2dv"), &programUniform2dv);
1320 AssignGLEntryPoint(loadProcAddress("glProgramUniform2f"), &programUniform2f);
1321 AssignGLEntryPoint(loadProcAddress("glProgramUniform2fv"), &programUniform2fv);
1322 AssignGLEntryPoint(loadProcAddress("glProgramUniform2i"), &programUniform2i);
1323 AssignGLEntryPoint(loadProcAddress("glProgramUniform2iv"), &programUniform2iv);
1324 AssignGLEntryPoint(loadProcAddress("glProgramUniform2ui"), &programUniform2ui);
1325 AssignGLEntryPoint(loadProcAddress("glProgramUniform2uiv"), &programUniform2uiv);
1326 AssignGLEntryPoint(loadProcAddress("glProgramUniform3d"), &programUniform3d);
1327 AssignGLEntryPoint(loadProcAddress("glProgramUniform3dv"), &programUniform3dv);
1328 AssignGLEntryPoint(loadProcAddress("glProgramUniform3f"), &programUniform3f);
1329 AssignGLEntryPoint(loadProcAddress("glProgramUniform3fv"), &programUniform3fv);
1330 AssignGLEntryPoint(loadProcAddress("glProgramUniform3i"), &programUniform3i);
1331 AssignGLEntryPoint(loadProcAddress("glProgramUniform3iv"), &programUniform3iv);
1332 AssignGLEntryPoint(loadProcAddress("glProgramUniform3ui"), &programUniform3ui);
1333 AssignGLEntryPoint(loadProcAddress("glProgramUniform3uiv"), &programUniform3uiv);
1334 AssignGLEntryPoint(loadProcAddress("glProgramUniform4d"), &programUniform4d);
1335 AssignGLEntryPoint(loadProcAddress("glProgramUniform4dv"), &programUniform4dv);
1336 AssignGLEntryPoint(loadProcAddress("glProgramUniform4f"), &programUniform4f);
1337 AssignGLEntryPoint(loadProcAddress("glProgramUniform4fv"), &programUniform4fv);
1338 AssignGLEntryPoint(loadProcAddress("glProgramUniform4i"), &programUniform4i);
1339 AssignGLEntryPoint(loadProcAddress("glProgramUniform4iv"), &programUniform4iv);
1340 AssignGLEntryPoint(loadProcAddress("glProgramUniform4ui"), &programUniform4ui);
1341 AssignGLEntryPoint(loadProcAddress("glProgramUniform4uiv"), &programUniform4uiv);
1342 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2dv"), &programUniformMatrix2dv);
1343 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2fv"), &programUniformMatrix2fv);
1344 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2x3dv"), &programUniformMatrix2x3dv);
1345 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2x3fv"), &programUniformMatrix2x3fv);
1346 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2x4dv"), &programUniformMatrix2x4dv);
1347 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix2x4fv"), &programUniformMatrix2x4fv);
1348 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3dv"), &programUniformMatrix3dv);
1349 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3fv"), &programUniformMatrix3fv);
1350 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3x2dv"), &programUniformMatrix3x2dv);
1351 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3x2fv"), &programUniformMatrix3x2fv);
1352 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3x4dv"), &programUniformMatrix3x4dv);
1353 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix3x4fv"), &programUniformMatrix3x4fv);
1354 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4dv"), &programUniformMatrix4dv);
1355 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4fv"), &programUniformMatrix4fv);
1356 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4x2dv"), &programUniformMatrix4x2dv);
1357 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4x2fv"), &programUniformMatrix4x2fv);
1358 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4x3dv"), &programUniformMatrix4x3dv);
1359 AssignGLEntryPoint(loadProcAddress("glProgramUniformMatrix4x3fv"), &programUniformMatrix4x3fv);
1360 AssignGLEntryPoint(loadProcAddress("glReleaseShaderCompiler"), &releaseShaderCompiler);
1361 AssignGLEntryPoint(loadProcAddress("glScissorArrayv"), &scissorArrayv);
1362 AssignGLEntryPoint(loadProcAddress("glScissorIndexed"), &scissorIndexed);
1363 AssignGLEntryPoint(loadProcAddress("glScissorIndexedv"), &scissorIndexedv);
1364 AssignGLEntryPoint(loadProcAddress("glShaderBinary"), &shaderBinary);
1365 AssignGLEntryPoint(loadProcAddress("glUseProgramStages"), &useProgramStages);
1366 AssignGLEntryPoint(loadProcAddress("glValidateProgramPipeline"), &validateProgramPipeline);
1367 AssignGLEntryPoint(loadProcAddress("glVertexAttribL1d"), &vertexAttribL1d);
1368 AssignGLEntryPoint(loadProcAddress("glVertexAttribL1dv"), &vertexAttribL1dv);
1369 AssignGLEntryPoint(loadProcAddress("glVertexAttribL2d"), &vertexAttribL2d);
1370 AssignGLEntryPoint(loadProcAddress("glVertexAttribL2dv"), &vertexAttribL2dv);
1371 AssignGLEntryPoint(loadProcAddress("glVertexAttribL3d"), &vertexAttribL3d);
1372 AssignGLEntryPoint(loadProcAddress("glVertexAttribL3dv"), &vertexAttribL3dv);
1373 AssignGLEntryPoint(loadProcAddress("glVertexAttribL4d"), &vertexAttribL4d);
1374 AssignGLEntryPoint(loadProcAddress("glVertexAttribL4dv"), &vertexAttribL4dv);
1375 AssignGLEntryPoint(loadProcAddress("glVertexAttribLPointer"), &vertexAttribLPointer);
1376 AssignGLEntryPoint(loadProcAddress("glViewportArrayv"), &viewportArrayv);
1377 AssignGLEntryPoint(loadProcAddress("glViewportIndexedf"), &viewportIndexedf);
1378 AssignGLEntryPoint(loadProcAddress("glViewportIndexedfv"), &viewportIndexedfv);
1379 }
1380
1381 // 4.2
Corentin Wallez92d77062015-05-04 12:41:54 -04001382 if (majorVersion > 4 || (majorVersion == 4 && minorVersion >= 2))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001383 {
1384 AssignGLEntryPoint(loadProcAddress("glBindImageTexture"), &bindImageTexture);
1385 AssignGLEntryPoint(loadProcAddress("glDrawArraysInstancedBaseInstance"), &drawArraysInstancedBaseInstance);
1386 AssignGLEntryPoint(loadProcAddress("glDrawElementsInstancedBaseInstance"), &drawElementsInstancedBaseInstance);
1387 AssignGLEntryPoint(loadProcAddress("glDrawElementsInstancedBaseVertexBaseInstance"), &drawElementsInstancedBaseVertexBaseInstance);
1388 AssignGLEntryPoint(loadProcAddress("glDrawTransformFeedbackInstanced"), &drawTransformFeedbackInstanced);
1389 AssignGLEntryPoint(loadProcAddress("glDrawTransformFeedbackStreamInstanced"), &drawTransformFeedbackStreamInstanced);
1390 AssignGLEntryPoint(loadProcAddress("glGetActiveAtomicCounterBufferiv"), &getActiveAtomicCounterBufferiv);
1391 AssignGLEntryPoint(loadProcAddress("glGetInternalformativ"), &getInternalformativ);
1392 AssignGLEntryPoint(loadProcAddress("glMemoryBarrier"), &memoryBarrier);
1393 AssignGLEntryPoint(loadProcAddress("glTexStorage1D"), &texStorage1D);
1394 AssignGLEntryPoint(loadProcAddress("glTexStorage2D"), &texStorage2D);
1395 AssignGLEntryPoint(loadProcAddress("glTexStorage3D"), &texStorage3D);
1396 }
1397
1398 // 4.3
Corentin Wallez92d77062015-05-04 12:41:54 -04001399 if (majorVersion > 4 || (majorVersion == 4 && minorVersion >= 3))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001400 {
1401 AssignGLEntryPoint(loadProcAddress("glBindVertexBuffer"), &bindVertexBuffer);
1402 AssignGLEntryPoint(loadProcAddress("glClearBufferData"), &clearBufferData);
1403 AssignGLEntryPoint(loadProcAddress("glClearBufferSubData"), &clearBufferSubData);
1404 AssignGLEntryPoint(loadProcAddress("glCopyImageSubData"), &copyImageSubData);
1405 AssignGLEntryPoint(loadProcAddress("glDebugMessageCallback"), &debugMessageCallback);
1406 AssignGLEntryPoint(loadProcAddress("glDebugMessageControl"), &debugMessageControl);
1407 AssignGLEntryPoint(loadProcAddress("glDebugMessageInsert"), &debugMessageInsert);
1408 AssignGLEntryPoint(loadProcAddress("glDispatchCompute"), &dispatchCompute);
1409 AssignGLEntryPoint(loadProcAddress("glDispatchComputeIndirect"), &dispatchComputeIndirect);
1410 AssignGLEntryPoint(loadProcAddress("glFramebufferParameteri"), &framebufferParameteri);
1411 AssignGLEntryPoint(loadProcAddress("glGetDebugMessageLog"), &getDebugMessageLog);
1412 AssignGLEntryPoint(loadProcAddress("glGetFramebufferParameteriv"), &getFramebufferParameteriv);
1413 AssignGLEntryPoint(loadProcAddress("glGetInternalformati64v"), &getInternalformati64v);
Geoff Langb80360f2015-05-04 15:01:31 -04001414 AssignGLEntryPoint(loadProcAddress("glGetPointerv"), &getPointerv);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001415 AssignGLEntryPoint(loadProcAddress("glGetObjectLabel"), &getObjectLabel);
1416 AssignGLEntryPoint(loadProcAddress("glGetObjectPtrLabel"), &getObjectPtrLabel);
1417 AssignGLEntryPoint(loadProcAddress("glGetProgramInterfaceiv"), &getProgramInterfaceiv);
1418 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceIndex"), &getProgramResourceIndex);
1419 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceLocation"), &getProgramResourceLocation);
1420 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceLocationIndex"), &getProgramResourceLocationIndex);
1421 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceName"), &getProgramResourceName);
1422 AssignGLEntryPoint(loadProcAddress("glGetProgramResourceiv"), &getProgramResourceiv);
1423 AssignGLEntryPoint(loadProcAddress("glInvalidateBufferData"), &invalidateBufferData);
1424 AssignGLEntryPoint(loadProcAddress("glInvalidateBufferSubData"), &invalidateBufferSubData);
1425 AssignGLEntryPoint(loadProcAddress("glInvalidateFramebuffer"), &invalidateFramebuffer);
1426 AssignGLEntryPoint(loadProcAddress("glInvalidateSubFramebuffer"), &invalidateSubFramebuffer);
1427 AssignGLEntryPoint(loadProcAddress("glInvalidateTexImage"), &invalidateTexImage);
1428 AssignGLEntryPoint(loadProcAddress("glInvalidateTexSubImage"), &invalidateTexSubImage);
1429 AssignGLEntryPoint(loadProcAddress("glMultiDrawArraysIndirect"), &multiDrawArraysIndirect);
1430 AssignGLEntryPoint(loadProcAddress("glMultiDrawElementsIndirect"), &multiDrawElementsIndirect);
1431 AssignGLEntryPoint(loadProcAddress("glObjectLabel"), &objectLabel);
1432 AssignGLEntryPoint(loadProcAddress("glObjectPtrLabel"), &objectPtrLabel);
1433 AssignGLEntryPoint(loadProcAddress("glPopDebugGroup"), &popDebugGroup);
1434 AssignGLEntryPoint(loadProcAddress("glPushDebugGroup"), &pushDebugGroup);
1435 AssignGLEntryPoint(loadProcAddress("glShaderStorageBlockBinding"), &shaderStorageBlockBinding);
1436 AssignGLEntryPoint(loadProcAddress("glTexBufferRange"), &texBufferRange);
1437 AssignGLEntryPoint(loadProcAddress("glTexStorage2DMultisample"), &texStorage2DMultisample);
1438 AssignGLEntryPoint(loadProcAddress("glTexStorage3DMultisample"), &texStorage3DMultisample);
1439 AssignGLEntryPoint(loadProcAddress("glTextureView"), &textureView);
1440 AssignGLEntryPoint(loadProcAddress("glVertexAttribBinding"), &vertexAttribBinding);
1441 AssignGLEntryPoint(loadProcAddress("glVertexAttribFormat"), &vertexAttribFormat);
1442 AssignGLEntryPoint(loadProcAddress("glVertexAttribIFormat"), &vertexAttribIFormat);
1443 AssignGLEntryPoint(loadProcAddress("glVertexAttribLFormat"), &vertexAttribLFormat);
1444 AssignGLEntryPoint(loadProcAddress("glVertexBindingDivisor"), &vertexBindingDivisor);
1445 }
1446
1447 // 4.4
Corentin Wallez92d77062015-05-04 12:41:54 -04001448 if (majorVersion > 4 || (majorVersion == 4 && minorVersion >= 4))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001449 {
1450 AssignGLEntryPoint(loadProcAddress("glBindBuffersBase"), &bindBuffersBase);
1451 AssignGLEntryPoint(loadProcAddress("glBindBuffersRange"), &bindBuffersRange);
1452 AssignGLEntryPoint(loadProcAddress("glBindImageTextures"), &bindImageTextures);
1453 AssignGLEntryPoint(loadProcAddress("glBindSamplers"), &bindSamplers);
1454 AssignGLEntryPoint(loadProcAddress("glBindTextures"), &bindTextures);
1455 AssignGLEntryPoint(loadProcAddress("glBindVertexBuffers"), &bindVertexBuffers);
1456 AssignGLEntryPoint(loadProcAddress("glBufferStorage"), &bufferStorage);
1457 AssignGLEntryPoint(loadProcAddress("glClearTexImage"), &clearTexImage);
1458 AssignGLEntryPoint(loadProcAddress("glClearTexSubImage"), &clearTexSubImage);
1459 }
1460
1461 // 4.5
Corentin Wallez92d77062015-05-04 12:41:54 -04001462 if (majorVersion > 4 || (majorVersion == 4 && minorVersion >= 5))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001463 {
1464 AssignGLEntryPoint(loadProcAddress("glBindTextureUnit"), &bindTextureUnit);
1465 AssignGLEntryPoint(loadProcAddress("glBlitNamedFramebuffer"), &blitNamedFramebuffer);
1466 AssignGLEntryPoint(loadProcAddress("glCheckNamedFramebufferStatus"), &checkNamedFramebufferStatus);
1467 AssignGLEntryPoint(loadProcAddress("glClearNamedBufferData"), &clearNamedBufferData);
1468 AssignGLEntryPoint(loadProcAddress("glClearNamedBufferSubData"), &clearNamedBufferSubData);
1469 AssignGLEntryPoint(loadProcAddress("glClearNamedFramebufferfi"), &clearNamedFramebufferfi);
1470 AssignGLEntryPoint(loadProcAddress("glClearNamedFramebufferfv"), &clearNamedFramebufferfv);
1471 AssignGLEntryPoint(loadProcAddress("glClearNamedFramebufferiv"), &clearNamedFramebufferiv);
1472 AssignGLEntryPoint(loadProcAddress("glClearNamedFramebufferuiv"), &clearNamedFramebufferuiv);
1473 AssignGLEntryPoint(loadProcAddress("glClipControl"), &clipControl);
1474 AssignGLEntryPoint(loadProcAddress("glCompressedTextureSubImage1D"), &compressedTextureSubImage1D);
1475 AssignGLEntryPoint(loadProcAddress("glCompressedTextureSubImage2D"), &compressedTextureSubImage2D);
1476 AssignGLEntryPoint(loadProcAddress("glCompressedTextureSubImage3D"), &compressedTextureSubImage3D);
1477 AssignGLEntryPoint(loadProcAddress("glCopyNamedBufferSubData"), &copyNamedBufferSubData);
1478 AssignGLEntryPoint(loadProcAddress("glCopyTextureSubImage1D"), &copyTextureSubImage1D);
1479 AssignGLEntryPoint(loadProcAddress("glCopyTextureSubImage2D"), &copyTextureSubImage2D);
1480 AssignGLEntryPoint(loadProcAddress("glCopyTextureSubImage3D"), &copyTextureSubImage3D);
1481 AssignGLEntryPoint(loadProcAddress("glCreateBuffers"), &createBuffers);
1482 AssignGLEntryPoint(loadProcAddress("glCreateFramebuffers"), &createFramebuffers);
1483 AssignGLEntryPoint(loadProcAddress("glCreateProgramPipelines"), &createProgramPipelines);
1484 AssignGLEntryPoint(loadProcAddress("glCreateQueries"), &createQueries);
1485 AssignGLEntryPoint(loadProcAddress("glCreateRenderbuffers"), &createRenderbuffers);
1486 AssignGLEntryPoint(loadProcAddress("glCreateSamplers"), &createSamplers);
1487 AssignGLEntryPoint(loadProcAddress("glCreateTextures"), &createTextures);
1488 AssignGLEntryPoint(loadProcAddress("glCreateTransformFeedbacks"), &createTransformFeedbacks);
1489 AssignGLEntryPoint(loadProcAddress("glCreateVertexArrays"), &createVertexArrays);
1490 AssignGLEntryPoint(loadProcAddress("glDisableVertexArrayAttrib"), &disableVertexArrayAttrib);
1491 AssignGLEntryPoint(loadProcAddress("glEnableVertexArrayAttrib"), &enableVertexArrayAttrib);
1492 AssignGLEntryPoint(loadProcAddress("glFlushMappedNamedBufferRange"), &flushMappedNamedBufferRange);
1493 AssignGLEntryPoint(loadProcAddress("glGenerateTextureMipmap"), &generateTextureMipmap);
1494 AssignGLEntryPoint(loadProcAddress("glGetCompressedTextureImage"), &getCompressedTextureImage);
1495 AssignGLEntryPoint(loadProcAddress("glGetCompressedTextureSubImage"), &getCompressedTextureSubImage);
1496 AssignGLEntryPoint(loadProcAddress("glGetGraphicsResetStatus"), &getGraphicsResetStatus);
1497 AssignGLEntryPoint(loadProcAddress("glGetNamedBufferParameteri64v"), &getNamedBufferParameteri64v);
1498 AssignGLEntryPoint(loadProcAddress("glGetNamedBufferParameteriv"), &getNamedBufferParameteriv);
1499 AssignGLEntryPoint(loadProcAddress("glGetNamedBufferPointerv"), &getNamedBufferPointerv);
1500 AssignGLEntryPoint(loadProcAddress("glGetNamedBufferSubData"), &getNamedBufferSubData);
1501 AssignGLEntryPoint(loadProcAddress("glGetNamedFramebufferAttachmentParameteriv"), &getNamedFramebufferAttachmentParameteriv);
1502 AssignGLEntryPoint(loadProcAddress("glGetNamedFramebufferParameteriv"), &getNamedFramebufferParameteriv);
1503 AssignGLEntryPoint(loadProcAddress("glGetNamedRenderbufferParameteriv"), &getNamedRenderbufferParameteriv);
1504 AssignGLEntryPoint(loadProcAddress("glGetQueryBufferObjecti64v"), &getQueryBufferObjecti64v);
1505 AssignGLEntryPoint(loadProcAddress("glGetQueryBufferObjectiv"), &getQueryBufferObjectiv);
1506 AssignGLEntryPoint(loadProcAddress("glGetQueryBufferObjectui64v"), &getQueryBufferObjectui64v);
1507 AssignGLEntryPoint(loadProcAddress("glGetQueryBufferObjectuiv"), &getQueryBufferObjectuiv);
1508 AssignGLEntryPoint(loadProcAddress("glGetTextureImage"), &getTextureImage);
1509 AssignGLEntryPoint(loadProcAddress("glGetTextureLevelParameterfv"), &getTextureLevelParameterfv);
1510 AssignGLEntryPoint(loadProcAddress("glGetTextureLevelParameteriv"), &getTextureLevelParameteriv);
1511 AssignGLEntryPoint(loadProcAddress("glGetTextureParameterIiv"), &getTextureParameterIiv);
1512 AssignGLEntryPoint(loadProcAddress("glGetTextureParameterIuiv"), &getTextureParameterIuiv);
1513 AssignGLEntryPoint(loadProcAddress("glGetTextureParameterfv"), &getTextureParameterfv);
1514 AssignGLEntryPoint(loadProcAddress("glGetTextureParameteriv"), &getTextureParameteriv);
1515 AssignGLEntryPoint(loadProcAddress("glGetTextureSubImage"), &getTextureSubImage);
1516 AssignGLEntryPoint(loadProcAddress("glGetTransformFeedbacki64_v"), &getTransformFeedbacki64_v);
1517 AssignGLEntryPoint(loadProcAddress("glGetTransformFeedbacki_v"), &getTransformFeedbacki_v);
1518 AssignGLEntryPoint(loadProcAddress("glGetTransformFeedbackiv"), &getTransformFeedbackiv);
1519 AssignGLEntryPoint(loadProcAddress("glGetVertexArrayIndexed64iv"), &getVertexArrayIndexed64iv);
1520 AssignGLEntryPoint(loadProcAddress("glGetVertexArrayIndexediv"), &getVertexArrayIndexediv);
1521 AssignGLEntryPoint(loadProcAddress("glGetVertexArrayiv"), &getVertexArrayiv);
1522 AssignGLEntryPoint(loadProcAddress("glGetnCompressedTexImage"), &getnCompressedTexImage);
1523 AssignGLEntryPoint(loadProcAddress("glGetnTexImage"), &getnTexImage);
1524 AssignGLEntryPoint(loadProcAddress("glGetnUniformdv"), &getnUniformdv);
1525 AssignGLEntryPoint(loadProcAddress("glGetnUniformfv"), &getnUniformfv);
1526 AssignGLEntryPoint(loadProcAddress("glGetnUniformiv"), &getnUniformiv);
1527 AssignGLEntryPoint(loadProcAddress("glGetnUniformuiv"), &getnUniformuiv);
1528 AssignGLEntryPoint(loadProcAddress("glInvalidateNamedFramebufferData"), &invalidateNamedFramebufferData);
1529 AssignGLEntryPoint(loadProcAddress("glInvalidateNamedFramebufferSubData"), &invalidateNamedFramebufferSubData);
1530 AssignGLEntryPoint(loadProcAddress("glMapNamedBuffer"), &mapNamedBuffer);
1531 AssignGLEntryPoint(loadProcAddress("glMapNamedBufferRange"), &mapNamedBufferRange);
1532 AssignGLEntryPoint(loadProcAddress("glMemoryBarrierByRegion"), &memoryBarrierByRegion);
1533 AssignGLEntryPoint(loadProcAddress("glNamedBufferData"), &namedBufferData);
1534 AssignGLEntryPoint(loadProcAddress("glNamedBufferStorage"), &namedBufferStorage);
1535 AssignGLEntryPoint(loadProcAddress("glNamedBufferSubData"), &namedBufferSubData);
1536 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferDrawBuffer"), &namedFramebufferDrawBuffer);
1537 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferDrawBuffers"), &namedFramebufferDrawBuffers);
1538 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferParameteri"), &namedFramebufferParameteri);
1539 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferReadBuffer"), &namedFramebufferReadBuffer);
1540 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferRenderbuffer"), &namedFramebufferRenderbuffer);
1541 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferTexture"), &namedFramebufferTexture);
1542 AssignGLEntryPoint(loadProcAddress("glNamedFramebufferTextureLayer"), &namedFramebufferTextureLayer);
1543 AssignGLEntryPoint(loadProcAddress("glNamedRenderbufferStorage"), &namedRenderbufferStorage);
1544 AssignGLEntryPoint(loadProcAddress("glNamedRenderbufferStorageMultisample"), &namedRenderbufferStorageMultisample);
1545 AssignGLEntryPoint(loadProcAddress("glReadnPixels"), &readnPixels);
1546 AssignGLEntryPoint(loadProcAddress("glTextureBarrier"), &textureBarrier);
1547 AssignGLEntryPoint(loadProcAddress("glTextureBuffer"), &textureBuffer);
1548 AssignGLEntryPoint(loadProcAddress("glTextureBufferRange"), &textureBufferRange);
1549 AssignGLEntryPoint(loadProcAddress("glTextureParameterIiv"), &textureParameterIiv);
1550 AssignGLEntryPoint(loadProcAddress("glTextureParameterIuiv"), &textureParameterIuiv);
1551 AssignGLEntryPoint(loadProcAddress("glTextureParameterf"), &textureParameterf);
1552 AssignGLEntryPoint(loadProcAddress("glTextureParameterfv"), &textureParameterfv);
1553 AssignGLEntryPoint(loadProcAddress("glTextureParameteri"), &textureParameteri);
1554 AssignGLEntryPoint(loadProcAddress("glTextureParameteriv"), &textureParameteriv);
1555 AssignGLEntryPoint(loadProcAddress("glTextureStorage1D"), &textureStorage1D);
1556 AssignGLEntryPoint(loadProcAddress("glTextureStorage2D"), &textureStorage2D);
1557 AssignGLEntryPoint(loadProcAddress("glTextureStorage2DMultisample"), &textureStorage2DMultisample);
1558 AssignGLEntryPoint(loadProcAddress("glTextureStorage3D"), &textureStorage3D);
1559 AssignGLEntryPoint(loadProcAddress("glTextureStorage3DMultisample"), &textureStorage3DMultisample);
1560 AssignGLEntryPoint(loadProcAddress("glTextureSubImage1D"), &textureSubImage1D);
1561 AssignGLEntryPoint(loadProcAddress("glTextureSubImage2D"), &textureSubImage2D);
1562 AssignGLEntryPoint(loadProcAddress("glTextureSubImage3D"), &textureSubImage3D);
1563 AssignGLEntryPoint(loadProcAddress("glTransformFeedbackBufferBase"), &transformFeedbackBufferBase);
1564 AssignGLEntryPoint(loadProcAddress("glTransformFeedbackBufferRange"), &transformFeedbackBufferRange);
1565 AssignGLEntryPoint(loadProcAddress("glUnmapNamedBuffer"), &unmapNamedBuffer);
1566 AssignGLEntryPoint(loadProcAddress("glVertexArrayAttribBinding"), &vertexArrayAttribBinding);
1567 AssignGLEntryPoint(loadProcAddress("glVertexArrayAttribFormat"), &vertexArrayAttribFormat);
1568 AssignGLEntryPoint(loadProcAddress("glVertexArrayAttribIFormat"), &vertexArrayAttribIFormat);
1569 AssignGLEntryPoint(loadProcAddress("glVertexArrayAttribLFormat"), &vertexArrayAttribLFormat);
1570 AssignGLEntryPoint(loadProcAddress("glVertexArrayBindingDivisor"), &vertexArrayBindingDivisor);
1571 AssignGLEntryPoint(loadProcAddress("glVertexArrayElementBuffer"), &vertexArrayElementBuffer);
1572 AssignGLEntryPoint(loadProcAddress("glVertexArrayVertexBuffer"), &vertexArrayVertexBuffer);
1573 AssignGLEntryPoint(loadProcAddress("glVertexArrayVertexBuffers"), &vertexArrayVertexBuffers);
1574 }
1575}
1576
1577}