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