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