blob: 21ea37501279c2e6e1e5330a6afc0693ba86f8dc [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),
Olli Etuaho50c562d2017-06-06 14:43:30 +0300792 discardFramebuffer(nullptr),
793 getInternalformatSampleivNV(nullptr)
Geoff Lang56cf9af2015-02-17 10:16:49 -0500794{
795}
796
797FunctionsGL::~FunctionsGL()
798{
799}
800
Geoff Langa4903b72015-03-02 16:02:48 -0800801void FunctionsGL::initialize()
Geoff Lang56cf9af2015-02-17 10:16:49 -0500802{
Geoff Langa4903b72015-03-02 16:02:48 -0800803 // Grab the version number
Jamie Madill60c65552017-05-02 14:34:05 -0400804 ASSIGN("glGetString", getString);
805 ASSIGN("glGetIntegerv", getIntegerv);
Geoff Lang08dcfed2015-05-25 13:38:42 -0400806 GetGLVersion(getString, &version, &standard);
Geoff Langa4903b72015-03-02 16:02:48 -0800807
808 // Grab the GL extensions
Geoff Langb2d9ab62016-01-20 10:50:09 -0500809 if (isAtLeastGL(gl::Version(3, 0)) || isAtLeastGLES(gl::Version(3, 0)))
Geoff Langa4903b72015-03-02 16:02:48 -0800810 {
Jamie Madill60c65552017-05-02 14:34:05 -0400811 ASSIGN("glGetStringi", getStringi);
Geoff Langa4903b72015-03-02 16:02:48 -0800812 extensions = GetIndexedExtensions(getIntegerv, getStringi);
813 }
814 else
815 {
Corentin Wallez94b3a072015-05-05 17:00:07 -0400816 const char *exts = reinterpret_cast<const char*>(getString(GL_EXTENSIONS));
Jamie Madill8c5aeb62015-05-21 08:17:18 -0400817 angle::SplitStringAlongWhitespace(std::string(exts), &extensions);
Geoff Langa4903b72015-03-02 16:02:48 -0800818 }
819
Geoff Langb2d9ab62016-01-20 10:50:09 -0500820 // Load the entry points
821 switch (standard)
822 {
823 case STANDARD_GL_DESKTOP:
824 initializeProcsDesktopGL();
825 break;
826
827 case STANDARD_GL_ES:
828 initializeProcsGLES();
829 break;
830
831 default:
832 UNREACHABLE();
833 break;
834 }
835}
836
837void FunctionsGL::initializeProcsDesktopGL()
838{
Geoff Lang8b0f0b32015-07-20 15:59:28 -0400839 // Check the context profile
hendrikwbb7740c2015-10-20 15:30:53 -0700840 profile = 0;
Geoff Lang8b0f0b32015-07-20 15:59:28 -0400841 if (isAtLeastGL(gl::Version(3, 2)))
842 {
843 getIntegerv(GL_CONTEXT_PROFILE_MASK, &profile);
844 }
Geoff Lang8b0f0b32015-07-20 15:59:28 -0400845
Geoff Lang3cf12ce2015-08-27 14:40:48 -0400846 // clang-format off
847
Geoff Lang92139c22015-07-20 15:32:37 -0400848 // Load extensions
849 // Even though extensions are written against specific versions of GL, many drivers expose the extensions
850 // in even older versions. Always try loading the extensions regardless of GL version.
851
Olli Etuaho50c562d2017-06-06 14:43:30 +0300852 // GL_NV_internalformat_sample_query
853 ASSIGN_WITH_EXT("GL_NV_internalformat_sample_query", "glGetInternalformatSampleivNV", getInternalformatSampleivNV);
854
Sami Väisänen46eaa942016-06-29 10:26:37 +0300855 // GL_ARB_program_interface_query (loading only functions relevant to GL_NV_path_rendering here)
Jamie Madill60c65552017-05-02 14:34:05 -0400856 ASSIGN_WITH_EXT("GL_ARB_program_interface_query", "glGetProgramInterfaceiv", getProgramInterfaceiv);
857 ASSIGN_WITH_EXT("GL_ARB_program_interface_query", "glGetProgramResourceName", getProgramResourceName);
858 ASSIGN_WITH_EXT("GL_ARB_program_interface_query", "glGetProgramResourceiv", getProgramResourceiv);
Sami Väisänene45e53b2016-05-25 10:36:04 +0300859
860 // GL_NV_path_rendering
Jamie Madill60c65552017-05-02 14:34:05 -0400861 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glMatrixLoadfEXT", matrixLoadEXT);
862 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glGenPathsNV", genPathsNV);
863 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glDeletePathsNV", delPathsNV);
864 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glPathCommandsNV", pathCommandsNV);
865 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glIsPathNV", isPathNV);
866 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glPathParameterfNV", setPathParameterfNV);
867 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glPathParameteriNV", setPathParameteriNV);
868 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glGetPathParameterfvNV", getPathParameterfNV);
869 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glGetPathParameterivNV", getPathParameteriNV);
870 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glPathStencilFuncNV", pathStencilFuncNV);
871 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilFillPathNV", stencilFillPathNV);
872 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilStrokePathNV", stencilStrokePathNV);
873 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glCoverFillPathNV", coverFillPathNV);
874 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glCoverStrokePathNV", coverStrokePathNV);
875 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilThenCoverFillPathNV", stencilThenCoverFillPathNV);
876 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilThenCoverStrokePathNV", stencilThenCoverStrokePathNV);
877 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glCoverFillPathInstancedNV", coverFillPathInstancedNV);
878 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glCoverStrokePathInstancedNV", coverStrokePathInstancedNV);
879 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilFillPathInstancedNV", stencilFillPathInstancedNV);
880 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilStrokePathInstancedNV", stencilStrokePathInstancedNV);
881 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilThenCoverFillPathInstancedNV", stencilThenCoverFillPathInstancedNV);
882 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilThenCoverStrokePathInstancedNV", stencilThenCoverStrokePathInstancedNV);
883 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glProgramPathFragmentInputGenNV", programPathFragmentInputGenNV);
Sami Väisänene45e53b2016-05-25 10:36:04 +0300884
Sami Väisänena797e062016-05-12 15:23:40 +0300885 // GL_NV_framebuffer_mixed_samples
Jamie Madill60c65552017-05-02 14:34:05 -0400886 ASSIGN_WITH_EXT("GL_NV_framebuffer_mixed_samples", "glCoverageModulationNV", coverageModulationNV);
Sami Väisänena797e062016-05-12 15:23:40 +0300887
Geoff Lang92139c22015-07-20 15:32:37 -0400888 // GL_NV_fence
Jamie Madill60c65552017-05-02 14:34:05 -0400889 ASSIGN_WITH_EXT("GL_NV_fence", "glDeleteFencesNV", deleteFencesNV);
890 ASSIGN_WITH_EXT("GL_NV_fence", "glGenFencesNV", genFencesNV);
891 ASSIGN_WITH_EXT("GL_NV_fence", "glIsFenceNV", isFenceNV);
892 ASSIGN_WITH_EXT("GL_NV_fence", "glTestFenceNV", testFenceNV);
893 ASSIGN_WITH_EXT("GL_NV_fence", "glGetFenceivNV", getFenceivNV);
894 ASSIGN_WITH_EXT("GL_NV_fence", "glFinishFenceNV", finishFenceNV);
895 ASSIGN_WITH_EXT("GL_NV_fence", "glSetFenceNV", setFenceNV);
Geoff Lang92139c22015-07-20 15:32:37 -0400896
897 // GL_EXT_texture_storage
Jamie Madill60c65552017-05-02 14:34:05 -0400898 ASSIGN_WITH_EXT("GL_EXT_texture_storage", "glTexStorage1DEXT", texStorage1D);
899 ASSIGN_WITH_EXT("GL_EXT_texture_storage", "glTexStorage2DEXT", texStorage2D);
900 ASSIGN_WITH_EXT("GL_EXT_texture_storage GL_EXT_texture3D", "glTexStorage3DEXT", texStorage3D);
901 ASSIGN_WITH_EXT("GL_EXT_texture_storage GL_EXT_texture3D", "glTextureStorage1DEXT", textureStorage1D);
902 ASSIGN_WITH_EXT("GL_EXT_texture_storage GL_EXT_direct_state_access", "glTextureStorage2DEXT", textureStorage2D);
903 ASSIGN_WITH_EXT("GL_EXT_texture_storage GL_EXT_direct_state_access GL_EXT_texture3D", "glTextureStorage3DEXT", textureStorage3D);
Geoff Lang92139c22015-07-20 15:32:37 -0400904
905 // GL_ARB_vertex_array_object
Jamie Madill60c65552017-05-02 14:34:05 -0400906 ASSIGN_WITH_EXT("GL_ARB_vertex_array_object", "glBindVertexArray", bindVertexArray);
907 ASSIGN_WITH_EXT("GL_ARB_vertex_array_object", "glDeleteVertexArrays", deleteVertexArrays);
908 ASSIGN_WITH_EXT("GL_ARB_vertex_array_object", "glGenVertexArrays", genVertexArrays);
909 ASSIGN_WITH_EXT("GL_ARB_vertex_array_object", "glIsVertexArray", isVertexArray);
Geoff Lang92139c22015-07-20 15:32:37 -0400910
Jiawei-Shao2597fb62016-12-09 16:38:02 +0800911 // GL_ARB_vertex_attrib_binding
Jamie Madill60c65552017-05-02 14:34:05 -0400912 ASSIGN_WITH_EXT("GL_ARB_vertex_attrib_binding", "glBindVertexBuffer", bindVertexBuffer);
913 ASSIGN_WITH_EXT("GL_ARB_vertex_attrib_binding", "glVertexAttribFormat", vertexAttribFormat);
914 ASSIGN_WITH_EXT("GL_ARB_vertex_attrib_binding", "glVertexAttribIFormat", vertexAttribIFormat);
915 ASSIGN_WITH_EXT("GL_ARB_vertex_attrib_binding", "glVertexAttribLFormat", vertexAttribLFormat);
916 ASSIGN_WITH_EXT("GL_ARB_vertex_attrib_binding", "glVertexAttribBinding", vertexAttribBinding);
917 ASSIGN_WITH_EXT("GL_ARB_vertex_attrib_binding", "glVertexBindingDivisor", vertexBindingDivisor);
Jiawei-Shao2597fb62016-12-09 16:38:02 +0800918
Geoff Lang92139c22015-07-20 15:32:37 -0400919 // GL_ARB_sync
Jamie Madill60c65552017-05-02 14:34:05 -0400920 ASSIGN_WITH_EXT("GL_ARB_sync", "glClientWaitSync", clientWaitSync);
921 ASSIGN_WITH_EXT("GL_ARB_sync", "glDeleteSync", deleteSync);
922 ASSIGN_WITH_EXT("GL_ARB_sync", "glFenceSync", fenceSync);
923 ASSIGN_WITH_EXT("GL_ARB_sync", "glGetInteger64i_v", getInteger64i_v);
924 ASSIGN_WITH_EXT("GL_ARB_sync", "glGetInteger64v", getInteger64v);
925 ASSIGN_WITH_EXT("GL_ARB_sync", "glGetSynciv", getSynciv);
926 ASSIGN_WITH_EXT("GL_ARB_sync", "glIsSync", isSync);
927 ASSIGN_WITH_EXT("GL_ARB_sync", "glWaitSync", waitSync);
Geoff Lang92139c22015-07-20 15:32:37 -0400928
929 // GL_EXT_framebuffer_object
Jamie Madill60c65552017-05-02 14:34:05 -0400930 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glIsRenderbufferEXT", isRenderbuffer);
931 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glBindRenderbufferEXT", bindRenderbuffer);
932 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glDeleteRenderbuffersEXT", deleteRenderbuffers);
933 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glGenRenderbuffersEXT", genRenderbuffers);
934 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glRenderbufferStorageEXT", renderbufferStorage);
935 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glGetRenderbufferParameterivEXT", getRenderbufferParameteriv);
936 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glIsFramebufferEXT", isFramebuffer);
937 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glBindFramebufferEXT", bindFramebuffer);
938 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glDeleteFramebuffersEXT", deleteFramebuffers);
939 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glGenFramebuffersEXT", genFramebuffers);
940 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glCheckFramebufferStatusEXT", checkFramebufferStatus);
941 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glFramebufferTexture1DEXT", framebufferTexture1D);
942 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glFramebufferTexture2DEXT", framebufferTexture2D);
943 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glFramebufferTexture3DEXT", framebufferTexture3D);
944 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glFramebufferRenderbufferEXT", framebufferRenderbuffer);
945 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glGetFramebufferAttachmentParameterivEXT", getFramebufferAttachmentParameteriv);
946 ASSIGN_WITH_EXT("GL_EXT_framebuffer_object", "glGenerateMipmapEXT", generateMipmap);
Geoff Lang92139c22015-07-20 15:32:37 -0400947
948 // GL_EXT_framebuffer_blit
Jamie Madill60c65552017-05-02 14:34:05 -0400949 ASSIGN_WITH_EXT("GL_EXT_framebuffer_blit", "glBlitFramebufferEXT", blitFramebuffer);
Geoff Lang92139c22015-07-20 15:32:37 -0400950
951 // GL_KHR_debug
Jamie Madill60c65552017-05-02 14:34:05 -0400952 ASSIGN_WITH_EXT("GL_KHR_debug", "glDebugMessageControl", debugMessageControl);
953 ASSIGN_WITH_EXT("GL_KHR_debug", "glDebugMessageInsert", debugMessageInsert);
954 ASSIGN_WITH_EXT("GL_KHR_debug", "glDebugMessageCallback", debugMessageCallback);
955 ASSIGN_WITH_EXT("GL_KHR_debug", "glGetDebugMessageLog", getDebugMessageLog);
956 ASSIGN_WITH_EXT("GL_KHR_debug", "glGetPointerv", getPointerv);
957 ASSIGN_WITH_EXT("GL_KHR_debug", "glPushDebugGroup", pushDebugGroup);
958 ASSIGN_WITH_EXT("GL_KHR_debug", "glPopDebugGroup", popDebugGroup);
959 ASSIGN_WITH_EXT("GL_KHR_debug", "glObjectLabel", objectLabel);
960 ASSIGN_WITH_EXT("GL_KHR_debug", "glGetObjectLabel", getObjectLabel);
961 ASSIGN_WITH_EXT("GL_KHR_debug", "glObjectPtrLabel", objectPtrLabel);
962 ASSIGN_WITH_EXT("GL_KHR_debug", "glGetObjectPtrLabel", getObjectPtrLabel);
Geoff Lang92139c22015-07-20 15:32:37 -0400963
964 // GL_ARB_internalformat_query
Jamie Madill60c65552017-05-02 14:34:05 -0400965 ASSIGN_WITH_EXT("GL_ARB_internalformat_query", "glGetInternalformativ", getInternalformativ);
Geoff Lang92139c22015-07-20 15:32:37 -0400966
967 // GL_ARB_ES2_compatibility
Jamie Madill60c65552017-05-02 14:34:05 -0400968 ASSIGN_WITH_EXT("GL_ARB_ES2_compatibility", "glReleaseShaderCompiler", releaseShaderCompiler);
969 ASSIGN_WITH_EXT("GL_ARB_ES2_compatibility", "glShaderBinary", shaderBinary);
970 ASSIGN_WITH_EXT("GL_ARB_ES2_compatibility", "glGetShaderPrecisionFormat", getShaderPrecisionFormat);
971 ASSIGN_WITH_EXT("GL_ARB_ES2_compatibility", "glDepthRangef", depthRangef);
972 ASSIGN_WITH_EXT("GL_ARB_ES2_compatibility", "glClearDepthf", clearDepthf);
Geoff Lang92139c22015-07-20 15:32:37 -0400973
Geoff Lang3cf12ce2015-08-27 14:40:48 -0400974 // GL_ARB_instanced_arrays
Jamie Madill60c65552017-05-02 14:34:05 -0400975 ASSIGN_WITH_EXT("GL_ARB_instanced_arrays", "glVertexAttribDivisorARB", vertexAttribDivisor);
Geoff Lang3cf12ce2015-08-27 14:40:48 -0400976
977 // GL_EXT_draw_instanced
Jamie Madill60c65552017-05-02 14:34:05 -0400978 ASSIGN_WITH_EXT("GL_EXT_draw_instanced", "glDrawArraysInstancedEXT", drawArraysInstanced);
979 ASSIGN_WITH_EXT("GL_EXT_draw_instanced", "glDrawElementsInstancedEXT", drawElementsInstanced);
Geoff Lang3cf12ce2015-08-27 14:40:48 -0400980
981 // GL_ARB_draw_instanced
Jamie Madill60c65552017-05-02 14:34:05 -0400982 ASSIGN_WITH_EXT("GL_ARB_draw_instanced", "glDrawArraysInstancedARB", drawArraysInstanced);
983 ASSIGN_WITH_EXT("GL_ARB_draw_instanced", "glDrawElementsInstancedARB", drawElementsInstanced);
Geoff Lang3cf12ce2015-08-27 14:40:48 -0400984
Geoff Lang8bd4b6c2015-10-01 16:17:48 -0400985 // GL_ARB_sampler_objects
Jamie Madill60c65552017-05-02 14:34:05 -0400986 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glGenSamplers", genSamplers);
987 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glDeleteSamplers", deleteSamplers);
988 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glIsSampler", isSampler);
989 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glBindSampler", bindSampler);
990 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glSamplerParameteri", samplerParameteri);
991 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glSamplerParameterf", samplerParameterf);
992 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glSamplerParameteriv", samplerParameteriv);
993 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glSamplerParameterfv", samplerParameterfv);
994 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glSamplerParameterIiv", samplerParameterIiv);
995 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glSamplerParameterIuiv", samplerParameterIuiv);
996 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glGetSamplerParameteriv", getSamplerParameteriv);
997 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glGetSamplerParameterfv", getSamplerParameterfv);
998 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glGetSamplerParameterIiv", getSamplerParameterIiv);
999 ASSIGN_WITH_EXT("GL_ARB_sampler_objects", "glGetSamplerParameterIuiv", getSamplerParameterIuiv);
Geoff Lang8bd4b6c2015-10-01 16:17:48 -04001000
Geoff Langf0aa8422015-09-29 15:08:34 -04001001 // GL_ARB_occlusion_query
Jamie Madill60c65552017-05-02 14:34:05 -04001002 ASSIGN_WITH_EXT("GL_ARB_occlusion_query", "glGenQueriesARB", genQueries);
1003 ASSIGN_WITH_EXT("GL_ARB_occlusion_query", "glDeleteQueriesARB", deleteQueries);
1004 ASSIGN_WITH_EXT("GL_ARB_occlusion_query", "glIsQueryARB", isQuery);
1005 ASSIGN_WITH_EXT("GL_ARB_occlusion_query", "glBeginQueryARB", beginQuery);
1006 ASSIGN_WITH_EXT("GL_ARB_occlusion_query", "glEndQueryARB", endQuery);
1007 ASSIGN_WITH_EXT("GL_ARB_occlusion_query", "glGetQueryivARB", getQueryiv);
1008 ASSIGN_WITH_EXT("GL_ARB_occlusion_query", "glGetQueryObjectivARB", getQueryObjectiv);
1009 ASSIGN_WITH_EXT("GL_ARB_occlusion_query", "glGetQueryObjectuivARB", getQueryObjectuiv);
Geoff Langf0aa8422015-09-29 15:08:34 -04001010
Geoff Lang1a683462015-09-29 15:09:59 -04001011 // EXT_transform_feedback
Jamie Madill60c65552017-05-02 14:34:05 -04001012 ASSIGN_WITH_EXT("EXT_transform_feedback", "glBindBufferRangeEXT", bindBufferRange);
1013 ASSIGN_WITH_EXT("EXT_transform_feedback", "glBindBufferBaseEXT", bindBufferBase);
1014 ASSIGN_WITH_EXT("EXT_transform_feedback", "glBeginTransformFeedbackEXT", beginTransformFeedback);
1015 ASSIGN_WITH_EXT("EXT_transform_feedback", "glEndTransformFeedbackEXT", endTransformFeedback);
1016 ASSIGN_WITH_EXT("EXT_transform_feedback", "glTransformFeedbackVaryingsEXT", transformFeedbackVaryings);
1017 ASSIGN_WITH_EXT("EXT_transform_feedback", "glGetTransformFeedbackVaryingEXT", getTransformFeedbackVarying);
Geoff Lang1a683462015-09-29 15:09:59 -04001018
1019 // GL_ARB_transform_feedback2
Jamie Madill60c65552017-05-02 14:34:05 -04001020 ASSIGN_WITH_EXT("GL_ARB_transform_feedback2", "glBindTransformFeedback", bindTransformFeedback);
1021 ASSIGN_WITH_EXT("GL_ARB_transform_feedback2", "glDeleteTransformFeedbacks", deleteTransformFeedbacks);
1022 ASSIGN_WITH_EXT("GL_ARB_transform_feedback2", "glGenTransformFeedbacks", genTransformFeedbacks);
1023 ASSIGN_WITH_EXT("GL_ARB_transform_feedback2", "glIsTransformFeedback", isTransformFeedback);
1024 ASSIGN_WITH_EXT("GL_ARB_transform_feedback2", "glPauseTransformFeedback", pauseTransformFeedback);
1025 ASSIGN_WITH_EXT("GL_ARB_transform_feedback2", "glResumeTransformFeedback", resumeTransformFeedback);
1026 ASSIGN_WITH_EXT("GL_ARB_transform_feedback2", "glDrawTransformFeedback", drawTransformFeedback);
Geoff Lang1a683462015-09-29 15:09:59 -04001027
1028 // GL_ARB_transform_feedback3
Jamie Madill60c65552017-05-02 14:34:05 -04001029 ASSIGN_WITH_EXT("GL_ARB_transform_feedback3", "glDrawTransformFeedbackStream", drawTransformFeedbackStream);
1030 ASSIGN_WITH_EXT("GL_ARB_transform_feedback3", "glBeginQueryIndexed", beginQueryIndexed);
1031 ASSIGN_WITH_EXT("GL_ARB_transform_feedback3", "glEndQueryIndexed", endQueryIndexed);
1032 ASSIGN_WITH_EXT("GL_ARB_transform_feedback3", "glGetQueryIndexediv", getQueryIndexediv);
Geoff Lang1a683462015-09-29 15:09:59 -04001033
Geoff Lang65a0be92015-10-02 09:57:30 -04001034 // GL_ARB_get_program_binary
Jamie Madill60c65552017-05-02 14:34:05 -04001035 ASSIGN_WITH_EXT("GL_ARB_get_program_binary", "glGetProgramBinary", getProgramBinary);
1036 ASSIGN_WITH_EXT("GL_ARB_get_program_binary", "glProgramBinary", programBinary);
1037 ASSIGN_WITH_EXT("GL_ARB_get_program_binary", "glProgramParameteri", programParameteri);
Geoff Lang65a0be92015-10-02 09:57:30 -04001038
Corentin Wallezb920e362016-08-03 18:19:41 -04001039 // GL_ARB_robustness
Jamie Madill60c65552017-05-02 14:34:05 -04001040 ASSIGN_WITH_EXT("GL_ARB_robustness", "glGetGraphicsResetStatusARB", getGraphicsResetStatus);
Corentin Wallezb920e362016-08-03 18:19:41 -04001041
1042 // GL_KHR_robustness
Jamie Madill60c65552017-05-02 14:34:05 -04001043 ASSIGN_WITH_EXT("GL_KHR_robustness", "glGetGraphicsResetStatus", getGraphicsResetStatus);
Corentin Wallezb920e362016-08-03 18:19:41 -04001044
Geoff Lang57ce9ea2016-11-24 12:03:14 -05001045 // GL_ARB_invalidate_subdata
Jamie Madill60c65552017-05-02 14:34:05 -04001046 ASSIGN_WITH_EXT("GL_ARB_invalidate_subdata", "glInvalidateTexSubImage", invalidateTexSubImage);
1047 ASSIGN_WITH_EXT("GL_ARB_invalidate_subdata", "glInvalidateTexImage", invalidateTexImage);
1048 ASSIGN_WITH_EXT("GL_ARB_invalidate_subdata", "glInvalidateBufferSubData", invalidateBufferSubData);
1049 ASSIGN_WITH_EXT("GL_ARB_invalidate_subdata", "glInvalidateBufferData", invalidateBufferData);
1050 ASSIGN_WITH_EXT("GL_ARB_invalidate_subdata", "glInvalidateFramebuffer", invalidateFramebuffer);
1051 ASSIGN_WITH_EXT("GL_ARB_invalidate_subdata", "glInvalidateSubFramebuffer", invalidateSubFramebuffer);
Geoff Lang57ce9ea2016-11-24 12:03:14 -05001052
Geoff Lang56cf9af2015-02-17 10:16:49 -05001053 // 1.0
Geoff Lang08dcfed2015-05-25 13:38:42 -04001054 if (isAtLeastGL(gl::Version(1, 0)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001055 {
Jamie Madill60c65552017-05-02 14:34:05 -04001056 ASSIGN("glBlendFunc", blendFunc);
1057 ASSIGN("glClear", clear);
1058 ASSIGN("glClearColor", clearColor);
1059 ASSIGN("glClearDepth", clearDepth);
1060 ASSIGN("glClearStencil", clearStencil);
1061 ASSIGN("glColorMask", colorMask);
1062 ASSIGN("glCullFace", cullFace);
1063 ASSIGN("glDepthFunc", depthFunc);
1064 ASSIGN("glDepthMask", depthMask);
1065 ASSIGN("glDepthRange", depthRange);
1066 ASSIGN("glDisable", disable);
1067 ASSIGN("glDrawBuffer", drawBuffer);
1068 ASSIGN("glEnable", enable);
1069 ASSIGN("glFinish", finish);
1070 ASSIGN("glFlush", flush);
1071 ASSIGN("glFrontFace", frontFace);
1072 ASSIGN("glGetBooleanv", getBooleanv);
1073 ASSIGN("glGetDoublev", getDoublev);
1074 ASSIGN("glGetError", getError);
1075 ASSIGN("glGetFloatv", getFloatv);
1076 ASSIGN("glGetIntegerv", getIntegerv);
1077 ASSIGN("glGetString", getString);
1078 ASSIGN("glGetTexImage", getTexImage);
1079 ASSIGN("glGetTexLevelParameterfv", getTexLevelParameterfv);
1080 ASSIGN("glGetTexLevelParameteriv", getTexLevelParameteriv);
1081 ASSIGN("glGetTexParameterfv", getTexParameterfv);
1082 ASSIGN("glGetTexParameteriv", getTexParameteriv);
1083 ASSIGN("glHint", hint);
1084 ASSIGN("glIsEnabled", isEnabled);
1085 ASSIGN("glLineWidth", lineWidth);
1086 ASSIGN("glLogicOp", logicOp);
1087 ASSIGN("glPixelStoref", pixelStoref);
1088 ASSIGN("glPixelStorei", pixelStorei);
1089 ASSIGN("glPointSize", pointSize);
1090 ASSIGN("glPolygonMode", polygonMode);
1091 ASSIGN("glReadBuffer", readBuffer);
1092 ASSIGN("glReadPixels", readPixels);
1093 ASSIGN("glScissor", scissor);
1094 ASSIGN("glStencilFunc", stencilFunc);
1095 ASSIGN("glStencilMask", stencilMask);
1096 ASSIGN("glStencilOp", stencilOp);
1097 ASSIGN("glTexImage1D", texImage1D);
1098 ASSIGN("glTexImage2D", texImage2D);
1099 ASSIGN("glTexParameterf", texParameterf);
1100 ASSIGN("glTexParameterfv", texParameterfv);
1101 ASSIGN("glTexParameteri", texParameteri);
1102 ASSIGN("glTexParameteriv", texParameteriv);
1103 ASSIGN("glViewport", viewport);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001104 }
1105
1106 // 1.1
Geoff Lang08dcfed2015-05-25 13:38:42 -04001107 if (isAtLeastGL(gl::Version(1, 1)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001108 {
Jamie Madill60c65552017-05-02 14:34:05 -04001109 ASSIGN("glBindTexture", bindTexture);
1110 ASSIGN("glCopyTexImage1D", copyTexImage1D);
1111 ASSIGN("glCopyTexImage2D", copyTexImage2D);
1112 ASSIGN("glCopyTexSubImage1D", copyTexSubImage1D);
1113 ASSIGN("glCopyTexSubImage2D", copyTexSubImage2D);
1114 ASSIGN("glDeleteTextures", deleteTextures);
1115 ASSIGN("glDrawArrays", drawArrays);
1116 ASSIGN("glDrawElements", drawElements);
1117 ASSIGN("glGenTextures", genTextures);
1118 ASSIGN("glIsTexture", isTexture);
1119 ASSIGN("glPolygonOffset", polygonOffset);
1120 ASSIGN("glTexSubImage1D", texSubImage1D);
1121 ASSIGN("glTexSubImage2D", texSubImage2D);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001122 }
1123
1124 // 1.2
Geoff Lang08dcfed2015-05-25 13:38:42 -04001125 if (isAtLeastGL(gl::Version(1, 2)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001126 {
Jamie Madill60c65552017-05-02 14:34:05 -04001127 ASSIGN("glBlendColor", blendColor);
1128 ASSIGN("glBlendEquation", blendEquation);
1129 ASSIGN("glCopyTexSubImage3D", copyTexSubImage3D);
1130 ASSIGN("glDrawRangeElements", drawRangeElements);
1131 ASSIGN("glTexImage3D", texImage3D);
1132 ASSIGN("glTexSubImage3D", texSubImage3D);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001133 }
1134
1135 // 1.3
Geoff Lang08dcfed2015-05-25 13:38:42 -04001136 if (isAtLeastGL(gl::Version(1, 3)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001137 {
Jamie Madill60c65552017-05-02 14:34:05 -04001138 ASSIGN("glActiveTexture", activeTexture);
1139 ASSIGN("glCompressedTexImage1D", compressedTexImage1D);
1140 ASSIGN("glCompressedTexImage2D", compressedTexImage2D);
1141 ASSIGN("glCompressedTexImage3D", compressedTexImage3D);
1142 ASSIGN("glCompressedTexSubImage1D", compressedTexSubImage1D);
1143 ASSIGN("glCompressedTexSubImage2D", compressedTexSubImage2D);
1144 ASSIGN("glCompressedTexSubImage3D", compressedTexSubImage3D);
1145 ASSIGN("glGetCompressedTexImage", getCompressedTexImage);
1146 ASSIGN("glSampleCoverage", sampleCoverage);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001147 }
1148
1149 // 1.4
Geoff Lang08dcfed2015-05-25 13:38:42 -04001150 if (isAtLeastGL(gl::Version(1, 4)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001151 {
Jamie Madill60c65552017-05-02 14:34:05 -04001152 ASSIGN("glBlendFuncSeparate", blendFuncSeparate);
1153 ASSIGN("glMultiDrawArrays", multiDrawArrays);
1154 ASSIGN("glMultiDrawElements", multiDrawElements);
1155 ASSIGN("glPointParameterf", pointParameterf);
1156 ASSIGN("glPointParameterfv", pointParameterfv);
1157 ASSIGN("glPointParameteri", pointParameteri);
1158 ASSIGN("glPointParameteriv", pointParameteriv);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001159 }
1160
1161 // 1.5
Geoff Lang08dcfed2015-05-25 13:38:42 -04001162 if (isAtLeastGL(gl::Version(1, 5)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001163 {
Jamie Madill60c65552017-05-02 14:34:05 -04001164 ASSIGN("glBeginQuery", beginQuery);
1165 ASSIGN("glBindBuffer", bindBuffer);
1166 ASSIGN("glBufferData", bufferData);
1167 ASSIGN("glBufferSubData", bufferSubData);
1168 ASSIGN("glDeleteBuffers", deleteBuffers);
1169 ASSIGN("glDeleteQueries", deleteQueries);
1170 ASSIGN("glEndQuery", endQuery);
1171 ASSIGN("glGenBuffers", genBuffers);
1172 ASSIGN("glGenQueries", genQueries);
1173 ASSIGN("glGetBufferParameteriv", getBufferParameteriv);
1174 ASSIGN("glGetBufferPointerv", getBufferPointerv);
1175 ASSIGN("glGetBufferSubData", getBufferSubData);
1176 ASSIGN("glGetQueryObjectiv", getQueryObjectiv);
1177 ASSIGN("glGetQueryObjectuiv", getQueryObjectuiv);
1178 ASSIGN("glGetQueryiv", getQueryiv);
1179 ASSIGN("glIsBuffer", isBuffer);
1180 ASSIGN("glIsQuery", isQuery);
1181 ASSIGN("glMapBuffer", mapBuffer);
1182 ASSIGN("glUnmapBuffer", unmapBuffer);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001183 }
1184
1185 // 2.0
Geoff Lang08dcfed2015-05-25 13:38:42 -04001186 if (isAtLeastGL(gl::Version(2, 0)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001187 {
Jamie Madill60c65552017-05-02 14:34:05 -04001188 ASSIGN("glAttachShader", attachShader);
1189 ASSIGN("glBindAttribLocation", bindAttribLocation);
1190 ASSIGN("glBlendEquationSeparate", blendEquationSeparate);
1191 ASSIGN("glCompileShader", compileShader);
1192 ASSIGN("glCreateProgram", createProgram);
1193 ASSIGN("glCreateShader", createShader);
1194 ASSIGN("glDeleteProgram", deleteProgram);
1195 ASSIGN("glDeleteShader", deleteShader);
1196 ASSIGN("glDetachShader", detachShader);
1197 ASSIGN("glDisableVertexAttribArray", disableVertexAttribArray);
1198 ASSIGN("glDrawBuffers", drawBuffers);
1199 ASSIGN("glEnableVertexAttribArray", enableVertexAttribArray);
1200 ASSIGN("glGetActiveAttrib", getActiveAttrib);
1201 ASSIGN("glGetActiveUniform", getActiveUniform);
1202 ASSIGN("glGetAttachedShaders", getAttachedShaders);
1203 ASSIGN("glGetAttribLocation", getAttribLocation);
1204 ASSIGN("glGetProgramInfoLog", getProgramInfoLog);
1205 ASSIGN("glGetProgramiv", getProgramiv);
1206 ASSIGN("glGetShaderInfoLog", getShaderInfoLog);
1207 ASSIGN("glGetShaderSource", getShaderSource);
1208 ASSIGN("glGetShaderiv", getShaderiv);
1209 ASSIGN("glGetUniformLocation", getUniformLocation);
1210 ASSIGN("glGetUniformfv", getUniformfv);
1211 ASSIGN("glGetUniformiv", getUniformiv);
1212 ASSIGN("glGetVertexAttribPointerv", getVertexAttribPointerv);
1213 ASSIGN("glGetVertexAttribdv", getVertexAttribdv);
1214 ASSIGN("glGetVertexAttribfv", getVertexAttribfv);
1215 ASSIGN("glGetVertexAttribiv", getVertexAttribiv);
1216 ASSIGN("glIsProgram", isProgram);
1217 ASSIGN("glIsShader", isShader);
1218 ASSIGN("glLinkProgram", linkProgram);
1219 ASSIGN("glShaderSource", shaderSource);
1220 ASSIGN("glStencilFuncSeparate", stencilFuncSeparate);
1221 ASSIGN("glStencilMaskSeparate", stencilMaskSeparate);
1222 ASSIGN("glStencilOpSeparate", stencilOpSeparate);
1223 ASSIGN("glUniform1f", uniform1f);
1224 ASSIGN("glUniform1fv", uniform1fv);
1225 ASSIGN("glUniform1i", uniform1i);
1226 ASSIGN("glUniform1iv", uniform1iv);
1227 ASSIGN("glUniform2f", uniform2f);
1228 ASSIGN("glUniform2fv", uniform2fv);
1229 ASSIGN("glUniform2i", uniform2i);
1230 ASSIGN("glUniform2iv", uniform2iv);
1231 ASSIGN("glUniform3f", uniform3f);
1232 ASSIGN("glUniform3fv", uniform3fv);
1233 ASSIGN("glUniform3i", uniform3i);
1234 ASSIGN("glUniform3iv", uniform3iv);
1235 ASSIGN("glUniform4f", uniform4f);
1236 ASSIGN("glUniform4fv", uniform4fv);
1237 ASSIGN("glUniform4i", uniform4i);
1238 ASSIGN("glUniform4iv", uniform4iv);
1239 ASSIGN("glUniformMatrix2fv", uniformMatrix2fv);
1240 ASSIGN("glUniformMatrix3fv", uniformMatrix3fv);
1241 ASSIGN("glUniformMatrix4fv", uniformMatrix4fv);
1242 ASSIGN("glUseProgram", useProgram);
1243 ASSIGN("glValidateProgram", validateProgram);
1244 ASSIGN("glVertexAttrib1d", vertexAttrib1d);
1245 ASSIGN("glVertexAttrib1dv", vertexAttrib1dv);
1246 ASSIGN("glVertexAttrib1f", vertexAttrib1f);
1247 ASSIGN("glVertexAttrib1fv", vertexAttrib1fv);
1248 ASSIGN("glVertexAttrib1s", vertexAttrib1s);
1249 ASSIGN("glVertexAttrib1sv", vertexAttrib1sv);
1250 ASSIGN("glVertexAttrib2d", vertexAttrib2d);
1251 ASSIGN("glVertexAttrib2dv", vertexAttrib2dv);
1252 ASSIGN("glVertexAttrib2f", vertexAttrib2f);
1253 ASSIGN("glVertexAttrib2fv", vertexAttrib2fv);
1254 ASSIGN("glVertexAttrib2s", vertexAttrib2s);
1255 ASSIGN("glVertexAttrib2sv", vertexAttrib2sv);
1256 ASSIGN("glVertexAttrib3d", vertexAttrib3d);
1257 ASSIGN("glVertexAttrib3dv", vertexAttrib3dv);
1258 ASSIGN("glVertexAttrib3f", vertexAttrib3f);
1259 ASSIGN("glVertexAttrib3fv", vertexAttrib3fv);
1260 ASSIGN("glVertexAttrib3s", vertexAttrib3s);
1261 ASSIGN("glVertexAttrib3sv", vertexAttrib3sv);
1262 ASSIGN("glVertexAttrib4Nbv", vertexAttrib4Nbv);
1263 ASSIGN("glVertexAttrib4Niv", vertexAttrib4Niv);
1264 ASSIGN("glVertexAttrib4Nsv", vertexAttrib4Nsv);
1265 ASSIGN("glVertexAttrib4Nub", vertexAttrib4Nub);
1266 ASSIGN("glVertexAttrib4Nubv", vertexAttrib4Nubv);
1267 ASSIGN("glVertexAttrib4Nuiv", vertexAttrib4Nuiv);
1268 ASSIGN("glVertexAttrib4Nusv", vertexAttrib4Nusv);
1269 ASSIGN("glVertexAttrib4bv", vertexAttrib4bv);
1270 ASSIGN("glVertexAttrib4d", vertexAttrib4d);
1271 ASSIGN("glVertexAttrib4dv", vertexAttrib4dv);
1272 ASSIGN("glVertexAttrib4f", vertexAttrib4f);
1273 ASSIGN("glVertexAttrib4fv", vertexAttrib4fv);
1274 ASSIGN("glVertexAttrib4iv", vertexAttrib4iv);
1275 ASSIGN("glVertexAttrib4s", vertexAttrib4s);
1276 ASSIGN("glVertexAttrib4sv", vertexAttrib4sv);
1277 ASSIGN("glVertexAttrib4ubv", vertexAttrib4ubv);
1278 ASSIGN("glVertexAttrib4uiv", vertexAttrib4uiv);
1279 ASSIGN("glVertexAttrib4usv", vertexAttrib4usv);
1280 ASSIGN("glVertexAttribPointer", vertexAttribPointer);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001281 }
1282
1283 // 2.1
Geoff Lang08dcfed2015-05-25 13:38:42 -04001284 if (isAtLeastGL(gl::Version(2, 1)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001285 {
Jamie Madill60c65552017-05-02 14:34:05 -04001286 ASSIGN("glUniformMatrix2x3fv", uniformMatrix2x3fv);
1287 ASSIGN("glUniformMatrix2x4fv", uniformMatrix2x4fv);
1288 ASSIGN("glUniformMatrix3x2fv", uniformMatrix3x2fv);
1289 ASSIGN("glUniformMatrix3x4fv", uniformMatrix3x4fv);
1290 ASSIGN("glUniformMatrix4x2fv", uniformMatrix4x2fv);
1291 ASSIGN("glUniformMatrix4x3fv", uniformMatrix4x3fv);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001292 }
1293
1294 // 3.0
Geoff Lang08dcfed2015-05-25 13:38:42 -04001295 if (isAtLeastGL(gl::Version(3, 0)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001296 {
Jamie Madill60c65552017-05-02 14:34:05 -04001297 ASSIGN("glBeginConditionalRender", beginConditionalRender);
1298 ASSIGN("glBeginTransformFeedback", beginTransformFeedback);
1299 ASSIGN("glBindBufferBase", bindBufferBase);
1300 ASSIGN("glBindBufferRange", bindBufferRange);
1301 ASSIGN("glBindFragDataLocation", bindFragDataLocation);
1302 ASSIGN("glBindFramebuffer", bindFramebuffer);
1303 ASSIGN("glBindRenderbuffer", bindRenderbuffer);
1304 ASSIGN("glBindVertexArray", bindVertexArray);
1305 ASSIGN("glBlitFramebuffer", blitFramebuffer);
1306 ASSIGN("glCheckFramebufferStatus", checkFramebufferStatus);
1307 ASSIGN("glClampColor", clampColor);
1308 ASSIGN("glClearBufferfi", clearBufferfi);
1309 ASSIGN("glClearBufferfv", clearBufferfv);
1310 ASSIGN("glClearBufferiv", clearBufferiv);
1311 ASSIGN("glClearBufferuiv", clearBufferuiv);
1312 ASSIGN("glColorMaski", colorMaski);
1313 ASSIGN("glDeleteFramebuffers", deleteFramebuffers);
1314 ASSIGN("glDeleteRenderbuffers", deleteRenderbuffers);
1315 ASSIGN("glDeleteVertexArrays", deleteVertexArrays);
1316 ASSIGN("glDisablei", disablei);
1317 ASSIGN("glEnablei", enablei);
1318 ASSIGN("glEndConditionalRender", endConditionalRender);
1319 ASSIGN("glEndTransformFeedback", endTransformFeedback);
1320 ASSIGN("glFlushMappedBufferRange", flushMappedBufferRange);
1321 ASSIGN("glFramebufferRenderbuffer", framebufferRenderbuffer);
1322 ASSIGN("glFramebufferTexture1D", framebufferTexture1D);
1323 ASSIGN("glFramebufferTexture2D", framebufferTexture2D);
1324 ASSIGN("glFramebufferTexture3D", framebufferTexture3D);
1325 ASSIGN("glFramebufferTextureLayer", framebufferTextureLayer);
1326 ASSIGN("glGenFramebuffers", genFramebuffers);
1327 ASSIGN("glGenRenderbuffers", genRenderbuffers);
1328 ASSIGN("glGenVertexArrays", genVertexArrays);
1329 ASSIGN("glGenerateMipmap", generateMipmap);
1330 ASSIGN("glGetBooleani_v", getBooleani_v);
1331 ASSIGN("glGetFragDataLocation", getFragDataLocation);
1332 ASSIGN("glGetFramebufferAttachmentParameteriv", getFramebufferAttachmentParameteriv);
1333 ASSIGN("glGetIntegeri_v", getIntegeri_v);
1334 ASSIGN("glGetRenderbufferParameteriv", getRenderbufferParameteriv);
1335 ASSIGN("glGetStringi", getStringi);
1336 ASSIGN("glGetTexParameterIiv", getTexParameterIiv);
1337 ASSIGN("glGetTexParameterIuiv", getTexParameterIuiv);
1338 ASSIGN("glGetTransformFeedbackVarying", getTransformFeedbackVarying);
1339 ASSIGN("glGetUniformuiv", getUniformuiv);
1340 ASSIGN("glGetVertexAttribIiv", getVertexAttribIiv);
1341 ASSIGN("glGetVertexAttribIuiv", getVertexAttribIuiv);
1342 ASSIGN("glIsEnabledi", isEnabledi);
1343 ASSIGN("glIsFramebuffer", isFramebuffer);
1344 ASSIGN("glIsRenderbuffer", isRenderbuffer);
1345 ASSIGN("glIsVertexArray", isVertexArray);
1346 ASSIGN("glMapBufferRange", mapBufferRange);
1347 ASSIGN("glRenderbufferStorage", renderbufferStorage);
1348 ASSIGN("glRenderbufferStorageMultisample", renderbufferStorageMultisample);
1349 ASSIGN("glTexParameterIiv", texParameterIiv);
1350 ASSIGN("glTexParameterIuiv", texParameterIuiv);
1351 ASSIGN("glTransformFeedbackVaryings", transformFeedbackVaryings);
1352 ASSIGN("glUniform1ui", uniform1ui);
1353 ASSIGN("glUniform1uiv", uniform1uiv);
1354 ASSIGN("glUniform2ui", uniform2ui);
1355 ASSIGN("glUniform2uiv", uniform2uiv);
1356 ASSIGN("glUniform3ui", uniform3ui);
1357 ASSIGN("glUniform3uiv", uniform3uiv);
1358 ASSIGN("glUniform4ui", uniform4ui);
1359 ASSIGN("glUniform4uiv", uniform4uiv);
1360 ASSIGN("glVertexAttribI1i", vertexAttribI1i);
1361 ASSIGN("glVertexAttribI1iv", vertexAttribI1iv);
1362 ASSIGN("glVertexAttribI1ui", vertexAttribI1ui);
1363 ASSIGN("glVertexAttribI1uiv", vertexAttribI1uiv);
1364 ASSIGN("glVertexAttribI2i", vertexAttribI2i);
1365 ASSIGN("glVertexAttribI2iv", vertexAttribI2iv);
1366 ASSIGN("glVertexAttribI2ui", vertexAttribI2ui);
1367 ASSIGN("glVertexAttribI2uiv", vertexAttribI2uiv);
1368 ASSIGN("glVertexAttribI3i", vertexAttribI3i);
1369 ASSIGN("glVertexAttribI3iv", vertexAttribI3iv);
1370 ASSIGN("glVertexAttribI3ui", vertexAttribI3ui);
1371 ASSIGN("glVertexAttribI3uiv", vertexAttribI3uiv);
1372 ASSIGN("glVertexAttribI4bv", vertexAttribI4bv);
1373 ASSIGN("glVertexAttribI4i", vertexAttribI4i);
1374 ASSIGN("glVertexAttribI4iv", vertexAttribI4iv);
1375 ASSIGN("glVertexAttribI4sv", vertexAttribI4sv);
1376 ASSIGN("glVertexAttribI4ubv", vertexAttribI4ubv);
1377 ASSIGN("glVertexAttribI4ui", vertexAttribI4ui);
1378 ASSIGN("glVertexAttribI4uiv", vertexAttribI4uiv);
1379 ASSIGN("glVertexAttribI4usv", vertexAttribI4usv);
1380 ASSIGN("glVertexAttribIPointer", vertexAttribIPointer);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001381 }
1382
1383 // 3.1
Geoff Lang08dcfed2015-05-25 13:38:42 -04001384 if (isAtLeastGL(gl::Version(3, 1)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001385 {
Jamie Madill60c65552017-05-02 14:34:05 -04001386 ASSIGN("glCopyBufferSubData", copyBufferSubData);
1387 ASSIGN("glDrawArraysInstanced", drawArraysInstanced);
1388 ASSIGN("glDrawElementsInstanced", drawElementsInstanced);
1389 ASSIGN("glGetActiveUniformBlockName", getActiveUniformBlockName);
1390 ASSIGN("glGetActiveUniformBlockiv", getActiveUniformBlockiv);
1391 ASSIGN("glGetActiveUniformName", getActiveUniformName);
1392 ASSIGN("glGetActiveUniformsiv", getActiveUniformsiv);
1393 ASSIGN("glGetUniformBlockIndex", getUniformBlockIndex);
1394 ASSIGN("glGetUniformIndices", getUniformIndices);
1395 ASSIGN("glPrimitiveRestartIndex", primitiveRestartIndex);
1396 ASSIGN("glTexBuffer", texBuffer);
1397 ASSIGN("glUniformBlockBinding", uniformBlockBinding);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001398 }
1399
1400 // 3.2
Geoff Lang08dcfed2015-05-25 13:38:42 -04001401 if (isAtLeastGL(gl::Version(3, 2)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001402 {
Jamie Madill60c65552017-05-02 14:34:05 -04001403 ASSIGN("glClientWaitSync", clientWaitSync);
1404 ASSIGN("glDeleteSync", deleteSync);
1405 ASSIGN("glDrawElementsBaseVertex", drawElementsBaseVertex);
1406 ASSIGN("glDrawElementsInstancedBaseVertex", drawElementsInstancedBaseVertex);
1407 ASSIGN("glDrawRangeElementsBaseVertex", drawRangeElementsBaseVertex);
1408 ASSIGN("glFenceSync", fenceSync);
1409 ASSIGN("glFramebufferTexture", framebufferTexture);
1410 ASSIGN("glGetBufferParameteri64v", getBufferParameteri64v);
1411 ASSIGN("glGetInteger64i_v", getInteger64i_v);
1412 ASSIGN("glGetInteger64v", getInteger64v);
1413 ASSIGN("glGetMultisamplefv", getMultisamplefv);
1414 ASSIGN("glGetSynciv", getSynciv);
1415 ASSIGN("glIsSync", isSync);
1416 ASSIGN("glMultiDrawElementsBaseVertex", multiDrawElementsBaseVertex);
1417 ASSIGN("glProvokingVertex", provokingVertex);
1418 ASSIGN("glSampleMaski", sampleMaski);
1419 ASSIGN("glTexImage2DMultisample", texImage2DMultisample);
1420 ASSIGN("glTexImage3DMultisample", texImage3DMultisample);
1421 ASSIGN("glWaitSync", waitSync);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001422 }
1423
1424 // 3.3
Geoff Lang08dcfed2015-05-25 13:38:42 -04001425 if (isAtLeastGL(gl::Version(3, 3)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001426 {
Jamie Madill60c65552017-05-02 14:34:05 -04001427 ASSIGN("glBindFragDataLocationIndexed", bindFragDataLocationIndexed);
1428 ASSIGN("glBindSampler", bindSampler);
1429 ASSIGN("glDeleteSamplers", deleteSamplers);
1430 ASSIGN("glGenSamplers", genSamplers);
1431 ASSIGN("glGetFragDataIndex", getFragDataIndex);
1432 ASSIGN("glGetQueryObjecti64v", getQueryObjecti64v);
1433 ASSIGN("glGetQueryObjectui64v", getQueryObjectui64v);
1434 ASSIGN("glGetSamplerParameterIiv", getSamplerParameterIiv);
1435 ASSIGN("glGetSamplerParameterIuiv", getSamplerParameterIuiv);
1436 ASSIGN("glGetSamplerParameterfv", getSamplerParameterfv);
1437 ASSIGN("glGetSamplerParameteriv", getSamplerParameteriv);
1438 ASSIGN("glIsSampler", isSampler);
1439 ASSIGN("glQueryCounter", queryCounter);
1440 ASSIGN("glSamplerParameterIiv", samplerParameterIiv);
1441 ASSIGN("glSamplerParameterIuiv", samplerParameterIuiv);
1442 ASSIGN("glSamplerParameterf", samplerParameterf);
1443 ASSIGN("glSamplerParameterfv", samplerParameterfv);
1444 ASSIGN("glSamplerParameteri", samplerParameteri);
1445 ASSIGN("glSamplerParameteriv", samplerParameteriv);
1446 ASSIGN("glVertexAttribDivisor", vertexAttribDivisor);
1447 ASSIGN("glVertexAttribP1ui", vertexAttribP1ui);
1448 ASSIGN("glVertexAttribP1uiv", vertexAttribP1uiv);
1449 ASSIGN("glVertexAttribP2ui", vertexAttribP2ui);
1450 ASSIGN("glVertexAttribP2uiv", vertexAttribP2uiv);
1451 ASSIGN("glVertexAttribP3ui", vertexAttribP3ui);
1452 ASSIGN("glVertexAttribP3uiv", vertexAttribP3uiv);
1453 ASSIGN("glVertexAttribP4ui", vertexAttribP4ui);
1454 ASSIGN("glVertexAttribP4uiv", vertexAttribP4uiv);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001455 }
1456
1457 // 4.0
Geoff Lang08dcfed2015-05-25 13:38:42 -04001458 if (isAtLeastGL(gl::Version(4, 0)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001459 {
Jamie Madill60c65552017-05-02 14:34:05 -04001460 ASSIGN("glBeginQueryIndexed", beginQueryIndexed);
1461 ASSIGN("glBindTransformFeedback", bindTransformFeedback);
1462 ASSIGN("glBlendEquationSeparatei", blendEquationSeparatei);
1463 ASSIGN("glBlendEquationi", blendEquationi);
1464 ASSIGN("glBlendFuncSeparatei", blendFuncSeparatei);
1465 ASSIGN("glBlendFunci", blendFunci);
1466 ASSIGN("glDeleteTransformFeedbacks", deleteTransformFeedbacks);
1467 ASSIGN("glDrawArraysIndirect", drawArraysIndirect);
1468 ASSIGN("glDrawElementsIndirect", drawElementsIndirect);
1469 ASSIGN("glDrawTransformFeedback", drawTransformFeedback);
1470 ASSIGN("glDrawTransformFeedbackStream", drawTransformFeedbackStream);
1471 ASSIGN("glEndQueryIndexed", endQueryIndexed);
1472 ASSIGN("glGenTransformFeedbacks", genTransformFeedbacks);
1473 ASSIGN("glGetActiveSubroutineName", getActiveSubroutineName);
1474 ASSIGN("glGetActiveSubroutineUniformName", getActiveSubroutineUniformName);
1475 ASSIGN("glGetActiveSubroutineUniformiv", getActiveSubroutineUniformiv);
1476 ASSIGN("glGetProgramStageiv", getProgramStageiv);
1477 ASSIGN("glGetQueryIndexediv", getQueryIndexediv);
1478 ASSIGN("glGetSubroutineIndex", getSubroutineIndex);
1479 ASSIGN("glGetSubroutineUniformLocation", getSubroutineUniformLocation);
1480 ASSIGN("glGetUniformSubroutineuiv", getUniformSubroutineuiv);
1481 ASSIGN("glGetUniformdv", getUniformdv);
1482 ASSIGN("glIsTransformFeedback", isTransformFeedback);
1483 ASSIGN("glMinSampleShading", minSampleShading);
1484 ASSIGN("glPatchParameterfv", patchParameterfv);
1485 ASSIGN("glPatchParameteri", patchParameteri);
1486 ASSIGN("glPauseTransformFeedback", pauseTransformFeedback);
1487 ASSIGN("glResumeTransformFeedback", resumeTransformFeedback);
1488 ASSIGN("glUniform1d", uniform1d);
1489 ASSIGN("glUniform1dv", uniform1dv);
1490 ASSIGN("glUniform2d", uniform2d);
1491 ASSIGN("glUniform2dv", uniform2dv);
1492 ASSIGN("glUniform3d", uniform3d);
1493 ASSIGN("glUniform3dv", uniform3dv);
1494 ASSIGN("glUniform4d", uniform4d);
1495 ASSIGN("glUniform4dv", uniform4dv);
1496 ASSIGN("glUniformMatrix2dv", uniformMatrix2dv);
1497 ASSIGN("glUniformMatrix2x3dv", uniformMatrix2x3dv);
1498 ASSIGN("glUniformMatrix2x4dv", uniformMatrix2x4dv);
1499 ASSIGN("glUniformMatrix3dv", uniformMatrix3dv);
1500 ASSIGN("glUniformMatrix3x2dv", uniformMatrix3x2dv);
1501 ASSIGN("glUniformMatrix3x4dv", uniformMatrix3x4dv);
1502 ASSIGN("glUniformMatrix4dv", uniformMatrix4dv);
1503 ASSIGN("glUniformMatrix4x2dv", uniformMatrix4x2dv);
1504 ASSIGN("glUniformMatrix4x3dv", uniformMatrix4x3dv);
1505 ASSIGN("glUniformSubroutinesuiv", uniformSubroutinesuiv);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001506 }
1507
Corentin Wallez92d77062015-05-04 12:41:54 -04001508 // 4.1
Geoff Lang08dcfed2015-05-25 13:38:42 -04001509 if (isAtLeastGL(gl::Version(4, 1)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001510 {
Jamie Madill60c65552017-05-02 14:34:05 -04001511 ASSIGN("glActiveShaderProgram", activeShaderProgram);
1512 ASSIGN("glBindProgramPipeline", bindProgramPipeline);
1513 ASSIGN("glClearDepthf", clearDepthf);
1514 ASSIGN("glCreateShaderProgramv", createShaderProgramv);
1515 ASSIGN("glDeleteProgramPipelines", deleteProgramPipelines);
1516 ASSIGN("glDepthRangeArrayv", depthRangeArrayv);
1517 ASSIGN("glDepthRangeIndexed", depthRangeIndexed);
1518 ASSIGN("glDepthRangef", depthRangef);
1519 ASSIGN("glGenProgramPipelines", genProgramPipelines);
1520 ASSIGN("glGetDoublei_v", getDoublei_v);
1521 ASSIGN("glGetFloati_v", getFloati_v);
1522 ASSIGN("glGetProgramBinary", getProgramBinary);
1523 ASSIGN("glGetProgramPipelineInfoLog", getProgramPipelineInfoLog);
1524 ASSIGN("glGetProgramPipelineiv", getProgramPipelineiv);
1525 ASSIGN("glGetShaderPrecisionFormat", getShaderPrecisionFormat);
1526 ASSIGN("glGetVertexAttribLdv", getVertexAttribLdv);
1527 ASSIGN("glIsProgramPipeline", isProgramPipeline);
1528 ASSIGN("glProgramBinary", programBinary);
1529 ASSIGN("glProgramParameteri", programParameteri);
1530 ASSIGN("glProgramUniform1d", programUniform1d);
1531 ASSIGN("glProgramUniform1dv", programUniform1dv);
1532 ASSIGN("glProgramUniform1f", programUniform1f);
1533 ASSIGN("glProgramUniform1fv", programUniform1fv);
1534 ASSIGN("glProgramUniform1i", programUniform1i);
1535 ASSIGN("glProgramUniform1iv", programUniform1iv);
1536 ASSIGN("glProgramUniform1ui", programUniform1ui);
1537 ASSIGN("glProgramUniform1uiv", programUniform1uiv);
1538 ASSIGN("glProgramUniform2d", programUniform2d);
1539 ASSIGN("glProgramUniform2dv", programUniform2dv);
1540 ASSIGN("glProgramUniform2f", programUniform2f);
1541 ASSIGN("glProgramUniform2fv", programUniform2fv);
1542 ASSIGN("glProgramUniform2i", programUniform2i);
1543 ASSIGN("glProgramUniform2iv", programUniform2iv);
1544 ASSIGN("glProgramUniform2ui", programUniform2ui);
1545 ASSIGN("glProgramUniform2uiv", programUniform2uiv);
1546 ASSIGN("glProgramUniform3d", programUniform3d);
1547 ASSIGN("glProgramUniform3dv", programUniform3dv);
1548 ASSIGN("glProgramUniform3f", programUniform3f);
1549 ASSIGN("glProgramUniform3fv", programUniform3fv);
1550 ASSIGN("glProgramUniform3i", programUniform3i);
1551 ASSIGN("glProgramUniform3iv", programUniform3iv);
1552 ASSIGN("glProgramUniform3ui", programUniform3ui);
1553 ASSIGN("glProgramUniform3uiv", programUniform3uiv);
1554 ASSIGN("glProgramUniform4d", programUniform4d);
1555 ASSIGN("glProgramUniform4dv", programUniform4dv);
1556 ASSIGN("glProgramUniform4f", programUniform4f);
1557 ASSIGN("glProgramUniform4fv", programUniform4fv);
1558 ASSIGN("glProgramUniform4i", programUniform4i);
1559 ASSIGN("glProgramUniform4iv", programUniform4iv);
1560 ASSIGN("glProgramUniform4ui", programUniform4ui);
1561 ASSIGN("glProgramUniform4uiv", programUniform4uiv);
1562 ASSIGN("glProgramUniformMatrix2dv", programUniformMatrix2dv);
1563 ASSIGN("glProgramUniformMatrix2fv", programUniformMatrix2fv);
1564 ASSIGN("glProgramUniformMatrix2x3dv", programUniformMatrix2x3dv);
1565 ASSIGN("glProgramUniformMatrix2x3fv", programUniformMatrix2x3fv);
1566 ASSIGN("glProgramUniformMatrix2x4dv", programUniformMatrix2x4dv);
1567 ASSIGN("glProgramUniformMatrix2x4fv", programUniformMatrix2x4fv);
1568 ASSIGN("glProgramUniformMatrix3dv", programUniformMatrix3dv);
1569 ASSIGN("glProgramUniformMatrix3fv", programUniformMatrix3fv);
1570 ASSIGN("glProgramUniformMatrix3x2dv", programUniformMatrix3x2dv);
1571 ASSIGN("glProgramUniformMatrix3x2fv", programUniformMatrix3x2fv);
1572 ASSIGN("glProgramUniformMatrix3x4dv", programUniformMatrix3x4dv);
1573 ASSIGN("glProgramUniformMatrix3x4fv", programUniformMatrix3x4fv);
1574 ASSIGN("glProgramUniformMatrix4dv", programUniformMatrix4dv);
1575 ASSIGN("glProgramUniformMatrix4fv", programUniformMatrix4fv);
1576 ASSIGN("glProgramUniformMatrix4x2dv", programUniformMatrix4x2dv);
1577 ASSIGN("glProgramUniformMatrix4x2fv", programUniformMatrix4x2fv);
1578 ASSIGN("glProgramUniformMatrix4x3dv", programUniformMatrix4x3dv);
1579 ASSIGN("glProgramUniformMatrix4x3fv", programUniformMatrix4x3fv);
1580 ASSIGN("glReleaseShaderCompiler", releaseShaderCompiler);
1581 ASSIGN("glScissorArrayv", scissorArrayv);
1582 ASSIGN("glScissorIndexed", scissorIndexed);
1583 ASSIGN("glScissorIndexedv", scissorIndexedv);
1584 ASSIGN("glShaderBinary", shaderBinary);
1585 ASSIGN("glUseProgramStages", useProgramStages);
1586 ASSIGN("glValidateProgramPipeline", validateProgramPipeline);
1587 ASSIGN("glVertexAttribL1d", vertexAttribL1d);
1588 ASSIGN("glVertexAttribL1dv", vertexAttribL1dv);
1589 ASSIGN("glVertexAttribL2d", vertexAttribL2d);
1590 ASSIGN("glVertexAttribL2dv", vertexAttribL2dv);
1591 ASSIGN("glVertexAttribL3d", vertexAttribL3d);
1592 ASSIGN("glVertexAttribL3dv", vertexAttribL3dv);
1593 ASSIGN("glVertexAttribL4d", vertexAttribL4d);
1594 ASSIGN("glVertexAttribL4dv", vertexAttribL4dv);
1595 ASSIGN("glVertexAttribLPointer", vertexAttribLPointer);
1596 ASSIGN("glViewportArrayv", viewportArrayv);
1597 ASSIGN("glViewportIndexedf", viewportIndexedf);
1598 ASSIGN("glViewportIndexedfv", viewportIndexedfv);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001599 }
1600
1601 // 4.2
Geoff Lang08dcfed2015-05-25 13:38:42 -04001602 if (isAtLeastGL(gl::Version(4, 2)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001603 {
Jamie Madill60c65552017-05-02 14:34:05 -04001604 ASSIGN("glBindImageTexture", bindImageTexture);
1605 ASSIGN("glDrawArraysInstancedBaseInstance", drawArraysInstancedBaseInstance);
1606 ASSIGN("glDrawElementsInstancedBaseInstance", drawElementsInstancedBaseInstance);
1607 ASSIGN("glDrawElementsInstancedBaseVertexBaseInstance", drawElementsInstancedBaseVertexBaseInstance);
1608 ASSIGN("glDrawTransformFeedbackInstanced", drawTransformFeedbackInstanced);
1609 ASSIGN("glDrawTransformFeedbackStreamInstanced", drawTransformFeedbackStreamInstanced);
1610 ASSIGN("glGetActiveAtomicCounterBufferiv", getActiveAtomicCounterBufferiv);
1611 ASSIGN("glGetInternalformativ", getInternalformativ);
1612 ASSIGN("glMemoryBarrier", memoryBarrier);
1613 ASSIGN("glTexStorage1D", texStorage1D);
1614 ASSIGN("glTexStorage2D", texStorage2D);
1615 ASSIGN("glTexStorage3D", texStorage3D);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001616 }
1617
1618 // 4.3
Geoff Lang08dcfed2015-05-25 13:38:42 -04001619 if (isAtLeastGL(gl::Version(4, 3)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001620 {
Jamie Madill60c65552017-05-02 14:34:05 -04001621 ASSIGN("glBindVertexBuffer", bindVertexBuffer);
1622 ASSIGN("glClearBufferData", clearBufferData);
1623 ASSIGN("glClearBufferSubData", clearBufferSubData);
1624 ASSIGN("glCopyImageSubData", copyImageSubData);
1625 ASSIGN("glDebugMessageCallback", debugMessageCallback);
1626 ASSIGN("glDebugMessageControl", debugMessageControl);
1627 ASSIGN("glDebugMessageInsert", debugMessageInsert);
1628 ASSIGN("glDispatchCompute", dispatchCompute);
1629 ASSIGN("glDispatchComputeIndirect", dispatchComputeIndirect);
1630 ASSIGN("glFramebufferParameteri", framebufferParameteri);
1631 ASSIGN("glGetDebugMessageLog", getDebugMessageLog);
1632 ASSIGN("glGetFramebufferParameteriv", getFramebufferParameteriv);
1633 ASSIGN("glGetInternalformati64v", getInternalformati64v);
1634 ASSIGN("glGetPointerv", getPointerv);
1635 ASSIGN("glGetObjectLabel", getObjectLabel);
1636 ASSIGN("glGetObjectPtrLabel", getObjectPtrLabel);
1637 ASSIGN("glGetProgramInterfaceiv", getProgramInterfaceiv);
1638 ASSIGN("glGetProgramResourceIndex", getProgramResourceIndex);
1639 ASSIGN("glGetProgramResourceLocation", getProgramResourceLocation);
1640 ASSIGN("glGetProgramResourceLocationIndex", getProgramResourceLocationIndex);
1641 ASSIGN("glGetProgramResourceName", getProgramResourceName);
1642 ASSIGN("glGetProgramResourceiv", getProgramResourceiv);
1643 ASSIGN("glInvalidateBufferData", invalidateBufferData);
1644 ASSIGN("glInvalidateBufferSubData", invalidateBufferSubData);
1645 ASSIGN("glInvalidateFramebuffer", invalidateFramebuffer);
1646 ASSIGN("glInvalidateSubFramebuffer", invalidateSubFramebuffer);
1647 ASSIGN("glInvalidateTexImage", invalidateTexImage);
1648 ASSIGN("glInvalidateTexSubImage", invalidateTexSubImage);
1649 ASSIGN("glMultiDrawArraysIndirect", multiDrawArraysIndirect);
1650 ASSIGN("glMultiDrawElementsIndirect", multiDrawElementsIndirect);
1651 ASSIGN("glObjectLabel", objectLabel);
1652 ASSIGN("glObjectPtrLabel", objectPtrLabel);
1653 ASSIGN("glPopDebugGroup", popDebugGroup);
1654 ASSIGN("glPushDebugGroup", pushDebugGroup);
1655 ASSIGN("glShaderStorageBlockBinding", shaderStorageBlockBinding);
1656 ASSIGN("glTexBufferRange", texBufferRange);
1657 ASSIGN("glTexStorage2DMultisample", texStorage2DMultisample);
1658 ASSIGN("glTexStorage3DMultisample", texStorage3DMultisample);
1659 ASSIGN("glTextureView", textureView);
1660 ASSIGN("glVertexAttribBinding", vertexAttribBinding);
1661 ASSIGN("glVertexAttribFormat", vertexAttribFormat);
1662 ASSIGN("glVertexAttribIFormat", vertexAttribIFormat);
1663 ASSIGN("glVertexAttribLFormat", vertexAttribLFormat);
1664 ASSIGN("glVertexBindingDivisor", vertexBindingDivisor);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001665 }
1666
1667 // 4.4
Geoff Lang08dcfed2015-05-25 13:38:42 -04001668 if (isAtLeastGL(gl::Version(4, 4)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001669 {
Jamie Madill60c65552017-05-02 14:34:05 -04001670 ASSIGN("glBindBuffersBase", bindBuffersBase);
1671 ASSIGN("glBindBuffersRange", bindBuffersRange);
1672 ASSIGN("glBindImageTextures", bindImageTextures);
1673 ASSIGN("glBindSamplers", bindSamplers);
1674 ASSIGN("glBindTextures", bindTextures);
1675 ASSIGN("glBindVertexBuffers", bindVertexBuffers);
1676 ASSIGN("glBufferStorage", bufferStorage);
1677 ASSIGN("glClearTexImage", clearTexImage);
1678 ASSIGN("glClearTexSubImage", clearTexSubImage);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001679 }
1680
1681 // 4.5
Geoff Lang08dcfed2015-05-25 13:38:42 -04001682 if (isAtLeastGL(gl::Version(4, 5)))
Geoff Lang56cf9af2015-02-17 10:16:49 -05001683 {
Jamie Madill60c65552017-05-02 14:34:05 -04001684 ASSIGN("glBindTextureUnit", bindTextureUnit);
1685 ASSIGN("glBlitNamedFramebuffer", blitNamedFramebuffer);
1686 ASSIGN("glCheckNamedFramebufferStatus", checkNamedFramebufferStatus);
1687 ASSIGN("glClearNamedBufferData", clearNamedBufferData);
1688 ASSIGN("glClearNamedBufferSubData", clearNamedBufferSubData);
1689 ASSIGN("glClearNamedFramebufferfi", clearNamedFramebufferfi);
1690 ASSIGN("glClearNamedFramebufferfv", clearNamedFramebufferfv);
1691 ASSIGN("glClearNamedFramebufferiv", clearNamedFramebufferiv);
1692 ASSIGN("glClearNamedFramebufferuiv", clearNamedFramebufferuiv);
1693 ASSIGN("glClipControl", clipControl);
1694 ASSIGN("glCompressedTextureSubImage1D", compressedTextureSubImage1D);
1695 ASSIGN("glCompressedTextureSubImage2D", compressedTextureSubImage2D);
1696 ASSIGN("glCompressedTextureSubImage3D", compressedTextureSubImage3D);
1697 ASSIGN("glCopyNamedBufferSubData", copyNamedBufferSubData);
1698 ASSIGN("glCopyTextureSubImage1D", copyTextureSubImage1D);
1699 ASSIGN("glCopyTextureSubImage2D", copyTextureSubImage2D);
1700 ASSIGN("glCopyTextureSubImage3D", copyTextureSubImage3D);
1701 ASSIGN("glCreateBuffers", createBuffers);
1702 ASSIGN("glCreateFramebuffers", createFramebuffers);
1703 ASSIGN("glCreateProgramPipelines", createProgramPipelines);
1704 ASSIGN("glCreateQueries", createQueries);
1705 ASSIGN("glCreateRenderbuffers", createRenderbuffers);
1706 ASSIGN("glCreateSamplers", createSamplers);
1707 ASSIGN("glCreateTextures", createTextures);
1708 ASSIGN("glCreateTransformFeedbacks", createTransformFeedbacks);
1709 ASSIGN("glCreateVertexArrays", createVertexArrays);
1710 ASSIGN("glDisableVertexArrayAttrib", disableVertexArrayAttrib);
1711 ASSIGN("glEnableVertexArrayAttrib", enableVertexArrayAttrib);
1712 ASSIGN("glFlushMappedNamedBufferRange", flushMappedNamedBufferRange);
1713 ASSIGN("glGenerateTextureMipmap", generateTextureMipmap);
1714 ASSIGN("glGetCompressedTextureImage", getCompressedTextureImage);
1715 ASSIGN("glGetCompressedTextureSubImage", getCompressedTextureSubImage);
1716 ASSIGN("glGetGraphicsResetStatus", getGraphicsResetStatus);
1717 ASSIGN("glGetNamedBufferParameteri64v", getNamedBufferParameteri64v);
1718 ASSIGN("glGetNamedBufferParameteriv", getNamedBufferParameteriv);
1719 ASSIGN("glGetNamedBufferPointerv", getNamedBufferPointerv);
1720 ASSIGN("glGetNamedBufferSubData", getNamedBufferSubData);
1721 ASSIGN("glGetNamedFramebufferAttachmentParameteriv", getNamedFramebufferAttachmentParameteriv);
1722 ASSIGN("glGetNamedFramebufferParameteriv", getNamedFramebufferParameteriv);
1723 ASSIGN("glGetNamedRenderbufferParameteriv", getNamedRenderbufferParameteriv);
1724 ASSIGN("glGetQueryBufferObjecti64v", getQueryBufferObjecti64v);
1725 ASSIGN("glGetQueryBufferObjectiv", getQueryBufferObjectiv);
1726 ASSIGN("glGetQueryBufferObjectui64v", getQueryBufferObjectui64v);
1727 ASSIGN("glGetQueryBufferObjectuiv", getQueryBufferObjectuiv);
1728 ASSIGN("glGetTextureImage", getTextureImage);
1729 ASSIGN("glGetTextureLevelParameterfv", getTextureLevelParameterfv);
1730 ASSIGN("glGetTextureLevelParameteriv", getTextureLevelParameteriv);
1731 ASSIGN("glGetTextureParameterIiv", getTextureParameterIiv);
1732 ASSIGN("glGetTextureParameterIuiv", getTextureParameterIuiv);
1733 ASSIGN("glGetTextureParameterfv", getTextureParameterfv);
1734 ASSIGN("glGetTextureParameteriv", getTextureParameteriv);
1735 ASSIGN("glGetTextureSubImage", getTextureSubImage);
1736 ASSIGN("glGetTransformFeedbacki64_v", getTransformFeedbacki64_v);
1737 ASSIGN("glGetTransformFeedbacki_v", getTransformFeedbacki_v);
1738 ASSIGN("glGetTransformFeedbackiv", getTransformFeedbackiv);
1739 ASSIGN("glGetVertexArrayIndexed64iv", getVertexArrayIndexed64iv);
1740 ASSIGN("glGetVertexArrayIndexediv", getVertexArrayIndexediv);
1741 ASSIGN("glGetVertexArrayiv", getVertexArrayiv);
1742 ASSIGN("glGetnCompressedTexImage", getnCompressedTexImage);
1743 ASSIGN("glGetnTexImage", getnTexImage);
1744 ASSIGN("glGetnUniformdv", getnUniformdv);
1745 ASSIGN("glGetnUniformfv", getnUniformfv);
1746 ASSIGN("glGetnUniformiv", getnUniformiv);
1747 ASSIGN("glGetnUniformuiv", getnUniformuiv);
1748 ASSIGN("glInvalidateNamedFramebufferData", invalidateNamedFramebufferData);
1749 ASSIGN("glInvalidateNamedFramebufferSubData", invalidateNamedFramebufferSubData);
1750 ASSIGN("glMapNamedBuffer", mapNamedBuffer);
1751 ASSIGN("glMapNamedBufferRange", mapNamedBufferRange);
1752 ASSIGN("glMemoryBarrierByRegion", memoryBarrierByRegion);
1753 ASSIGN("glNamedBufferData", namedBufferData);
1754 ASSIGN("glNamedBufferStorage", namedBufferStorage);
1755 ASSIGN("glNamedBufferSubData", namedBufferSubData);
1756 ASSIGN("glNamedFramebufferDrawBuffer", namedFramebufferDrawBuffer);
1757 ASSIGN("glNamedFramebufferDrawBuffers", namedFramebufferDrawBuffers);
1758 ASSIGN("glNamedFramebufferParameteri", namedFramebufferParameteri);
1759 ASSIGN("glNamedFramebufferReadBuffer", namedFramebufferReadBuffer);
1760 ASSIGN("glNamedFramebufferRenderbuffer", namedFramebufferRenderbuffer);
1761 ASSIGN("glNamedFramebufferTexture", namedFramebufferTexture);
1762 ASSIGN("glNamedFramebufferTextureLayer", namedFramebufferTextureLayer);
1763 ASSIGN("glNamedRenderbufferStorage", namedRenderbufferStorage);
1764 ASSIGN("glNamedRenderbufferStorageMultisample", namedRenderbufferStorageMultisample);
1765 ASSIGN("glReadnPixels", readnPixels);
1766 ASSIGN("glTextureBarrier", textureBarrier);
1767 ASSIGN("glTextureBuffer", textureBuffer);
1768 ASSIGN("glTextureBufferRange", textureBufferRange);
1769 ASSIGN("glTextureParameterIiv", textureParameterIiv);
1770 ASSIGN("glTextureParameterIuiv", textureParameterIuiv);
1771 ASSIGN("glTextureParameterf", textureParameterf);
1772 ASSIGN("glTextureParameterfv", textureParameterfv);
1773 ASSIGN("glTextureParameteri", textureParameteri);
1774 ASSIGN("glTextureParameteriv", textureParameteriv);
1775 ASSIGN("glTextureStorage1D", textureStorage1D);
1776 ASSIGN("glTextureStorage2D", textureStorage2D);
1777 ASSIGN("glTextureStorage2DMultisample", textureStorage2DMultisample);
1778 ASSIGN("glTextureStorage3D", textureStorage3D);
1779 ASSIGN("glTextureStorage3DMultisample", textureStorage3DMultisample);
1780 ASSIGN("glTextureSubImage1D", textureSubImage1D);
1781 ASSIGN("glTextureSubImage2D", textureSubImage2D);
1782 ASSIGN("glTextureSubImage3D", textureSubImage3D);
1783 ASSIGN("glTransformFeedbackBufferBase", transformFeedbackBufferBase);
1784 ASSIGN("glTransformFeedbackBufferRange", transformFeedbackBufferRange);
1785 ASSIGN("glUnmapNamedBuffer", unmapNamedBuffer);
1786 ASSIGN("glVertexArrayAttribBinding", vertexArrayAttribBinding);
1787 ASSIGN("glVertexArrayAttribFormat", vertexArrayAttribFormat);
1788 ASSIGN("glVertexArrayAttribIFormat", vertexArrayAttribIFormat);
1789 ASSIGN("glVertexArrayAttribLFormat", vertexArrayAttribLFormat);
1790 ASSIGN("glVertexArrayBindingDivisor", vertexArrayBindingDivisor);
1791 ASSIGN("glVertexArrayElementBuffer", vertexArrayElementBuffer);
1792 ASSIGN("glVertexArrayVertexBuffer", vertexArrayVertexBuffer);
1793 ASSIGN("glVertexArrayVertexBuffers", vertexArrayVertexBuffers);
Geoff Lang56cf9af2015-02-17 10:16:49 -05001794 }
Geoff Lang3cf12ce2015-08-27 14:40:48 -04001795
1796 // clang-format on
Geoff Lang56cf9af2015-02-17 10:16:49 -05001797}
1798
Geoff Langb2d9ab62016-01-20 10:50:09 -05001799void FunctionsGL::initializeProcsGLES()
1800{
1801 // No profiles in GLES
1802 profile = 0;
1803
1804 // clang-format off
Sami Väisänene45e53b2016-05-25 10:36:04 +03001805
Olli Etuaho50c562d2017-06-06 14:43:30 +03001806 // GL_NV_internalformat_sample_query
1807 ASSIGN_WITH_EXT("GL_NV_internalformat_sample_query", "glGetInternalformatSampleivNV", getInternalformatSampleivNV);
1808
Sami Väisänene45e53b2016-05-25 10:36:04 +03001809 // GL_NV_path_rendering
Jamie Madill60c65552017-05-02 14:34:05 -04001810 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glMatrixLoadfEXT", matrixLoadEXT);
1811 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glGenPathsNV", genPathsNV);
1812 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glDeletePathsNV", delPathsNV);
1813 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glPathCommandsNV", pathCommandsNV);
1814 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glIsPathNV", isPathNV);
1815 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glPathParameterfNV", setPathParameterfNV);
1816 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glPathParameteriNV", setPathParameteriNV);
1817 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glGetPathParameterfvNV", getPathParameterfNV);
1818 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glGetPathParameterivNV", getPathParameteriNV);
1819 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glPathStencilFuncNV", pathStencilFuncNV);
1820 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilFillPathNV", stencilFillPathNV);
1821 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilStrokePathNV", stencilStrokePathNV);
1822 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glCoverFillPathNV", coverFillPathNV);
1823 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glCoverStrokePathNV", coverStrokePathNV);
1824 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilThenCoverFillPathNV", stencilThenCoverFillPathNV);
1825 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilThenCoverStrokePathNV", stencilThenCoverStrokePathNV);
1826 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glCoverFillPathInstancedNV", coverFillPathInstancedNV);
1827 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glCoverStrokePathInstancedNV", coverStrokePathInstancedNV);
1828 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilFillPathInstancedNV", stencilFillPathInstancedNV);
1829 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilStrokePathInstancedNV", stencilStrokePathInstancedNV);
1830 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilThenCoverFillPathInstancedNV", stencilThenCoverFillPathInstancedNV);
1831 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glStencilThenCoverStrokePathInstancedNV", stencilThenCoverStrokePathInstancedNV);
1832 ASSIGN_WITH_EXT("GL_NV_path_rendering", "glProgramPathFragmentInputGenNV", programPathFragmentInputGenNV);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001833
1834 // GL_OES_texture_3D
Jamie Madill60c65552017-05-02 14:34:05 -04001835 ASSIGN_WITH_EXT("GL_OES_texture_3D", "glTexImage3DOES", texImage3D);
1836 ASSIGN_WITH_EXT("GL_OES_texture_3D", "glTexSubImage3DOES", texSubImage3D);
1837 ASSIGN_WITH_EXT("GL_OES_texture_3D", "glCopyTexSubImage3DOES", copyTexSubImage3D);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001838
Sami Väisänena797e062016-05-12 15:23:40 +03001839 // GL_NV_framebuffer_mixed_samples
Jamie Madill60c65552017-05-02 14:34:05 -04001840 ASSIGN_WITH_EXT("GL_NV_framebuffer_mixed_samples", "glCoverageModulationNV", coverageModulationNV);
Sami Väisänena797e062016-05-12 15:23:40 +03001841
Geoff Langb2d9ab62016-01-20 10:50:09 -05001842 // GL_NV_fence
Jamie Madill60c65552017-05-02 14:34:05 -04001843 ASSIGN_WITH_EXT("GL_NV_fence", "glDeleteFencesNV", deleteFencesNV);
1844 ASSIGN_WITH_EXT("GL_NV_fence", "glGenFencesNV", genFencesNV);
1845 ASSIGN_WITH_EXT("GL_NV_fence", "glIsFenceNV", isFenceNV);
1846 ASSIGN_WITH_EXT("GL_NV_fence", "glTestFenceNV", testFenceNV);
1847 ASSIGN_WITH_EXT("GL_NV_fence", "glGetFenceivNV", getFenceivNV);
1848 ASSIGN_WITH_EXT("GL_NV_fence", "glFinishFenceNV", finishFenceNV);
1849 ASSIGN_WITH_EXT("GL_NV_fence", "glSetFenceNV", setFenceNV);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001850
1851 // GL_EXT_texture_storage
Jamie Madill60c65552017-05-02 14:34:05 -04001852 ASSIGN_WITH_EXT("GL_EXT_texture_storage", "glTexStorage2DEXT", texStorage2D);
1853 ASSIGN_WITH_EXT("GL_EXT_texture_storage GL_OES_texture3D", "glTexStorage3DEXT", texStorage3D);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001854
1855 // GL_OES_vertex_array_object
Jamie Madill60c65552017-05-02 14:34:05 -04001856 ASSIGN_WITH_EXT("GL_OES_vertex_array_object", "glBindVertexArray", bindVertexArray);
1857 ASSIGN_WITH_EXT("GL_OES_vertex_array_object", "glDeleteVertexArrays", deleteVertexArrays);
1858 ASSIGN_WITH_EXT("GL_OES_vertex_array_object", "glGenVertexArrays", genVertexArrays);
1859 ASSIGN_WITH_EXT("GL_OES_vertex_array_object", "glIsVertexArray", isVertexArray);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001860
1861 // GL_EXT_map_buffer_range
Jamie Madill60c65552017-05-02 14:34:05 -04001862 ASSIGN_WITH_EXT("GL_EXT_map_buffer_range", "glMapBufferRangeEXT", mapBufferRange);
1863 ASSIGN_WITH_EXT("GL_EXT_map_buffer_range", "glFlushMappedBufferRangeEXT", flushMappedBufferRange);
1864 ASSIGN_WITH_EXT("GL_EXT_map_buffer_range", "glUnmapBufferOES", unmapBuffer);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001865
1866 // GL_OES_mapbuffer
Jamie Madill60c65552017-05-02 14:34:05 -04001867 ASSIGN_WITH_EXT("GL_OES_mapbuffer", "glMapBufferOES", mapBuffer);
1868 ASSIGN_WITH_EXT("GL_OES_mapbuffer", "glUnmapBufferOES", unmapBuffer);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001869
1870 // GL_KHR_debug
Jamie Madill60c65552017-05-02 14:34:05 -04001871 ASSIGN_WITH_EXT("GL_KHR_debug", "glDebugMessageControlKHR", debugMessageControl);
1872 ASSIGN_WITH_EXT("GL_KHR_debug", "glDebugMessageInsertKHR", debugMessageInsert);
1873 ASSIGN_WITH_EXT("GL_KHR_debug", "glDebugMessageCallbackKHR", debugMessageCallback);
1874 ASSIGN_WITH_EXT("GL_KHR_debug", "glGetDebugMessageLogKHR", getDebugMessageLog);
1875 ASSIGN_WITH_EXT("GL_KHR_debug", "glGetPointervKHR", getPointerv);
1876 ASSIGN_WITH_EXT("GL_KHR_debug", "glPushDebugGroupKHR", pushDebugGroup);
1877 ASSIGN_WITH_EXT("GL_KHR_debug", "glPopDebugGroupKHR", popDebugGroup);
1878 ASSIGN_WITH_EXT("GL_KHR_debug", "glObjectLabelKHR", objectLabel);
1879 ASSIGN_WITH_EXT("GL_KHR_debug", "glGetObjectLabelKHR", getObjectLabel);
1880 ASSIGN_WITH_EXT("GL_KHR_debug", "glObjectPtrLabelKHR", objectPtrLabel);
1881 ASSIGN_WITH_EXT("GL_KHR_debug", "glGetObjectPtrLabelKHR", getObjectPtrLabel);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001882
1883 // GL_EXT_draw_instanced
Jamie Madill60c65552017-05-02 14:34:05 -04001884 ASSIGN_WITH_EXT("GL_EXT_draw_instanced", "glVertexAttribDivisorEXT", vertexAttribDivisor);
1885 ASSIGN_WITH_EXT("GL_EXT_draw_instanced", "glDrawArraysInstancedEXT", drawArraysInstanced);
1886 ASSIGN_WITH_EXT("GL_EXT_draw_instanced", "glDrawElementsInstancedEXT", drawElementsInstanced);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001887
1888 // GL_EXT_occlusion_query_boolean
Jamie Madill60c65552017-05-02 14:34:05 -04001889 ASSIGN_WITH_EXT("GL_EXT_occlusion_query_boolean", "glGenQueriesEXT", genQueries);
1890 ASSIGN_WITH_EXT("GL_EXT_occlusion_query_boolean", "glDeleteQueriesEXT", deleteQueries);
1891 ASSIGN_WITH_EXT("GL_EXT_occlusion_query_boolean", "glIsQueryEXT", isQuery);
1892 ASSIGN_WITH_EXT("GL_EXT_occlusion_query_boolean", "glBeginQueryEXT", beginQuery);
1893 ASSIGN_WITH_EXT("GL_EXT_occlusion_query_boolean", "glEndQueryEXT", endQuery);
1894 ASSIGN_WITH_EXT("GL_EXT_occlusion_query_boolean", "glGetQueryivEXT", getQueryiv);
1895 ASSIGN_WITH_EXT("GL_EXT_occlusion_query_boolean", "glGetQueryObjectuivEXT", getQueryObjectuiv);
Geoff Langb2d9ab62016-01-20 10:50:09 -05001896
Ian Ewell3ffd78b2016-01-22 16:09:42 -05001897 // GL_EXT_disjoint_timer_query
Jamie Madill60c65552017-05-02 14:34:05 -04001898 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glGenQueriesEXT", genQueries);
1899 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glDeleteQueriesEXT", deleteQueries);
1900 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glIsQueryEXT", isQuery);
1901 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glBeginQueryEXT", beginQuery);
1902 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glEndQueryEXT", endQuery);
1903 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glQueryCounterEXT", queryCounter);
1904 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glGetQueryivEXT", getQueryiv);
1905 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glGetQueryObjectivEXT", getQueryObjectiv);
1906 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glGetQueryObjectuivEXT", getQueryObjectuiv);
1907 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glGetQueryObjecti64vEXT", getQueryObjecti64v);
1908 ASSIGN_WITH_EXT("GL_EXT_disjoint_timer_query", "glGetQueryObjectui64vEXT", getQueryObjectui64v);
Ian Ewell3ffd78b2016-01-22 16:09:42 -05001909
Frank Henigman9d819892016-01-22 16:56:04 -05001910 // GL_OES_EGL_image
Jamie Madill60c65552017-05-02 14:34:05 -04001911 ASSIGN_WITH_EXT("GL_OES_EGL_image", "glEGLImageTargetRenderbufferStorageOES", eglImageTargetRenderbufferStorageOES);
1912 ASSIGN_WITH_EXT("GL_OES_EGL_image", "glEGLImageTargetTexture2DOES", eglImageTargetTexture2DOES);
Frank Henigman9d819892016-01-22 16:56:04 -05001913
Geoff Lang65a0be92015-10-02 09:57:30 -04001914 // GL_OES_get_program_binary
Jamie Madill60c65552017-05-02 14:34:05 -04001915 ASSIGN_WITH_EXT("GL_OES_get_program_binary", "glGetProgramBinaryOES", getProgramBinary);
1916 ASSIGN_WITH_EXT("GL_OES_get_program_binary", "glProgramBinaryOES", programBinary);
Geoff Lang65a0be92015-10-02 09:57:30 -04001917
Corentin Wallezb920e362016-08-03 18:19:41 -04001918 // GL_EXT_robustness
Jamie Madill60c65552017-05-02 14:34:05 -04001919 ASSIGN_WITH_EXT("GL_EXT_robustness", "glGetGraphicsResetStatusEXT", getGraphicsResetStatus);
Corentin Wallezb920e362016-08-03 18:19:41 -04001920
1921 // GL_KHR_robustness
Jamie Madill60c65552017-05-02 14:34:05 -04001922 ASSIGN_WITH_EXT("GL_KHR_robustness", "glGetGraphicsResetStatusKHR", getGraphicsResetStatus);
Corentin Wallezb920e362016-08-03 18:19:41 -04001923
Geoff Lang57ce9ea2016-11-24 12:03:14 -05001924 // GL_EXT_discard_framebuffer
Jamie Madill60c65552017-05-02 14:34:05 -04001925 ASSIGN_WITH_EXT("GL_EXT_discard_framebuffer", "glDiscardFramebufferEXT", discardFramebuffer);
Geoff Lang57ce9ea2016-11-24 12:03:14 -05001926
Geoff Langb2d9ab62016-01-20 10:50:09 -05001927 // 2.0
1928 if (isAtLeastGLES(gl::Version(2, 0)))
1929 {
Jamie Madill60c65552017-05-02 14:34:05 -04001930 ASSIGN("glActiveTexture", activeTexture);
1931 ASSIGN("glAttachShader", attachShader);
1932 ASSIGN("glBindAttribLocation", bindAttribLocation);
1933 ASSIGN("glBindBuffer", bindBuffer);
1934 ASSIGN("glBindFramebuffer", bindFramebuffer);
1935 ASSIGN("glBindRenderbuffer", bindRenderbuffer);
1936 ASSIGN("glBindTexture", bindTexture);
1937 ASSIGN("glBlendColor", blendColor);
1938 ASSIGN("glBlendEquation", blendEquation);
1939 ASSIGN("glBlendEquationSeparate", blendEquationSeparate);
1940 ASSIGN("glBlendFunc", blendFunc);
1941 ASSIGN("glBlendFuncSeparate", blendFuncSeparate);
1942 ASSIGN("glBufferData", bufferData);
1943 ASSIGN("glBufferSubData", bufferSubData);
1944 ASSIGN("glCheckFramebufferStatus", checkFramebufferStatus);
1945 ASSIGN("glClear", clear);
1946 ASSIGN("glClearColor", clearColor);
1947 ASSIGN("glClearDepthf", clearDepthf);
1948 ASSIGN("glClearStencil", clearStencil);
1949 ASSIGN("glColorMask", colorMask);
1950 ASSIGN("glCompileShader", compileShader);
1951 ASSIGN("glCompressedTexImage2D", compressedTexImage2D);
1952 ASSIGN("glCompressedTexSubImage2D", compressedTexSubImage2D);
1953 ASSIGN("glCopyTexImage2D", copyTexImage2D);
1954 ASSIGN("glCopyTexSubImage2D", copyTexSubImage2D);
1955 ASSIGN("glCreateProgram", createProgram);
1956 ASSIGN("glCreateShader", createShader);
1957 ASSIGN("glCullFace", cullFace);
1958 ASSIGN("glDeleteBuffers", deleteBuffers);
1959 ASSIGN("glDeleteFramebuffers", deleteFramebuffers);
1960 ASSIGN("glDeleteProgram", deleteProgram);
1961 ASSIGN("glDeleteRenderbuffers", deleteRenderbuffers);
1962 ASSIGN("glDeleteShader", deleteShader);
1963 ASSIGN("glDeleteTextures", deleteTextures);
1964 ASSIGN("glDepthFunc", depthFunc);
1965 ASSIGN("glDepthMask", depthMask);
1966 ASSIGN("glDepthRangef", depthRangef);
1967 ASSIGN("glDetachShader", detachShader);
1968 ASSIGN("glDisable", disable);
1969 ASSIGN("glDisableVertexAttribArray", disableVertexAttribArray);
1970 ASSIGN("glDrawArrays", drawArrays);
1971 ASSIGN("glDrawElements", drawElements);
1972 ASSIGN("glEnable", enable);
1973 ASSIGN("glEnableVertexAttribArray", enableVertexAttribArray);
1974 ASSIGN("glFinish", finish);
1975 ASSIGN("glFlush", flush);
1976 ASSIGN("glFramebufferRenderbuffer", framebufferRenderbuffer);
1977 ASSIGN("glFramebufferTexture2D", framebufferTexture2D);
1978 ASSIGN("glFrontFace", frontFace);
1979 ASSIGN("glGenBuffers", genBuffers);
1980 ASSIGN("glGenerateMipmap", generateMipmap);
1981 ASSIGN("glGenFramebuffers", genFramebuffers);
1982 ASSIGN("glGenRenderbuffers", genRenderbuffers);
1983 ASSIGN("glGenTextures", genTextures);
1984 ASSIGN("glGetActiveAttrib", getActiveAttrib);
1985 ASSIGN("glGetActiveUniform", getActiveUniform);
1986 ASSIGN("glGetAttachedShaders", getAttachedShaders);
1987 ASSIGN("glGetAttribLocation", getAttribLocation);
1988 ASSIGN("glGetBooleanv", getBooleanv);
1989 ASSIGN("glGetBufferParameteriv", getBufferParameteriv);
1990 ASSIGN("glGetError", getError);
1991 ASSIGN("glGetFloatv", getFloatv);
1992 ASSIGN("glGetFramebufferAttachmentParameteriv", getFramebufferAttachmentParameteriv);
1993 ASSIGN("glGetIntegerv", getIntegerv);
1994 ASSIGN("glGetProgramiv", getProgramiv);
1995 ASSIGN("glGetProgramInfoLog", getProgramInfoLog);
1996 ASSIGN("glGetRenderbufferParameteriv", getRenderbufferParameteriv);
1997 ASSIGN("glGetShaderiv", getShaderiv);
1998 ASSIGN("glGetShaderInfoLog", getShaderInfoLog);
1999 ASSIGN("glGetShaderPrecisionFormat", getShaderPrecisionFormat);
2000 ASSIGN("glGetShaderSource", getShaderSource);
2001 ASSIGN("glGetString", getString);
2002 ASSIGN("glGetTexParameterfv", getTexParameterfv);
2003 ASSIGN("glGetTexParameteriv", getTexParameteriv);
2004 ASSIGN("glGetUniformfv", getUniformfv);
2005 ASSIGN("glGetUniformiv", getUniformiv);
2006 ASSIGN("glGetUniformLocation", getUniformLocation);
2007 ASSIGN("glGetVertexAttribfv", getVertexAttribfv);
2008 ASSIGN("glGetVertexAttribiv", getVertexAttribiv);
2009 ASSIGN("glGetVertexAttribPointerv", getVertexAttribPointerv);
2010 ASSIGN("glHint", hint);
2011 ASSIGN("glIsBuffer", isBuffer);
2012 ASSIGN("glIsEnabled", isEnabled);
2013 ASSIGN("glIsFramebuffer", isFramebuffer);
2014 ASSIGN("glIsProgram", isProgram);
2015 ASSIGN("glIsRenderbuffer", isRenderbuffer);
2016 ASSIGN("glIsShader", isShader);
2017 ASSIGN("glIsTexture", isTexture);
2018 ASSIGN("glLineWidth", lineWidth);
2019 ASSIGN("glLinkProgram", linkProgram);
2020 ASSIGN("glPixelStorei", pixelStorei);
2021 ASSIGN("glPolygonOffset", polygonOffset);
2022 ASSIGN("glReadPixels", readPixels);
2023 ASSIGN("glReleaseShaderCompiler", releaseShaderCompiler);
2024 ASSIGN("glRenderbufferStorage", renderbufferStorage);
2025 ASSIGN("glSampleCoverage", sampleCoverage);
2026 ASSIGN("glScissor", scissor);
2027 ASSIGN("glShaderBinary", shaderBinary);
2028 ASSIGN("glShaderSource", shaderSource);
2029 ASSIGN("glStencilFunc", stencilFunc);
2030 ASSIGN("glStencilFuncSeparate", stencilFuncSeparate);
2031 ASSIGN("glStencilMask", stencilMask);
2032 ASSIGN("glStencilMaskSeparate", stencilMaskSeparate);
2033 ASSIGN("glStencilOp", stencilOp);
2034 ASSIGN("glStencilOpSeparate", stencilOpSeparate);
2035 ASSIGN("glTexImage2D", texImage2D);
2036 ASSIGN("glTexParameterf", texParameterf);
2037 ASSIGN("glTexParameterfv", texParameterfv);
2038 ASSIGN("glTexParameteri", texParameteri);
2039 ASSIGN("glTexParameteriv", texParameteriv);
2040 ASSIGN("glTexSubImage2D", texSubImage2D);
2041 ASSIGN("glUniform1f", uniform1f);
2042 ASSIGN("glUniform1fv", uniform1fv);
2043 ASSIGN("glUniform1i", uniform1i);
2044 ASSIGN("glUniform1iv", uniform1iv);
2045 ASSIGN("glUniform2f", uniform2f);
2046 ASSIGN("glUniform2fv", uniform2fv);
2047 ASSIGN("glUniform2i", uniform2i);
2048 ASSIGN("glUniform2iv", uniform2iv);
2049 ASSIGN("glUniform3f", uniform3f);
2050 ASSIGN("glUniform3fv", uniform3fv);
2051 ASSIGN("glUniform3i", uniform3i);
2052 ASSIGN("glUniform3iv", uniform3iv);
2053 ASSIGN("glUniform4f", uniform4f);
2054 ASSIGN("glUniform4fv", uniform4fv);
2055 ASSIGN("glUniform4i", uniform4i);
2056 ASSIGN("glUniform4iv", uniform4iv);
2057 ASSIGN("glUniformMatrix2fv", uniformMatrix2fv);
2058 ASSIGN("glUniformMatrix3fv", uniformMatrix3fv);
2059 ASSIGN("glUniformMatrix4fv", uniformMatrix4fv);
2060 ASSIGN("glUseProgram", useProgram);
2061 ASSIGN("glValidateProgram", validateProgram);
2062 ASSIGN("glVertexAttrib1f", vertexAttrib1f);
2063 ASSIGN("glVertexAttrib1fv", vertexAttrib1fv);
2064 ASSIGN("glVertexAttrib2f", vertexAttrib2f);
2065 ASSIGN("glVertexAttrib2fv", vertexAttrib2fv);
2066 ASSIGN("glVertexAttrib3f", vertexAttrib3f);
2067 ASSIGN("glVertexAttrib3fv", vertexAttrib3fv);
2068 ASSIGN("glVertexAttrib4f", vertexAttrib4f);
2069 ASSIGN("glVertexAttrib4fv", vertexAttrib4fv);
2070 ASSIGN("glVertexAttribPointer", vertexAttribPointer);
2071 ASSIGN("glViewport", viewport);
Geoff Langb2d9ab62016-01-20 10:50:09 -05002072 }
2073
2074 // 3.0
2075 if (isAtLeastGLES(gl::Version(3, 0)))
2076 {
Jamie Madill60c65552017-05-02 14:34:05 -04002077 ASSIGN("glReadBuffer", readBuffer);
2078 ASSIGN("glDrawRangeElements", drawRangeElements);
2079 ASSIGN("glTexImage3D", texImage3D);
2080 ASSIGN("glTexSubImage3D", texSubImage3D);
2081 ASSIGN("glCopyTexSubImage3D", copyTexSubImage3D);
2082 ASSIGN("glCompressedTexImage3D", compressedTexImage3D);
2083 ASSIGN("glCompressedTexSubImage3D", compressedTexSubImage3D);
2084 ASSIGN("glGenQueries", genQueries);
2085 ASSIGN("glDeleteQueries", deleteQueries);
2086 ASSIGN("glIsQuery", isQuery);
2087 ASSIGN("glBeginQuery", beginQuery);
2088 ASSIGN("glEndQuery", endQuery);
2089 ASSIGN("glGetQueryiv", getQueryiv);
2090 ASSIGN("glGetQueryObjectuiv", getQueryObjectuiv);
2091 ASSIGN("glUnmapBuffer", unmapBuffer);
2092 ASSIGN("glGetBufferPointerv", getBufferPointerv);
2093 ASSIGN("glDrawBuffers", drawBuffers);
2094 ASSIGN("glUniformMatrix2x3fv", uniformMatrix2x3fv);
2095 ASSIGN("glUniformMatrix3x2fv", uniformMatrix3x2fv);
2096 ASSIGN("glUniformMatrix2x4fv", uniformMatrix2x4fv);
2097 ASSIGN("glUniformMatrix4x2fv", uniformMatrix4x2fv);
2098 ASSIGN("glUniformMatrix3x4fv", uniformMatrix3x4fv);
2099 ASSIGN("glUniformMatrix4x3fv", uniformMatrix4x3fv);
2100 ASSIGN("glBlitFramebuffer", blitFramebuffer);
2101 ASSIGN("glRenderbufferStorageMultisample", renderbufferStorageMultisample);
2102 ASSIGN("glFramebufferTextureLayer", framebufferTextureLayer);
2103 ASSIGN("glMapBufferRange", mapBufferRange);
2104 ASSIGN("glFlushMappedBufferRange", flushMappedBufferRange);
2105 ASSIGN("glBindVertexArray", bindVertexArray);
2106 ASSIGN("glDeleteVertexArrays", deleteVertexArrays);
2107 ASSIGN("glGenVertexArrays", genVertexArrays);
2108 ASSIGN("glIsVertexArray", isVertexArray);
2109 ASSIGN("glGetIntegeri_v", getIntegeri_v);
2110 ASSIGN("glBeginTransformFeedback", beginTransformFeedback);
2111 ASSIGN("glEndTransformFeedback", endTransformFeedback);
2112 ASSIGN("glBindBufferRange", bindBufferRange);
2113 ASSIGN("glBindBufferBase", bindBufferBase);
2114 ASSIGN("glTransformFeedbackVaryings", transformFeedbackVaryings);
2115 ASSIGN("glGetTransformFeedbackVarying", getTransformFeedbackVarying);
2116 ASSIGN("glVertexAttribIPointer", vertexAttribIPointer);
2117 ASSIGN("glGetVertexAttribIiv", getVertexAttribIiv);
2118 ASSIGN("glGetVertexAttribIuiv", getVertexAttribIuiv);
2119 ASSIGN("glVertexAttribI4i", vertexAttribI4i);
2120 ASSIGN("glVertexAttribI4ui", vertexAttribI4ui);
2121 ASSIGN("glVertexAttribI4iv", vertexAttribI4iv);
2122 ASSIGN("glVertexAttribI4uiv", vertexAttribI4uiv);
2123 ASSIGN("glGetUniformuiv", getUniformuiv);
2124 ASSIGN("glGetFragDataLocation", getFragDataLocation);
2125 ASSIGN("glUniform1ui", uniform1ui);
2126 ASSIGN("glUniform2ui", uniform2ui);
2127 ASSIGN("glUniform3ui", uniform3ui);
2128 ASSIGN("glUniform4ui", uniform4ui);
2129 ASSIGN("glUniform1uiv", uniform1uiv);
2130 ASSIGN("glUniform2uiv", uniform2uiv);
2131 ASSIGN("glUniform3uiv", uniform3uiv);
2132 ASSIGN("glUniform4uiv", uniform4uiv);
2133 ASSIGN("glClearBufferiv", clearBufferiv);
2134 ASSIGN("glClearBufferuiv", clearBufferuiv);
2135 ASSIGN("glClearBufferfv", clearBufferfv);
2136 ASSIGN("glClearBufferfi", clearBufferfi);
2137 ASSIGN("glGetStringi", getStringi);
2138 ASSIGN("glCopyBufferSubData", copyBufferSubData);
2139 ASSIGN("glGetUniformIndices", getUniformIndices);
2140 ASSIGN("glGetActiveUniformsiv", getActiveUniformsiv);
2141 ASSIGN("glGetUniformBlockIndex", getUniformBlockIndex);
2142 ASSIGN("glGetActiveUniformBlockiv", getActiveUniformBlockiv);
2143 ASSIGN("glGetActiveUniformBlockName", getActiveUniformBlockName);
2144 ASSIGN("glUniformBlockBinding", uniformBlockBinding);
2145 ASSIGN("glDrawArraysInstanced", drawArraysInstanced);
2146 ASSIGN("glDrawElementsInstanced", drawElementsInstanced);
2147 ASSIGN("glFenceSync", fenceSync);
2148 ASSIGN("glIsSync", isSync);
2149 ASSIGN("glDeleteSync", deleteSync);
2150 ASSIGN("glClientWaitSync", clientWaitSync);
2151 ASSIGN("glWaitSync", waitSync);
2152 ASSIGN("glGetInteger64v", getInteger64v);
2153 ASSIGN("glGetSynciv", getSynciv);
2154 ASSIGN("glGetInteger64i_v", getInteger64i_v);
2155 ASSIGN("glGetBufferParameteri64v", getBufferParameteri64v);
2156 ASSIGN("glGenSamplers", genSamplers);
2157 ASSIGN("glDeleteSamplers", deleteSamplers);
2158 ASSIGN("glIsSampler", isSampler);
2159 ASSIGN("glBindSampler", bindSampler);
2160 ASSIGN("glSamplerParameteri", samplerParameteri);
2161 ASSIGN("glSamplerParameteriv", samplerParameteriv);
2162 ASSIGN("glSamplerParameterf", samplerParameterf);
2163 ASSIGN("glSamplerParameterfv", samplerParameterfv);
2164 ASSIGN("glGetSamplerParameteriv", getSamplerParameteriv);
2165 ASSIGN("glGetSamplerParameterfv", getSamplerParameterfv);
2166 ASSIGN("glVertexAttribDivisor", vertexAttribDivisor);
2167 ASSIGN("glBindTransformFeedback", bindTransformFeedback);
2168 ASSIGN("glDeleteTransformFeedbacks", deleteTransformFeedbacks);
2169 ASSIGN("glGenTransformFeedbacks", genTransformFeedbacks);
2170 ASSIGN("glIsTransformFeedback", isTransformFeedback);
2171 ASSIGN("glPauseTransformFeedback", pauseTransformFeedback);
2172 ASSIGN("glResumeTransformFeedback", resumeTransformFeedback);
2173 ASSIGN("glGetProgramBinary", getProgramBinary);
2174 ASSIGN("glProgramBinary", programBinary);
2175 ASSIGN("glProgramParameteri", programParameteri);
2176 ASSIGN("glInvalidateFramebuffer", invalidateFramebuffer);
2177 ASSIGN("glInvalidateSubFramebuffer", invalidateSubFramebuffer);
2178 ASSIGN("glTexStorage2D", texStorage2D);
2179 ASSIGN("glTexStorage3D", texStorage3D);
2180 ASSIGN("glGetInternalformativ", getInternalformativ);
Geoff Langb2d9ab62016-01-20 10:50:09 -05002181 }
2182
2183 // 3.1
2184 if (isAtLeastGLES(gl::Version(3, 1)))
2185 {
Jamie Madill60c65552017-05-02 14:34:05 -04002186 ASSIGN("glDispatchCompute", dispatchCompute);
2187 ASSIGN("glDispatchComputeIndirect", dispatchComputeIndirect);
2188 ASSIGN("glDrawArraysIndirect", drawArraysIndirect);
2189 ASSIGN("glDrawElementsIndirect", drawElementsIndirect);
2190 ASSIGN("glFramebufferParameteri", framebufferParameteri);
2191 ASSIGN("glGetFramebufferParameteriv", getFramebufferParameteriv);
2192 ASSIGN("glGetProgramInterfaceiv", getProgramInterfaceiv);
2193 ASSIGN("glGetProgramResourceIndex", getProgramResourceIndex);
2194 ASSIGN("glGetProgramResourceName", getProgramResourceName);
2195 ASSIGN("glGetProgramResourceiv", getProgramResourceiv);
2196 ASSIGN("glGetProgramResourceLocation", getProgramResourceLocation);
2197 ASSIGN("glUseProgramStages", useProgramStages);
2198 ASSIGN("glActiveShaderProgram", activeShaderProgram);
2199 ASSIGN("glCreateShaderProgramv", createShaderProgramv);
2200 ASSIGN("glBindProgramPipeline", bindProgramPipeline);
2201 ASSIGN("glDeleteProgramPipelines", deleteProgramPipelines);
2202 ASSIGN("glGenProgramPipelines", genProgramPipelines);
2203 ASSIGN("glIsProgramPipeline", isProgramPipeline);
2204 ASSIGN("glGetProgramPipelineiv", getProgramPipelineiv);
2205 ASSIGN("glProgramUniform1i", programUniform1i);
2206 ASSIGN("glProgramUniform2i", programUniform2i);
2207 ASSIGN("glProgramUniform3i", programUniform3i);
2208 ASSIGN("glProgramUniform4i", programUniform4i);
2209 ASSIGN("glProgramUniform1ui", programUniform1ui);
2210 ASSIGN("glProgramUniform2ui", programUniform2ui);
2211 ASSIGN("glProgramUniform3ui", programUniform3ui);
2212 ASSIGN("glProgramUniform4ui", programUniform4ui);
2213 ASSIGN("glProgramUniform1f", programUniform1f);
2214 ASSIGN("glProgramUniform2f", programUniform2f);
2215 ASSIGN("glProgramUniform3f", programUniform3f);
2216 ASSIGN("glProgramUniform4f", programUniform4f);
2217 ASSIGN("glProgramUniform1iv", programUniform1iv);
2218 ASSIGN("glProgramUniform2iv", programUniform2iv);
2219 ASSIGN("glProgramUniform3iv", programUniform3iv);
2220 ASSIGN("glProgramUniform4iv", programUniform4iv);
2221 ASSIGN("glProgramUniform1uiv", programUniform1uiv);
2222 ASSIGN("glProgramUniform2uiv", programUniform2uiv);
2223 ASSIGN("glProgramUniform3uiv", programUniform3uiv);
2224 ASSIGN("glProgramUniform4uiv", programUniform4uiv);
2225 ASSIGN("glProgramUniform1fv", programUniform1fv);
2226 ASSIGN("glProgramUniform2fv", programUniform2fv);
2227 ASSIGN("glProgramUniform3fv", programUniform3fv);
2228 ASSIGN("glProgramUniform4fv", programUniform4fv);
2229 ASSIGN("glProgramUniformMatrix2fv", programUniformMatrix2fv);
2230 ASSIGN("glProgramUniformMatrix3fv", programUniformMatrix3fv);
2231 ASSIGN("glProgramUniformMatrix4fv", programUniformMatrix4fv);
2232 ASSIGN("glProgramUniformMatrix2x3fv", programUniformMatrix2x3fv);
2233 ASSIGN("glProgramUniformMatrix3x2fv", programUniformMatrix3x2fv);
2234 ASSIGN("glProgramUniformMatrix2x4fv", programUniformMatrix2x4fv);
2235 ASSIGN("glProgramUniformMatrix4x2fv", programUniformMatrix4x2fv);
2236 ASSIGN("glProgramUniformMatrix3x4fv", programUniformMatrix3x4fv);
2237 ASSIGN("glProgramUniformMatrix4x3fv", programUniformMatrix4x3fv);
2238 ASSIGN("glValidateProgramPipeline", validateProgramPipeline);
2239 ASSIGN("glGetProgramPipelineInfoLog", getProgramPipelineInfoLog);
2240 ASSIGN("glBindImageTexture", bindImageTexture);
2241 ASSIGN("glGetBooleani_v", getBooleani_v);
2242 ASSIGN("glMemoryBarrier", memoryBarrier);
2243 ASSIGN("glMemoryBarrierByRegion", memoryBarrierByRegion);
2244 ASSIGN("glTexStorage2DMultisample", texStorage2DMultisample);
2245 ASSIGN("glGetMultisamplefv", getMultisamplefv);
2246 ASSIGN("glSampleMaski", sampleMaski);
2247 ASSIGN("glGetTexLevelParameteriv", getTexLevelParameteriv);
2248 ASSIGN("glGetTexLevelParameterfv", getTexLevelParameterfv);
2249 ASSIGN("glBindVertexBuffer", bindVertexBuffer);
2250 ASSIGN("glVertexAttribFormat", vertexAttribFormat);
2251 ASSIGN("glVertexAttribIFormat", vertexAttribIFormat);
2252 ASSIGN("glVertexAttribBinding", vertexAttribBinding);
2253 ASSIGN("glVertexBindingDivisor", vertexBindingDivisor);
Geoff Langb2d9ab62016-01-20 10:50:09 -05002254 }
2255
2256 // 3.2
2257 if (isAtLeastGLES(gl::Version(3, 2)))
2258 {
Jamie Madill60c65552017-05-02 14:34:05 -04002259 ASSIGN("glBlendBarrier", blendBarrier);
2260 ASSIGN("glCopyImageSubData", copyImageSubData);
2261 ASSIGN("glDebugMessageControl", debugMessageControl);
2262 ASSIGN("glDebugMessageInsert", debugMessageInsert);
2263 ASSIGN("glDebugMessageCallback", debugMessageCallback);
2264 ASSIGN("glGetDebugMessageLog", getDebugMessageLog);
2265 ASSIGN("glPushDebugGroup", pushDebugGroup);
2266 ASSIGN("glPopDebugGroup", popDebugGroup);
2267 ASSIGN("glObjectLabel", objectLabel);
2268 ASSIGN("glGetObjectLabel", getObjectLabel);
2269 ASSIGN("glObjectPtrLabel", objectPtrLabel);
2270 ASSIGN("glGetObjectPtrLabel", getObjectPtrLabel);
2271 ASSIGN("glGetPointerv", getPointerv);
2272 ASSIGN("glEnablei", enablei);
2273 ASSIGN("glDisablei", disablei);
2274 ASSIGN("glBlendEquationi", blendEquationi);
2275 ASSIGN("glBlendEquationSeparatei", blendEquationSeparatei);
2276 ASSIGN("glBlendFunci", blendFunci);
2277 ASSIGN("glBlendFuncSeparatei", blendFuncSeparatei);
2278 ASSIGN("glColorMaski", colorMaski);
2279 ASSIGN("glIsEnabledi", isEnabledi);
2280 ASSIGN("glDrawElementsBaseVertex", drawElementsBaseVertex);
2281 ASSIGN("glDrawRangeElementsBaseVertex", drawRangeElementsBaseVertex);
2282 ASSIGN("glDrawElementsInstancedBaseVertex", drawElementsInstancedBaseVertex);
2283 ASSIGN("glFramebufferTexture", framebufferTexture);
2284 ASSIGN("glPrimitiveBoundingBox", primitiveBoundingBox);
2285 ASSIGN("glGetGraphicsResetStatus", getGraphicsResetStatus);
2286 ASSIGN("glReadnPixels", readnPixels);
2287 ASSIGN("glGetnUniformfv", getnUniformfv);
2288 ASSIGN("glGetnUniformiv", getnUniformiv);
2289 ASSIGN("glGetnUniformuiv", getnUniformuiv);
2290 ASSIGN("glMinSampleShading", minSampleShading);
2291 ASSIGN("glPatchParameteri", patchParameteri);
2292 ASSIGN("glTexParameterIiv", texParameterIiv);
2293 ASSIGN("glTexParameterIuiv", texParameterIuiv);
2294 ASSIGN("glGetTexParameterIiv", getTexParameterIiv);
2295 ASSIGN("glGetTexParameterIuiv", getTexParameterIuiv);
2296 ASSIGN("glSamplerParameterIiv", samplerParameterIiv);
2297 ASSIGN("glSamplerParameterIuiv", samplerParameterIuiv);
2298 ASSIGN("glGetSamplerParameterIiv", getSamplerParameterIiv);
2299 ASSIGN("glGetSamplerParameterIuiv", getSamplerParameterIuiv);
2300 ASSIGN("glTexBuffer", texBuffer);
2301 ASSIGN("glTexBufferRange", texBufferRange);
2302 ASSIGN("glTexStorage3DMultisample", texStorage3DMultisample);
Geoff Langb2d9ab62016-01-20 10:50:09 -05002303 }
2304
2305 // clang-format on
2306}
2307
Geoff Lang08dcfed2015-05-25 13:38:42 -04002308bool FunctionsGL::isAtLeastGL(const gl::Version &glVersion) const
2309{
2310 return standard == STANDARD_GL_DESKTOP && version >= glVersion;
2311}
2312
Corentin Wallezf7417802016-10-12 17:59:31 -04002313bool FunctionsGL::isAtMostGL(const gl::Version &glVersion) const
2314{
2315 return standard == STANDARD_GL_DESKTOP && glVersion >= version;
2316}
2317
Geoff Lang08dcfed2015-05-25 13:38:42 -04002318bool FunctionsGL::isAtLeastGLES(const gl::Version &glesVersion) const
2319{
2320 return standard == STANDARD_GL_ES && version >= glesVersion;
2321}
2322
Corentin Wallezf7417802016-10-12 17:59:31 -04002323bool FunctionsGL::isAtMostGLES(const gl::Version &glesVersion) const
2324{
2325 return standard == STANDARD_GL_ES && glesVersion >= version;
2326}
2327
Geoff Langf34d1db2015-05-20 14:10:46 -04002328bool FunctionsGL::hasExtension(const std::string &ext) const
2329{
2330 return std::find(extensions.begin(), extensions.end(), ext) != extensions.end();
2331}
2332
Geoff Lang862c0ba2015-05-25 15:31:16 -04002333bool FunctionsGL::hasGLExtension(const std::string &ext) const
2334{
2335 return standard == STANDARD_GL_DESKTOP && hasExtension(ext);
2336}
2337
2338bool FunctionsGL::hasGLESExtension(const std::string &ext) const
2339{
2340 return standard == STANDARD_GL_ES && hasExtension(ext);
2341}
2342
Jamie Madill60c65552017-05-02 14:34:05 -04002343} // namespace gl