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