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