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