blob: 2cf269d83e06804ed5a2c27caa3b4f49cf816af1 [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
Jamie Madill60c65552017-05-02 14:34:05 -040058static void AssignGLExtensionEntryPoint(const std::vector<std::string> &extensions,
59 const char *requiredExtensionString,
60 void *function,
61 void **outFunction)
Geoff Langa4903b72015-03-02 16:02:48 -080062{
Geoff Lang3e589ea2015-04-21 10:35:04 -040063 std::vector<std::string> requiredExtensions;
64 angle::SplitStringAlongWhitespace(requiredExtensionString, &requiredExtensions);
65 for (const std::string& requiredExtension : requiredExtensions)
Geoff Langa4903b72015-03-02 16:02:48 -080066 {
Geoff Lang3e589ea2015-04-21 10:35:04 -040067 if (std::find(extensions.begin(), extensions.end(), requiredExtension) == extensions.end())
68 {
Geoff Lang3e589ea2015-04-21 10:35:04 -040069 return;
70 }
Geoff Langa4903b72015-03-02 16:02:48 -080071 }
Geoff Lang3e589ea2015-04-21 10:35:04 -040072
Jamie Madill60c65552017-05-02 14:34:05 -040073 *outFunction = function;
Geoff Langa4903b72015-03-02 16:02:48 -080074}
75
Jamie Madill60c65552017-05-02 14:34:05 -040076#define ASSIGN_WITH_EXT(EXT, NAME, FP) \
77 AssignGLExtensionEntryPoint(extensions, EXT, loadProcAddress(NAME), \
78 reinterpret_cast<void **>(&FP))
79#define ASSIGN(NAME, FP) *reinterpret_cast<void **>(&FP) = loadProcAddress(NAME)
80
Geoff Lang56cf9af2015-02-17 10:16:49 -050081FunctionsGL::FunctionsGL()
Geoff Lang08dcfed2015-05-25 13:38:42 -040082 : version(),
83 standard(),
Geoff Langa4903b72015-03-02 16:02:48 -080084 extensions(),
85
86 blendFunc(nullptr),
Geoff Lang56cf9af2015-02-17 10:16:49 -050087 clear(nullptr),
88 clearColor(nullptr),
89 clearDepth(nullptr),
90 clearStencil(nullptr),
91 colorMask(nullptr),
92 cullFace(nullptr),
93 depthFunc(nullptr),
94 depthMask(nullptr),
95 depthRange(nullptr),
96 disable(nullptr),
97 drawBuffer(nullptr),
98 enable(nullptr),
99 finish(nullptr),
100 flush(nullptr),
101 frontFace(nullptr),
102 getBooleanv(nullptr),
103 getDoublev(nullptr),
104 getError(nullptr),
105 getFloatv(nullptr),
106 getIntegerv(nullptr),
107 getString(nullptr),
108 getTexImage(nullptr),
109 getTexLevelParameterfv(nullptr),
110 getTexLevelParameteriv(nullptr),
111 getTexParameterfv(nullptr),
112 getTexParameteriv(nullptr),
113 hint(nullptr),
114 isEnabled(nullptr),
115 lineWidth(nullptr),
116 logicOp(nullptr),
117 pixelStoref(nullptr),
118 pixelStorei(nullptr),
119 pointSize(nullptr),
120 polygonMode(nullptr),
121 readBuffer(nullptr),
122 readPixels(nullptr),
123 scissor(nullptr),
124 stencilFunc(nullptr),
125 stencilMask(nullptr),
126 stencilOp(nullptr),
127 texImage1D(nullptr),
128 texImage2D(nullptr),
129 texParameterf(nullptr),
130 texParameterfv(nullptr),
131 texParameteri(nullptr),
132 texParameteriv(nullptr),
133 viewport(nullptr),
134
135 bindTexture(nullptr),
136 copyTexImage1D(nullptr),
137 copyTexImage2D(nullptr),
138 copyTexSubImage1D(nullptr),
139 copyTexSubImage2D(nullptr),
140 deleteTextures(nullptr),
141 drawArrays(nullptr),
142 drawElements(nullptr),
143 genTextures(nullptr),
144 isTexture(nullptr),
145 polygonOffset(nullptr),
146 texSubImage1D(nullptr),
147 texSubImage2D(nullptr),
148
149 blendColor(nullptr),
150 blendEquation(nullptr),
151 copyTexSubImage3D(nullptr),
152 drawRangeElements(nullptr),
153 texImage3D(nullptr),
154 texSubImage3D(nullptr),
155
Geoff Langb11ad262015-04-09 14:43:34 -0400156 deleteFencesNV(nullptr),
157 genFencesNV(nullptr),
158 isFenceNV(nullptr),
159 testFenceNV(nullptr),
160 getFenceivNV(nullptr),
161 finishFenceNV(nullptr),
162 setFenceNV(nullptr),
163
Geoff Lang56cf9af2015-02-17 10:16:49 -0500164 activeTexture(nullptr),
165 compressedTexImage1D(nullptr),
166 compressedTexImage2D(nullptr),
167 compressedTexImage3D(nullptr),
168 compressedTexSubImage1D(nullptr),
169 compressedTexSubImage2D(nullptr),
170 compressedTexSubImage3D(nullptr),
171 getCompressedTexImage(nullptr),
172 sampleCoverage(nullptr),
173
174 blendFuncSeparate(nullptr),
175 multiDrawArrays(nullptr),
176 multiDrawElements(nullptr),
177 pointParameterf(nullptr),
178 pointParameterfv(nullptr),
179 pointParameteri(nullptr),
180 pointParameteriv(nullptr),
181
182 beginQuery(nullptr),
183 bindBuffer(nullptr),
184 bufferData(nullptr),
185 bufferSubData(nullptr),
186 deleteBuffers(nullptr),
187 deleteQueries(nullptr),
188 endQuery(nullptr),
189 genBuffers(nullptr),
190 genQueries(nullptr),
191 getBufferParameteriv(nullptr),
192 getBufferPointerv(nullptr),
193 getBufferSubData(nullptr),
194 getQueryObjectiv(nullptr),
195 getQueryObjectuiv(nullptr),
196 getQueryiv(nullptr),
197 isBuffer(nullptr),
198 isQuery(nullptr),
199 mapBuffer(nullptr),
200 unmapBuffer(nullptr),
201
202 attachShader(nullptr),
203 bindAttribLocation(nullptr),
204 blendEquationSeparate(nullptr),
205 compileShader(nullptr),
206 createProgram(nullptr),
207 createShader(nullptr),
208 deleteProgram(nullptr),
209 deleteShader(nullptr),
210 detachShader(nullptr),
211 disableVertexAttribArray(nullptr),
212 drawBuffers(nullptr),
213 enableVertexAttribArray(nullptr),
214 getActiveAttrib(nullptr),
215 getActiveUniform(nullptr),
216 getAttachedShaders(nullptr),
217 getAttribLocation(nullptr),
218 getProgramInfoLog(nullptr),
219 getProgramiv(nullptr),
220 getShaderInfoLog(nullptr),
221 getShaderSource(nullptr),
222 getShaderiv(nullptr),
223 getUniformLocation(nullptr),
224 getUniformfv(nullptr),
225 getUniformiv(nullptr),
226 getVertexAttribPointerv(nullptr),
227 getVertexAttribdv(nullptr),
228 getVertexAttribfv(nullptr),
229 getVertexAttribiv(nullptr),
230 isProgram(nullptr),
231 isShader(nullptr),
232 linkProgram(nullptr),
233 shaderSource(nullptr),
234 stencilFuncSeparate(nullptr),
235 stencilMaskSeparate(nullptr),
236 stencilOpSeparate(nullptr),
237 uniform1f(nullptr),
238 uniform1fv(nullptr),
239 uniform1i(nullptr),
240 uniform1iv(nullptr),
241 uniform2f(nullptr),
242 uniform2fv(nullptr),
243 uniform2i(nullptr),
244 uniform2iv(nullptr),
245 uniform3f(nullptr),
246 uniform3fv(nullptr),
247 uniform3i(nullptr),
248 uniform3iv(nullptr),
249 uniform4f(nullptr),
250 uniform4fv(nullptr),
251 uniform4i(nullptr),
252 uniform4iv(nullptr),
253 uniformMatrix2fv(nullptr),
254 uniformMatrix3fv(nullptr),
255 uniformMatrix4fv(nullptr),
256 useProgram(nullptr),
257 validateProgram(nullptr),
258 vertexAttrib1d(nullptr),
259 vertexAttrib1dv(nullptr),
260 vertexAttrib1f(nullptr),
261 vertexAttrib1fv(nullptr),
262 vertexAttrib1s(nullptr),
263 vertexAttrib1sv(nullptr),
264 vertexAttrib2d(nullptr),
265 vertexAttrib2dv(nullptr),
266 vertexAttrib2f(nullptr),
267 vertexAttrib2fv(nullptr),
268 vertexAttrib2s(nullptr),
269 vertexAttrib2sv(nullptr),
270 vertexAttrib3d(nullptr),
271 vertexAttrib3dv(nullptr),
272 vertexAttrib3f(nullptr),
273 vertexAttrib3fv(nullptr),
274 vertexAttrib3s(nullptr),
275 vertexAttrib3sv(nullptr),
276 vertexAttrib4Nbv(nullptr),
277 vertexAttrib4Niv(nullptr),
278 vertexAttrib4Nsv(nullptr),
279 vertexAttrib4Nub(nullptr),
280 vertexAttrib4Nubv(nullptr),
281 vertexAttrib4Nuiv(nullptr),
282 vertexAttrib4Nusv(nullptr),
283 vertexAttrib4bv(nullptr),
284 vertexAttrib4d(nullptr),
285 vertexAttrib4dv(nullptr),
286 vertexAttrib4f(nullptr),
287 vertexAttrib4fv(nullptr),
288 vertexAttrib4iv(nullptr),
289 vertexAttrib4s(nullptr),
290 vertexAttrib4sv(nullptr),
291 vertexAttrib4ubv(nullptr),
292 vertexAttrib4uiv(nullptr),
293 vertexAttrib4usv(nullptr),
294 vertexAttribPointer(nullptr),
295
296 uniformMatrix2x3fv(nullptr),
297 uniformMatrix2x4fv(nullptr),
298 uniformMatrix3x2fv(nullptr),
299 uniformMatrix3x4fv(nullptr),
300 uniformMatrix4x2fv(nullptr),
301 uniformMatrix4x3fv(nullptr),
302
303 beginConditionalRender(nullptr),
304 beginTransformFeedback(nullptr),
305 bindBufferBase(nullptr),
306 bindBufferRange(nullptr),
307 bindFragDataLocation(nullptr),
308 bindFramebuffer(nullptr),
309 bindRenderbuffer(nullptr),
310 bindVertexArray(nullptr),
311 blitFramebuffer(nullptr),
312 checkFramebufferStatus(nullptr),
313 clampColor(nullptr),
314 clearBufferfi(nullptr),
315 clearBufferfv(nullptr),
316 clearBufferiv(nullptr),
317 clearBufferuiv(nullptr),
318 colorMaski(nullptr),
319 deleteFramebuffers(nullptr),
320 deleteRenderbuffers(nullptr),
321 deleteVertexArrays(nullptr),
322 disablei(nullptr),
323 enablei(nullptr),
324 endConditionalRender(nullptr),
325 endTransformFeedback(nullptr),
326 flushMappedBufferRange(nullptr),
327 framebufferRenderbuffer(nullptr),
328 framebufferTexture1D(nullptr),
329 framebufferTexture2D(nullptr),
330 framebufferTexture3D(nullptr),
331 framebufferTextureLayer(nullptr),
332 genFramebuffers(nullptr),
333 genRenderbuffers(nullptr),
334 genVertexArrays(nullptr),
335 generateMipmap(nullptr),
336 getBooleani_v(nullptr),
337 getFragDataLocation(nullptr),
338 getFramebufferAttachmentParameteriv(nullptr),
339 getIntegeri_v(nullptr),
340 getRenderbufferParameteriv(nullptr),
341 getStringi(nullptr),
342 getTexParameterIiv(nullptr),
343 getTexParameterIuiv(nullptr),
344 getTransformFeedbackVarying(nullptr),
345 getUniformuiv(nullptr),
346 getVertexAttribIiv(nullptr),
347 getVertexAttribIuiv(nullptr),
348 isEnabledi(nullptr),
349 isFramebuffer(nullptr),
350 isRenderbuffer(nullptr),
351 isVertexArray(nullptr),
352 mapBufferRange(nullptr),
353 renderbufferStorage(nullptr),
354 renderbufferStorageMultisample(nullptr),
355 texParameterIiv(nullptr),
356 texParameterIuiv(nullptr),
357 transformFeedbackVaryings(nullptr),
358 uniform1ui(nullptr),
359 uniform1uiv(nullptr),
360 uniform2ui(nullptr),
361 uniform2uiv(nullptr),
362 uniform3ui(nullptr),
363 uniform3uiv(nullptr),
364 uniform4ui(nullptr),
365 uniform4uiv(nullptr),
366 vertexAttribI1i(nullptr),
367 vertexAttribI1iv(nullptr),
368 vertexAttribI1ui(nullptr),
369 vertexAttribI1uiv(nullptr),
370 vertexAttribI2i(nullptr),
371 vertexAttribI2iv(nullptr),
372 vertexAttribI2ui(nullptr),
373 vertexAttribI2uiv(nullptr),
374 vertexAttribI3i(nullptr),
375 vertexAttribI3iv(nullptr),
376 vertexAttribI3ui(nullptr),
377 vertexAttribI3uiv(nullptr),
378 vertexAttribI4bv(nullptr),
379 vertexAttribI4i(nullptr),
380 vertexAttribI4iv(nullptr),
381 vertexAttribI4sv(nullptr),
382 vertexAttribI4ubv(nullptr),
383 vertexAttribI4ui(nullptr),
384 vertexAttribI4uiv(nullptr),
385 vertexAttribI4usv(nullptr),
386 vertexAttribIPointer(nullptr),
387
388 copyBufferSubData(nullptr),
389 drawArraysInstanced(nullptr),
390 drawElementsInstanced(nullptr),
391 getActiveUniformBlockName(nullptr),
392 getActiveUniformBlockiv(nullptr),
393 getActiveUniformName(nullptr),
394 getActiveUniformsiv(nullptr),
395 getUniformBlockIndex(nullptr),
396 getUniformIndices(nullptr),
397 primitiveRestartIndex(nullptr),
398 texBuffer(nullptr),
399 uniformBlockBinding(nullptr),
400
401 clientWaitSync(nullptr),
402 deleteSync(nullptr),
403 drawElementsBaseVertex(nullptr),
404 drawElementsInstancedBaseVertex(nullptr),
405 drawRangeElementsBaseVertex(nullptr),
406 fenceSync(nullptr),
407 framebufferTexture(nullptr),
408 getBufferParameteri64v(nullptr),
409 getInteger64i_v(nullptr),
410 getInteger64v(nullptr),
411 getMultisamplefv(nullptr),
412 getSynciv(nullptr),
413 isSync(nullptr),
414 multiDrawElementsBaseVertex(nullptr),
415 provokingVertex(nullptr),
416 sampleMaski(nullptr),
417 texImage2DMultisample(nullptr),
418 texImage3DMultisample(nullptr),
419 waitSync(nullptr),
420
Sami Väisänene45e53b2016-05-25 10:36:04 +0300421 matrixLoadEXT(nullptr),
422 genPathsNV(nullptr),
423 delPathsNV(nullptr),
424 pathCommandsNV(nullptr),
425 setPathParameterfNV(nullptr),
426 setPathParameteriNV(nullptr),
427 getPathParameterfNV(nullptr),
428 getPathParameteriNV(nullptr),
429 pathStencilFuncNV(nullptr),
430 stencilFillPathNV(nullptr),
431 stencilStrokePathNV(nullptr),
432 coverFillPathNV(nullptr),
433 coverStrokePathNV(nullptr),
434 stencilThenCoverFillPathNV(nullptr),
435 stencilThenCoverStrokePathNV(nullptr),
Sami Väisänend59ca052016-06-21 16:10:00 +0300436 coverFillPathInstancedNV(nullptr),
437 coverStrokePathInstancedNV(nullptr),
438 stencilFillPathInstancedNV(nullptr),
439 stencilStrokePathInstancedNV(nullptr),
440 stencilThenCoverFillPathInstancedNV(nullptr),
441 stencilThenCoverStrokePathInstancedNV(nullptr),
Sami Väisänen46eaa942016-06-29 10:26:37 +0300442 programPathFragmentInputGenNV(nullptr),
Sami Väisänene45e53b2016-05-25 10:36:04 +0300443
Geoff Lang56cf9af2015-02-17 10:16:49 -0500444 bindFragDataLocationIndexed(nullptr),
445 bindSampler(nullptr),
446 deleteSamplers(nullptr),
447 genSamplers(nullptr),
448 getFragDataIndex(nullptr),
449 getQueryObjecti64v(nullptr),
450 getQueryObjectui64v(nullptr),
451 getSamplerParameterIiv(nullptr),
452 getSamplerParameterIuiv(nullptr),
453 getSamplerParameterfv(nullptr),
454 getSamplerParameteriv(nullptr),
455 isSampler(nullptr),
456 queryCounter(nullptr),
457 samplerParameterIiv(nullptr),
458 samplerParameterIuiv(nullptr),
459 samplerParameterf(nullptr),
460 samplerParameterfv(nullptr),
461 samplerParameteri(nullptr),
462 samplerParameteriv(nullptr),
463 vertexAttribDivisor(nullptr),
464 vertexAttribP1ui(nullptr),
465 vertexAttribP1uiv(nullptr),
466 vertexAttribP2ui(nullptr),
467 vertexAttribP2uiv(nullptr),
468 vertexAttribP3ui(nullptr),
469 vertexAttribP3uiv(nullptr),
470 vertexAttribP4ui(nullptr),
471 vertexAttribP4uiv(nullptr),
472
473 beginQueryIndexed(nullptr),
474 bindTransformFeedback(nullptr),
475 blendEquationSeparatei(nullptr),
476 blendEquationi(nullptr),
477 blendFuncSeparatei(nullptr),
478 blendFunci(nullptr),
479 deleteTransformFeedbacks(nullptr),
480 drawArraysIndirect(nullptr),
481 drawElementsIndirect(nullptr),
482 drawTransformFeedback(nullptr),
483 drawTransformFeedbackStream(nullptr),
484 endQueryIndexed(nullptr),
485 genTransformFeedbacks(nullptr),
486 getActiveSubroutineName(nullptr),
487 getActiveSubroutineUniformName(nullptr),
488 getActiveSubroutineUniformiv(nullptr),
489 getProgramStageiv(nullptr),
490 getQueryIndexediv(nullptr),
491 getSubroutineIndex(nullptr),
492 getSubroutineUniformLocation(nullptr),
493 getUniformSubroutineuiv(nullptr),
494 getUniformdv(nullptr),
495 isTransformFeedback(nullptr),
496 minSampleShading(nullptr),
497 patchParameterfv(nullptr),
498 patchParameteri(nullptr),
499 pauseTransformFeedback(nullptr),
500 resumeTransformFeedback(nullptr),
501 uniform1d(nullptr),
502 uniform1dv(nullptr),
503 uniform2d(nullptr),
504 uniform2dv(nullptr),
505 uniform3d(nullptr),
506 uniform3dv(nullptr),
507 uniform4d(nullptr),
508 uniform4dv(nullptr),
509 uniformMatrix2dv(nullptr),
510 uniformMatrix2x3dv(nullptr),
511 uniformMatrix2x4dv(nullptr),
512 uniformMatrix3dv(nullptr),
513 uniformMatrix3x2dv(nullptr),
514 uniformMatrix3x4dv(nullptr),
515 uniformMatrix4dv(nullptr),
516 uniformMatrix4x2dv(nullptr),
517 uniformMatrix4x3dv(nullptr),
518 uniformSubroutinesuiv(nullptr),
519
520 activeShaderProgram(nullptr),
521 bindProgramPipeline(nullptr),
522 clearDepthf(nullptr),
523 createShaderProgramv(nullptr),
524 deleteProgramPipelines(nullptr),
525 depthRangeArrayv(nullptr),
526 depthRangeIndexed(nullptr),
527 depthRangef(nullptr),
528 genProgramPipelines(nullptr),
529 getDoublei_v(nullptr),
530 getFloati_v(nullptr),
531 getProgramBinary(nullptr),
532 getProgramPipelineInfoLog(nullptr),
533 getProgramPipelineiv(nullptr),
534 getShaderPrecisionFormat(nullptr),
535 getVertexAttribLdv(nullptr),
536 isProgramPipeline(nullptr),
537 programBinary(nullptr),
538 programParameteri(nullptr),
539 programUniform1d(nullptr),
540 programUniform1dv(nullptr),
541 programUniform1f(nullptr),
542 programUniform1fv(nullptr),
543 programUniform1i(nullptr),
544 programUniform1iv(nullptr),
545 programUniform1ui(nullptr),
546 programUniform1uiv(nullptr),
547 programUniform2d(nullptr),
548 programUniform2dv(nullptr),
549 programUniform2f(nullptr),
550 programUniform2fv(nullptr),
551 programUniform2i(nullptr),
552 programUniform2iv(nullptr),
553 programUniform2ui(nullptr),
554 programUniform2uiv(nullptr),
555 programUniform3d(nullptr),
556 programUniform3dv(nullptr),
557 programUniform3f(nullptr),
558 programUniform3fv(nullptr),
559 programUniform3i(nullptr),
560 programUniform3iv(nullptr),
561 programUniform3ui(nullptr),
562 programUniform3uiv(nullptr),
563 programUniform4d(nullptr),
564 programUniform4dv(nullptr),
565 programUniform4f(nullptr),
566 programUniform4fv(nullptr),
567 programUniform4i(nullptr),
568 programUniform4iv(nullptr),
569 programUniform4ui(nullptr),
570 programUniform4uiv(nullptr),
571 programUniformMatrix2dv(nullptr),
572 programUniformMatrix2fv(nullptr),
573 programUniformMatrix2x3dv(nullptr),
574 programUniformMatrix2x3fv(nullptr),
575 programUniformMatrix2x4dv(nullptr),
576 programUniformMatrix2x4fv(nullptr),
577 programUniformMatrix3dv(nullptr),
578 programUniformMatrix3fv(nullptr),
579 programUniformMatrix3x2dv(nullptr),
580 programUniformMatrix3x2fv(nullptr),
581 programUniformMatrix3x4dv(nullptr),
582 programUniformMatrix3x4fv(nullptr),
583 programUniformMatrix4dv(nullptr),
584 programUniformMatrix4fv(nullptr),
585 programUniformMatrix4x2dv(nullptr),
586 programUniformMatrix4x2fv(nullptr),
587 programUniformMatrix4x3dv(nullptr),
588 programUniformMatrix4x3fv(nullptr),
589 releaseShaderCompiler(nullptr),
590 scissorArrayv(nullptr),
591 scissorIndexed(nullptr),
592 scissorIndexedv(nullptr),
593 shaderBinary(nullptr),
594 useProgramStages(nullptr),
595 validateProgramPipeline(nullptr),
596 vertexAttribL1d(nullptr),
597 vertexAttribL1dv(nullptr),
598 vertexAttribL2d(nullptr),
599 vertexAttribL2dv(nullptr),
600 vertexAttribL3d(nullptr),
601 vertexAttribL3dv(nullptr),
602 vertexAttribL4d(nullptr),
603 vertexAttribL4dv(nullptr),
604 vertexAttribLPointer(nullptr),
605 viewportArrayv(nullptr),
606 viewportIndexedf(nullptr),
607 viewportIndexedfv(nullptr),
608
609 bindImageTexture(nullptr),
610 drawArraysInstancedBaseInstance(nullptr),
611 drawElementsInstancedBaseInstance(nullptr),
612 drawElementsInstancedBaseVertexBaseInstance(nullptr),
613 drawTransformFeedbackInstanced(nullptr),
614 drawTransformFeedbackStreamInstanced(nullptr),
615 getActiveAtomicCounterBufferiv(nullptr),
616 getInternalformativ(nullptr),
617 memoryBarrier(nullptr),
618 texStorage1D(nullptr),
619 texStorage2D(nullptr),
620 texStorage3D(nullptr),
621
622 bindVertexBuffer(nullptr),
623 clearBufferData(nullptr),
624 clearBufferSubData(nullptr),
625 copyImageSubData(nullptr),
626 debugMessageCallback(nullptr),
627 debugMessageControl(nullptr),
628 debugMessageInsert(nullptr),
629 dispatchCompute(nullptr),
630 dispatchComputeIndirect(nullptr),
631 framebufferParameteri(nullptr),
632 getDebugMessageLog(nullptr),
633 getFramebufferParameteriv(nullptr),
634 getInternalformati64v(nullptr),
Geoff Langb80360f2015-05-04 15:01:31 -0400635 getPointerv(nullptr),
Geoff Lang56cf9af2015-02-17 10:16:49 -0500636 getObjectLabel(nullptr),
637 getObjectPtrLabel(nullptr),
638 getProgramInterfaceiv(nullptr),
639 getProgramResourceIndex(nullptr),
640 getProgramResourceLocation(nullptr),
641 getProgramResourceLocationIndex(nullptr),
642 getProgramResourceName(nullptr),
643 getProgramResourceiv(nullptr),
644 invalidateBufferData(nullptr),
645 invalidateBufferSubData(nullptr),
646 invalidateFramebuffer(nullptr),
647 invalidateSubFramebuffer(nullptr),
648 invalidateTexImage(nullptr),
649 invalidateTexSubImage(nullptr),
650 multiDrawArraysIndirect(nullptr),
651 multiDrawElementsIndirect(nullptr),
652 objectLabel(nullptr),
653 objectPtrLabel(nullptr),
654 popDebugGroup(nullptr),
655 pushDebugGroup(nullptr),
656 shaderStorageBlockBinding(nullptr),
657 texBufferRange(nullptr),
658 texStorage2DMultisample(nullptr),
659 texStorage3DMultisample(nullptr),
660 textureView(nullptr),
661 vertexAttribBinding(nullptr),
662 vertexAttribFormat(nullptr),
663 vertexAttribIFormat(nullptr),
664 vertexAttribLFormat(nullptr),
665 vertexBindingDivisor(nullptr),
Sami Väisänena797e062016-05-12 15:23:40 +0300666 coverageModulationNV(nullptr),
Geoff Lang56cf9af2015-02-17 10:16:49 -0500667
668 bindBuffersBase(nullptr),
669 bindBuffersRange(nullptr),
670 bindImageTextures(nullptr),
671 bindSamplers(nullptr),
672 bindTextures(nullptr),
673 bindVertexBuffers(nullptr),
674 bufferStorage(nullptr),
675 clearTexImage(nullptr),
676 clearTexSubImage(nullptr),
677
678 bindTextureUnit(nullptr),
679 blitNamedFramebuffer(nullptr),
680 checkNamedFramebufferStatus(nullptr),
681 clearNamedBufferData(nullptr),
682 clearNamedBufferSubData(nullptr),
683 clearNamedFramebufferfi(nullptr),
684 clearNamedFramebufferfv(nullptr),
685 clearNamedFramebufferiv(nullptr),
686 clearNamedFramebufferuiv(nullptr),
687 clipControl(nullptr),
688 compressedTextureSubImage1D(nullptr),
689 compressedTextureSubImage2D(nullptr),
690 compressedTextureSubImage3D(nullptr),
691 copyNamedBufferSubData(nullptr),
692 copyTextureSubImage1D(nullptr),
693 copyTextureSubImage2D(nullptr),
694 copyTextureSubImage3D(nullptr),
695 createBuffers(nullptr),
696 createFramebuffers(nullptr),
697 createProgramPipelines(nullptr),
698 createQueries(nullptr),
699 createRenderbuffers(nullptr),
700 createSamplers(nullptr),
701 createTextures(nullptr),
702 createTransformFeedbacks(nullptr),
703 createVertexArrays(nullptr),
704 disableVertexArrayAttrib(nullptr),
705 enableVertexArrayAttrib(nullptr),
706 flushMappedNamedBufferRange(nullptr),
707 generateTextureMipmap(nullptr),
708 getCompressedTextureImage(nullptr),
709 getCompressedTextureSubImage(nullptr),
710 getGraphicsResetStatus(nullptr),
711 getNamedBufferParameteri64v(nullptr),
712 getNamedBufferParameteriv(nullptr),
713 getNamedBufferPointerv(nullptr),
714 getNamedBufferSubData(nullptr),
715 getNamedFramebufferAttachmentParameteriv(nullptr),
716 getNamedFramebufferParameteriv(nullptr),
717 getNamedRenderbufferParameteriv(nullptr),
718 getQueryBufferObjecti64v(nullptr),
719 getQueryBufferObjectiv(nullptr),
720 getQueryBufferObjectui64v(nullptr),
721 getQueryBufferObjectuiv(nullptr),
722 getTextureImage(nullptr),
723 getTextureLevelParameterfv(nullptr),
724 getTextureLevelParameteriv(nullptr),
725 getTextureParameterIiv(nullptr),
726 getTextureParameterIuiv(nullptr),
727 getTextureParameterfv(nullptr),
728 getTextureParameteriv(nullptr),
729 getTextureSubImage(nullptr),
730 getTransformFeedbacki64_v(nullptr),
731 getTransformFeedbacki_v(nullptr),
732 getTransformFeedbackiv(nullptr),
733 getVertexArrayIndexed64iv(nullptr),
734 getVertexArrayIndexediv(nullptr),
735 getVertexArrayiv(nullptr),
736 getnCompressedTexImage(nullptr),
737 getnTexImage(nullptr),
738 getnUniformdv(nullptr),
739 getnUniformfv(nullptr),
740 getnUniformiv(nullptr),
741 getnUniformuiv(nullptr),
742 invalidateNamedFramebufferData(nullptr),
743 invalidateNamedFramebufferSubData(nullptr),
744 mapNamedBuffer(nullptr),
745 mapNamedBufferRange(nullptr),
746 memoryBarrierByRegion(nullptr),
747 namedBufferData(nullptr),
748 namedBufferStorage(nullptr),
749 namedBufferSubData(nullptr),
750 namedFramebufferDrawBuffer(nullptr),
751 namedFramebufferDrawBuffers(nullptr),
752 namedFramebufferParameteri(nullptr),
753 namedFramebufferReadBuffer(nullptr),
754 namedFramebufferRenderbuffer(nullptr),
755 namedFramebufferTexture(nullptr),
756 namedFramebufferTextureLayer(nullptr),
757 namedRenderbufferStorage(nullptr),
758 namedRenderbufferStorageMultisample(nullptr),
759 readnPixels(nullptr),
760 textureBarrier(nullptr),
761 textureBuffer(nullptr),
762 textureBufferRange(nullptr),
763 textureParameterIiv(nullptr),
764 textureParameterIuiv(nullptr),
765 textureParameterf(nullptr),
766 textureParameterfv(nullptr),
767 textureParameteri(nullptr),
768 textureParameteriv(nullptr),
769 textureStorage1D(nullptr),
770 textureStorage2D(nullptr),
771 textureStorage2DMultisample(nullptr),
772 textureStorage3D(nullptr),
773 textureStorage3DMultisample(nullptr),
774 textureSubImage1D(nullptr),
775 textureSubImage2D(nullptr),
776 textureSubImage3D(nullptr),
777 transformFeedbackBufferBase(nullptr),
778 transformFeedbackBufferRange(nullptr),
779 unmapNamedBuffer(nullptr),
780 vertexArrayAttribBinding(nullptr),
781 vertexArrayAttribFormat(nullptr),
782 vertexArrayAttribIFormat(nullptr),
783 vertexArrayAttribLFormat(nullptr),
784 vertexArrayBindingDivisor(nullptr),
785 vertexArrayElementBuffer(nullptr),
786 vertexArrayVertexBuffer(nullptr),
Geoff Langb2d9ab62016-01-20 10:50:09 -0500787 vertexArrayVertexBuffers(nullptr),
788 blendBarrier(nullptr),
Frank Henigman9d819892016-01-22 16:56:04 -0500789 primitiveBoundingBox(nullptr),
790 eglImageTargetRenderbufferStorageOES(nullptr),
Geoff Lang57ce9ea2016-11-24 12:03:14 -0500791 eglImageTargetTexture2DOES(nullptr),
792 discardFramebuffer(nullptr)
Geoff Lang56cf9af2015-02-17 10:16:49 -0500793{
794}
795
796FunctionsGL::~FunctionsGL()
797{
798}
799
Geoff Langa4903b72015-03-02 16:02:48 -0800800void FunctionsGL::initialize()
Geoff Lang56cf9af2015-02-17 10:16:49 -0500801{
Geoff Langa4903b72015-03-02 16:02:48 -0800802 // Grab the version number
Jamie Madill60c65552017-05-02 14:34:05 -0400803 ASSIGN("glGetString", getString);
804 ASSIGN("glGetIntegerv", getIntegerv);
Geoff Lang08dcfed2015-05-25 13:38:42 -0400805 GetGLVersion(getString, &version, &standard);
Geoff Langa4903b72015-03-02 16:02:48 -0800806
807 // Grab the GL extensions
Geoff Langb2d9ab62016-01-20 10:50:09 -0500808 if (isAtLeastGL(gl::Version(3, 0)) || isAtLeastGLES(gl::Version(3, 0)))
Geoff Langa4903b72015-03-02 16:02:48 -0800809 {
Jamie Madill60c65552017-05-02 14:34:05 -0400810 ASSIGN("glGetStringi", getStringi);
Geoff Langa4903b72015-03-02 16:02:48 -0800811 extensions = GetIndexedExtensions(getIntegerv, getStringi);
812 }
813 else
814 {
Corentin Wallez94b3a072015-05-05 17:00:07 -0400815 const char *exts = reinterpret_cast<const char*>(getString(GL_EXTENSIONS));
Jamie Madill8c5aeb62015-05-21 08:17:18 -0400816 angle::SplitStringAlongWhitespace(std::string(exts), &extensions);
Geoff Langa4903b72015-03-02 16:02:48 -0800817 }
818
Geoff Langb2d9ab62016-01-20 10:50:09 -0500819 // Load the entry points
820 switch (standard)
821 {
822 case STANDARD_GL_DESKTOP:
823 initializeProcsDesktopGL();
824 break;
825
826 case STANDARD_GL_ES:
827 initializeProcsGLES();
828 break;
829
830 default:
831 UNREACHABLE();
832 break;
833 }
834}
835
836void FunctionsGL::initializeProcsDesktopGL()
837{
Geoff Lang8b0f0b32015-07-20 15:59:28 -0400838 // Check the context profile
hendrikwbb7740c2015-10-20 15:30:53 -0700839 profile = 0;
Geoff Lang8b0f0b32015-07-20 15:59:28 -0400840 if (isAtLeastGL(gl::Version(3, 2)))
841 {
842 getIntegerv(GL_CONTEXT_PROFILE_MASK, &profile);
843 }
Geoff Lang8b0f0b32015-07-20 15:59:28 -0400844
Geoff Lang3cf12ce2015-08-27 14:40:48 -0400845 // clang-format off
846
Geoff Lang92139c22015-07-20 15:32:37 -0400847 // Load extensions
848 // Even though extensions are written against specific versions of GL, many drivers expose the extensions
849 // in even older versions. Always try loading the extensions regardless of GL version.
850
Sami Väisänen46eaa942016-06-29 10:26:37 +0300851 // GL_ARB_program_interface_query (loading only functions relevant to GL_NV_path_rendering here)
Jamie Madill60c65552017-05-02 14:34:05 -0400852 ASSIGN_WITH_EXT("GL_ARB_program_interface_query", "glGetProgramInterfaceiv", getProgramInterfaceiv);
853 ASSIGN_WITH_EXT("GL_ARB_program_interface_query", "glGetProgramResourceName", getProgramResourceName);
854 ASSIGN_WITH_EXT("GL_ARB_program_interface_query", "glGetProgramResourceiv", getProgramResourceiv);
Sami Väisänene45e53b2016-05-25 10:36:04 +0300855
856 // GL_NV_path_rendering
Jamie Madill60c65552017-05-02 14:34:05 -0400857 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glMatrixLoadfEXT", matrixLoadEXT);
858 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glGenPathsNV", genPathsNV);
859 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glDeletePathsNV", delPathsNV);
860 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glPathCommandsNV", pathCommandsNV);
861 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glIsPathNV", isPathNV);
862 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glPathParameterfNV", setPathParameterfNV);
863 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glPathParameteriNV", setPathParameteriNV);
864 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glGetPathParameterfvNV", getPathParameterfNV);
865 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glGetPathParameterivNV", getPathParameteriNV);
866 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glPathStencilFuncNV", pathStencilFuncNV);
867 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilFillPathNV", stencilFillPathNV);
868 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilStrokePathNV", stencilStrokePathNV);
869 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glCoverFillPathNV", coverFillPathNV);
870 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glCoverStrokePathNV", coverStrokePathNV);
871 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilThenCoverFillPathNV", stencilThenCoverFillPathNV);
872 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilThenCoverStrokePathNV", stencilThenCoverStrokePathNV);
873 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glCoverFillPathInstancedNV", coverFillPathInstancedNV);
874 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glCoverStrokePathInstancedNV", coverStrokePathInstancedNV);
875 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilFillPathInstancedNV", stencilFillPathInstancedNV);
876 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilStrokePathInstancedNV", stencilStrokePathInstancedNV);
877 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilThenCoverFillPathInstancedNV", stencilThenCoverFillPathInstancedNV);
878 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilThenCoverStrokePathInstancedNV", stencilThenCoverStrokePathInstancedNV);
879 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glProgramPathFragmentInputGenNV", programPathFragmentInputGenNV);
Sami Väisänene45e53b2016-05-25 10:36:04 +0300880
Sami Väisänena797e062016-05-12 15:23:40 +0300881 // GL_NV_framebuffer_mixed_samples
Jamie Madill60c65552017-05-02 14:34:05 -0400882 ASSIGN_WITH_EXT("GL_NV_framebuffer_mixed_samples", "glCoverageModulationNV", coverageModulationNV);
Sami Väisänena797e062016-05-12 15:23:40 +0300883
Geoff Lang92139c22015-07-20 15:32:37 -0400884 // GL_NV_fence
Jamie Madill60c65552017-05-02 14:34:05 -0400885 ASSIGN_WITH_EXT("GL_NV_fence", "glDeleteFencesNV", deleteFencesNV);
886 ASSIGN_WITH_EXT("GL_NV_fence", "glGenFencesNV", genFencesNV);
887 ASSIGN_WITH_EXT("GL_NV_fence", "glIsFenceNV", isFenceNV);
888 ASSIGN_WITH_EXT("GL_NV_fence", "glTestFenceNV", testFenceNV);
889 ASSIGN_WITH_EXT("GL_NV_fence", "glGetFenceivNV", getFenceivNV);
890 ASSIGN_WITH_EXT("GL_NV_fence", "glFinishFenceNV", finishFenceNV);
891 ASSIGN_WITH_EXT("GL_NV_fence", "glSetFenceNV", setFenceNV);
Geoff Lang92139c22015-07-20 15:32:37 -0400892
893 // GL_EXT_texture_storage
Jamie Madill60c65552017-05-02 14:34:05 -0400894 ASSIGN_WITH_EXT("GL_EXT_texture_storage", "glTexStorage1DEXT", texStorage1D);
895 ASSIGN_WITH_EXT("GL_EXT_texture_storage", "glTexStorage2DEXT", texStorage2D);
896 ASSIGN_WITH_EXT("GL_EXT_texture_storage GL_EXT_texture3D", "glTexStorage3DEXT", texStorage3D);
897 ASSIGN_WITH_EXT("GL_EXT_texture_storage GL_EXT_texture3D", "glTextureStorage1DEXT", textureStorage1D);
898 ASSIGN_WITH_EXT("GL_EXT_texture_storage GL_EXT_direct_state_access", "glTextureStorage2DEXT", textureStorage2D);
899 ASSIGN_WITH_EXT("GL_EXT_texture_storage GL_EXT_direct_state_access GL_EXT_texture3D", "glTextureStorage3DEXT", textureStorage3D);
Geoff Lang92139c22015-07-20 15:32:37 -0400900
901 // GL_ARB_vertex_array_object
Jamie Madill60c65552017-05-02 14:34:05 -0400902 ASSIGN_WITH_EXT("GL_ARB_vertex_array_object", "glBindVertexArray", bindVertexArray);
903 ASSIGN_WITH_EXT("GL_ARB_vertex_array_object", "glDeleteVertexArrays", deleteVertexArrays);
904 ASSIGN_WITH_EXT("GL_ARB_vertex_array_object", "glGenVertexArrays", genVertexArrays);
905 ASSIGN_WITH_EXT("GL_ARB_vertex_array_object", "glIsVertexArray", isVertexArray);
Geoff Lang92139c22015-07-20 15:32:37 -0400906
Jiawei-Shao2597fb62016-12-09 16:38:02 +0800907 // GL_ARB_vertex_attrib_binding
Jamie Madill60c65552017-05-02 14:34:05 -0400908 ASSIGN_WITH_EXT("GL_ARB_vertex_attrib_binding", "glBindVertexBuffer", bindVertexBuffer);
909 ASSIGN_WITH_EXT("GL_ARB_vertex_attrib_binding", "glVertexAttribFormat", vertexAttribFormat);
910 ASSIGN_WITH_EXT("GL_ARB_vertex_attrib_binding", "glVertexAttribIFormat", vertexAttribIFormat);
911 ASSIGN_WITH_EXT("GL_ARB_vertex_attrib_binding", "glVertexAttribLFormat", vertexAttribLFormat);
912 ASSIGN_WITH_EXT("GL_ARB_vertex_attrib_binding", "glVertexAttribBinding", vertexAttribBinding);
913 ASSIGN_WITH_EXT("GL_ARB_vertex_attrib_binding", "glVertexBindingDivisor", vertexBindingDivisor);
Jiawei-Shao2597fb62016-12-09 16:38:02 +0800914
Geoff Lang92139c22015-07-20 15:32:37 -0400915 // GL_ARB_sync
Jamie Madill60c65552017-05-02 14:34:05 -0400916 ASSIGN_WITH_EXT("GL_ARB_sync", "glClientWaitSync", clientWaitSync);
917 ASSIGN_WITH_EXT("GL_ARB_sync", "glDeleteSync", deleteSync);
918 ASSIGN_WITH_EXT("GL_ARB_sync", "glFenceSync", fenceSync);
919 ASSIGN_WITH_EXT("GL_ARB_sync", "glGetInteger64i_v", getInteger64i_v);
920 ASSIGN_WITH_EXT("GL_ARB_sync", "glGetInteger64v", getInteger64v);
921 ASSIGN_WITH_EXT("GL_ARB_sync", "glGetSynciv", getSynciv);
922 ASSIGN_WITH_EXT("GL_ARB_sync", "glIsSync", isSync);
923 ASSIGN_WITH_EXT("GL_ARB_sync", "glWaitSync", waitSync);
Geoff Lang92139c22015-07-20 15:32:37 -0400924
925 // GL_EXT_framebuffer_object
Jamie Madill60c65552017-05-02 14:34:05 -0400926 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glIsRenderbufferEXT", isRenderbuffer);
927 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glBindRenderbufferEXT", bindRenderbuffer);
928 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glDeleteRenderbuffersEXT", deleteRenderbuffers);
929 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glGenRenderbuffersEXT", genRenderbuffers);
930 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glRenderbufferStorageEXT", renderbufferStorage);
931 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glGetRenderbufferParameterivEXT", getRenderbufferParameteriv);
932 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glIsFramebufferEXT", isFramebuffer);
933 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glBindFramebufferEXT", bindFramebuffer);
934 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glDeleteFramebuffersEXT", deleteFramebuffers);
935 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glGenFramebuffersEXT", genFramebuffers);
936 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glCheckFramebufferStatusEXT", checkFramebufferStatus);
937 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glFramebufferTexture1DEXT", framebufferTexture1D);
938 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glFramebufferTexture2DEXT", framebufferTexture2D);
939 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glFramebufferTexture3DEXT", framebufferTexture3D);
940 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glFramebufferRenderbufferEXT", framebufferRenderbuffer);
941 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glGetFramebufferAttachmentParameterivEXT", getFramebufferAttachmentParameteriv);
942 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glGenerateMipmapEXT", generateMipmap);
Geoff Lang92139c22015-07-20 15:32:37 -0400943
944 // GL_EXT_framebuffer_blit
Jamie Madill60c65552017-05-02 14:34:05 -0400945 ASSIGN_WITH_EXT("GL_EXT_framebuffer_blit", "glBlitFramebufferEXT", blitFramebuffer);
Geoff Lang92139c22015-07-20 15:32:37 -0400946
947 // GL_KHR_debug
Jamie Madill60c65552017-05-02 14:34:05 -0400948 ASSIGN_WITH_EXT("GL_KHR_debug", "glDebugMessageControl", debugMessageControl);
949 ASSIGN_WITH_EXT("GL_KHR_debug", "glDebugMessageInsert", debugMessageInsert);
950 ASSIGN_WITH_EXT("GL_KHR_debug", "glDebugMessageCallback", debugMessageCallback);
951 ASSIGN_WITH_EXT("GL_KHR_debug", "glGetDebugMessageLog", getDebugMessageLog);
952 ASSIGN_WITH_EXT("GL_KHR_debug", "glGetPointerv", getPointerv);
953 ASSIGN_WITH_EXT("GL_KHR_debug", "glPushDebugGroup", pushDebugGroup);
954 ASSIGN_WITH_EXT("GL_KHR_debug", "glPopDebugGroup", popDebugGroup);
955 ASSIGN_WITH_EXT("GL_KHR_debug", "glObjectLabel", objectLabel);
956 ASSIGN_WITH_EXT("GL_KHR_debug", "glGetObjectLabel", getObjectLabel);
957 ASSIGN_WITH_EXT("GL_KHR_debug", "glObjectPtrLabel", objectPtrLabel);
958 ASSIGN_WITH_EXT("GL_KHR_debug", "glGetObjectPtrLabel", getObjectPtrLabel);
Geoff Lang92139c22015-07-20 15:32:37 -0400959
960 // GL_ARB_internalformat_query
Jamie Madill60c65552017-05-02 14:34:05 -0400961 ASSIGN_WITH_EXT("GL_ARB_internalformat_query", "glGetInternalformativ", getInternalformativ);
Geoff Lang92139c22015-07-20 15:32:37 -0400962
963 // GL_ARB_ES2_compatibility
Jamie Madill60c65552017-05-02 14:34:05 -0400964 ASSIGN_WITH_EXT("GL_ARB_ES2_compatibility", "glReleaseShaderCompiler", releaseShaderCompiler);
965 ASSIGN_WITH_EXT("GL_ARB_ES2_compatibility", "glShaderBinary", shaderBinary);
966 ASSIGN_WITH_EXT("GL_ARB_ES2_compatibility", "glGetShaderPrecisionFormat", getShaderPrecisionFormat);
967 ASSIGN_WITH_EXT("GL_ARB_ES2_compatibility", "glDepthRangef", depthRangef);
968 ASSIGN_WITH_EXT("GL_ARB_ES2_compatibility", "glClearDepthf", clearDepthf);
Geoff Lang92139c22015-07-20 15:32:37 -0400969
Geoff Lang3cf12ce2015-08-27 14:40:48 -0400970 // GL_ARB_instanced_arrays
Jamie Madill60c65552017-05-02 14:34:05 -0400971 ASSIGN_WITH_EXT("GL_ARB_instanced_arrays", "glVertexAttribDivisorARB", vertexAttribDivisor);
Geoff Lang3cf12ce2015-08-27 14:40:48 -0400972
973 // GL_EXT_draw_instanced
Jamie Madill60c65552017-05-02 14:34:05 -0400974 ASSIGN_WITH_EXT("GL_EXT_draw_instanced", "glDrawArraysInstancedEXT", drawArraysInstanced);
975 ASSIGN_WITH_EXT("GL_EXT_draw_instanced", "glDrawElementsInstancedEXT", drawElementsInstanced);
Geoff Lang3cf12ce2015-08-27 14:40:48 -0400976
977 // GL_ARB_draw_instanced
Jamie Madill60c65552017-05-02 14:34:05 -0400978 ASSIGN_WITH_EXT("GL_ARB_draw_instanced", "glDrawArraysInstancedARB", drawArraysInstanced);
979 ASSIGN_WITH_EXT("GL_ARB_draw_instanced", "glDrawElementsInstancedARB", drawElementsInstanced);
Geoff Lang3cf12ce2015-08-27 14:40:48 -0400980
Geoff Lang8bd4b6c2015-10-01 16:17:48 -0400981 // GL_ARB_sampler_objects
Jamie Madill60c65552017-05-02 14:34:05 -0400982 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glGenSamplers", genSamplers);
983 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glDeleteSamplers", deleteSamplers);
984 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glIsSampler", isSampler);
985 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glBindSampler", bindSampler);
986 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glSamplerParameteri", samplerParameteri);
987 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glSamplerParameterf", samplerParameterf);
988 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glSamplerParameteriv", samplerParameteriv);
989 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glSamplerParameterfv", samplerParameterfv);
990 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glSamplerParameterIiv", samplerParameterIiv);
991 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glSamplerParameterIuiv", samplerParameterIuiv);
992 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glGetSamplerParameteriv", getSamplerParameteriv);
993 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glGetSamplerParameterfv", getSamplerParameterfv);
994 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glGetSamplerParameterIiv", getSamplerParameterIiv);
995 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glGetSamplerParameterIuiv", getSamplerParameterIuiv);
Geoff Lang8bd4b6c2015-10-01 16:17:48 -0400996
Geoff Langf0aa8422015-09-29 15:08:34 -0400997 // GL_ARB_occlusion_query
Jamie Madill60c65552017-05-02 14:34:05 -0400998 ASSIGN_WITH_EXT("GL_ARB_occlusion_query", "glGenQueriesARB", genQueries);
999 ASSIGN_WITH_EXT("GL_ARB_occlusion_query", "glDeleteQueriesARB", deleteQueries);
1000 ASSIGN_WITH_EXT("GL_ARB_occlusion_query", "glIsQueryARB", isQuery);
1001 ASSIGN_WITH_EXT("GL_ARB_occlusion_query", "glBeginQueryARB", beginQuery);
1002 ASSIGN_WITH_EXT("GL_ARB_occlusion_query", "glEndQueryARB", endQuery);
1003 ASSIGN_WITH_EXT("GL_ARB_occlusion_query", "glGetQueryivARB", getQueryiv);
1004 ASSIGN_WITH_EXT("GL_ARB_occlusion_query", "glGetQueryObjectivARB", getQueryObjectiv);
1005 ASSIGN_WITH_EXT("GL_ARB_occlusion_query", "glGetQueryObjectuivARB", getQueryObjectuiv);
Geoff Langf0aa8422015-09-29 15:08:34 -04001006
Geoff Lang1a683462015-09-29 15:09:59 -04001007 // EXT_transform_feedback
Jamie Madill60c65552017-05-02 14:34:05 -04001008 ASSIGN_WITH_EXT("EXT_transform_feedback", "glBindBufferRangeEXT", bindBufferRange);
1009 ASSIGN_WITH_EXT("EXT_transform_feedback", "glBindBufferBaseEXT", bindBufferBase);
1010 ASSIGN_WITH_EXT("EXT_transform_feedback", "glBeginTransformFeedbackEXT", beginTransformFeedback);
1011 ASSIGN_WITH_EXT("EXT_transform_feedback", "glEndTransformFeedbackEXT", endTransformFeedback);
1012 ASSIGN_WITH_EXT("EXT_transform_feedback", "glTransformFeedbackVaryingsEXT", transformFeedbackVaryings);
1013 ASSIGN_WITH_EXT("EXT_transform_feedback", "glGetTransformFeedbackVaryingEXT", getTransformFeedbackVarying);
Geoff Lang1a683462015-09-29 15:09:59 -04001014
1015 // GL_ARB_transform_feedback2
Jamie Madill60c65552017-05-02 14:34:05 -04001016 ASSIGN_WITH_EXT("GL_ARB_transform_feedback2", "glBindTransformFeedback", bindTransformFeedback);
1017 ASSIGN_WITH_EXT("GL_ARB_transform_feedback2", "glDeleteTransformFeedbacks", deleteTransformFeedbacks);
1018 ASSIGN_WITH_EXT("GL_ARB_transform_feedback2", "glGenTransformFeedbacks", genTransformFeedbacks);
1019 ASSIGN_WITH_EXT("GL_ARB_transform_feedback2", "glIsTransformFeedback", isTransformFeedback);
1020 ASSIGN_WITH_EXT("GL_ARB_transform_feedback2", "glPauseTransformFeedback", pauseTransformFeedback);
1021 ASSIGN_WITH_EXT("GL_ARB_transform_feedback2", "glResumeTransformFeedback", resumeTransformFeedback);
1022 ASSIGN_WITH_EXT("GL_ARB_transform_feedback2", "glDrawTransformFeedback", drawTransformFeedback);
Geoff Lang1a683462015-09-29 15:09:59 -04001023
1024 // GL_ARB_transform_feedback3
Jamie Madill60c65552017-05-02 14:34:05 -04001025 ASSIGN_WITH_EXT("GL_ARB_transform_feedback3", "glDrawTransformFeedbackStream", drawTransformFeedbackStream);
1026 ASSIGN_WITH_EXT("GL_ARB_transform_feedback3", "glBeginQueryIndexed", beginQueryIndexed);
1027 ASSIGN_WITH_EXT("GL_ARB_transform_feedback3", "glEndQueryIndexed", endQueryIndexed);
1028 ASSIGN_WITH_EXT("GL_ARB_transform_feedback3", "glGetQueryIndexediv", getQueryIndexediv);
Geoff Lang1a683462015-09-29 15:09:59 -04001029
Geoff Lang65a0be92015-10-02 09:57:30 -04001030 // GL_ARB_get_program_binary
Jamie Madill60c65552017-05-02 14:34:05 -04001031 ASSIGN_WITH_EXT("GL_ARB_get_program_binary", "glGetProgramBinary", getProgramBinary);
1032 ASSIGN_WITH_EXT("GL_ARB_get_program_binary", "glProgramBinary", programBinary);
1033 ASSIGN_WITH_EXT("GL_ARB_get_program_binary", "glProgramParameteri", programParameteri);
Geoff Lang65a0be92015-10-02 09:57:30 -04001034
Corentin Wallezb920e362016-08-03 18:19:41 -04001035 // GL_ARB_robustness
Jamie Madill60c65552017-05-02 14:34:05 -04001036 ASSIGN_WITH_EXT("GL_ARB_robustness", "glGetGraphicsResetStatusARB", getGraphicsResetStatus);
Corentin Wallezb920e362016-08-03 18:19:41 -04001037
1038 // GL_KHR_robustness
Jamie Madill60c65552017-05-02 14:34:05 -04001039 ASSIGN_WITH_EXT("GL_KHR_robustness", "glGetGraphicsResetStatus", getGraphicsResetStatus);
Corentin Wallezb920e362016-08-03 18:19:41 -04001040
Geoff Lang57ce9ea2016-11-24 12:03:14 -05001041 // GL_ARB_invalidate_subdata
Jamie Madill60c65552017-05-02 14:34:05 -04001042 ASSIGN_WITH_EXT("GL_ARB_invalidate_subdata", "glInvalidateTexSubImage", invalidateTexSubImage);
1043 ASSIGN_WITH_EXT("GL_ARB_invalidate_subdata", "glInvalidateTexImage", invalidateTexImage);
1044 ASSIGN_WITH_EXT("GL_ARB_invalidate_subdata", "glInvalidateBufferSubData", invalidateBufferSubData);
1045 ASSIGN_WITH_EXT("GL_ARB_invalidate_subdata", "glInvalidateBufferData", invalidateBufferData);
1046 ASSIGN_WITH_EXT("GL_ARB_invalidate_subdata", "glInvalidateFramebuffer", invalidateFramebuffer);
1047 ASSIGN_WITH_EXT("GL_ARB_invalidate_subdata", "glInvalidateSubFramebuffer", invalidateSubFramebuffer);
Geoff Lang57ce9ea2016-11-24 12:03:14 -05001048
Geoff Lang56cf9af2015-02-17 10:16:49 -05001049 // 1.0
Geoff Lang08dcfed2015-05-25 13:38:42 -04001050 if (isAtLeastGL(gl::Version(1, 0)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001051 {
Jamie Madill60c65552017-05-02 14:34:05 -04001052 ASSIGN("glBlendFunc", blendFunc);
1053 ASSIGN("glClear", clear);
1054 ASSIGN("glClearColor", clearColor);
1055 ASSIGN("glClearDepth", clearDepth);
1056 ASSIGN("glClearStencil", clearStencil);
1057 ASSIGN("glColorMask", colorMask);
1058 ASSIGN("glCullFace", cullFace);
1059 ASSIGN("glDepthFunc", depthFunc);
1060 ASSIGN("glDepthMask", depthMask);
1061 ASSIGN("glDepthRange", depthRange);
1062 ASSIGN("glDisable", disable);
1063 ASSIGN("glDrawBuffer", drawBuffer);
1064 ASSIGN("glEnable", enable);
1065 ASSIGN("glFinish", finish);
1066 ASSIGN("glFlush", flush);
1067 ASSIGN("glFrontFace", frontFace);
1068 ASSIGN("glGetBooleanv", getBooleanv);
1069 ASSIGN("glGetDoublev", getDoublev);
1070 ASSIGN("glGetError", getError);
1071 ASSIGN("glGetFloatv", getFloatv);
1072 ASSIGN("glGetIntegerv", getIntegerv);
1073 ASSIGN("glGetString", getString);
1074 ASSIGN("glGetTexImage", getTexImage);
1075 ASSIGN("glGetTexLevelParameterfv", getTexLevelParameterfv);
1076 ASSIGN("glGetTexLevelParameteriv", getTexLevelParameteriv);
1077 ASSIGN("glGetTexParameterfv", getTexParameterfv);
1078 ASSIGN("glGetTexParameteriv", getTexParameteriv);
1079 ASSIGN("glHint", hint);
1080 ASSIGN("glIsEnabled", isEnabled);
1081 ASSIGN("glLineWidth", lineWidth);
1082 ASSIGN("glLogicOp", logicOp);
1083 ASSIGN("glPixelStoref", pixelStoref);
1084 ASSIGN("glPixelStorei", pixelStorei);
1085 ASSIGN("glPointSize", pointSize);
1086 ASSIGN("glPolygonMode", polygonMode);
1087 ASSIGN("glReadBuffer", readBuffer);
1088 ASSIGN("glReadPixels", readPixels);
1089 ASSIGN("glScissor", scissor);
1090 ASSIGN("glStencilFunc", stencilFunc);
1091 ASSIGN("glStencilMask", stencilMask);
1092 ASSIGN("glStencilOp", stencilOp);
1093 ASSIGN("glTexImage1D", texImage1D);
1094 ASSIGN("glTexImage2D", texImage2D);
1095 ASSIGN("glTexParameterf", texParameterf);
1096 ASSIGN("glTexParameterfv", texParameterfv);
1097 ASSIGN("glTexParameteri", texParameteri);
1098 ASSIGN("glTexParameteriv", texParameteriv);
1099 ASSIGN("glViewport", viewport);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001100 }
1101
1102 // 1.1
Geoff Lang08dcfed2015-05-25 13:38:42 -04001103 if (isAtLeastGL(gl::Version(1, 1)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001104 {
Jamie Madill60c65552017-05-02 14:34:05 -04001105 ASSIGN("glBindTexture", bindTexture);
1106 ASSIGN("glCopyTexImage1D", copyTexImage1D);
1107 ASSIGN("glCopyTexImage2D", copyTexImage2D);
1108 ASSIGN("glCopyTexSubImage1D", copyTexSubImage1D);
1109 ASSIGN("glCopyTexSubImage2D", copyTexSubImage2D);
1110 ASSIGN("glDeleteTextures", deleteTextures);
1111 ASSIGN("glDrawArrays", drawArrays);
1112 ASSIGN("glDrawElements", drawElements);
1113 ASSIGN("glGenTextures", genTextures);
1114 ASSIGN("glIsTexture", isTexture);
1115 ASSIGN("glPolygonOffset", polygonOffset);
1116 ASSIGN("glTexSubImage1D", texSubImage1D);
1117 ASSIGN("glTexSubImage2D", texSubImage2D);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001118 }
1119
1120 // 1.2
Geoff Lang08dcfed2015-05-25 13:38:42 -04001121 if (isAtLeastGL(gl::Version(1, 2)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001122 {
Jamie Madill60c65552017-05-02 14:34:05 -04001123 ASSIGN("glBlendColor", blendColor);
1124 ASSIGN("glBlendEquation", blendEquation);
1125 ASSIGN("glCopyTexSubImage3D", copyTexSubImage3D);
1126 ASSIGN("glDrawRangeElements", drawRangeElements);
1127 ASSIGN("glTexImage3D", texImage3D);
1128 ASSIGN("glTexSubImage3D", texSubImage3D);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001129 }
1130
1131 // 1.3
Geoff Lang08dcfed2015-05-25 13:38:42 -04001132 if (isAtLeastGL(gl::Version(1, 3)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001133 {
Jamie Madill60c65552017-05-02 14:34:05 -04001134 ASSIGN("glActiveTexture", activeTexture);
1135 ASSIGN("glCompressedTexImage1D", compressedTexImage1D);
1136 ASSIGN("glCompressedTexImage2D", compressedTexImage2D);
1137 ASSIGN("glCompressedTexImage3D", compressedTexImage3D);
1138 ASSIGN("glCompressedTexSubImage1D", compressedTexSubImage1D);
1139 ASSIGN("glCompressedTexSubImage2D", compressedTexSubImage2D);
1140 ASSIGN("glCompressedTexSubImage3D", compressedTexSubImage3D);
1141 ASSIGN("glGetCompressedTexImage", getCompressedTexImage);
1142 ASSIGN("glSampleCoverage", sampleCoverage);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001143 }
1144
1145 // 1.4
Geoff Lang08dcfed2015-05-25 13:38:42 -04001146 if (isAtLeastGL(gl::Version(1, 4)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001147 {
Jamie Madill60c65552017-05-02 14:34:05 -04001148 ASSIGN("glBlendFuncSeparate", blendFuncSeparate);
1149 ASSIGN("glMultiDrawArrays", multiDrawArrays);
1150 ASSIGN("glMultiDrawElements", multiDrawElements);
1151 ASSIGN("glPointParameterf", pointParameterf);
1152 ASSIGN("glPointParameterfv", pointParameterfv);
1153 ASSIGN("glPointParameteri", pointParameteri);
1154 ASSIGN("glPointParameteriv", pointParameteriv);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001155 }
1156
1157 // 1.5
Geoff Lang08dcfed2015-05-25 13:38:42 -04001158 if (isAtLeastGL(gl::Version(1, 5)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001159 {
Jamie Madill60c65552017-05-02 14:34:05 -04001160 ASSIGN("glBeginQuery", beginQuery);
1161 ASSIGN("glBindBuffer", bindBuffer);
1162 ASSIGN("glBufferData", bufferData);
1163 ASSIGN("glBufferSubData", bufferSubData);
1164 ASSIGN("glDeleteBuffers", deleteBuffers);
1165 ASSIGN("glDeleteQueries", deleteQueries);
1166 ASSIGN("glEndQuery", endQuery);
1167 ASSIGN("glGenBuffers", genBuffers);
1168 ASSIGN("glGenQueries", genQueries);
1169 ASSIGN("glGetBufferParameteriv", getBufferParameteriv);
1170 ASSIGN("glGetBufferPointerv", getBufferPointerv);
1171 ASSIGN("glGetBufferSubData", getBufferSubData);
1172 ASSIGN("glGetQueryObjectiv", getQueryObjectiv);
1173 ASSIGN("glGetQueryObjectuiv", getQueryObjectuiv);
1174 ASSIGN("glGetQueryiv", getQueryiv);
1175 ASSIGN("glIsBuffer", isBuffer);
1176 ASSIGN("glIsQuery", isQuery);
1177 ASSIGN("glMapBuffer", mapBuffer);
1178 ASSIGN("glUnmapBuffer", unmapBuffer);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001179 }
1180
1181 // 2.0
Geoff Lang08dcfed2015-05-25 13:38:42 -04001182 if (isAtLeastGL(gl::Version(2, 0)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001183 {
Jamie Madill60c65552017-05-02 14:34:05 -04001184 ASSIGN("glAttachShader", attachShader);
1185 ASSIGN("glBindAttribLocation", bindAttribLocation);
1186 ASSIGN("glBlendEquationSeparate", blendEquationSeparate);
1187 ASSIGN("glCompileShader", compileShader);
1188 ASSIGN("glCreateProgram", createProgram);
1189 ASSIGN("glCreateShader", createShader);
1190 ASSIGN("glDeleteProgram", deleteProgram);
1191 ASSIGN("glDeleteShader", deleteShader);
1192 ASSIGN("glDetachShader", detachShader);
1193 ASSIGN("glDisableVertexAttribArray", disableVertexAttribArray);
1194 ASSIGN("glDrawBuffers", drawBuffers);
1195 ASSIGN("glEnableVertexAttribArray", enableVertexAttribArray);
1196 ASSIGN("glGetActiveAttrib", getActiveAttrib);
1197 ASSIGN("glGetActiveUniform", getActiveUniform);
1198 ASSIGN("glGetAttachedShaders", getAttachedShaders);
1199 ASSIGN("glGetAttribLocation", getAttribLocation);
1200 ASSIGN("glGetProgramInfoLog", getProgramInfoLog);
1201 ASSIGN("glGetProgramiv", getProgramiv);
1202 ASSIGN("glGetShaderInfoLog", getShaderInfoLog);
1203 ASSIGN("glGetShaderSource", getShaderSource);
1204 ASSIGN("glGetShaderiv", getShaderiv);
1205 ASSIGN("glGetUniformLocation", getUniformLocation);
1206 ASSIGN("glGetUniformfv", getUniformfv);
1207 ASSIGN("glGetUniformiv", getUniformiv);
1208 ASSIGN("glGetVertexAttribPointerv", getVertexAttribPointerv);
1209 ASSIGN("glGetVertexAttribdv", getVertexAttribdv);
1210 ASSIGN("glGetVertexAttribfv", getVertexAttribfv);
1211 ASSIGN("glGetVertexAttribiv", getVertexAttribiv);
1212 ASSIGN("glIsProgram", isProgram);
1213 ASSIGN("glIsShader", isShader);
1214 ASSIGN("glLinkProgram", linkProgram);
1215 ASSIGN("glShaderSource", shaderSource);
1216 ASSIGN("glStencilFuncSeparate", stencilFuncSeparate);
1217 ASSIGN("glStencilMaskSeparate", stencilMaskSeparate);
1218 ASSIGN("glStencilOpSeparate", stencilOpSeparate);
1219 ASSIGN("glUniform1f", uniform1f);
1220 ASSIGN("glUniform1fv", uniform1fv);
1221 ASSIGN("glUniform1i", uniform1i);
1222 ASSIGN("glUniform1iv", uniform1iv);
1223 ASSIGN("glUniform2f", uniform2f);
1224 ASSIGN("glUniform2fv", uniform2fv);
1225 ASSIGN("glUniform2i", uniform2i);
1226 ASSIGN("glUniform2iv", uniform2iv);
1227 ASSIGN("glUniform3f", uniform3f);
1228 ASSIGN("glUniform3fv", uniform3fv);
1229 ASSIGN("glUniform3i", uniform3i);
1230 ASSIGN("glUniform3iv", uniform3iv);
1231 ASSIGN("glUniform4f", uniform4f);
1232 ASSIGN("glUniform4fv", uniform4fv);
1233 ASSIGN("glUniform4i", uniform4i);
1234 ASSIGN("glUniform4iv", uniform4iv);
1235 ASSIGN("glUniformMatrix2fv", uniformMatrix2fv);
1236 ASSIGN("glUniformMatrix3fv", uniformMatrix3fv);
1237 ASSIGN("glUniformMatrix4fv", uniformMatrix4fv);
1238 ASSIGN("glUseProgram", useProgram);
1239 ASSIGN("glValidateProgram", validateProgram);
1240 ASSIGN("glVertexAttrib1d", vertexAttrib1d);
1241 ASSIGN("glVertexAttrib1dv", vertexAttrib1dv);
1242 ASSIGN("glVertexAttrib1f", vertexAttrib1f);
1243 ASSIGN("glVertexAttrib1fv", vertexAttrib1fv);
1244 ASSIGN("glVertexAttrib1s", vertexAttrib1s);
1245 ASSIGN("glVertexAttrib1sv", vertexAttrib1sv);
1246 ASSIGN("glVertexAttrib2d", vertexAttrib2d);
1247 ASSIGN("glVertexAttrib2dv", vertexAttrib2dv);
1248 ASSIGN("glVertexAttrib2f", vertexAttrib2f);
1249 ASSIGN("glVertexAttrib2fv", vertexAttrib2fv);
1250 ASSIGN("glVertexAttrib2s", vertexAttrib2s);
1251 ASSIGN("glVertexAttrib2sv", vertexAttrib2sv);
1252 ASSIGN("glVertexAttrib3d", vertexAttrib3d);
1253 ASSIGN("glVertexAttrib3dv", vertexAttrib3dv);
1254 ASSIGN("glVertexAttrib3f", vertexAttrib3f);
1255 ASSIGN("glVertexAttrib3fv", vertexAttrib3fv);
1256 ASSIGN("glVertexAttrib3s", vertexAttrib3s);
1257 ASSIGN("glVertexAttrib3sv", vertexAttrib3sv);
1258 ASSIGN("glVertexAttrib4Nbv", vertexAttrib4Nbv);
1259 ASSIGN("glVertexAttrib4Niv", vertexAttrib4Niv);
1260 ASSIGN("glVertexAttrib4Nsv", vertexAttrib4Nsv);
1261 ASSIGN("glVertexAttrib4Nub", vertexAttrib4Nub);
1262 ASSIGN("glVertexAttrib4Nubv", vertexAttrib4Nubv);
1263 ASSIGN("glVertexAttrib4Nuiv", vertexAttrib4Nuiv);
1264 ASSIGN("glVertexAttrib4Nusv", vertexAttrib4Nusv);
1265 ASSIGN("glVertexAttrib4bv", vertexAttrib4bv);
1266 ASSIGN("glVertexAttrib4d", vertexAttrib4d);
1267 ASSIGN("glVertexAttrib4dv", vertexAttrib4dv);
1268 ASSIGN("glVertexAttrib4f", vertexAttrib4f);
1269 ASSIGN("glVertexAttrib4fv", vertexAttrib4fv);
1270 ASSIGN("glVertexAttrib4iv", vertexAttrib4iv);
1271 ASSIGN("glVertexAttrib4s", vertexAttrib4s);
1272 ASSIGN("glVertexAttrib4sv", vertexAttrib4sv);
1273 ASSIGN("glVertexAttrib4ubv", vertexAttrib4ubv);
1274 ASSIGN("glVertexAttrib4uiv", vertexAttrib4uiv);
1275 ASSIGN("glVertexAttrib4usv", vertexAttrib4usv);
1276 ASSIGN("glVertexAttribPointer", vertexAttribPointer);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001277 }
1278
1279 // 2.1
Geoff Lang08dcfed2015-05-25 13:38:42 -04001280 if (isAtLeastGL(gl::Version(2, 1)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001281 {
Jamie Madill60c65552017-05-02 14:34:05 -04001282 ASSIGN("glUniformMatrix2x3fv", uniformMatrix2x3fv);
1283 ASSIGN("glUniformMatrix2x4fv", uniformMatrix2x4fv);
1284 ASSIGN("glUniformMatrix3x2fv", uniformMatrix3x2fv);
1285 ASSIGN("glUniformMatrix3x4fv", uniformMatrix3x4fv);
1286 ASSIGN("glUniformMatrix4x2fv", uniformMatrix4x2fv);
1287 ASSIGN("glUniformMatrix4x3fv", uniformMatrix4x3fv);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001288 }
1289
1290 // 3.0
Geoff Lang08dcfed2015-05-25 13:38:42 -04001291 if (isAtLeastGL(gl::Version(3, 0)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001292 {
Jamie Madill60c65552017-05-02 14:34:05 -04001293 ASSIGN("glBeginConditionalRender", beginConditionalRender);
1294 ASSIGN("glBeginTransformFeedback", beginTransformFeedback);
1295 ASSIGN("glBindBufferBase", bindBufferBase);
1296 ASSIGN("glBindBufferRange", bindBufferRange);
1297 ASSIGN("glBindFragDataLocation", bindFragDataLocation);
1298 ASSIGN("glBindFramebuffer", bindFramebuffer);
1299 ASSIGN("glBindRenderbuffer", bindRenderbuffer);
1300 ASSIGN("glBindVertexArray", bindVertexArray);
1301 ASSIGN("glBlitFramebuffer", blitFramebuffer);
1302 ASSIGN("glCheckFramebufferStatus", checkFramebufferStatus);
1303 ASSIGN("glClampColor", clampColor);
1304 ASSIGN("glClearBufferfi", clearBufferfi);
1305 ASSIGN("glClearBufferfv", clearBufferfv);
1306 ASSIGN("glClearBufferiv", clearBufferiv);
1307 ASSIGN("glClearBufferuiv", clearBufferuiv);
1308 ASSIGN("glColorMaski", colorMaski);
1309 ASSIGN("glDeleteFramebuffers", deleteFramebuffers);
1310 ASSIGN("glDeleteRenderbuffers", deleteRenderbuffers);
1311 ASSIGN("glDeleteVertexArrays", deleteVertexArrays);
1312 ASSIGN("glDisablei", disablei);
1313 ASSIGN("glEnablei", enablei);
1314 ASSIGN("glEndConditionalRender", endConditionalRender);
1315 ASSIGN("glEndTransformFeedback", endTransformFeedback);
1316 ASSIGN("glFlushMappedBufferRange", flushMappedBufferRange);
1317 ASSIGN("glFramebufferRenderbuffer", framebufferRenderbuffer);
1318 ASSIGN("glFramebufferTexture1D", framebufferTexture1D);
1319 ASSIGN("glFramebufferTexture2D", framebufferTexture2D);
1320 ASSIGN("glFramebufferTexture3D", framebufferTexture3D);
1321 ASSIGN("glFramebufferTextureLayer", framebufferTextureLayer);
1322 ASSIGN("glGenFramebuffers", genFramebuffers);
1323 ASSIGN("glGenRenderbuffers", genRenderbuffers);
1324 ASSIGN("glGenVertexArrays", genVertexArrays);
1325 ASSIGN("glGenerateMipmap", generateMipmap);
1326 ASSIGN("glGetBooleani_v", getBooleani_v);
1327 ASSIGN("glGetFragDataLocation", getFragDataLocation);
1328 ASSIGN("glGetFramebufferAttachmentParameteriv", getFramebufferAttachmentParameteriv);
1329 ASSIGN("glGetIntegeri_v", getIntegeri_v);
1330 ASSIGN("glGetRenderbufferParameteriv", getRenderbufferParameteriv);
1331 ASSIGN("glGetStringi", getStringi);
1332 ASSIGN("glGetTexParameterIiv", getTexParameterIiv);
1333 ASSIGN("glGetTexParameterIuiv", getTexParameterIuiv);
1334 ASSIGN("glGetTransformFeedbackVarying", getTransformFeedbackVarying);
1335 ASSIGN("glGetUniformuiv", getUniformuiv);
1336 ASSIGN("glGetVertexAttribIiv", getVertexAttribIiv);
1337 ASSIGN("glGetVertexAttribIuiv", getVertexAttribIuiv);
1338 ASSIGN("glIsEnabledi", isEnabledi);
1339 ASSIGN("glIsFramebuffer", isFramebuffer);
1340 ASSIGN("glIsRenderbuffer", isRenderbuffer);
1341 ASSIGN("glIsVertexArray", isVertexArray);
1342 ASSIGN("glMapBufferRange", mapBufferRange);
1343 ASSIGN("glRenderbufferStorage", renderbufferStorage);
1344 ASSIGN("glRenderbufferStorageMultisample", renderbufferStorageMultisample);
1345 ASSIGN("glTexParameterIiv", texParameterIiv);
1346 ASSIGN("glTexParameterIuiv", texParameterIuiv);
1347 ASSIGN("glTransformFeedbackVaryings", transformFeedbackVaryings);
1348 ASSIGN("glUniform1ui", uniform1ui);
1349 ASSIGN("glUniform1uiv", uniform1uiv);
1350 ASSIGN("glUniform2ui", uniform2ui);
1351 ASSIGN("glUniform2uiv", uniform2uiv);
1352 ASSIGN("glUniform3ui", uniform3ui);
1353 ASSIGN("glUniform3uiv", uniform3uiv);
1354 ASSIGN("glUniform4ui", uniform4ui);
1355 ASSIGN("glUniform4uiv", uniform4uiv);
1356 ASSIGN("glVertexAttribI1i", vertexAttribI1i);
1357 ASSIGN("glVertexAttribI1iv", vertexAttribI1iv);
1358 ASSIGN("glVertexAttribI1ui", vertexAttribI1ui);
1359 ASSIGN("glVertexAttribI1uiv", vertexAttribI1uiv);
1360 ASSIGN("glVertexAttribI2i", vertexAttribI2i);
1361 ASSIGN("glVertexAttribI2iv", vertexAttribI2iv);
1362 ASSIGN("glVertexAttribI2ui", vertexAttribI2ui);
1363 ASSIGN("glVertexAttribI2uiv", vertexAttribI2uiv);
1364 ASSIGN("glVertexAttribI3i", vertexAttribI3i);
1365 ASSIGN("glVertexAttribI3iv", vertexAttribI3iv);
1366 ASSIGN("glVertexAttribI3ui", vertexAttribI3ui);
1367 ASSIGN("glVertexAttribI3uiv", vertexAttribI3uiv);
1368 ASSIGN("glVertexAttribI4bv", vertexAttribI4bv);
1369 ASSIGN("glVertexAttribI4i", vertexAttribI4i);
1370 ASSIGN("glVertexAttribI4iv", vertexAttribI4iv);
1371 ASSIGN("glVertexAttribI4sv", vertexAttribI4sv);
1372 ASSIGN("glVertexAttribI4ubv", vertexAttribI4ubv);
1373 ASSIGN("glVertexAttribI4ui", vertexAttribI4ui);
1374 ASSIGN("glVertexAttribI4uiv", vertexAttribI4uiv);
1375 ASSIGN("glVertexAttribI4usv", vertexAttribI4usv);
1376 ASSIGN("glVertexAttribIPointer", vertexAttribIPointer);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001377 }
1378
1379 // 3.1
Geoff Lang08dcfed2015-05-25 13:38:42 -04001380 if (isAtLeastGL(gl::Version(3, 1)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001381 {
Jamie Madill60c65552017-05-02 14:34:05 -04001382 ASSIGN("glCopyBufferSubData", copyBufferSubData);
1383 ASSIGN("glDrawArraysInstanced", drawArraysInstanced);
1384 ASSIGN("glDrawElementsInstanced", drawElementsInstanced);
1385 ASSIGN("glGetActiveUniformBlockName", getActiveUniformBlockName);
1386 ASSIGN("glGetActiveUniformBlockiv", getActiveUniformBlockiv);
1387 ASSIGN("glGetActiveUniformName", getActiveUniformName);
1388 ASSIGN("glGetActiveUniformsiv", getActiveUniformsiv);
1389 ASSIGN("glGetUniformBlockIndex", getUniformBlockIndex);
1390 ASSIGN("glGetUniformIndices", getUniformIndices);
1391 ASSIGN("glPrimitiveRestartIndex", primitiveRestartIndex);
1392 ASSIGN("glTexBuffer", texBuffer);
1393 ASSIGN("glUniformBlockBinding", uniformBlockBinding);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001394 }
1395
1396 // 3.2
Geoff Lang08dcfed2015-05-25 13:38:42 -04001397 if (isAtLeastGL(gl::Version(3, 2)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001398 {
Jamie Madill60c65552017-05-02 14:34:05 -04001399 ASSIGN("glClientWaitSync", clientWaitSync);
1400 ASSIGN("glDeleteSync", deleteSync);
1401 ASSIGN("glDrawElementsBaseVertex", drawElementsBaseVertex);
1402 ASSIGN("glDrawElementsInstancedBaseVertex", drawElementsInstancedBaseVertex);
1403 ASSIGN("glDrawRangeElementsBaseVertex", drawRangeElementsBaseVertex);
1404 ASSIGN("glFenceSync", fenceSync);
1405 ASSIGN("glFramebufferTexture", framebufferTexture);
1406 ASSIGN("glGetBufferParameteri64v", getBufferParameteri64v);
1407 ASSIGN("glGetInteger64i_v", getInteger64i_v);
1408 ASSIGN("glGetInteger64v", getInteger64v);
1409 ASSIGN("glGetMultisamplefv", getMultisamplefv);
1410 ASSIGN("glGetSynciv", getSynciv);
1411 ASSIGN("glIsSync", isSync);
1412 ASSIGN("glMultiDrawElementsBaseVertex", multiDrawElementsBaseVertex);
1413 ASSIGN("glProvokingVertex", provokingVertex);
1414 ASSIGN("glSampleMaski", sampleMaski);
1415 ASSIGN("glTexImage2DMultisample", texImage2DMultisample);
1416 ASSIGN("glTexImage3DMultisample", texImage3DMultisample);
1417 ASSIGN("glWaitSync", waitSync);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001418 }
1419
1420 // 3.3
Geoff Lang08dcfed2015-05-25 13:38:42 -04001421 if (isAtLeastGL(gl::Version(3, 3)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001422 {
Jamie Madill60c65552017-05-02 14:34:05 -04001423 ASSIGN("glBindFragDataLocationIndexed", bindFragDataLocationIndexed);
1424 ASSIGN("glBindSampler", bindSampler);
1425 ASSIGN("glDeleteSamplers", deleteSamplers);
1426 ASSIGN("glGenSamplers", genSamplers);
1427 ASSIGN("glGetFragDataIndex", getFragDataIndex);
1428 ASSIGN("glGetQueryObjecti64v", getQueryObjecti64v);
1429 ASSIGN("glGetQueryObjectui64v", getQueryObjectui64v);
1430 ASSIGN("glGetSamplerParameterIiv", getSamplerParameterIiv);
1431 ASSIGN("glGetSamplerParameterIuiv", getSamplerParameterIuiv);
1432 ASSIGN("glGetSamplerParameterfv", getSamplerParameterfv);
1433 ASSIGN("glGetSamplerParameteriv", getSamplerParameteriv);
1434 ASSIGN("glIsSampler", isSampler);
1435 ASSIGN("glQueryCounter", queryCounter);
1436 ASSIGN("glSamplerParameterIiv", samplerParameterIiv);
1437 ASSIGN("glSamplerParameterIuiv", samplerParameterIuiv);
1438 ASSIGN("glSamplerParameterf", samplerParameterf);
1439 ASSIGN("glSamplerParameterfv", samplerParameterfv);
1440 ASSIGN("glSamplerParameteri", samplerParameteri);
1441 ASSIGN("glSamplerParameteriv", samplerParameteriv);
1442 ASSIGN("glVertexAttribDivisor", vertexAttribDivisor);
1443 ASSIGN("glVertexAttribP1ui", vertexAttribP1ui);
1444 ASSIGN("glVertexAttribP1uiv", vertexAttribP1uiv);
1445 ASSIGN("glVertexAttribP2ui", vertexAttribP2ui);
1446 ASSIGN("glVertexAttribP2uiv", vertexAttribP2uiv);
1447 ASSIGN("glVertexAttribP3ui", vertexAttribP3ui);
1448 ASSIGN("glVertexAttribP3uiv", vertexAttribP3uiv);
1449 ASSIGN("glVertexAttribP4ui", vertexAttribP4ui);
1450 ASSIGN("glVertexAttribP4uiv", vertexAttribP4uiv);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001451 }
1452
1453 // 4.0
Geoff Lang08dcfed2015-05-25 13:38:42 -04001454 if (isAtLeastGL(gl::Version(4, 0)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001455 {
Jamie Madill60c65552017-05-02 14:34:05 -04001456 ASSIGN("glBeginQueryIndexed", beginQueryIndexed);
1457 ASSIGN("glBindTransformFeedback", bindTransformFeedback);
1458 ASSIGN("glBlendEquationSeparatei", blendEquationSeparatei);
1459 ASSIGN("glBlendEquationi", blendEquationi);
1460 ASSIGN("glBlendFuncSeparatei", blendFuncSeparatei);
1461 ASSIGN("glBlendFunci", blendFunci);
1462 ASSIGN("glDeleteTransformFeedbacks", deleteTransformFeedbacks);
1463 ASSIGN("glDrawArraysIndirect", drawArraysIndirect);
1464 ASSIGN("glDrawElementsIndirect", drawElementsIndirect);
1465 ASSIGN("glDrawTransformFeedback", drawTransformFeedback);
1466 ASSIGN("glDrawTransformFeedbackStream", drawTransformFeedbackStream);
1467 ASSIGN("glEndQueryIndexed", endQueryIndexed);
1468 ASSIGN("glGenTransformFeedbacks", genTransformFeedbacks);
1469 ASSIGN("glGetActiveSubroutineName", getActiveSubroutineName);
1470 ASSIGN("glGetActiveSubroutineUniformName", getActiveSubroutineUniformName);
1471 ASSIGN("glGetActiveSubroutineUniformiv", getActiveSubroutineUniformiv);
1472 ASSIGN("glGetProgramStageiv", getProgramStageiv);
1473 ASSIGN("glGetQueryIndexediv", getQueryIndexediv);
1474 ASSIGN("glGetSubroutineIndex", getSubroutineIndex);
1475 ASSIGN("glGetSubroutineUniformLocation", getSubroutineUniformLocation);
1476 ASSIGN("glGetUniformSubroutineuiv", getUniformSubroutineuiv);
1477 ASSIGN("glGetUniformdv", getUniformdv);
1478 ASSIGN("glIsTransformFeedback", isTransformFeedback);
1479 ASSIGN("glMinSampleShading", minSampleShading);
1480 ASSIGN("glPatchParameterfv", patchParameterfv);
1481 ASSIGN("glPatchParameteri", patchParameteri);
1482 ASSIGN("glPauseTransformFeedback", pauseTransformFeedback);
1483 ASSIGN("glResumeTransformFeedback", resumeTransformFeedback);
1484 ASSIGN("glUniform1d", uniform1d);
1485 ASSIGN("glUniform1dv", uniform1dv);
1486 ASSIGN("glUniform2d", uniform2d);
1487 ASSIGN("glUniform2dv", uniform2dv);
1488 ASSIGN("glUniform3d", uniform3d);
1489 ASSIGN("glUniform3dv", uniform3dv);
1490 ASSIGN("glUniform4d", uniform4d);
1491 ASSIGN("glUniform4dv", uniform4dv);
1492 ASSIGN("glUniformMatrix2dv", uniformMatrix2dv);
1493 ASSIGN("glUniformMatrix2x3dv", uniformMatrix2x3dv);
1494 ASSIGN("glUniformMatrix2x4dv", uniformMatrix2x4dv);
1495 ASSIGN("glUniformMatrix3dv", uniformMatrix3dv);
1496 ASSIGN("glUniformMatrix3x2dv", uniformMatrix3x2dv);
1497 ASSIGN("glUniformMatrix3x4dv", uniformMatrix3x4dv);
1498 ASSIGN("glUniformMatrix4dv", uniformMatrix4dv);
1499 ASSIGN("glUniformMatrix4x2dv", uniformMatrix4x2dv);
1500 ASSIGN("glUniformMatrix4x3dv", uniformMatrix4x3dv);
1501 ASSIGN("glUniformSubroutinesuiv", uniformSubroutinesuiv);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001502 }
1503
Corentin Wallez92d77062015-05-04 12:41:54 -04001504 // 4.1
Geoff Lang08dcfed2015-05-25 13:38:42 -04001505 if (isAtLeastGL(gl::Version(4, 1)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001506 {
Jamie Madill60c65552017-05-02 14:34:05 -04001507 ASSIGN("glActiveShaderProgram", activeShaderProgram);
1508 ASSIGN("glBindProgramPipeline", bindProgramPipeline);
1509 ASSIGN("glClearDepthf", clearDepthf);
1510 ASSIGN("glCreateShaderProgramv", createShaderProgramv);
1511 ASSIGN("glDeleteProgramPipelines", deleteProgramPipelines);
1512 ASSIGN("glDepthRangeArrayv", depthRangeArrayv);
1513 ASSIGN("glDepthRangeIndexed", depthRangeIndexed);
1514 ASSIGN("glDepthRangef", depthRangef);
1515 ASSIGN("glGenProgramPipelines", genProgramPipelines);
1516 ASSIGN("glGetDoublei_v", getDoublei_v);
1517 ASSIGN("glGetFloati_v", getFloati_v);
1518 ASSIGN("glGetProgramBinary", getProgramBinary);
1519 ASSIGN("glGetProgramPipelineInfoLog", getProgramPipelineInfoLog);
1520 ASSIGN("glGetProgramPipelineiv", getProgramPipelineiv);
1521 ASSIGN("glGetShaderPrecisionFormat", getShaderPrecisionFormat);
1522 ASSIGN("glGetVertexAttribLdv", getVertexAttribLdv);
1523 ASSIGN("glIsProgramPipeline", isProgramPipeline);
1524 ASSIGN("glProgramBinary", programBinary);
1525 ASSIGN("glProgramParameteri", programParameteri);
1526 ASSIGN("glProgramUniform1d", programUniform1d);
1527 ASSIGN("glProgramUniform1dv", programUniform1dv);
1528 ASSIGN("glProgramUniform1f", programUniform1f);
1529 ASSIGN("glProgramUniform1fv", programUniform1fv);
1530 ASSIGN("glProgramUniform1i", programUniform1i);
1531 ASSIGN("glProgramUniform1iv", programUniform1iv);
1532 ASSIGN("glProgramUniform1ui", programUniform1ui);
1533 ASSIGN("glProgramUniform1uiv", programUniform1uiv);
1534 ASSIGN("glProgramUniform2d", programUniform2d);
1535 ASSIGN("glProgramUniform2dv", programUniform2dv);
1536 ASSIGN("glProgramUniform2f", programUniform2f);
1537 ASSIGN("glProgramUniform2fv", programUniform2fv);
1538 ASSIGN("glProgramUniform2i", programUniform2i);
1539 ASSIGN("glProgramUniform2iv", programUniform2iv);
1540 ASSIGN("glProgramUniform2ui", programUniform2ui);
1541 ASSIGN("glProgramUniform2uiv", programUniform2uiv);
1542 ASSIGN("glProgramUniform3d", programUniform3d);
1543 ASSIGN("glProgramUniform3dv", programUniform3dv);
1544 ASSIGN("glProgramUniform3f", programUniform3f);
1545 ASSIGN("glProgramUniform3fv", programUniform3fv);
1546 ASSIGN("glProgramUniform3i", programUniform3i);
1547 ASSIGN("glProgramUniform3iv", programUniform3iv);
1548 ASSIGN("glProgramUniform3ui", programUniform3ui);
1549 ASSIGN("glProgramUniform3uiv", programUniform3uiv);
1550 ASSIGN("glProgramUniform4d", programUniform4d);
1551 ASSIGN("glProgramUniform4dv", programUniform4dv);
1552 ASSIGN("glProgramUniform4f", programUniform4f);
1553 ASSIGN("glProgramUniform4fv", programUniform4fv);
1554 ASSIGN("glProgramUniform4i", programUniform4i);
1555 ASSIGN("glProgramUniform4iv", programUniform4iv);
1556 ASSIGN("glProgramUniform4ui", programUniform4ui);
1557 ASSIGN("glProgramUniform4uiv", programUniform4uiv);
1558 ASSIGN("glProgramUniformMatrix2dv", programUniformMatrix2dv);
1559 ASSIGN("glProgramUniformMatrix2fv", programUniformMatrix2fv);
1560 ASSIGN("glProgramUniformMatrix2x3dv", programUniformMatrix2x3dv);
1561 ASSIGN("glProgramUniformMatrix2x3fv", programUniformMatrix2x3fv);
1562 ASSIGN("glProgramUniformMatrix2x4dv", programUniformMatrix2x4dv);
1563 ASSIGN("glProgramUniformMatrix2x4fv", programUniformMatrix2x4fv);
1564 ASSIGN("glProgramUniformMatrix3dv", programUniformMatrix3dv);
1565 ASSIGN("glProgramUniformMatrix3fv", programUniformMatrix3fv);
1566 ASSIGN("glProgramUniformMatrix3x2dv", programUniformMatrix3x2dv);
1567 ASSIGN("glProgramUniformMatrix3x2fv", programUniformMatrix3x2fv);
1568 ASSIGN("glProgramUniformMatrix3x4dv", programUniformMatrix3x4dv);
1569 ASSIGN("glProgramUniformMatrix3x4fv", programUniformMatrix3x4fv);
1570 ASSIGN("glProgramUniformMatrix4dv", programUniformMatrix4dv);
1571 ASSIGN("glProgramUniformMatrix4fv", programUniformMatrix4fv);
1572 ASSIGN("glProgramUniformMatrix4x2dv", programUniformMatrix4x2dv);
1573 ASSIGN("glProgramUniformMatrix4x2fv", programUniformMatrix4x2fv);
1574 ASSIGN("glProgramUniformMatrix4x3dv", programUniformMatrix4x3dv);
1575 ASSIGN("glProgramUniformMatrix4x3fv", programUniformMatrix4x3fv);
1576 ASSIGN("glReleaseShaderCompiler", releaseShaderCompiler);
1577 ASSIGN("glScissorArrayv", scissorArrayv);
1578 ASSIGN("glScissorIndexed", scissorIndexed);
1579 ASSIGN("glScissorIndexedv", scissorIndexedv);
1580 ASSIGN("glShaderBinary", shaderBinary);
1581 ASSIGN("glUseProgramStages", useProgramStages);
1582 ASSIGN("glValidateProgramPipeline", validateProgramPipeline);
1583 ASSIGN("glVertexAttribL1d", vertexAttribL1d);
1584 ASSIGN("glVertexAttribL1dv", vertexAttribL1dv);
1585 ASSIGN("glVertexAttribL2d", vertexAttribL2d);
1586 ASSIGN("glVertexAttribL2dv", vertexAttribL2dv);
1587 ASSIGN("glVertexAttribL3d", vertexAttribL3d);
1588 ASSIGN("glVertexAttribL3dv", vertexAttribL3dv);
1589 ASSIGN("glVertexAttribL4d", vertexAttribL4d);
1590 ASSIGN("glVertexAttribL4dv", vertexAttribL4dv);
1591 ASSIGN("glVertexAttribLPointer", vertexAttribLPointer);
1592 ASSIGN("glViewportArrayv", viewportArrayv);
1593 ASSIGN("glViewportIndexedf", viewportIndexedf);
1594 ASSIGN("glViewportIndexedfv", viewportIndexedfv);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001595 }
1596
1597 // 4.2
Geoff Lang08dcfed2015-05-25 13:38:42 -04001598 if (isAtLeastGL(gl::Version(4, 2)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001599 {
Jamie Madill60c65552017-05-02 14:34:05 -04001600 ASSIGN("glBindImageTexture", bindImageTexture);
1601 ASSIGN("glDrawArraysInstancedBaseInstance", drawArraysInstancedBaseInstance);
1602 ASSIGN("glDrawElementsInstancedBaseInstance", drawElementsInstancedBaseInstance);
1603 ASSIGN("glDrawElementsInstancedBaseVertexBaseInstance", drawElementsInstancedBaseVertexBaseInstance);
1604 ASSIGN("glDrawTransformFeedbackInstanced", drawTransformFeedbackInstanced);
1605 ASSIGN("glDrawTransformFeedbackStreamInstanced", drawTransformFeedbackStreamInstanced);
1606 ASSIGN("glGetActiveAtomicCounterBufferiv", getActiveAtomicCounterBufferiv);
1607 ASSIGN("glGetInternalformativ", getInternalformativ);
1608 ASSIGN("glMemoryBarrier", memoryBarrier);
1609 ASSIGN("glTexStorage1D", texStorage1D);
1610 ASSIGN("glTexStorage2D", texStorage2D);
1611 ASSIGN("glTexStorage3D", texStorage3D);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001612 }
1613
1614 // 4.3
Geoff Lang08dcfed2015-05-25 13:38:42 -04001615 if (isAtLeastGL(gl::Version(4, 3)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001616 {
Jamie Madill60c65552017-05-02 14:34:05 -04001617 ASSIGN("glBindVertexBuffer", bindVertexBuffer);
1618 ASSIGN("glClearBufferData", clearBufferData);
1619 ASSIGN("glClearBufferSubData", clearBufferSubData);
1620 ASSIGN("glCopyImageSubData", copyImageSubData);
1621 ASSIGN("glDebugMessageCallback", debugMessageCallback);
1622 ASSIGN("glDebugMessageControl", debugMessageControl);
1623 ASSIGN("glDebugMessageInsert", debugMessageInsert);
1624 ASSIGN("glDispatchCompute", dispatchCompute);
1625 ASSIGN("glDispatchComputeIndirect", dispatchComputeIndirect);
1626 ASSIGN("glFramebufferParameteri", framebufferParameteri);
1627 ASSIGN("glGetDebugMessageLog", getDebugMessageLog);
1628 ASSIGN("glGetFramebufferParameteriv", getFramebufferParameteriv);
1629 ASSIGN("glGetInternalformati64v", getInternalformati64v);
1630 ASSIGN("glGetPointerv", getPointerv);
1631 ASSIGN("glGetObjectLabel", getObjectLabel);
1632 ASSIGN("glGetObjectPtrLabel", getObjectPtrLabel);
1633 ASSIGN("glGetProgramInterfaceiv", getProgramInterfaceiv);
1634 ASSIGN("glGetProgramResourceIndex", getProgramResourceIndex);
1635 ASSIGN("glGetProgramResourceLocation", getProgramResourceLocation);
1636 ASSIGN("glGetProgramResourceLocationIndex", getProgramResourceLocationIndex);
1637 ASSIGN("glGetProgramResourceName", getProgramResourceName);
1638 ASSIGN("glGetProgramResourceiv", getProgramResourceiv);
1639 ASSIGN("glInvalidateBufferData", invalidateBufferData);
1640 ASSIGN("glInvalidateBufferSubData", invalidateBufferSubData);
1641 ASSIGN("glInvalidateFramebuffer", invalidateFramebuffer);
1642 ASSIGN("glInvalidateSubFramebuffer", invalidateSubFramebuffer);
1643 ASSIGN("glInvalidateTexImage", invalidateTexImage);
1644 ASSIGN("glInvalidateTexSubImage", invalidateTexSubImage);
1645 ASSIGN("glMultiDrawArraysIndirect", multiDrawArraysIndirect);
1646 ASSIGN("glMultiDrawElementsIndirect", multiDrawElementsIndirect);
1647 ASSIGN("glObjectLabel", objectLabel);
1648 ASSIGN("glObjectPtrLabel", objectPtrLabel);
1649 ASSIGN("glPopDebugGroup", popDebugGroup);
1650 ASSIGN("glPushDebugGroup", pushDebugGroup);
1651 ASSIGN("glShaderStorageBlockBinding", shaderStorageBlockBinding);
1652 ASSIGN("glTexBufferRange", texBufferRange);
1653 ASSIGN("glTexStorage2DMultisample", texStorage2DMultisample);
1654 ASSIGN("glTexStorage3DMultisample", texStorage3DMultisample);
1655 ASSIGN("glTextureView", textureView);
1656 ASSIGN("glVertexAttribBinding", vertexAttribBinding);
1657 ASSIGN("glVertexAttribFormat", vertexAttribFormat);
1658 ASSIGN("glVertexAttribIFormat", vertexAttribIFormat);
1659 ASSIGN("glVertexAttribLFormat", vertexAttribLFormat);
1660 ASSIGN("glVertexBindingDivisor", vertexBindingDivisor);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001661 }
1662
1663 // 4.4
Geoff Lang08dcfed2015-05-25 13:38:42 -04001664 if (isAtLeastGL(gl::Version(4, 4)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001665 {
Jamie Madill60c65552017-05-02 14:34:05 -04001666 ASSIGN("glBindBuffersBase", bindBuffersBase);
1667 ASSIGN("glBindBuffersRange", bindBuffersRange);
1668 ASSIGN("glBindImageTextures", bindImageTextures);
1669 ASSIGN("glBindSamplers", bindSamplers);
1670 ASSIGN("glBindTextures", bindTextures);
1671 ASSIGN("glBindVertexBuffers", bindVertexBuffers);
1672 ASSIGN("glBufferStorage", bufferStorage);
1673 ASSIGN("glClearTexImage", clearTexImage);
1674 ASSIGN("glClearTexSubImage", clearTexSubImage);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001675 }
1676
1677 // 4.5
Geoff Lang08dcfed2015-05-25 13:38:42 -04001678 if (isAtLeastGL(gl::Version(4, 5)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001679 {
Jamie Madill60c65552017-05-02 14:34:05 -04001680 ASSIGN("glBindTextureUnit", bindTextureUnit);
1681 ASSIGN("glBlitNamedFramebuffer", blitNamedFramebuffer);
1682 ASSIGN("glCheckNamedFramebufferStatus", checkNamedFramebufferStatus);
1683 ASSIGN("glClearNamedBufferData", clearNamedBufferData);
1684 ASSIGN("glClearNamedBufferSubData", clearNamedBufferSubData);
1685 ASSIGN("glClearNamedFramebufferfi", clearNamedFramebufferfi);
1686 ASSIGN("glClearNamedFramebufferfv", clearNamedFramebufferfv);
1687 ASSIGN("glClearNamedFramebufferiv", clearNamedFramebufferiv);
1688 ASSIGN("glClearNamedFramebufferuiv", clearNamedFramebufferuiv);
1689 ASSIGN("glClipControl", clipControl);
1690 ASSIGN("glCompressedTextureSubImage1D", compressedTextureSubImage1D);
1691 ASSIGN("glCompressedTextureSubImage2D", compressedTextureSubImage2D);
1692 ASSIGN("glCompressedTextureSubImage3D", compressedTextureSubImage3D);
1693 ASSIGN("glCopyNamedBufferSubData", copyNamedBufferSubData);
1694 ASSIGN("glCopyTextureSubImage1D", copyTextureSubImage1D);
1695 ASSIGN("glCopyTextureSubImage2D", copyTextureSubImage2D);
1696 ASSIGN("glCopyTextureSubImage3D", copyTextureSubImage3D);
1697 ASSIGN("glCreateBuffers", createBuffers);
1698 ASSIGN("glCreateFramebuffers", createFramebuffers);
1699 ASSIGN("glCreateProgramPipelines", createProgramPipelines);
1700 ASSIGN("glCreateQueries", createQueries);
1701 ASSIGN("glCreateRenderbuffers", createRenderbuffers);
1702 ASSIGN("glCreateSamplers", createSamplers);
1703 ASSIGN("glCreateTextures", createTextures);
1704 ASSIGN("glCreateTransformFeedbacks", createTransformFeedbacks);
1705 ASSIGN("glCreateVertexArrays", createVertexArrays);
1706 ASSIGN("glDisableVertexArrayAttrib", disableVertexArrayAttrib);
1707 ASSIGN("glEnableVertexArrayAttrib", enableVertexArrayAttrib);
1708 ASSIGN("glFlushMappedNamedBufferRange", flushMappedNamedBufferRange);
1709 ASSIGN("glGenerateTextureMipmap", generateTextureMipmap);
1710 ASSIGN("glGetCompressedTextureImage", getCompressedTextureImage);
1711 ASSIGN("glGetCompressedTextureSubImage", getCompressedTextureSubImage);
1712 ASSIGN("glGetGraphicsResetStatus", getGraphicsResetStatus);
1713 ASSIGN("glGetNamedBufferParameteri64v", getNamedBufferParameteri64v);
1714 ASSIGN("glGetNamedBufferParameteriv", getNamedBufferParameteriv);
1715 ASSIGN("glGetNamedBufferPointerv", getNamedBufferPointerv);
1716 ASSIGN("glGetNamedBufferSubData", getNamedBufferSubData);
1717 ASSIGN("glGetNamedFramebufferAttachmentParameteriv", getNamedFramebufferAttachmentParameteriv);
1718 ASSIGN("glGetNamedFramebufferParameteriv", getNamedFramebufferParameteriv);
1719 ASSIGN("glGetNamedRenderbufferParameteriv", getNamedRenderbufferParameteriv);
1720 ASSIGN("glGetQueryBufferObjecti64v", getQueryBufferObjecti64v);
1721 ASSIGN("glGetQueryBufferObjectiv", getQueryBufferObjectiv);
1722 ASSIGN("glGetQueryBufferObjectui64v", getQueryBufferObjectui64v);
1723 ASSIGN("glGetQueryBufferObjectuiv", getQueryBufferObjectuiv);
1724 ASSIGN("glGetTextureImage", getTextureImage);
1725 ASSIGN("glGetTextureLevelParameterfv", getTextureLevelParameterfv);
1726 ASSIGN("glGetTextureLevelParameteriv", getTextureLevelParameteriv);
1727 ASSIGN("glGetTextureParameterIiv", getTextureParameterIiv);
1728 ASSIGN("glGetTextureParameterIuiv", getTextureParameterIuiv);
1729 ASSIGN("glGetTextureParameterfv", getTextureParameterfv);
1730 ASSIGN("glGetTextureParameteriv", getTextureParameteriv);
1731 ASSIGN("glGetTextureSubImage", getTextureSubImage);
1732 ASSIGN("glGetTransformFeedbacki64_v", getTransformFeedbacki64_v);
1733 ASSIGN("glGetTransformFeedbacki_v", getTransformFeedbacki_v);
1734 ASSIGN("glGetTransformFeedbackiv", getTransformFeedbackiv);
1735 ASSIGN("glGetVertexArrayIndexed64iv", getVertexArrayIndexed64iv);
1736 ASSIGN("glGetVertexArrayIndexediv", getVertexArrayIndexediv);
1737 ASSIGN("glGetVertexArrayiv", getVertexArrayiv);
1738 ASSIGN("glGetnCompressedTexImage", getnCompressedTexImage);
1739 ASSIGN("glGetnTexImage", getnTexImage);
1740 ASSIGN("glGetnUniformdv", getnUniformdv);
1741 ASSIGN("glGetnUniformfv", getnUniformfv);
1742 ASSIGN("glGetnUniformiv", getnUniformiv);
1743 ASSIGN("glGetnUniformuiv", getnUniformuiv);
1744 ASSIGN("glInvalidateNamedFramebufferData", invalidateNamedFramebufferData);
1745 ASSIGN("glInvalidateNamedFramebufferSubData", invalidateNamedFramebufferSubData);
1746 ASSIGN("glMapNamedBuffer", mapNamedBuffer);
1747 ASSIGN("glMapNamedBufferRange", mapNamedBufferRange);
1748 ASSIGN("glMemoryBarrierByRegion", memoryBarrierByRegion);
1749 ASSIGN("glNamedBufferData", namedBufferData);
1750 ASSIGN("glNamedBufferStorage", namedBufferStorage);
1751 ASSIGN("glNamedBufferSubData", namedBufferSubData);
1752 ASSIGN("glNamedFramebufferDrawBuffer", namedFramebufferDrawBuffer);
1753 ASSIGN("glNamedFramebufferDrawBuffers", namedFramebufferDrawBuffers);
1754 ASSIGN("glNamedFramebufferParameteri", namedFramebufferParameteri);
1755 ASSIGN("glNamedFramebufferReadBuffer", namedFramebufferReadBuffer);
1756 ASSIGN("glNamedFramebufferRenderbuffer", namedFramebufferRenderbuffer);
1757 ASSIGN("glNamedFramebufferTexture", namedFramebufferTexture);
1758 ASSIGN("glNamedFramebufferTextureLayer", namedFramebufferTextureLayer);
1759 ASSIGN("glNamedRenderbufferStorage", namedRenderbufferStorage);
1760 ASSIGN("glNamedRenderbufferStorageMultisample", namedRenderbufferStorageMultisample);
1761 ASSIGN("glReadnPixels", readnPixels);
1762 ASSIGN("glTextureBarrier", textureBarrier);
1763 ASSIGN("glTextureBuffer", textureBuffer);
1764 ASSIGN("glTextureBufferRange", textureBufferRange);
1765 ASSIGN("glTextureParameterIiv", textureParameterIiv);
1766 ASSIGN("glTextureParameterIuiv", textureParameterIuiv);
1767 ASSIGN("glTextureParameterf", textureParameterf);
1768 ASSIGN("glTextureParameterfv", textureParameterfv);
1769 ASSIGN("glTextureParameteri", textureParameteri);
1770 ASSIGN("glTextureParameteriv", textureParameteriv);
1771 ASSIGN("glTextureStorage1D", textureStorage1D);
1772 ASSIGN("glTextureStorage2D", textureStorage2D);
1773 ASSIGN("glTextureStorage2DMultisample", textureStorage2DMultisample);
1774 ASSIGN("glTextureStorage3D", textureStorage3D);
1775 ASSIGN("glTextureStorage3DMultisample", textureStorage3DMultisample);
1776 ASSIGN("glTextureSubImage1D", textureSubImage1D);
1777 ASSIGN("glTextureSubImage2D", textureSubImage2D);
1778 ASSIGN("glTextureSubImage3D", textureSubImage3D);
1779 ASSIGN("glTransformFeedbackBufferBase", transformFeedbackBufferBase);
1780 ASSIGN("glTransformFeedbackBufferRange", transformFeedbackBufferRange);
1781 ASSIGN("glUnmapNamedBuffer", unmapNamedBuffer);
1782 ASSIGN("glVertexArrayAttribBinding", vertexArrayAttribBinding);
1783 ASSIGN("glVertexArrayAttribFormat", vertexArrayAttribFormat);
1784 ASSIGN("glVertexArrayAttribIFormat", vertexArrayAttribIFormat);
1785 ASSIGN("glVertexArrayAttribLFormat", vertexArrayAttribLFormat);
1786 ASSIGN("glVertexArrayBindingDivisor", vertexArrayBindingDivisor);
1787 ASSIGN("glVertexArrayElementBuffer", vertexArrayElementBuffer);
1788 ASSIGN("glVertexArrayVertexBuffer", vertexArrayVertexBuffer);
1789 ASSIGN("glVertexArrayVertexBuffers", vertexArrayVertexBuffers);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001790 }
Geoff Lang3cf12ce2015-08-27 14:40:48 -04001791
1792 // clang-format on
Geoff Lang56cf9af2015-02-17 10:16:49 -05001793}
1794
Geoff Langb2d9ab62016-01-20 10:50:09 -05001795void FunctionsGL::initializeProcsGLES()
1796{
1797 // No profiles in GLES
1798 profile = 0;
1799
1800 // clang-format off
Sami Väisänene45e53b2016-05-25 10:36:04 +03001801
1802 // GL_NV_path_rendering
Jamie Madill60c65552017-05-02 14:34:05 -04001803 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glMatrixLoadfEXT", matrixLoadEXT);
1804 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glGenPathsNV", genPathsNV);
1805 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glDeletePathsNV", delPathsNV);
1806 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glPathCommandsNV", pathCommandsNV);
1807 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glIsPathNV", isPathNV);
1808 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glPathParameterfNV", setPathParameterfNV);
1809 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glPathParameteriNV", setPathParameteriNV);
1810 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glGetPathParameterfvNV", getPathParameterfNV);
1811 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glGetPathParameterivNV", getPathParameteriNV);
1812 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glPathStencilFuncNV", pathStencilFuncNV);
1813 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilFillPathNV", stencilFillPathNV);
1814 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilStrokePathNV", stencilStrokePathNV);
1815 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glCoverFillPathNV", coverFillPathNV);
1816 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glCoverStrokePathNV", coverStrokePathNV);
1817 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilThenCoverFillPathNV", stencilThenCoverFillPathNV);
1818 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilThenCoverStrokePathNV", stencilThenCoverStrokePathNV);
1819 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glCoverFillPathInstancedNV", coverFillPathInstancedNV);
1820 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glCoverStrokePathInstancedNV", coverStrokePathInstancedNV);
1821 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilFillPathInstancedNV", stencilFillPathInstancedNV);
1822 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilStrokePathInstancedNV", stencilStrokePathInstancedNV);
1823 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilThenCoverFillPathInstancedNV", stencilThenCoverFillPathInstancedNV);
1824 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilThenCoverStrokePathInstancedNV", stencilThenCoverStrokePathInstancedNV);
1825 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glProgramPathFragmentInputGenNV", programPathFragmentInputGenNV);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001826
1827 // GL_OES_texture_3D
Jamie Madill60c65552017-05-02 14:34:05 -04001828 ASSIGN_WITH_EXT("GL_OES_texture_3D", "glTexImage3DOES", texImage3D);
1829 ASSIGN_WITH_EXT("GL_OES_texture_3D", "glTexSubImage3DOES", texSubImage3D);
1830 ASSIGN_WITH_EXT("GL_OES_texture_3D", "glCopyTexSubImage3DOES", copyTexSubImage3D);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001831
Sami Väisänena797e062016-05-12 15:23:40 +03001832 // GL_NV_framebuffer_mixed_samples
Jamie Madill60c65552017-05-02 14:34:05 -04001833 ASSIGN_WITH_EXT("GL_NV_framebuffer_mixed_samples", "glCoverageModulationNV", coverageModulationNV);
Sami Väisänena797e062016-05-12 15:23:40 +03001834
Geoff Langb2d9ab62016-01-20 10:50:09 -05001835 // GL_NV_fence
Jamie Madill60c65552017-05-02 14:34:05 -04001836 ASSIGN_WITH_EXT("GL_NV_fence", "glDeleteFencesNV", deleteFencesNV);
1837 ASSIGN_WITH_EXT("GL_NV_fence", "glGenFencesNV", genFencesNV);
1838 ASSIGN_WITH_EXT("GL_NV_fence", "glIsFenceNV", isFenceNV);
1839 ASSIGN_WITH_EXT("GL_NV_fence", "glTestFenceNV", testFenceNV);
1840 ASSIGN_WITH_EXT("GL_NV_fence", "glGetFenceivNV", getFenceivNV);
1841 ASSIGN_WITH_EXT("GL_NV_fence", "glFinishFenceNV", finishFenceNV);
1842 ASSIGN_WITH_EXT("GL_NV_fence", "glSetFenceNV", setFenceNV);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001843
1844 // GL_EXT_texture_storage
Jamie Madill60c65552017-05-02 14:34:05 -04001845 ASSIGN_WITH_EXT("GL_EXT_texture_storage", "glTexStorage2DEXT", texStorage2D);
1846 ASSIGN_WITH_EXT("GL_EXT_texture_storage GL_OES_texture3D", "glTexStorage3DEXT", texStorage3D);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001847
1848 // GL_OES_vertex_array_object
Jamie Madill60c65552017-05-02 14:34:05 -04001849 ASSIGN_WITH_EXT("GL_OES_vertex_array_object", "glBindVertexArray", bindVertexArray);
1850 ASSIGN_WITH_EXT("GL_OES_vertex_array_object", "glDeleteVertexArrays", deleteVertexArrays);
1851 ASSIGN_WITH_EXT("GL_OES_vertex_array_object", "glGenVertexArrays", genVertexArrays);
1852 ASSIGN_WITH_EXT("GL_OES_vertex_array_object", "glIsVertexArray", isVertexArray);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001853
1854 // GL_EXT_map_buffer_range
Jamie Madill60c65552017-05-02 14:34:05 -04001855 ASSIGN_WITH_EXT("GL_EXT_map_buffer_range", "glMapBufferRangeEXT", mapBufferRange);
1856 ASSIGN_WITH_EXT("GL_EXT_map_buffer_range", "glFlushMappedBufferRangeEXT", flushMappedBufferRange);
1857 ASSIGN_WITH_EXT("GL_EXT_map_buffer_range", "glUnmapBufferOES", unmapBuffer);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001858
1859 // GL_OES_mapbuffer
Jamie Madill60c65552017-05-02 14:34:05 -04001860 ASSIGN_WITH_EXT("GL_OES_mapbuffer", "glMapBufferOES", mapBuffer);
1861 ASSIGN_WITH_EXT("GL_OES_mapbuffer", "glUnmapBufferOES", unmapBuffer);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001862
1863 // GL_KHR_debug
Jamie Madill60c65552017-05-02 14:34:05 -04001864 ASSIGN_WITH_EXT("GL_KHR_debug", "glDebugMessageControlKHR", debugMessageControl);
1865 ASSIGN_WITH_EXT("GL_KHR_debug", "glDebugMessageInsertKHR", debugMessageInsert);
1866 ASSIGN_WITH_EXT("GL_KHR_debug", "glDebugMessageCallbackKHR", debugMessageCallback);
1867 ASSIGN_WITH_EXT("GL_KHR_debug", "glGetDebugMessageLogKHR", getDebugMessageLog);
1868 ASSIGN_WITH_EXT("GL_KHR_debug", "glGetPointervKHR", getPointerv);
1869 ASSIGN_WITH_EXT("GL_KHR_debug", "glPushDebugGroupKHR", pushDebugGroup);
1870 ASSIGN_WITH_EXT("GL_KHR_debug", "glPopDebugGroupKHR", popDebugGroup);
1871 ASSIGN_WITH_EXT("GL_KHR_debug", "glObjectLabelKHR", objectLabel);
1872 ASSIGN_WITH_EXT("GL_KHR_debug", "glGetObjectLabelKHR", getObjectLabel);
1873 ASSIGN_WITH_EXT("GL_KHR_debug", "glObjectPtrLabelKHR", objectPtrLabel);
1874 ASSIGN_WITH_EXT("GL_KHR_debug", "glGetObjectPtrLabelKHR", getObjectPtrLabel);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001875
1876 // GL_EXT_draw_instanced
Jamie Madill60c65552017-05-02 14:34:05 -04001877 ASSIGN_WITH_EXT("GL_EXT_draw_instanced", "glVertexAttribDivisorEXT", vertexAttribDivisor);
1878 ASSIGN_WITH_EXT("GL_EXT_draw_instanced", "glDrawArraysInstancedEXT", drawArraysInstanced);
1879 ASSIGN_WITH_EXT("GL_EXT_draw_instanced", "glDrawElementsInstancedEXT", drawElementsInstanced);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001880
1881 // GL_EXT_occlusion_query_boolean
Jamie Madill60c65552017-05-02 14:34:05 -04001882 ASSIGN_WITH_EXT("GL_EXT_occlusion_query_boolean", "glGenQueriesEXT", genQueries);
1883 ASSIGN_WITH_EXT("GL_EXT_occlusion_query_boolean", "glDeleteQueriesEXT", deleteQueries);
1884 ASSIGN_WITH_EXT("GL_EXT_occlusion_query_boolean", "glIsQueryEXT", isQuery);
1885 ASSIGN_WITH_EXT("GL_EXT_occlusion_query_boolean", "glBeginQueryEXT", beginQuery);
1886 ASSIGN_WITH_EXT("GL_EXT_occlusion_query_boolean", "glEndQueryEXT", endQuery);
1887 ASSIGN_WITH_EXT("GL_EXT_occlusion_query_boolean", "glGetQueryivEXT", getQueryiv);
1888 ASSIGN_WITH_EXT("GL_EXT_occlusion_query_boolean", "glGetQueryObjectuivEXT", getQueryObjectuiv);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001889
Ian Ewell3ffd78b2016-01-22 16:09:42 -05001890 // GL_EXT_disjoint_timer_query
Jamie Madill60c65552017-05-02 14:34:05 -04001891 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glGenQueriesEXT", genQueries);
1892 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glDeleteQueriesEXT", deleteQueries);
1893 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glIsQueryEXT", isQuery);
1894 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glBeginQueryEXT", beginQuery);
1895 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glEndQueryEXT", endQuery);
1896 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glQueryCounterEXT", queryCounter);
1897 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glGetQueryivEXT", getQueryiv);
1898 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glGetQueryObjectivEXT", getQueryObjectiv);
1899 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glGetQueryObjectuivEXT", getQueryObjectuiv);
1900 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glGetQueryObjecti64vEXT", getQueryObjecti64v);
1901 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glGetQueryObjectui64vEXT", getQueryObjectui64v);
Ian Ewell3ffd78b2016-01-22 16:09:42 -05001902
Frank Henigman9d819892016-01-22 16:56:04 -05001903 // GL_OES_EGL_image
Jamie Madill60c65552017-05-02 14:34:05 -04001904 ASSIGN_WITH_EXT("GL_OES_EGL_image", "glEGLImageTargetRenderbufferStorageOES", eglImageTargetRenderbufferStorageOES);
1905 ASSIGN_WITH_EXT("GL_OES_EGL_image", "glEGLImageTargetTexture2DOES", eglImageTargetTexture2DOES);
Frank Henigman9d819892016-01-22 16:56:04 -05001906
Geoff Lang65a0be92015-10-02 09:57:30 -04001907 // GL_OES_get_program_binary
Jamie Madill60c65552017-05-02 14:34:05 -04001908 ASSIGN_WITH_EXT("GL_OES_get_program_binary", "glGetProgramBinaryOES", getProgramBinary);
1909 ASSIGN_WITH_EXT("GL_OES_get_program_binary", "glProgramBinaryOES", programBinary);
Geoff Lang65a0be92015-10-02 09:57:30 -04001910
Corentin Wallezb920e362016-08-03 18:19:41 -04001911 // GL_EXT_robustness
Jamie Madill60c65552017-05-02 14:34:05 -04001912 ASSIGN_WITH_EXT("GL_EXT_robustness", "glGetGraphicsResetStatusEXT", getGraphicsResetStatus);
Corentin Wallezb920e362016-08-03 18:19:41 -04001913
1914 // GL_KHR_robustness
Jamie Madill60c65552017-05-02 14:34:05 -04001915 ASSIGN_WITH_EXT("GL_KHR_robustness", "glGetGraphicsResetStatusKHR", getGraphicsResetStatus);
Corentin Wallezb920e362016-08-03 18:19:41 -04001916
Geoff Lang57ce9ea2016-11-24 12:03:14 -05001917 // GL_EXT_discard_framebuffer
Jamie Madill60c65552017-05-02 14:34:05 -04001918 ASSIGN_WITH_EXT("GL_EXT_discard_framebuffer", "glDiscardFramebufferEXT", discardFramebuffer);
Geoff Lang57ce9ea2016-11-24 12:03:14 -05001919
Geoff Langb2d9ab62016-01-20 10:50:09 -05001920 // 2.0
1921 if (isAtLeastGLES(gl::Version(2, 0)))
1922 {
Jamie Madill60c65552017-05-02 14:34:05 -04001923 ASSIGN("glActiveTexture", activeTexture);
1924 ASSIGN("glAttachShader", attachShader);
1925 ASSIGN("glBindAttribLocation", bindAttribLocation);
1926 ASSIGN("glBindBuffer", bindBuffer);
1927 ASSIGN("glBindFramebuffer", bindFramebuffer);
1928 ASSIGN("glBindRenderbuffer", bindRenderbuffer);
1929 ASSIGN("glBindTexture", bindTexture);
1930 ASSIGN("glBlendColor", blendColor);
1931 ASSIGN("glBlendEquation", blendEquation);
1932 ASSIGN("glBlendEquationSeparate", blendEquationSeparate);
1933 ASSIGN("glBlendFunc", blendFunc);
1934 ASSIGN("glBlendFuncSeparate", blendFuncSeparate);
1935 ASSIGN("glBufferData", bufferData);
1936 ASSIGN("glBufferSubData", bufferSubData);
1937 ASSIGN("glCheckFramebufferStatus", checkFramebufferStatus);
1938 ASSIGN("glClear", clear);
1939 ASSIGN("glClearColor", clearColor);
1940 ASSIGN("glClearDepthf", clearDepthf);
1941 ASSIGN("glClearStencil", clearStencil);
1942 ASSIGN("glColorMask", colorMask);
1943 ASSIGN("glCompileShader", compileShader);
1944 ASSIGN("glCompressedTexImage2D", compressedTexImage2D);
1945 ASSIGN("glCompressedTexSubImage2D", compressedTexSubImage2D);
1946 ASSIGN("glCopyTexImage2D", copyTexImage2D);
1947 ASSIGN("glCopyTexSubImage2D", copyTexSubImage2D);
1948 ASSIGN("glCreateProgram", createProgram);
1949 ASSIGN("glCreateShader", createShader);
1950 ASSIGN("glCullFace", cullFace);
1951 ASSIGN("glDeleteBuffers", deleteBuffers);
1952 ASSIGN("glDeleteFramebuffers", deleteFramebuffers);
1953 ASSIGN("glDeleteProgram", deleteProgram);
1954 ASSIGN("glDeleteRenderbuffers", deleteRenderbuffers);
1955 ASSIGN("glDeleteShader", deleteShader);
1956 ASSIGN("glDeleteTextures", deleteTextures);
1957 ASSIGN("glDepthFunc", depthFunc);
1958 ASSIGN("glDepthMask", depthMask);
1959 ASSIGN("glDepthRangef", depthRangef);
1960 ASSIGN("glDetachShader", detachShader);
1961 ASSIGN("glDisable", disable);
1962 ASSIGN("glDisableVertexAttribArray", disableVertexAttribArray);
1963 ASSIGN("glDrawArrays", drawArrays);
1964 ASSIGN("glDrawElements", drawElements);
1965 ASSIGN("glEnable", enable);
1966 ASSIGN("glEnableVertexAttribArray", enableVertexAttribArray);
1967 ASSIGN("glFinish", finish);
1968 ASSIGN("glFlush", flush);
1969 ASSIGN("glFramebufferRenderbuffer", framebufferRenderbuffer);
1970 ASSIGN("glFramebufferTexture2D", framebufferTexture2D);
1971 ASSIGN("glFrontFace", frontFace);
1972 ASSIGN("glGenBuffers", genBuffers);
1973 ASSIGN("glGenerateMipmap", generateMipmap);
1974 ASSIGN("glGenFramebuffers", genFramebuffers);
1975 ASSIGN("glGenRenderbuffers", genRenderbuffers);
1976 ASSIGN("glGenTextures", genTextures);
1977 ASSIGN("glGetActiveAttrib", getActiveAttrib);
1978 ASSIGN("glGetActiveUniform", getActiveUniform);
1979 ASSIGN("glGetAttachedShaders", getAttachedShaders);
1980 ASSIGN("glGetAttribLocation", getAttribLocation);
1981 ASSIGN("glGetBooleanv", getBooleanv);
1982 ASSIGN("glGetBufferParameteriv", getBufferParameteriv);
1983 ASSIGN("glGetError", getError);
1984 ASSIGN("glGetFloatv", getFloatv);
1985 ASSIGN("glGetFramebufferAttachmentParameteriv", getFramebufferAttachmentParameteriv);
1986 ASSIGN("glGetIntegerv", getIntegerv);
1987 ASSIGN("glGetProgramiv", getProgramiv);
1988 ASSIGN("glGetProgramInfoLog", getProgramInfoLog);
1989 ASSIGN("glGetRenderbufferParameteriv", getRenderbufferParameteriv);
1990 ASSIGN("glGetShaderiv", getShaderiv);
1991 ASSIGN("glGetShaderInfoLog", getShaderInfoLog);
1992 ASSIGN("glGetShaderPrecisionFormat", getShaderPrecisionFormat);
1993 ASSIGN("glGetShaderSource", getShaderSource);
1994 ASSIGN("glGetString", getString);
1995 ASSIGN("glGetTexParameterfv", getTexParameterfv);
1996 ASSIGN("glGetTexParameteriv", getTexParameteriv);
1997 ASSIGN("glGetUniformfv", getUniformfv);
1998 ASSIGN("glGetUniformiv", getUniformiv);
1999 ASSIGN("glGetUniformLocation", getUniformLocation);
2000 ASSIGN("glGetVertexAttribfv", getVertexAttribfv);
2001 ASSIGN("glGetVertexAttribiv", getVertexAttribiv);
2002 ASSIGN("glGetVertexAttribPointerv", getVertexAttribPointerv);
2003 ASSIGN("glHint", hint);
2004 ASSIGN("glIsBuffer", isBuffer);
2005 ASSIGN("glIsEnabled", isEnabled);
2006 ASSIGN("glIsFramebuffer", isFramebuffer);
2007 ASSIGN("glIsProgram", isProgram);
2008 ASSIGN("glIsRenderbuffer", isRenderbuffer);
2009 ASSIGN("glIsShader", isShader);
2010 ASSIGN("glIsTexture", isTexture);
2011 ASSIGN("glLineWidth", lineWidth);
2012 ASSIGN("glLinkProgram", linkProgram);
2013 ASSIGN("glPixelStorei", pixelStorei);
2014 ASSIGN("glPolygonOffset", polygonOffset);
2015 ASSIGN("glReadPixels", readPixels);
2016 ASSIGN("glReleaseShaderCompiler", releaseShaderCompiler);
2017 ASSIGN("glRenderbufferStorage", renderbufferStorage);
2018 ASSIGN("glSampleCoverage", sampleCoverage);
2019 ASSIGN("glScissor", scissor);
2020 ASSIGN("glShaderBinary", shaderBinary);
2021 ASSIGN("glShaderSource", shaderSource);
2022 ASSIGN("glStencilFunc", stencilFunc);
2023 ASSIGN("glStencilFuncSeparate", stencilFuncSeparate);
2024 ASSIGN("glStencilMask", stencilMask);
2025 ASSIGN("glStencilMaskSeparate", stencilMaskSeparate);
2026 ASSIGN("glStencilOp", stencilOp);
2027 ASSIGN("glStencilOpSeparate", stencilOpSeparate);
2028 ASSIGN("glTexImage2D", texImage2D);
2029 ASSIGN("glTexParameterf", texParameterf);
2030 ASSIGN("glTexParameterfv", texParameterfv);
2031 ASSIGN("glTexParameteri", texParameteri);
2032 ASSIGN("glTexParameteriv", texParameteriv);
2033 ASSIGN("glTexSubImage2D", texSubImage2D);
2034 ASSIGN("glUniform1f", uniform1f);
2035 ASSIGN("glUniform1fv", uniform1fv);
2036 ASSIGN("glUniform1i", uniform1i);
2037 ASSIGN("glUniform1iv", uniform1iv);
2038 ASSIGN("glUniform2f", uniform2f);
2039 ASSIGN("glUniform2fv", uniform2fv);
2040 ASSIGN("glUniform2i", uniform2i);
2041 ASSIGN("glUniform2iv", uniform2iv);
2042 ASSIGN("glUniform3f", uniform3f);
2043 ASSIGN("glUniform3fv", uniform3fv);
2044 ASSIGN("glUniform3i", uniform3i);
2045 ASSIGN("glUniform3iv", uniform3iv);
2046 ASSIGN("glUniform4f", uniform4f);
2047 ASSIGN("glUniform4fv", uniform4fv);
2048 ASSIGN("glUniform4i", uniform4i);
2049 ASSIGN("glUniform4iv", uniform4iv);
2050 ASSIGN("glUniformMatrix2fv", uniformMatrix2fv);
2051 ASSIGN("glUniformMatrix3fv", uniformMatrix3fv);
2052 ASSIGN("glUniformMatrix4fv", uniformMatrix4fv);
2053 ASSIGN("glUseProgram", useProgram);
2054 ASSIGN("glValidateProgram", validateProgram);
2055 ASSIGN("glVertexAttrib1f", vertexAttrib1f);
2056 ASSIGN("glVertexAttrib1fv", vertexAttrib1fv);
2057 ASSIGN("glVertexAttrib2f", vertexAttrib2f);
2058 ASSIGN("glVertexAttrib2fv", vertexAttrib2fv);
2059 ASSIGN("glVertexAttrib3f", vertexAttrib3f);
2060 ASSIGN("glVertexAttrib3fv", vertexAttrib3fv);
2061 ASSIGN("glVertexAttrib4f", vertexAttrib4f);
2062 ASSIGN("glVertexAttrib4fv", vertexAttrib4fv);
2063 ASSIGN("glVertexAttribPointer", vertexAttribPointer);
2064 ASSIGN("glViewport", viewport);
Geoff Langb2d9ab62016-01-20 10:50:09 -05002065 }
2066
2067 // 3.0
2068 if (isAtLeastGLES(gl::Version(3, 0)))
2069 {
Jamie Madill60c65552017-05-02 14:34:05 -04002070 ASSIGN("glReadBuffer", readBuffer);
2071 ASSIGN("glDrawRangeElements", drawRangeElements);
2072 ASSIGN("glTexImage3D", texImage3D);
2073 ASSIGN("glTexSubImage3D", texSubImage3D);
2074 ASSIGN("glCopyTexSubImage3D", copyTexSubImage3D);
2075 ASSIGN("glCompressedTexImage3D", compressedTexImage3D);
2076 ASSIGN("glCompressedTexSubImage3D", compressedTexSubImage3D);
2077 ASSIGN("glGenQueries", genQueries);
2078 ASSIGN("glDeleteQueries", deleteQueries);
2079 ASSIGN("glIsQuery", isQuery);
2080 ASSIGN("glBeginQuery", beginQuery);
2081 ASSIGN("glEndQuery", endQuery);
2082 ASSIGN("glGetQueryiv", getQueryiv);
2083 ASSIGN("glGetQueryObjectuiv", getQueryObjectuiv);
2084 ASSIGN("glUnmapBuffer", unmapBuffer);
2085 ASSIGN("glGetBufferPointerv", getBufferPointerv);
2086 ASSIGN("glDrawBuffers", drawBuffers);
2087 ASSIGN("glUniformMatrix2x3fv", uniformMatrix2x3fv);
2088 ASSIGN("glUniformMatrix3x2fv", uniformMatrix3x2fv);
2089 ASSIGN("glUniformMatrix2x4fv", uniformMatrix2x4fv);
2090 ASSIGN("glUniformMatrix4x2fv", uniformMatrix4x2fv);
2091 ASSIGN("glUniformMatrix3x4fv", uniformMatrix3x4fv);
2092 ASSIGN("glUniformMatrix4x3fv", uniformMatrix4x3fv);
2093 ASSIGN("glBlitFramebuffer", blitFramebuffer);
2094 ASSIGN("glRenderbufferStorageMultisample", renderbufferStorageMultisample);
2095 ASSIGN("glFramebufferTextureLayer", framebufferTextureLayer);
2096 ASSIGN("glMapBufferRange", mapBufferRange);
2097 ASSIGN("glFlushMappedBufferRange", flushMappedBufferRange);
2098 ASSIGN("glBindVertexArray", bindVertexArray);
2099 ASSIGN("glDeleteVertexArrays", deleteVertexArrays);
2100 ASSIGN("glGenVertexArrays", genVertexArrays);
2101 ASSIGN("glIsVertexArray", isVertexArray);
2102 ASSIGN("glGetIntegeri_v", getIntegeri_v);
2103 ASSIGN("glBeginTransformFeedback", beginTransformFeedback);
2104 ASSIGN("glEndTransformFeedback", endTransformFeedback);
2105 ASSIGN("glBindBufferRange", bindBufferRange);
2106 ASSIGN("glBindBufferBase", bindBufferBase);
2107 ASSIGN("glTransformFeedbackVaryings", transformFeedbackVaryings);
2108 ASSIGN("glGetTransformFeedbackVarying", getTransformFeedbackVarying);
2109 ASSIGN("glVertexAttribIPointer", vertexAttribIPointer);
2110 ASSIGN("glGetVertexAttribIiv", getVertexAttribIiv);
2111 ASSIGN("glGetVertexAttribIuiv", getVertexAttribIuiv);
2112 ASSIGN("glVertexAttribI4i", vertexAttribI4i);
2113 ASSIGN("glVertexAttribI4ui", vertexAttribI4ui);
2114 ASSIGN("glVertexAttribI4iv", vertexAttribI4iv);
2115 ASSIGN("glVertexAttribI4uiv", vertexAttribI4uiv);
2116 ASSIGN("glGetUniformuiv", getUniformuiv);
2117 ASSIGN("glGetFragDataLocation", getFragDataLocation);
2118 ASSIGN("glUniform1ui", uniform1ui);
2119 ASSIGN("glUniform2ui", uniform2ui);
2120 ASSIGN("glUniform3ui", uniform3ui);
2121 ASSIGN("glUniform4ui", uniform4ui);
2122 ASSIGN("glUniform1uiv", uniform1uiv);
2123 ASSIGN("glUniform2uiv", uniform2uiv);
2124 ASSIGN("glUniform3uiv", uniform3uiv);
2125 ASSIGN("glUniform4uiv", uniform4uiv);
2126 ASSIGN("glClearBufferiv", clearBufferiv);
2127 ASSIGN("glClearBufferuiv", clearBufferuiv);
2128 ASSIGN("glClearBufferfv", clearBufferfv);
2129 ASSIGN("glClearBufferfi", clearBufferfi);
2130 ASSIGN("glGetStringi", getStringi);
2131 ASSIGN("glCopyBufferSubData", copyBufferSubData);
2132 ASSIGN("glGetUniformIndices", getUniformIndices);
2133 ASSIGN("glGetActiveUniformsiv", getActiveUniformsiv);
2134 ASSIGN("glGetUniformBlockIndex", getUniformBlockIndex);
2135 ASSIGN("glGetActiveUniformBlockiv", getActiveUniformBlockiv);
2136 ASSIGN("glGetActiveUniformBlockName", getActiveUniformBlockName);
2137 ASSIGN("glUniformBlockBinding", uniformBlockBinding);
2138 ASSIGN("glDrawArraysInstanced", drawArraysInstanced);
2139 ASSIGN("glDrawElementsInstanced", drawElementsInstanced);
2140 ASSIGN("glFenceSync", fenceSync);
2141 ASSIGN("glIsSync", isSync);
2142 ASSIGN("glDeleteSync", deleteSync);
2143 ASSIGN("glClientWaitSync", clientWaitSync);
2144 ASSIGN("glWaitSync", waitSync);
2145 ASSIGN("glGetInteger64v", getInteger64v);
2146 ASSIGN("glGetSynciv", getSynciv);
2147 ASSIGN("glGetInteger64i_v", getInteger64i_v);
2148 ASSIGN("glGetBufferParameteri64v", getBufferParameteri64v);
2149 ASSIGN("glGenSamplers", genSamplers);
2150 ASSIGN("glDeleteSamplers", deleteSamplers);
2151 ASSIGN("glIsSampler", isSampler);
2152 ASSIGN("glBindSampler", bindSampler);
2153 ASSIGN("glSamplerParameteri", samplerParameteri);
2154 ASSIGN("glSamplerParameteriv", samplerParameteriv);
2155 ASSIGN("glSamplerParameterf", samplerParameterf);
2156 ASSIGN("glSamplerParameterfv", samplerParameterfv);
2157 ASSIGN("glGetSamplerParameteriv", getSamplerParameteriv);
2158 ASSIGN("glGetSamplerParameterfv", getSamplerParameterfv);
2159 ASSIGN("glVertexAttribDivisor", vertexAttribDivisor);
2160 ASSIGN("glBindTransformFeedback", bindTransformFeedback);
2161 ASSIGN("glDeleteTransformFeedbacks", deleteTransformFeedbacks);
2162 ASSIGN("glGenTransformFeedbacks", genTransformFeedbacks);
2163 ASSIGN("glIsTransformFeedback", isTransformFeedback);
2164 ASSIGN("glPauseTransformFeedback", pauseTransformFeedback);
2165 ASSIGN("glResumeTransformFeedback", resumeTransformFeedback);
2166 ASSIGN("glGetProgramBinary", getProgramBinary);
2167 ASSIGN("glProgramBinary", programBinary);
2168 ASSIGN("glProgramParameteri", programParameteri);
2169 ASSIGN("glInvalidateFramebuffer", invalidateFramebuffer);
2170 ASSIGN("glInvalidateSubFramebuffer", invalidateSubFramebuffer);
2171 ASSIGN("glTexStorage2D", texStorage2D);
2172 ASSIGN("glTexStorage3D", texStorage3D);
2173 ASSIGN("glGetInternalformativ", getInternalformativ);
Geoff Langb2d9ab62016-01-20 10:50:09 -05002174 }
2175
2176 // 3.1
2177 if (isAtLeastGLES(gl::Version(3, 1)))
2178 {
Jamie Madill60c65552017-05-02 14:34:05 -04002179 ASSIGN("glDispatchCompute", dispatchCompute);
2180 ASSIGN("glDispatchComputeIndirect", dispatchComputeIndirect);
2181 ASSIGN("glDrawArraysIndirect", drawArraysIndirect);
2182 ASSIGN("glDrawElementsIndirect", drawElementsIndirect);
2183 ASSIGN("glFramebufferParameteri", framebufferParameteri);
2184 ASSIGN("glGetFramebufferParameteriv", getFramebufferParameteriv);
2185 ASSIGN("glGetProgramInterfaceiv", getProgramInterfaceiv);
2186 ASSIGN("glGetProgramResourceIndex", getProgramResourceIndex);
2187 ASSIGN("glGetProgramResourceName", getProgramResourceName);
2188 ASSIGN("glGetProgramResourceiv", getProgramResourceiv);
2189 ASSIGN("glGetProgramResourceLocation", getProgramResourceLocation);
2190 ASSIGN("glUseProgramStages", useProgramStages);
2191 ASSIGN("glActiveShaderProgram", activeShaderProgram);
2192 ASSIGN("glCreateShaderProgramv", createShaderProgramv);
2193 ASSIGN("glBindProgramPipeline", bindProgramPipeline);
2194 ASSIGN("glDeleteProgramPipelines", deleteProgramPipelines);
2195 ASSIGN("glGenProgramPipelines", genProgramPipelines);
2196 ASSIGN("glIsProgramPipeline", isProgramPipeline);
2197 ASSIGN("glGetProgramPipelineiv", getProgramPipelineiv);
2198 ASSIGN("glProgramUniform1i", programUniform1i);
2199 ASSIGN("glProgramUniform2i", programUniform2i);
2200 ASSIGN("glProgramUniform3i", programUniform3i);
2201 ASSIGN("glProgramUniform4i", programUniform4i);
2202 ASSIGN("glProgramUniform1ui", programUniform1ui);
2203 ASSIGN("glProgramUniform2ui", programUniform2ui);
2204 ASSIGN("glProgramUniform3ui", programUniform3ui);
2205 ASSIGN("glProgramUniform4ui", programUniform4ui);
2206 ASSIGN("glProgramUniform1f", programUniform1f);
2207 ASSIGN("glProgramUniform2f", programUniform2f);
2208 ASSIGN("glProgramUniform3f", programUniform3f);
2209 ASSIGN("glProgramUniform4f", programUniform4f);
2210 ASSIGN("glProgramUniform1iv", programUniform1iv);
2211 ASSIGN("glProgramUniform2iv", programUniform2iv);
2212 ASSIGN("glProgramUniform3iv", programUniform3iv);
2213 ASSIGN("glProgramUniform4iv", programUniform4iv);
2214 ASSIGN("glProgramUniform1uiv", programUniform1uiv);
2215 ASSIGN("glProgramUniform2uiv", programUniform2uiv);
2216 ASSIGN("glProgramUniform3uiv", programUniform3uiv);
2217 ASSIGN("glProgramUniform4uiv", programUniform4uiv);
2218 ASSIGN("glProgramUniform1fv", programUniform1fv);
2219 ASSIGN("glProgramUniform2fv", programUniform2fv);
2220 ASSIGN("glProgramUniform3fv", programUniform3fv);
2221 ASSIGN("glProgramUniform4fv", programUniform4fv);
2222 ASSIGN("glProgramUniformMatrix2fv", programUniformMatrix2fv);
2223 ASSIGN("glProgramUniformMatrix3fv", programUniformMatrix3fv);
2224 ASSIGN("glProgramUniformMatrix4fv", programUniformMatrix4fv);
2225 ASSIGN("glProgramUniformMatrix2x3fv", programUniformMatrix2x3fv);
2226 ASSIGN("glProgramUniformMatrix3x2fv", programUniformMatrix3x2fv);
2227 ASSIGN("glProgramUniformMatrix2x4fv", programUniformMatrix2x4fv);
2228 ASSIGN("glProgramUniformMatrix4x2fv", programUniformMatrix4x2fv);
2229 ASSIGN("glProgramUniformMatrix3x4fv", programUniformMatrix3x4fv);
2230 ASSIGN("glProgramUniformMatrix4x3fv", programUniformMatrix4x3fv);
2231 ASSIGN("glValidateProgramPipeline", validateProgramPipeline);
2232 ASSIGN("glGetProgramPipelineInfoLog", getProgramPipelineInfoLog);
2233 ASSIGN("glBindImageTexture", bindImageTexture);
2234 ASSIGN("glGetBooleani_v", getBooleani_v);
2235 ASSIGN("glMemoryBarrier", memoryBarrier);
2236 ASSIGN("glMemoryBarrierByRegion", memoryBarrierByRegion);
2237 ASSIGN("glTexStorage2DMultisample", texStorage2DMultisample);
2238 ASSIGN("glGetMultisamplefv", getMultisamplefv);
2239 ASSIGN("glSampleMaski", sampleMaski);
2240 ASSIGN("glGetTexLevelParameteriv", getTexLevelParameteriv);
2241 ASSIGN("glGetTexLevelParameterfv", getTexLevelParameterfv);
2242 ASSIGN("glBindVertexBuffer", bindVertexBuffer);
2243 ASSIGN("glVertexAttribFormat", vertexAttribFormat);
2244 ASSIGN("glVertexAttribIFormat", vertexAttribIFormat);
2245 ASSIGN("glVertexAttribBinding", vertexAttribBinding);
2246 ASSIGN("glVertexBindingDivisor", vertexBindingDivisor);
Geoff Langb2d9ab62016-01-20 10:50:09 -05002247 }
2248
2249 // 3.2
2250 if (isAtLeastGLES(gl::Version(3, 2)))
2251 {
Jamie Madill60c65552017-05-02 14:34:05 -04002252 ASSIGN("glBlendBarrier", blendBarrier);
2253 ASSIGN("glCopyImageSubData", copyImageSubData);
2254 ASSIGN("glDebugMessageControl", debugMessageControl);
2255 ASSIGN("glDebugMessageInsert", debugMessageInsert);
2256 ASSIGN("glDebugMessageCallback", debugMessageCallback);
2257 ASSIGN("glGetDebugMessageLog", getDebugMessageLog);
2258 ASSIGN("glPushDebugGroup", pushDebugGroup);
2259 ASSIGN("glPopDebugGroup", popDebugGroup);
2260 ASSIGN("glObjectLabel", objectLabel);
2261 ASSIGN("glGetObjectLabel", getObjectLabel);
2262 ASSIGN("glObjectPtrLabel", objectPtrLabel);
2263 ASSIGN("glGetObjectPtrLabel", getObjectPtrLabel);
2264 ASSIGN("glGetPointerv", getPointerv);
2265 ASSIGN("glEnablei", enablei);
2266 ASSIGN("glDisablei", disablei);
2267 ASSIGN("glBlendEquationi", blendEquationi);
2268 ASSIGN("glBlendEquationSeparatei", blendEquationSeparatei);
2269 ASSIGN("glBlendFunci", blendFunci);
2270 ASSIGN("glBlendFuncSeparatei", blendFuncSeparatei);
2271 ASSIGN("glColorMaski", colorMaski);
2272 ASSIGN("glIsEnabledi", isEnabledi);
2273 ASSIGN("glDrawElementsBaseVertex", drawElementsBaseVertex);
2274 ASSIGN("glDrawRangeElementsBaseVertex", drawRangeElementsBaseVertex);
2275 ASSIGN("glDrawElementsInstancedBaseVertex", drawElementsInstancedBaseVertex);
2276 ASSIGN("glFramebufferTexture", framebufferTexture);
2277 ASSIGN("glPrimitiveBoundingBox", primitiveBoundingBox);
2278 ASSIGN("glGetGraphicsResetStatus", getGraphicsResetStatus);
2279 ASSIGN("glReadnPixels", readnPixels);
2280 ASSIGN("glGetnUniformfv", getnUniformfv);
2281 ASSIGN("glGetnUniformiv", getnUniformiv);
2282 ASSIGN("glGetnUniformuiv", getnUniformuiv);
2283 ASSIGN("glMinSampleShading", minSampleShading);
2284 ASSIGN("glPatchParameteri", patchParameteri);
2285 ASSIGN("glTexParameterIiv", texParameterIiv);
2286 ASSIGN("glTexParameterIuiv", texParameterIuiv);
2287 ASSIGN("glGetTexParameterIiv", getTexParameterIiv);
2288 ASSIGN("glGetTexParameterIuiv", getTexParameterIuiv);
2289 ASSIGN("glSamplerParameterIiv", samplerParameterIiv);
2290 ASSIGN("glSamplerParameterIuiv", samplerParameterIuiv);
2291 ASSIGN("glGetSamplerParameterIiv", getSamplerParameterIiv);
2292 ASSIGN("glGetSamplerParameterIuiv", getSamplerParameterIuiv);
2293 ASSIGN("glTexBuffer", texBuffer);
2294 ASSIGN("glTexBufferRange", texBufferRange);
2295 ASSIGN("glTexStorage3DMultisample", texStorage3DMultisample);
Geoff Langb2d9ab62016-01-20 10:50:09 -05002296 }
2297
2298 // clang-format on
2299}
2300
Geoff Lang08dcfed2015-05-25 13:38:42 -04002301bool FunctionsGL::isAtLeastGL(const gl::Version &glVersion) const
2302{
2303 return standard == STANDARD_GL_DESKTOP && version >= glVersion;
2304}
2305
Corentin Wallezf7417802016-10-12 17:59:31 -04002306bool FunctionsGL::isAtMostGL(const gl::Version &glVersion) const
2307{
2308 return standard == STANDARD_GL_DESKTOP && glVersion >= version;
2309}
2310
Geoff Lang08dcfed2015-05-25 13:38:42 -04002311bool FunctionsGL::isAtLeastGLES(const gl::Version &glesVersion) const
2312{
2313 return standard == STANDARD_GL_ES && version >= glesVersion;
2314}
2315
Corentin Wallezf7417802016-10-12 17:59:31 -04002316bool FunctionsGL::isAtMostGLES(const gl::Version &glesVersion) const
2317{
2318 return standard == STANDARD_GL_ES && glesVersion >= version;
2319}
2320
Geoff Langf34d1db2015-05-20 14:10:46 -04002321bool FunctionsGL::hasExtension(const std::string &ext) const
2322{
2323 return std::find(extensions.begin(), extensions.end(), ext) != extensions.end();
2324}
2325
Geoff Lang862c0ba2015-05-25 15:31:16 -04002326bool FunctionsGL::hasGLExtension(const std::string &ext) const
2327{
2328 return standard == STANDARD_GL_DESKTOP && hasExtension(ext);
2329}
2330
2331bool FunctionsGL::hasGLESExtension(const std::string &ext) const
2332{
2333 return standard == STANDARD_GL_ES && hasExtension(ext);
2334}
2335
Jamie Madill60c65552017-05-02 14:34:05 -04002336} // namespace gl