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