1 // Copyright 2013 Dolphin Emulator Project
2 // Licensed under GPLv2+
3 // Refer to the license.txt file included.
4 
5 #include <sstream>
6 #include <unordered_map>
7 
8 #include "Common/GL/GLContext.h"
9 #include "Common/GL/GLExtensions/GLExtensions.h"
10 #include "Common/Logging/Log.h"
11 
12 #if defined(__linux__) || defined(__APPLE__)
13 #include <dlfcn.h>
14 #endif
15 
16 // gl_1_1
17 PFNDOLCLEARINDEXPROC dolClearIndex;
18 PFNDOLCLEARCOLORPROC dolClearColor;
19 PFNDOLCLEARPROC dolClear;
20 PFNDOLINDEXMASKPROC dolIndexMask;
21 PFNDOLCOLORMASKPROC dolColorMask;
22 PFNDOLALPHAFUNCPROC dolAlphaFunc;
23 PFNDOLBLENDFUNCPROC dolBlendFunc;
24 PFNDOLLOGICOPPROC dolLogicOp;
25 PFNDOLCULLFACEPROC dolCullFace;
26 PFNDOLFRONTFACEPROC dolFrontFace;
27 PFNDOLPOINTSIZEPROC dolPointSize;
28 PFNDOLLINEWIDTHPROC dolLineWidth;
29 PFNDOLLINESTIPPLEPROC dolLineStipple;
30 PFNDOLPOLYGONMODEPROC dolPolygonMode;
31 PFNDOLPOLYGONOFFSETPROC dolPolygonOffset;
32 PFNDOLPOLYGONSTIPPLEPROC dolPolygonStipple;
33 PFNDOLGETPOLYGONSTIPPLEPROC dolGetPolygonStipple;
34 PFNDOLEDGEFLAGPROC dolEdgeFlag;
35 PFNDOLEDGEFLAGVPROC dolEdgeFlagv;
36 PFNDOLSCISSORPROC dolScissor;
37 PFNDOLCLIPPLANEPROC dolClipPlane;
38 PFNDOLGETCLIPPLANEPROC dolGetClipPlane;
39 PFNDOLDRAWBUFFERPROC dolDrawBuffer;
40 PFNDOLREADBUFFERPROC dolReadBuffer;
41 PFNDOLENABLEPROC dolEnable;
42 PFNDOLDISABLEPROC dolDisable;
43 PFNDOLISENABLEDPROC dolIsEnabled;
44 PFNDOLENABLECLIENTSTATEPROC dolEnableClientState;
45 PFNDOLDISABLECLIENTSTATEPROC dolDisableClientState;
46 PFNDOLGETBOOLEANVPROC dolGetBooleanv;
47 PFNDOLGETDOUBLEVPROC dolGetDoublev;
48 PFNDOLGETFLOATVPROC dolGetFloatv;
49 PFNDOLGETINTEGERVPROC dolGetIntegerv;
50 PFNDOLPUSHATTRIBPROC dolPushAttrib;
51 PFNDOLPOPATTRIBPROC dolPopAttrib;
52 PFNDOLPUSHCLIENTATTRIBPROC dolPushClientAttrib;
53 PFNDOLPOPCLIENTATTRIBPROC dolPopClientAttrib;
54 PFNDOLRENDERMODEPROC dolRenderMode;
55 PFNDOLGETERRORPROC dolGetError;
56 PFNDOLGETSTRINGPROC dolGetString;
57 PFNDOLFINISHPROC dolFinish;
58 PFNDOLFLUSHPROC dolFlush;
59 PFNDOLHINTPROC dolHint;
60 PFNDOLCLEARDEPTHPROC dolClearDepth;
61 PFNDOLDEPTHFUNCPROC dolDepthFunc;
62 PFNDOLDEPTHMASKPROC dolDepthMask;
63 PFNDOLDEPTHRANGEPROC dolDepthRange;
64 PFNDOLCLEARACCUMPROC dolClearAccum;
65 PFNDOLACCUMPROC dolAccum;
66 PFNDOLMATRIXMODEPROC dolMatrixMode;
67 PFNDOLORTHOPROC dolOrtho;
68 PFNDOLFRUSTUMPROC dolFrustum;
69 PFNDOLVIEWPORTPROC dolViewport;
70 PFNDOLPUSHMATRIXPROC dolPushMatrix;
71 PFNDOLPOPMATRIXPROC dolPopMatrix;
72 PFNDOLLOADIDENTITYPROC dolLoadIdentity;
73 PFNDOLLOADMATRIXDPROC dolLoadMatrixd;
74 PFNDOLLOADMATRIXFPROC dolLoadMatrixf;
75 PFNDOLMULTMATRIXDPROC dolMultMatrixd;
76 PFNDOLMULTMATRIXFPROC dolMultMatrixf;
77 PFNDOLROTATEDPROC dolRotated;
78 PFNDOLROTATEFPROC dolRotatef;
79 PFNDOLSCALEDPROC dolScaled;
80 PFNDOLSCALEFPROC dolScalef;
81 PFNDOLTRANSLATEDPROC dolTranslated;
82 PFNDOLTRANSLATEFPROC dolTranslatef;
83 PFNDOLISLISTPROC dolIsList;
84 PFNDOLDELETELISTSPROC dolDeleteLists;
85 PFNDOLGENLISTSPROC dolGenLists;
86 PFNDOLNEWLISTPROC dolNewList;
87 PFNDOLENDLISTPROC dolEndList;
88 PFNDOLCALLLISTPROC dolCallList;
89 PFNDOLCALLLISTSPROC dolCallLists;
90 PFNDOLLISTBASEPROC dolListBase;
91 PFNDOLBEGINPROC dolBegin;
92 PFNDOLENDPROC dolEnd;
93 PFNDOLVERTEX2DPROC dolVertex2d;
94 PFNDOLVERTEX2FPROC dolVertex2f;
95 PFNDOLVERTEX2IPROC dolVertex2i;
96 PFNDOLVERTEX2SPROC dolVertex2s;
97 PFNDOLVERTEX3DPROC dolVertex3d;
98 PFNDOLVERTEX3FPROC dolVertex3f;
99 PFNDOLVERTEX3IPROC dolVertex3i;
100 PFNDOLVERTEX3SPROC dolVertex3s;
101 PFNDOLVERTEX4DPROC dolVertex4d;
102 PFNDOLVERTEX4FPROC dolVertex4f;
103 PFNDOLVERTEX4IPROC dolVertex4i;
104 PFNDOLVERTEX4SPROC dolVertex4s;
105 PFNDOLVERTEX2DVPROC dolVertex2dv;
106 PFNDOLVERTEX2FVPROC dolVertex2fv;
107 PFNDOLVERTEX2IVPROC dolVertex2iv;
108 PFNDOLVERTEX2SVPROC dolVertex2sv;
109 PFNDOLVERTEX3DVPROC dolVertex3dv;
110 PFNDOLVERTEX3FVPROC dolVertex3fv;
111 PFNDOLVERTEX3IVPROC dolVertex3iv;
112 PFNDOLVERTEX3SVPROC dolVertex3sv;
113 PFNDOLVERTEX4DVPROC dolVertex4dv;
114 PFNDOLVERTEX4FVPROC dolVertex4fv;
115 PFNDOLVERTEX4IVPROC dolVertex4iv;
116 PFNDOLVERTEX4SVPROC dolVertex4sv;
117 PFNDOLNORMAL3BPROC dolNormal3b;
118 PFNDOLNORMAL3DPROC dolNormal3d;
119 PFNDOLNORMAL3FPROC dolNormal3f;
120 PFNDOLNORMAL3IPROC dolNormal3i;
121 PFNDOLNORMAL3SPROC dolNormal3s;
122 PFNDOLNORMAL3BVPROC dolNormal3bv;
123 PFNDOLNORMAL3DVPROC dolNormal3dv;
124 PFNDOLNORMAL3FVPROC dolNormal3fv;
125 PFNDOLNORMAL3IVPROC dolNormal3iv;
126 PFNDOLNORMAL3SVPROC dolNormal3sv;
127 PFNDOLINDEXDPROC dolIndexd;
128 PFNDOLINDEXFPROC dolIndexf;
129 PFNDOLINDEXIPROC dolIndexi;
130 PFNDOLINDEXSPROC dolIndexs;
131 PFNDOLINDEXUBPROC dolIndexub;
132 PFNDOLINDEXDVPROC dolIndexdv;
133 PFNDOLINDEXFVPROC dolIndexfv;
134 PFNDOLINDEXIVPROC dolIndexiv;
135 PFNDOLINDEXSVPROC dolIndexsv;
136 PFNDOLINDEXUBVPROC dolIndexubv;
137 PFNDOLCOLOR3BPROC dolColor3b;
138 PFNDOLCOLOR3DPROC dolColor3d;
139 PFNDOLCOLOR3FPROC dolColor3f;
140 PFNDOLCOLOR3IPROC dolColor3i;
141 PFNDOLCOLOR3SPROC dolColor3s;
142 PFNDOLCOLOR3UBPROC dolColor3ub;
143 PFNDOLCOLOR3UIPROC dolColor3ui;
144 PFNDOLCOLOR3USPROC dolColor3us;
145 PFNDOLCOLOR4BPROC dolColor4b;
146 PFNDOLCOLOR4DPROC dolColor4d;
147 PFNDOLCOLOR4FPROC dolColor4f;
148 PFNDOLCOLOR4IPROC dolColor4i;
149 PFNDOLCOLOR4SPROC dolColor4s;
150 PFNDOLCOLOR4UBPROC dolColor4ub;
151 PFNDOLCOLOR4UIPROC dolColor4ui;
152 PFNDOLCOLOR4USPROC dolColor4us;
153 PFNDOLCOLOR3BVPROC dolColor3bv;
154 PFNDOLCOLOR3DVPROC dolColor3dv;
155 PFNDOLCOLOR3FVPROC dolColor3fv;
156 PFNDOLCOLOR3IVPROC dolColor3iv;
157 PFNDOLCOLOR3SVPROC dolColor3sv;
158 PFNDOLCOLOR3UBVPROC dolColor3ubv;
159 PFNDOLCOLOR3UIVPROC dolColor3uiv;
160 PFNDOLCOLOR3USVPROC dolColor3usv;
161 PFNDOLCOLOR4BVPROC dolColor4bv;
162 PFNDOLCOLOR4DVPROC dolColor4dv;
163 PFNDOLCOLOR4FVPROC dolColor4fv;
164 PFNDOLCOLOR4IVPROC dolColor4iv;
165 PFNDOLCOLOR4SVPROC dolColor4sv;
166 PFNDOLCOLOR4UBVPROC dolColor4ubv;
167 PFNDOLCOLOR4UIVPROC dolColor4uiv;
168 PFNDOLCOLOR4USVPROC dolColor4usv;
169 PFNDOLTEXCOORD1DPROC dolTexCoord1d;
170 PFNDOLTEXCOORD1FPROC dolTexCoord1f;
171 PFNDOLTEXCOORD1IPROC dolTexCoord1i;
172 PFNDOLTEXCOORD1SPROC dolTexCoord1s;
173 PFNDOLTEXCOORD2DPROC dolTexCoord2d;
174 PFNDOLTEXCOORD2FPROC dolTexCoord2f;
175 PFNDOLTEXCOORD2IPROC dolTexCoord2i;
176 PFNDOLTEXCOORD2SPROC dolTexCoord2s;
177 PFNDOLTEXCOORD3DPROC dolTexCoord3d;
178 PFNDOLTEXCOORD3FPROC dolTexCoord3f;
179 PFNDOLTEXCOORD3IPROC dolTexCoord3i;
180 PFNDOLTEXCOORD3SPROC dolTexCoord3s;
181 PFNDOLTEXCOORD4DPROC dolTexCoord4d;
182 PFNDOLTEXCOORD4FPROC dolTexCoord4f;
183 PFNDOLTEXCOORD4IPROC dolTexCoord4i;
184 PFNDOLTEXCOORD4SPROC dolTexCoord4s;
185 PFNDOLTEXCOORD1DVPROC dolTexCoord1dv;
186 PFNDOLTEXCOORD1FVPROC dolTexCoord1fv;
187 PFNDOLTEXCOORD1IVPROC dolTexCoord1iv;
188 PFNDOLTEXCOORD1SVPROC dolTexCoord1sv;
189 PFNDOLTEXCOORD2DVPROC dolTexCoord2dv;
190 PFNDOLTEXCOORD2FVPROC dolTexCoord2fv;
191 PFNDOLTEXCOORD2IVPROC dolTexCoord2iv;
192 PFNDOLTEXCOORD2SVPROC dolTexCoord2sv;
193 PFNDOLTEXCOORD3DVPROC dolTexCoord3dv;
194 PFNDOLTEXCOORD3FVPROC dolTexCoord3fv;
195 PFNDOLTEXCOORD3IVPROC dolTexCoord3iv;
196 PFNDOLTEXCOORD3SVPROC dolTexCoord3sv;
197 PFNDOLTEXCOORD4DVPROC dolTexCoord4dv;
198 PFNDOLTEXCOORD4FVPROC dolTexCoord4fv;
199 PFNDOLTEXCOORD4IVPROC dolTexCoord4iv;
200 PFNDOLTEXCOORD4SVPROC dolTexCoord4sv;
201 PFNDOLRASTERPOS2DPROC dolRasterPos2d;
202 PFNDOLRASTERPOS2FPROC dolRasterPos2f;
203 PFNDOLRASTERPOS2IPROC dolRasterPos2i;
204 PFNDOLRASTERPOS2SPROC dolRasterPos2s;
205 PFNDOLRASTERPOS3DPROC dolRasterPos3d;
206 PFNDOLRASTERPOS3FPROC dolRasterPos3f;
207 PFNDOLRASTERPOS3IPROC dolRasterPos3i;
208 PFNDOLRASTERPOS3SPROC dolRasterPos3s;
209 PFNDOLRASTERPOS4DPROC dolRasterPos4d;
210 PFNDOLRASTERPOS4FPROC dolRasterPos4f;
211 PFNDOLRASTERPOS4IPROC dolRasterPos4i;
212 PFNDOLRASTERPOS4SPROC dolRasterPos4s;
213 PFNDOLRASTERPOS2DVPROC dolRasterPos2dv;
214 PFNDOLRASTERPOS2FVPROC dolRasterPos2fv;
215 PFNDOLRASTERPOS2IVPROC dolRasterPos2iv;
216 PFNDOLRASTERPOS2SVPROC dolRasterPos2sv;
217 PFNDOLRASTERPOS3DVPROC dolRasterPos3dv;
218 PFNDOLRASTERPOS3FVPROC dolRasterPos3fv;
219 PFNDOLRASTERPOS3IVPROC dolRasterPos3iv;
220 PFNDOLRASTERPOS3SVPROC dolRasterPos3sv;
221 PFNDOLRASTERPOS4DVPROC dolRasterPos4dv;
222 PFNDOLRASTERPOS4FVPROC dolRasterPos4fv;
223 PFNDOLRASTERPOS4IVPROC dolRasterPos4iv;
224 PFNDOLRASTERPOS4SVPROC dolRasterPos4sv;
225 PFNDOLRECTDPROC dolRectd;
226 PFNDOLRECTFPROC dolRectf;
227 PFNDOLRECTIPROC dolRecti;
228 PFNDOLRECTSPROC dolRects;
229 PFNDOLRECTDVPROC dolRectdv;
230 PFNDOLRECTFVPROC dolRectfv;
231 PFNDOLRECTIVPROC dolRectiv;
232 PFNDOLRECTSVPROC dolRectsv;
233 PFNDOLVERTEXPOINTERPROC dolVertexPointer;
234 PFNDOLNORMALPOINTERPROC dolNormalPointer;
235 PFNDOLCOLORPOINTERPROC dolColorPointer;
236 PFNDOLINDEXPOINTERPROC dolIndexPointer;
237 PFNDOLTEXCOORDPOINTERPROC dolTexCoordPointer;
238 PFNDOLEDGEFLAGPOINTERPROC dolEdgeFlagPointer;
239 PFNDOLGETPOINTERVPROC dolGetPointerv;
240 PFNDOLARRAYELEMENTPROC dolArrayElement;
241 PFNDOLDRAWARRAYSPROC dolDrawArrays;
242 PFNDOLDRAWELEMENTSPROC dolDrawElements;
243 PFNDOLINTERLEAVEDARRAYSPROC dolInterleavedArrays;
244 PFNDOLSHADEMODELPROC dolShadeModel;
245 PFNDOLLIGHTFPROC dolLightf;
246 PFNDOLLIGHTIPROC dolLighti;
247 PFNDOLLIGHTFVPROC dolLightfv;
248 PFNDOLLIGHTIVPROC dolLightiv;
249 PFNDOLGETLIGHTFVPROC dolGetLightfv;
250 PFNDOLGETLIGHTIVPROC dolGetLightiv;
251 PFNDOLLIGHTMODELFPROC dolLightModelf;
252 PFNDOLLIGHTMODELIPROC dolLightModeli;
253 PFNDOLLIGHTMODELFVPROC dolLightModelfv;
254 PFNDOLLIGHTMODELIVPROC dolLightModeliv;
255 PFNDOLMATERIALFPROC dolMaterialf;
256 PFNDOLMATERIALIPROC dolMateriali;
257 PFNDOLMATERIALFVPROC dolMaterialfv;
258 PFNDOLMATERIALIVPROC dolMaterialiv;
259 PFNDOLGETMATERIALFVPROC dolGetMaterialfv;
260 PFNDOLGETMATERIALIVPROC dolGetMaterialiv;
261 PFNDOLCOLORMATERIALPROC dolColorMaterial;
262 PFNDOLPIXELZOOMPROC dolPixelZoom;
263 PFNDOLPIXELSTOREFPROC dolPixelStoref;
264 PFNDOLPIXELSTOREIPROC dolPixelStorei;
265 PFNDOLPIXELTRANSFERFPROC dolPixelTransferf;
266 PFNDOLPIXELTRANSFERIPROC dolPixelTransferi;
267 PFNDOLPIXELMAPFVPROC dolPixelMapfv;
268 PFNDOLPIXELMAPUIVPROC dolPixelMapuiv;
269 PFNDOLPIXELMAPUSVPROC dolPixelMapusv;
270 PFNDOLGETPIXELMAPFVPROC dolGetPixelMapfv;
271 PFNDOLGETPIXELMAPUIVPROC dolGetPixelMapuiv;
272 PFNDOLGETPIXELMAPUSVPROC dolGetPixelMapusv;
273 PFNDOLBITMAPPROC dolBitmap;
274 PFNDOLREADPIXELSPROC dolReadPixels;
275 PFNDOLDRAWPIXELSPROC dolDrawPixels;
276 PFNDOLCOPYPIXELSPROC dolCopyPixels;
277 PFNDOLSTENCILFUNCPROC dolStencilFunc;
278 PFNDOLSTENCILMASKPROC dolStencilMask;
279 PFNDOLSTENCILOPPROC dolStencilOp;
280 PFNDOLCLEARSTENCILPROC dolClearStencil;
281 PFNDOLTEXGENDPROC dolTexGend;
282 PFNDOLTEXGENFPROC dolTexGenf;
283 PFNDOLTEXGENIPROC dolTexGeni;
284 PFNDOLTEXGENDVPROC dolTexGendv;
285 PFNDOLTEXGENFVPROC dolTexGenfv;
286 PFNDOLTEXGENIVPROC dolTexGeniv;
287 PFNDOLGETTEXGENDVPROC dolGetTexGendv;
288 PFNDOLGETTEXGENFVPROC dolGetTexGenfv;
289 PFNDOLGETTEXGENIVPROC dolGetTexGeniv;
290 PFNDOLTEXENVFPROC dolTexEnvf;
291 PFNDOLTEXENVIPROC dolTexEnvi;
292 PFNDOLTEXENVFVPROC dolTexEnvfv;
293 PFNDOLTEXENVIVPROC dolTexEnviv;
294 PFNDOLGETTEXENVFVPROC dolGetTexEnvfv;
295 PFNDOLGETTEXENVIVPROC dolGetTexEnviv;
296 PFNDOLTEXPARAMETERFPROC dolTexParameterf;
297 PFNDOLTEXPARAMETERIPROC dolTexParameteri;
298 PFNDOLTEXPARAMETERFVPROC dolTexParameterfv;
299 PFNDOLTEXPARAMETERIVPROC dolTexParameteriv;
300 PFNDOLGETTEXPARAMETERFVPROC dolGetTexParameterfv;
301 PFNDOLGETTEXPARAMETERIVPROC dolGetTexParameteriv;
302 PFNDOLGETTEXLEVELPARAMETERFVPROC dolGetTexLevelParameterfv;
303 PFNDOLGETTEXLEVELPARAMETERIVPROC dolGetTexLevelParameteriv;
304 PFNDOLTEXIMAGE1DPROC dolTexImage1D;
305 PFNDOLTEXIMAGE2DPROC dolTexImage2D;
306 PFNDOLGETTEXIMAGEPROC dolGetTexImage;
307 PFNDOLGENTEXTURESPROC dolGenTextures;
308 PFNDOLDELETETEXTURESPROC dolDeleteTextures;
309 PFNDOLBINDTEXTUREPROC dolBindTexture;
310 PFNDOLPRIORITIZETEXTURESPROC dolPrioritizeTextures;
311 PFNDOLARETEXTURESRESIDENTPROC dolAreTexturesResident;
312 PFNDOLISTEXTUREPROC dolIsTexture;
313 PFNDOLTEXSUBIMAGE1DPROC dolTexSubImage1D;
314 PFNDOLTEXSUBIMAGE2DPROC dolTexSubImage2D;
315 PFNDOLCOPYTEXIMAGE1DPROC dolCopyTexImage1D;
316 PFNDOLCOPYTEXIMAGE2DPROC dolCopyTexImage2D;
317 PFNDOLCOPYTEXSUBIMAGE1DPROC dolCopyTexSubImage1D;
318 PFNDOLCOPYTEXSUBIMAGE2DPROC dolCopyTexSubImage2D;
319 PFNDOLMAP1DPROC dolMap1d;
320 PFNDOLMAP1FPROC dolMap1f;
321 PFNDOLMAP2DPROC dolMap2d;
322 PFNDOLMAP2FPROC dolMap2f;
323 PFNDOLGETMAPDVPROC dolGetMapdv;
324 PFNDOLGETMAPFVPROC dolGetMapfv;
325 PFNDOLGETMAPIVPROC dolGetMapiv;
326 PFNDOLEVALCOORD1DPROC dolEvalCoord1d;
327 PFNDOLEVALCOORD1FPROC dolEvalCoord1f;
328 PFNDOLEVALCOORD1DVPROC dolEvalCoord1dv;
329 PFNDOLEVALCOORD1FVPROC dolEvalCoord1fv;
330 PFNDOLEVALCOORD2DPROC dolEvalCoord2d;
331 PFNDOLEVALCOORD2FPROC dolEvalCoord2f;
332 PFNDOLEVALCOORD2DVPROC dolEvalCoord2dv;
333 PFNDOLEVALCOORD2FVPROC dolEvalCoord2fv;
334 PFNDOLMAPGRID1DPROC dolMapGrid1d;
335 PFNDOLMAPGRID1FPROC dolMapGrid1f;
336 PFNDOLMAPGRID2DPROC dolMapGrid2d;
337 PFNDOLMAPGRID2FPROC dolMapGrid2f;
338 PFNDOLEVALPOINT1PROC dolEvalPoint1;
339 PFNDOLEVALPOINT2PROC dolEvalPoint2;
340 PFNDOLEVALMESH1PROC dolEvalMesh1;
341 PFNDOLEVALMESH2PROC dolEvalMesh2;
342 PFNDOLFOGFPROC dolFogf;
343 PFNDOLFOGIPROC dolFogi;
344 PFNDOLFOGFVPROC dolFogfv;
345 PFNDOLFOGIVPROC dolFogiv;
346 PFNDOLFEEDBACKBUFFERPROC dolFeedbackBuffer;
347 PFNDOLPASSTHROUGHPROC dolPassThrough;
348 PFNDOLSELECTBUFFERPROC dolSelectBuffer;
349 PFNDOLINITNAMESPROC dolInitNames;
350 PFNDOLLOADNAMEPROC dolLoadName;
351 PFNDOLPUSHNAMEPROC dolPushName;
352 PFNDOLPOPNAMEPROC dolPopName;
353 
354 // gl_1_2
355 PFNDOLCOPYTEXSUBIMAGE3DPROC dolCopyTexSubImage3D;
356 PFNDOLDRAWRANGEELEMENTSPROC dolDrawRangeElements;
357 PFNDOLTEXIMAGE3DPROC dolTexImage3D;
358 PFNDOLTEXSUBIMAGE3DPROC dolTexSubImage3D;
359 
360 // gl_1_3
361 PFNDOLACTIVETEXTUREARBPROC dolActiveTexture;
362 PFNDOLCLIENTACTIVETEXTUREARBPROC dolClientActiveTexture;
363 PFNDOLCOMPRESSEDTEXIMAGE1DPROC dolCompressedTexImage1D;
364 PFNDOLCOMPRESSEDTEXIMAGE2DPROC dolCompressedTexImage2D;
365 PFNDOLCOMPRESSEDTEXIMAGE3DPROC dolCompressedTexImage3D;
366 PFNDOLCOMPRESSEDTEXSUBIMAGE1DPROC dolCompressedTexSubImage1D;
367 PFNDOLCOMPRESSEDTEXSUBIMAGE2DPROC dolCompressedTexSubImage2D;
368 PFNDOLCOMPRESSEDTEXSUBIMAGE3DPROC dolCompressedTexSubImage3D;
369 PFNDOLGETCOMPRESSEDTEXIMAGEPROC dolGetCompressedTexImage;
370 PFNDOLLOADTRANSPOSEMATRIXDARBPROC dolLoadTransposeMatrixd;
371 PFNDOLLOADTRANSPOSEMATRIXFARBPROC dolLoadTransposeMatrixf;
372 PFNDOLMULTTRANSPOSEMATRIXDARBPROC dolMultTransposeMatrixd;
373 PFNDOLMULTTRANSPOSEMATRIXFARBPROC dolMultTransposeMatrixf;
374 PFNDOLMULTITEXCOORD1DARBPROC dolMultiTexCoord1d;
375 PFNDOLMULTITEXCOORD1DVARBPROC dolMultiTexCoord1dv;
376 PFNDOLMULTITEXCOORD1FARBPROC dolMultiTexCoord1f;
377 PFNDOLMULTITEXCOORD1FVARBPROC dolMultiTexCoord1fv;
378 PFNDOLMULTITEXCOORD1IARBPROC dolMultiTexCoord1i;
379 PFNDOLMULTITEXCOORD1IVARBPROC dolMultiTexCoord1iv;
380 PFNDOLMULTITEXCOORD1SARBPROC dolMultiTexCoord1s;
381 PFNDOLMULTITEXCOORD1SVARBPROC dolMultiTexCoord1sv;
382 PFNDOLMULTITEXCOORD2DARBPROC dolMultiTexCoord2d;
383 PFNDOLMULTITEXCOORD2DVARBPROC dolMultiTexCoord2dv;
384 PFNDOLMULTITEXCOORD2FARBPROC dolMultiTexCoord2f;
385 PFNDOLMULTITEXCOORD2FVARBPROC dolMultiTexCoord2fv;
386 PFNDOLMULTITEXCOORD2IARBPROC dolMultiTexCoord2i;
387 PFNDOLMULTITEXCOORD2IVARBPROC dolMultiTexCoord2iv;
388 PFNDOLMULTITEXCOORD2SARBPROC dolMultiTexCoord2s;
389 PFNDOLMULTITEXCOORD2SVARBPROC dolMultiTexCoord2sv;
390 PFNDOLMULTITEXCOORD3DARBPROC dolMultiTexCoord3d;
391 PFNDOLMULTITEXCOORD3DVARBPROC dolMultiTexCoord3dv;
392 PFNDOLMULTITEXCOORD3FARBPROC dolMultiTexCoord3f;
393 PFNDOLMULTITEXCOORD3FVARBPROC dolMultiTexCoord3fv;
394 PFNDOLMULTITEXCOORD3IARBPROC dolMultiTexCoord3i;
395 PFNDOLMULTITEXCOORD3IVARBPROC dolMultiTexCoord3iv;
396 PFNDOLMULTITEXCOORD3SARBPROC dolMultiTexCoord3s;
397 PFNDOLMULTITEXCOORD3SVARBPROC dolMultiTexCoord3sv;
398 PFNDOLMULTITEXCOORD4DARBPROC dolMultiTexCoord4d;
399 PFNDOLMULTITEXCOORD4DVARBPROC dolMultiTexCoord4dv;
400 PFNDOLMULTITEXCOORD4FARBPROC dolMultiTexCoord4f;
401 PFNDOLMULTITEXCOORD4FVARBPROC dolMultiTexCoord4fv;
402 PFNDOLMULTITEXCOORD4IARBPROC dolMultiTexCoord4i;
403 PFNDOLMULTITEXCOORD4IVARBPROC dolMultiTexCoord4iv;
404 PFNDOLMULTITEXCOORD4SARBPROC dolMultiTexCoord4s;
405 PFNDOLMULTITEXCOORD4SVARBPROC dolMultiTexCoord4sv;
406 PFNDOLSAMPLECOVERAGEARBPROC dolSampleCoverage;
407 
408 // gl_1_4
409 PFNDOLBLENDCOLORPROC dolBlendColor;
410 PFNDOLBLENDEQUATIONPROC dolBlendEquation;
411 PFNDOLBLENDFUNCSEPARATEPROC dolBlendFuncSeparate;
412 PFNDOLFOGCOORDPOINTERPROC dolFogCoordPointer;
413 PFNDOLFOGCOORDDPROC dolFogCoordd;
414 PFNDOLFOGCOORDDVPROC dolFogCoorddv;
415 PFNDOLFOGCOORDFPROC dolFogCoordf;
416 PFNDOLFOGCOORDFVPROC dolFogCoordfv;
417 PFNDOLMULTIDRAWARRAYSPROC dolMultiDrawArrays;
418 PFNDOLMULTIDRAWELEMENTSPROC dolMultiDrawElements;
419 PFNDOLPOINTPARAMETERFPROC dolPointParameterf;
420 PFNDOLPOINTPARAMETERFVPROC dolPointParameterfv;
421 PFNDOLPOINTPARAMETERIPROC dolPointParameteri;
422 PFNDOLPOINTPARAMETERIVPROC dolPointParameteriv;
423 PFNDOLSECONDARYCOLOR3BPROC dolSecondaryColor3b;
424 PFNDOLSECONDARYCOLOR3BVPROC dolSecondaryColor3bv;
425 PFNDOLSECONDARYCOLOR3DPROC dolSecondaryColor3d;
426 PFNDOLSECONDARYCOLOR3DVPROC dolSecondaryColor3dv;
427 PFNDOLSECONDARYCOLOR3FPROC dolSecondaryColor3f;
428 PFNDOLSECONDARYCOLOR3FVPROC dolSecondaryColor3fv;
429 PFNDOLSECONDARYCOLOR3IPROC dolSecondaryColor3i;
430 PFNDOLSECONDARYCOLOR3IVPROC dolSecondaryColor3iv;
431 PFNDOLSECONDARYCOLOR3SPROC dolSecondaryColor3s;
432 PFNDOLSECONDARYCOLOR3SVPROC dolSecondaryColor3sv;
433 PFNDOLSECONDARYCOLOR3UBPROC dolSecondaryColor3ub;
434 PFNDOLSECONDARYCOLOR3UBVPROC dolSecondaryColor3ubv;
435 PFNDOLSECONDARYCOLOR3UIPROC dolSecondaryColor3ui;
436 PFNDOLSECONDARYCOLOR3UIVPROC dolSecondaryColor3uiv;
437 PFNDOLSECONDARYCOLOR3USPROC dolSecondaryColor3us;
438 PFNDOLSECONDARYCOLOR3USVPROC dolSecondaryColor3usv;
439 PFNDOLSECONDARYCOLORPOINTERPROC dolSecondaryColorPointer;
440 PFNDOLWINDOWPOS2DPROC dolWindowPos2d;
441 PFNDOLWINDOWPOS2DVPROC dolWindowPos2dv;
442 PFNDOLWINDOWPOS2FPROC dolWindowPos2f;
443 PFNDOLWINDOWPOS2FVPROC dolWindowPos2fv;
444 PFNDOLWINDOWPOS2IPROC dolWindowPos2i;
445 PFNDOLWINDOWPOS2IVPROC dolWindowPos2iv;
446 PFNDOLWINDOWPOS2SPROC dolWindowPos2s;
447 PFNDOLWINDOWPOS2SVPROC dolWindowPos2sv;
448 PFNDOLWINDOWPOS3DPROC dolWindowPos3d;
449 PFNDOLWINDOWPOS3DVPROC dolWindowPos3dv;
450 PFNDOLWINDOWPOS3FPROC dolWindowPos3f;
451 PFNDOLWINDOWPOS3FVPROC dolWindowPos3fv;
452 PFNDOLWINDOWPOS3IPROC dolWindowPos3i;
453 PFNDOLWINDOWPOS3IVPROC dolWindowPos3iv;
454 PFNDOLWINDOWPOS3SPROC dolWindowPos3s;
455 PFNDOLWINDOWPOS3SVPROC dolWindowPos3sv;
456 
457 // gl_1_5
458 PFNDOLBEGINQUERYPROC dolBeginQuery;
459 PFNDOLBINDBUFFERPROC dolBindBuffer;
460 PFNDOLBUFFERDATAPROC dolBufferData;
461 PFNDOLBUFFERSUBDATAPROC dolBufferSubData;
462 PFNDOLDELETEBUFFERSPROC dolDeleteBuffers;
463 PFNDOLDELETEQUERIESPROC dolDeleteQueries;
464 PFNDOLENDQUERYPROC dolEndQuery;
465 PFNDOLGENBUFFERSPROC dolGenBuffers;
466 PFNDOLGENQUERIESPROC dolGenQueries;
467 PFNDOLGETBUFFERPARAMETERIVPROC dolGetBufferParameteriv;
468 PFNDOLGETBUFFERPOINTERVPROC dolGetBufferPointerv;
469 PFNDOLGETBUFFERSUBDATAPROC dolGetBufferSubData;
470 PFNDOLGETQUERYOBJECTIVPROC dolGetQueryObjectiv;
471 PFNDOLGETQUERYOBJECTUIVPROC dolGetQueryObjectuiv;
472 PFNDOLGETQUERYIVPROC dolGetQueryiv;
473 PFNDOLISBUFFERPROC dolIsBuffer;
474 PFNDOLISQUERYPROC dolIsQuery;
475 PFNDOLMAPBUFFERPROC dolMapBuffer;
476 PFNDOLUNMAPBUFFERPROC dolUnmapBuffer;
477 
478 // gl_2_0
479 PFNDOLATTACHSHADERPROC dolAttachShader;
480 PFNDOLBINDATTRIBLOCATIONPROC dolBindAttribLocation;
481 PFNDOLBLENDEQUATIONSEPARATEPROC dolBlendEquationSeparate;
482 PFNDOLCOMPILESHADERPROC dolCompileShader;
483 PFNDOLCREATEPROGRAMPROC dolCreateProgram;
484 PFNDOLCREATESHADERPROC dolCreateShader;
485 PFNDOLDELETEPROGRAMPROC dolDeleteProgram;
486 PFNDOLDELETESHADERPROC dolDeleteShader;
487 PFNDOLDETACHSHADERPROC dolDetachShader;
488 PFNDOLDISABLEVERTEXATTRIBARRAYPROC dolDisableVertexAttribArray;
489 PFNDOLDRAWBUFFERSPROC dolDrawBuffers;
490 PFNDOLENABLEVERTEXATTRIBARRAYPROC dolEnableVertexAttribArray;
491 PFNDOLGETACTIVEATTRIBPROC dolGetActiveAttrib;
492 PFNDOLGETACTIVEUNIFORMPROC dolGetActiveUniform;
493 PFNDOLGETATTACHEDSHADERSPROC dolGetAttachedShaders;
494 PFNDOLGETATTRIBLOCATIONPROC dolGetAttribLocation;
495 PFNDOLGETPROGRAMINFOLOGPROC dolGetProgramInfoLog;
496 PFNDOLGETPROGRAMIVPROC dolGetProgramiv;
497 PFNDOLGETSHADERINFOLOGPROC dolGetShaderInfoLog;
498 PFNDOLGETSHADERSOURCEPROC dolGetShaderSource;
499 PFNDOLGETSHADERIVPROC dolGetShaderiv;
500 PFNDOLGETUNIFORMLOCATIONPROC dolGetUniformLocation;
501 PFNDOLGETUNIFORMFVPROC dolGetUniformfv;
502 PFNDOLGETUNIFORMIVPROC dolGetUniformiv;
503 PFNDOLGETVERTEXATTRIBPOINTERVPROC dolGetVertexAttribPointerv;
504 PFNDOLGETVERTEXATTRIBDVPROC dolGetVertexAttribdv;
505 PFNDOLGETVERTEXATTRIBFVPROC dolGetVertexAttribfv;
506 PFNDOLGETVERTEXATTRIBIVPROC dolGetVertexAttribiv;
507 PFNDOLISPROGRAMPROC dolIsProgram;
508 PFNDOLISSHADERPROC dolIsShader;
509 PFNDOLLINKPROGRAMPROC dolLinkProgram;
510 PFNDOLSHADERSOURCEPROC dolShaderSource;
511 PFNDOLSTENCILFUNCSEPARATEPROC dolStencilFuncSeparate;
512 PFNDOLSTENCILMASKSEPARATEPROC dolStencilMaskSeparate;
513 PFNDOLSTENCILOPSEPARATEPROC dolStencilOpSeparate;
514 PFNDOLUNIFORM1FPROC dolUniform1f;
515 PFNDOLUNIFORM1FVPROC dolUniform1fv;
516 PFNDOLUNIFORM1IPROC dolUniform1i;
517 PFNDOLUNIFORM1IVPROC dolUniform1iv;
518 PFNDOLUNIFORM2FPROC dolUniform2f;
519 PFNDOLUNIFORM2FVPROC dolUniform2fv;
520 PFNDOLUNIFORM2IPROC dolUniform2i;
521 PFNDOLUNIFORM2IVPROC dolUniform2iv;
522 PFNDOLUNIFORM3FPROC dolUniform3f;
523 PFNDOLUNIFORM3FVPROC dolUniform3fv;
524 PFNDOLUNIFORM3IPROC dolUniform3i;
525 PFNDOLUNIFORM3IVPROC dolUniform3iv;
526 PFNDOLUNIFORM4FPROC dolUniform4f;
527 PFNDOLUNIFORM4FVPROC dolUniform4fv;
528 PFNDOLUNIFORM4IPROC dolUniform4i;
529 PFNDOLUNIFORM4IVPROC dolUniform4iv;
530 PFNDOLUNIFORMMATRIX2FVPROC dolUniformMatrix2fv;
531 PFNDOLUNIFORMMATRIX3FVPROC dolUniformMatrix3fv;
532 PFNDOLUNIFORMMATRIX4FVPROC dolUniformMatrix4fv;
533 PFNDOLUSEPROGRAMPROC dolUseProgram;
534 PFNDOLVALIDATEPROGRAMPROC dolValidateProgram;
535 PFNDOLVERTEXATTRIB1DPROC dolVertexAttrib1d;
536 PFNDOLVERTEXATTRIB1DVPROC dolVertexAttrib1dv;
537 PFNDOLVERTEXATTRIB1FPROC dolVertexAttrib1f;
538 PFNDOLVERTEXATTRIB1FVPROC dolVertexAttrib1fv;
539 PFNDOLVERTEXATTRIB1SPROC dolVertexAttrib1s;
540 PFNDOLVERTEXATTRIB1SVPROC dolVertexAttrib1sv;
541 PFNDOLVERTEXATTRIB2DPROC dolVertexAttrib2d;
542 PFNDOLVERTEXATTRIB2DVPROC dolVertexAttrib2dv;
543 PFNDOLVERTEXATTRIB2FPROC dolVertexAttrib2f;
544 PFNDOLVERTEXATTRIB2FVPROC dolVertexAttrib2fv;
545 PFNDOLVERTEXATTRIB2SPROC dolVertexAttrib2s;
546 PFNDOLVERTEXATTRIB2SVPROC dolVertexAttrib2sv;
547 PFNDOLVERTEXATTRIB3DPROC dolVertexAttrib3d;
548 PFNDOLVERTEXATTRIB3DVPROC dolVertexAttrib3dv;
549 PFNDOLVERTEXATTRIB3FPROC dolVertexAttrib3f;
550 PFNDOLVERTEXATTRIB3FVPROC dolVertexAttrib3fv;
551 PFNDOLVERTEXATTRIB3SPROC dolVertexAttrib3s;
552 PFNDOLVERTEXATTRIB3SVPROC dolVertexAttrib3sv;
553 PFNDOLVERTEXATTRIB4NBVPROC dolVertexAttrib4Nbv;
554 PFNDOLVERTEXATTRIB4NIVPROC dolVertexAttrib4Niv;
555 PFNDOLVERTEXATTRIB4NSVPROC dolVertexAttrib4Nsv;
556 PFNDOLVERTEXATTRIB4NUBPROC dolVertexAttrib4Nub;
557 PFNDOLVERTEXATTRIB4NUBVPROC dolVertexAttrib4Nubv;
558 PFNDOLVERTEXATTRIB4NUIVPROC dolVertexAttrib4Nuiv;
559 PFNDOLVERTEXATTRIB4NUSVPROC dolVertexAttrib4Nusv;
560 PFNDOLVERTEXATTRIB4BVPROC dolVertexAttrib4bv;
561 PFNDOLVERTEXATTRIB4DPROC dolVertexAttrib4d;
562 PFNDOLVERTEXATTRIB4DVPROC dolVertexAttrib4dv;
563 PFNDOLVERTEXATTRIB4FPROC dolVertexAttrib4f;
564 PFNDOLVERTEXATTRIB4FVPROC dolVertexAttrib4fv;
565 PFNDOLVERTEXATTRIB4IVPROC dolVertexAttrib4iv;
566 PFNDOLVERTEXATTRIB4SPROC dolVertexAttrib4s;
567 PFNDOLVERTEXATTRIB4SVPROC dolVertexAttrib4sv;
568 PFNDOLVERTEXATTRIB4UBVPROC dolVertexAttrib4ubv;
569 PFNDOLVERTEXATTRIB4UIVPROC dolVertexAttrib4uiv;
570 PFNDOLVERTEXATTRIB4USVPROC dolVertexAttrib4usv;
571 PFNDOLVERTEXATTRIBPOINTERPROC dolVertexAttribPointer;
572 
573 // gl_2_1
574 PFNDOLUNIFORMMATRIX2X3FVPROC dolUniformMatrix2x3fv;
575 PFNDOLUNIFORMMATRIX2X4FVPROC dolUniformMatrix2x4fv;
576 PFNDOLUNIFORMMATRIX3X2FVPROC dolUniformMatrix3x2fv;
577 PFNDOLUNIFORMMATRIX3X4FVPROC dolUniformMatrix3x4fv;
578 PFNDOLUNIFORMMATRIX4X2FVPROC dolUniformMatrix4x2fv;
579 PFNDOLUNIFORMMATRIX4X3FVPROC dolUniformMatrix4x3fv;
580 
581 // gl_3_0
582 PFNDOLBEGINCONDITIONALRENDERPROC dolBeginConditionalRender;
583 PFNDOLBEGINTRANSFORMFEEDBACKPROC dolBeginTransformFeedback;
584 PFNDOLBINDFRAGDATALOCATIONPROC dolBindFragDataLocation;
585 PFNDOLCLAMPCOLORPROC dolClampColor;
586 PFNDOLCLEARBUFFERFIPROC dolClearBufferfi;
587 PFNDOLCLEARBUFFERFVPROC dolClearBufferfv;
588 PFNDOLCLEARBUFFERIVPROC dolClearBufferiv;
589 PFNDOLCLEARBUFFERUIVPROC dolClearBufferuiv;
590 PFNDOLCOLORMASKIPROC dolColorMaski;
591 PFNDOLDISABLEIPROC dolDisablei;
592 PFNDOLENABLEIPROC dolEnablei;
593 PFNDOLENDCONDITIONALRENDERPROC dolEndConditionalRender;
594 PFNDOLENDTRANSFORMFEEDBACKPROC dolEndTransformFeedback;
595 PFNDOLGETBOOLEANI_VPROC dolGetBooleani_v;
596 PFNDOLGETFRAGDATALOCATIONPROC dolGetFragDataLocation;
597 PFNDOLGETSTRINGIPROC dolGetStringi;
598 PFNDOLGETTEXPARAMETERIIVPROC dolGetTexParameterIiv;
599 PFNDOLGETTEXPARAMETERIUIVPROC dolGetTexParameterIuiv;
600 PFNDOLGETTRANSFORMFEEDBACKVARYINGPROC dolGetTransformFeedbackVarying;
601 PFNDOLGETUNIFORMUIVPROC dolGetUniformuiv;
602 PFNDOLGETVERTEXATTRIBIIVPROC dolGetVertexAttribIiv;
603 PFNDOLGETVERTEXATTRIBIUIVPROC dolGetVertexAttribIuiv;
604 PFNDOLISENABLEDIPROC dolIsEnabledi;
605 PFNDOLTEXPARAMETERIIVPROC dolTexParameterIiv;
606 PFNDOLTEXPARAMETERIUIVPROC dolTexParameterIuiv;
607 PFNDOLTRANSFORMFEEDBACKVARYINGSPROC dolTransformFeedbackVaryings;
608 PFNDOLUNIFORM1UIPROC dolUniform1ui;
609 PFNDOLUNIFORM1UIVPROC dolUniform1uiv;
610 PFNDOLUNIFORM2UIPROC dolUniform2ui;
611 PFNDOLUNIFORM2UIVPROC dolUniform2uiv;
612 PFNDOLUNIFORM3UIPROC dolUniform3ui;
613 PFNDOLUNIFORM3UIVPROC dolUniform3uiv;
614 PFNDOLUNIFORM4UIPROC dolUniform4ui;
615 PFNDOLUNIFORM4UIVPROC dolUniform4uiv;
616 PFNDOLVERTEXATTRIBI1IPROC dolVertexAttribI1i;
617 PFNDOLVERTEXATTRIBI1IVPROC dolVertexAttribI1iv;
618 PFNDOLVERTEXATTRIBI1UIPROC dolVertexAttribI1ui;
619 PFNDOLVERTEXATTRIBI1UIVPROC dolVertexAttribI1uiv;
620 PFNDOLVERTEXATTRIBI2IPROC dolVertexAttribI2i;
621 PFNDOLVERTEXATTRIBI2IVPROC dolVertexAttribI2iv;
622 PFNDOLVERTEXATTRIBI2UIPROC dolVertexAttribI2ui;
623 PFNDOLVERTEXATTRIBI2UIVPROC dolVertexAttribI2uiv;
624 PFNDOLVERTEXATTRIBI3IPROC dolVertexAttribI3i;
625 PFNDOLVERTEXATTRIBI3IVPROC dolVertexAttribI3iv;
626 PFNDOLVERTEXATTRIBI3UIPROC dolVertexAttribI3ui;
627 PFNDOLVERTEXATTRIBI3UIVPROC dolVertexAttribI3uiv;
628 PFNDOLVERTEXATTRIBI4BVPROC dolVertexAttribI4bv;
629 PFNDOLVERTEXATTRIBI4IPROC dolVertexAttribI4i;
630 PFNDOLVERTEXATTRIBI4IVPROC dolVertexAttribI4iv;
631 PFNDOLVERTEXATTRIBI4SVPROC dolVertexAttribI4sv;
632 PFNDOLVERTEXATTRIBI4UBVPROC dolVertexAttribI4ubv;
633 PFNDOLVERTEXATTRIBI4UIPROC dolVertexAttribI4ui;
634 PFNDOLVERTEXATTRIBI4UIVPROC dolVertexAttribI4uiv;
635 PFNDOLVERTEXATTRIBI4USVPROC dolVertexAttribI4usv;
636 PFNDOLVERTEXATTRIBIPOINTERPROC dolVertexAttribIPointer;
637 
638 // gl_3_1
639 PFNDOLDRAWARRAYSINSTANCEDPROC dolDrawArraysInstanced;
640 PFNDOLDRAWELEMENTSINSTANCEDPROC dolDrawElementsInstanced;
641 PFNDOLPRIMITIVERESTARTINDEXPROC dolPrimitiveRestartIndex;
642 PFNDOLTEXBUFFERPROC dolTexBuffer;
643 
644 // gl_3_2
645 PFNDOLFRAMEBUFFERTEXTUREPROC dolFramebufferTexture;
646 PFNDOLGETBUFFERPARAMETERI64VPROC dolGetBufferParameteri64v;
647 PFNDOLGETINTEGER64I_VPROC dolGetInteger64i_v;
648 
649 // gl 4_2
650 PFNDOLDRAWARRAYSINSTANCEDBASEINSTANCEPROC dolDrawArraysInstancedBaseInstance;
651 PFNDOLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC dolDrawElementsInstancedBaseInstance;
652 PFNDOLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC
653 dolDrawElementsInstancedBaseVertexBaseInstance;
654 PFNDOLGETINTERNALFORMATIVPROC dolGetInternalformativ;
655 PFNDOLGETACTIVEATOMICCOUNTERBUFFERIVPROC dolGetActiveAtomicCounterBufferiv;
656 PFNDOLDRAWTRANSFORMFEEDBACKINSTANCEDPROC dolDrawTransformFeedbackInstanced;
657 PFNDOLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC dolDrawTransformFeedbackStreamInstanced;
658 
659 // gl_4_3
660 PFNDOLCLEARBUFFERDATAPROC dolClearBufferData;
661 PFNDOLCLEARBUFFERSUBDATAPROC dolClearBufferSubData;
662 PFNDOLFRAMEBUFFERPARAMETERIPROC dolFramebufferParameteri;
663 PFNDOLGETFRAMEBUFFERPARAMETERIVPROC dolGetFramebufferParameteriv;
664 PFNDOLGETINTERNALFORMATI64VPROC dolGetInternalformati64v;
665 PFNDOLINVALIDATETEXSUBIMAGEPROC dolInvalidateTexSubImage;
666 PFNDOLINVALIDATETEXIMAGEPROC dolInvalidateTexImage;
667 PFNDOLINVALIDATEBUFFERSUBDATAPROC dolInvalidateBufferSubData;
668 PFNDOLINVALIDATEBUFFERDATAPROC dolInvalidateBufferData;
669 PFNDOLINVALIDATEFRAMEBUFFERPROC dolInvalidateFramebuffer;
670 PFNDOLINVALIDATESUBFRAMEBUFFERPROC dolInvalidateSubFramebuffer;
671 PFNDOLMULTIDRAWARRAYSINDIRECTPROC dolMultiDrawArraysIndirect;
672 PFNDOLMULTIDRAWELEMENTSINDIRECTPROC dolMultiDrawElementsIndirect;
673 PFNDOLGETPROGRAMINTERFACEIVPROC dolGetProgramInterfaceiv;
674 PFNDOLGETPROGRAMRESOURCEINDEXPROC dolGetProgramResourceIndex;
675 PFNDOLGETPROGRAMRESOURCENAMEPROC dolGetProgramResourceName;
676 PFNDOLGETPROGRAMRESOURCEIVPROC dolGetProgramResourceiv;
677 PFNDOLGETPROGRAMRESOURCELOCATIONPROC dolGetProgramResourceLocation;
678 PFNDOLGETPROGRAMRESOURCELOCATIONINDEXPROC dolGetProgramResourceLocationIndex;
679 PFNDOLTEXBUFFERRANGEPROC dolTexBufferRange;
680 PFNDOLTEXTUREVIEWPROC dolTextureView;
681 PFNDOLBINDVERTEXBUFFERPROC dolBindVertexBuffer;
682 PFNDOLVERTEXATTRIBFORMATPROC dolVertexAttribFormat;
683 PFNDOLVERTEXATTRIBIFORMATPROC dolVertexAttribIFormat;
684 PFNDOLVERTEXATTRIBLFORMATPROC dolVertexAttribLFormat;
685 PFNDOLVERTEXATTRIBBINDINGPROC dolVertexAttribBinding;
686 PFNDOLVERTEXBINDINGDIVISORPROC dolVertexBindingDivisor;
687 
688 // gl_4_4
689 PFNDOLCLEARTEXIMAGEPROC dolClearTexImage;
690 PFNDOLCLEARTEXSUBIMAGEPROC dolClearTexSubImage;
691 PFNDOLBINDBUFFERSBASEPROC dolBindBuffersBase;
692 PFNDOLBINDBUFFERSRANGEPROC dolBindBuffersRange;
693 PFNDOLBINDTEXTURESPROC dolBindTextures;
694 PFNDOLBINDSAMPLERSPROC dolBindSamplers;
695 PFNDOLBINDIMAGETEXTURESPROC dolBindImageTextures;
696 PFNDOLBINDVERTEXBUFFERSPROC dolBindVertexBuffers;
697 
698 // gl_4_5
699 PFNDOLCREATETRANSFORMFEEDBACKSPROC dolCreateTransformFeedbacks;
700 PFNDOLTRANSFORMFEEDBACKBUFFERBASEPROC dolTransformFeedbackBufferBase;
701 PFNDOLTRANSFORMFEEDBACKBUFFERRANGEPROC dolTransformFeedbackBufferRange;
702 PFNDOLGETTRANSFORMFEEDBACKIVPROC dolGetTransformFeedbackiv;
703 PFNDOLGETTRANSFORMFEEDBACKI_VPROC dolGetTransformFeedbacki_v;
704 PFNDOLGETTRANSFORMFEEDBACKI64_VPROC dolGetTransformFeedbacki64_v;
705 PFNDOLCREATEBUFFERSPROC dolCreateBuffers;
706 PFNDOLNAMEDBUFFERSTORAGEPROC dolNamedBufferStorage;
707 PFNDOLNAMEDBUFFERDATAPROC dolNamedBufferData;
708 PFNDOLNAMEDBUFFERSUBDATAPROC dolNamedBufferSubData;
709 PFNDOLCOPYNAMEDBUFFERSUBDATAPROC dolCopyNamedBufferSubData;
710 PFNDOLCLEARNAMEDBUFFERDATAPROC dolClearNamedBufferData;
711 PFNDOLCLEARNAMEDBUFFERSUBDATAPROC dolClearNamedBufferSubData;
712 PFNDOLMAPNAMEDBUFFERPROC dolMapNamedBuffer;
713 PFNDOLMAPNAMEDBUFFERRANGEPROC dolMapNamedBufferRange;
714 PFNDOLUNMAPNAMEDBUFFERPROC dolUnmapNamedBuffer;
715 PFNDOLFLUSHMAPPEDNAMEDBUFFERRANGEPROC dolFlushMappedNamedBufferRange;
716 PFNDOLGETNAMEDBUFFERPARAMETERIVPROC dolGetNamedBufferParameteriv;
717 PFNDOLGETNAMEDBUFFERPARAMETERI64VPROC dolGetNamedBufferParameteri64v;
718 PFNDOLGETNAMEDBUFFERPOINTERVPROC dolGetNamedBufferPointerv;
719 PFNDOLGETNAMEDBUFFERSUBDATAPROC dolGetNamedBufferSubData;
720 PFNDOLCREATEFRAMEBUFFERSPROC dolCreateFramebuffers;
721 PFNDOLNAMEDFRAMEBUFFERRENDERBUFFERPROC dolNamedFramebufferRenderbuffer;
722 PFNDOLNAMEDFRAMEBUFFERPARAMETERIPROC dolNamedFramebufferParameteri;
723 PFNDOLNAMEDFRAMEBUFFERTEXTUREPROC dolNamedFramebufferTexture;
724 PFNDOLNAMEDFRAMEBUFFERTEXTURELAYERPROC dolNamedFramebufferTextureLayer;
725 PFNDOLNAMEDFRAMEBUFFERDRAWBUFFERPROC dolNamedFramebufferDrawBuffer;
726 PFNDOLNAMEDFRAMEBUFFERDRAWBUFFERSPROC dolNamedFramebufferDrawBuffers;
727 PFNDOLNAMEDFRAMEBUFFERREADBUFFERPROC dolNamedFramebufferReadBuffer;
728 PFNDOLINVALIDATENAMEDFRAMEBUFFERDATAPROC dolInvalidateNamedFramebufferData;
729 PFNDOLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC dolInvalidateNamedFramebufferSubData;
730 PFNDOLCLEARNAMEDFRAMEBUFFERIVPROC dolClearNamedFramebufferiv;
731 PFNDOLCLEARNAMEDFRAMEBUFFERUIVPROC dolClearNamedFramebufferuiv;
732 PFNDOLCLEARNAMEDFRAMEBUFFERFVPROC dolClearNamedFramebufferfv;
733 PFNDOLCLEARNAMEDFRAMEBUFFERFIPROC dolClearNamedFramebufferfi;
734 PFNDOLBLITNAMEDFRAMEBUFFERPROC dolBlitNamedFramebuffer;
735 PFNDOLCHECKNAMEDFRAMEBUFFERSTATUSPROC dolCheckNamedFramebufferStatus;
736 PFNDOLGETNAMEDFRAMEBUFFERPARAMETERIVPROC dolGetNamedFramebufferParameteriv;
737 PFNDOLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC dolGetNamedFramebufferAttachmentParameteriv;
738 PFNDOLCREATERENDERBUFFERSPROC dolCreateRenderbuffers;
739 PFNDOLNAMEDRENDERBUFFERSTORAGEPROC dolNamedRenderbufferStorage;
740 PFNDOLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC dolNamedRenderbufferStorageMultisample;
741 PFNDOLGETNAMEDRENDERBUFFERPARAMETERIVPROC dolGetNamedRenderbufferParameteriv;
742 PFNDOLCREATETEXTURESPROC dolCreateTextures;
743 PFNDOLTEXTUREBUFFERPROC dolTextureBuffer;
744 PFNDOLTEXTUREBUFFERRANGEPROC dolTextureBufferRange;
745 PFNDOLTEXTURESTORAGE1DPROC dolTextureStorage1D;
746 PFNDOLTEXTURESTORAGE2DPROC dolTextureStorage2D;
747 PFNDOLTEXTURESTORAGE3DPROC dolTextureStorage3D;
748 PFNDOLTEXTURESTORAGE2DMULTISAMPLEPROC dolTextureStorage2DMultisample;
749 PFNDOLTEXTURESTORAGE3DMULTISAMPLEPROC dolTextureStorage3DMultisample;
750 PFNDOLTEXTURESUBIMAGE1DPROC dolTextureSubImage1D;
751 PFNDOLTEXTURESUBIMAGE2DPROC dolTextureSubImage2D;
752 PFNDOLTEXTURESUBIMAGE3DPROC dolTextureSubImage3D;
753 PFNDOLCOMPRESSEDTEXTURESUBIMAGE1DPROC dolCompressedTextureSubImage1D;
754 PFNDOLCOMPRESSEDTEXTURESUBIMAGE2DPROC dolCompressedTextureSubImage2D;
755 PFNDOLCOMPRESSEDTEXTURESUBIMAGE3DPROC dolCompressedTextureSubImage3D;
756 PFNDOLCOPYTEXTURESUBIMAGE1DPROC dolCopyTextureSubImage1D;
757 PFNDOLCOPYTEXTURESUBIMAGE2DPROC dolCopyTextureSubImage2D;
758 PFNDOLCOPYTEXTURESUBIMAGE3DPROC dolCopyTextureSubImage3D;
759 PFNDOLTEXTUREPARAMETERFPROC dolTextureParameterf;
760 PFNDOLTEXTUREPARAMETERFVPROC dolTextureParameterfv;
761 PFNDOLTEXTUREPARAMETERIPROC dolTextureParameteri;
762 PFNDOLTEXTUREPARAMETERIIVPROC dolTextureParameterIiv;
763 PFNDOLTEXTUREPARAMETERIUIVPROC dolTextureParameterIuiv;
764 PFNDOLTEXTUREPARAMETERIVPROC dolTextureParameteriv;
765 PFNDOLGENERATETEXTUREMIPMAPPROC dolGenerateTextureMipmap;
766 PFNDOLBINDTEXTUREUNITPROC dolBindTextureUnit;
767 PFNDOLGETTEXTUREIMAGEPROC dolGetTextureImage;
768 PFNDOLGETCOMPRESSEDTEXTUREIMAGEPROC dolGetCompressedTextureImage;
769 PFNDOLGETTEXTURELEVELPARAMETERFVPROC dolGetTextureLevelParameterfv;
770 PFNDOLGETTEXTURELEVELPARAMETERIVPROC dolGetTextureLevelParameteriv;
771 PFNDOLGETTEXTUREPARAMETERFVPROC dolGetTextureParameterfv;
772 PFNDOLGETTEXTUREPARAMETERIIVPROC dolGetTextureParameterIiv;
773 PFNDOLGETTEXTUREPARAMETERIUIVPROC dolGetTextureParameterIuiv;
774 PFNDOLGETTEXTUREPARAMETERIVPROC dolGetTextureParameteriv;
775 PFNDOLCREATEVERTEXARRAYSPROC dolCreateVertexArrays;
776 PFNDOLDISABLEVERTEXARRAYATTRIBPROC dolDisableVertexArrayAttrib;
777 PFNDOLENABLEVERTEXARRAYATTRIBPROC dolEnableVertexArrayAttrib;
778 PFNDOLVERTEXARRAYELEMENTBUFFERPROC dolVertexArrayElementBuffer;
779 PFNDOLVERTEXARRAYVERTEXBUFFERPROC dolVertexArrayVertexBuffer;
780 PFNDOLVERTEXARRAYVERTEXBUFFERSPROC dolVertexArrayVertexBuffers;
781 PFNDOLVERTEXARRAYATTRIBBINDINGPROC dolVertexArrayAttribBinding;
782 PFNDOLVERTEXARRAYATTRIBFORMATPROC dolVertexArrayAttribFormat;
783 PFNDOLVERTEXARRAYATTRIBIFORMATPROC dolVertexArrayAttribIFormat;
784 PFNDOLVERTEXARRAYATTRIBLFORMATPROC dolVertexArrayAttribLFormat;
785 PFNDOLVERTEXARRAYBINDINGDIVISORPROC dolVertexArrayBindingDivisor;
786 PFNDOLGETVERTEXARRAYIVPROC dolGetVertexArrayiv;
787 PFNDOLGETVERTEXARRAYINDEXEDIVPROC dolGetVertexArrayIndexediv;
788 PFNDOLGETVERTEXARRAYINDEXED64IVPROC dolGetVertexArrayIndexed64iv;
789 PFNDOLCREATESAMPLERSPROC dolCreateSamplers;
790 PFNDOLCREATEPROGRAMPIPELINESPROC dolCreateProgramPipelines;
791 PFNDOLCREATEQUERIESPROC dolCreateQueries;
792 PFNDOLGETQUERYBUFFEROBJECTI64VPROC dolGetQueryBufferObjecti64v;
793 PFNDOLGETQUERYBUFFEROBJECTIVPROC dolGetQueryBufferObjectiv;
794 PFNDOLGETQUERYBUFFEROBJECTUI64VPROC dolGetQueryBufferObjectui64v;
795 PFNDOLGETQUERYBUFFEROBJECTUIVPROC dolGetQueryBufferObjectuiv;
796 PFNDOLMEMORYBARRIERBYREGIONPROC dolMemoryBarrierByRegion;
797 PFNDOLGETTEXTURESUBIMAGEPROC dolGetTextureSubImage;
798 PFNDOLGETCOMPRESSEDTEXTURESUBIMAGEPROC dolGetCompressedTextureSubImage;
799 PFNDOLGETGRAPHICSRESETSTATUSPROC dolGetGraphicsResetStatus;
800 PFNDOLGETNCOMPRESSEDTEXIMAGEPROC dolGetnCompressedTexImage;
801 PFNDOLGETNTEXIMAGEPROC dolGetnTexImage;
802 PFNDOLGETNUNIFORMDVPROC dolGetnUniformdv;
803 PFNDOLGETNUNIFORMFVPROC dolGetnUniformfv;
804 PFNDOLGETNUNIFORMIVPROC dolGetnUniformiv;
805 PFNDOLGETNUNIFORMUIVPROC dolGetnUniformuiv;
806 PFNDOLREADNPIXELSPROC dolReadnPixels;
807 PFNDOLGETNMAPDVPROC dolGetnMapdv;
808 PFNDOLGETNMAPFVPROC dolGetnMapfv;
809 PFNDOLGETNMAPIVPROC dolGetnMapiv;
810 PFNDOLGETNPIXELMAPFVPROC dolGetnPixelMapfv;
811 PFNDOLGETNPIXELMAPUIVPROC dolGetnPixelMapuiv;
812 PFNDOLGETNPIXELMAPUSVPROC dolGetnPixelMapusv;
813 PFNDOLGETNPOLYGONSTIPPLEPROC dolGetnPolygonStipple;
814 PFNDOLGETNCOLORTABLEPROC dolGetnColorTable;
815 PFNDOLGETNCONVOLUTIONFILTERPROC dolGetnConvolutionFilter;
816 PFNDOLGETNSEPARABLEFILTERPROC dolGetnSeparableFilter;
817 PFNDOLGETNHISTOGRAMPROC dolGetnHistogram;
818 PFNDOLGETNMINMAXPROC dolGetnMinmax;
819 PFNDOLTEXTUREBARRIERPROC dolTextureBarrier;
820 
821 // ARB_uniform_buffer_object
822 PFNDOLBINDBUFFERBASEPROC dolBindBufferBase;
823 PFNDOLBINDBUFFERRANGEPROC dolBindBufferRange;
824 PFNDOLGETACTIVEUNIFORMBLOCKNAMEPROC dolGetActiveUniformBlockName;
825 PFNDOLGETACTIVEUNIFORMBLOCKIVPROC dolGetActiveUniformBlockiv;
826 PFNDOLGETACTIVEUNIFORMNAMEPROC dolGetActiveUniformName;
827 PFNDOLGETACTIVEUNIFORMSIVPROC dolGetActiveUniformsiv;
828 PFNDOLGETINTEGERI_VPROC dolGetIntegeri_v;
829 PFNDOLGETUNIFORMBLOCKINDEXPROC dolGetUniformBlockIndex;
830 PFNDOLGETUNIFORMINDICESPROC dolGetUniformIndices;
831 PFNDOLUNIFORMBLOCKBINDINGPROC dolUniformBlockBinding;
832 
833 // ARB_sampler_objects
834 PFNDOLBINDSAMPLERPROC dolBindSampler;
835 PFNDOLDELETESAMPLERSPROC dolDeleteSamplers;
836 PFNDOLGENSAMPLERSPROC dolGenSamplers;
837 PFNDOLGETSAMPLERPARAMETERIIVPROC dolGetSamplerParameterIiv;
838 PFNDOLGETSAMPLERPARAMETERIUIVPROC dolGetSamplerParameterIuiv;
839 PFNDOLGETSAMPLERPARAMETERFVPROC dolGetSamplerParameterfv;
840 PFNDOLGETSAMPLERPARAMETERIVPROC dolGetSamplerParameteriv;
841 PFNDOLISSAMPLERPROC dolIsSampler;
842 PFNDOLSAMPLERPARAMETERIIVPROC dolSamplerParameterIiv;
843 PFNDOLSAMPLERPARAMETERIUIVPROC dolSamplerParameterIuiv;
844 PFNDOLSAMPLERPARAMETERFPROC dolSamplerParameterf;
845 PFNDOLSAMPLERPARAMETERFVPROC dolSamplerParameterfv;
846 PFNDOLSAMPLERPARAMETERIPROC dolSamplerParameteri;
847 PFNDOLSAMPLERPARAMETERIVPROC dolSamplerParameteriv;
848 
849 // ARB_map_buffer_range
850 PFNDOLFLUSHMAPPEDBUFFERRANGEPROC dolFlushMappedBufferRange;
851 PFNDOLMAPBUFFERRANGEPROC dolMapBufferRange;
852 
853 // ARB_vertex_array_object
854 PFNDOLBINDVERTEXARRAYPROC dolBindVertexArray;
855 PFNDOLDELETEVERTEXARRAYSPROC dolDeleteVertexArrays;
856 PFNDOLGENVERTEXARRAYSPROC dolGenVertexArrays;
857 PFNDOLISVERTEXARRAYPROC dolIsVertexArray;
858 
859 // ARB_framebuffer_object
860 PFNDOLBINDFRAMEBUFFERPROC dolBindFramebuffer;
861 PFNDOLBINDRENDERBUFFERPROC dolBindRenderbuffer;
862 PFNDOLBLITFRAMEBUFFERPROC dolBlitFramebuffer;
863 PFNDOLCHECKFRAMEBUFFERSTATUSPROC dolCheckFramebufferStatus;
864 PFNDOLDELETEFRAMEBUFFERSPROC dolDeleteFramebuffers;
865 PFNDOLDELETERENDERBUFFERSPROC dolDeleteRenderbuffers;
866 PFNDOLFRAMEBUFFERRENDERBUFFERPROC dolFramebufferRenderbuffer;
867 PFNDOLFRAMEBUFFERTEXTURE1DPROC dolFramebufferTexture1D;
868 PFNDOLFRAMEBUFFERTEXTURE2DPROC dolFramebufferTexture2D;
869 PFNDOLFRAMEBUFFERTEXTURE3DPROC dolFramebufferTexture3D;
870 PFNDOLFRAMEBUFFERTEXTURELAYERPROC dolFramebufferTextureLayer;
871 PFNDOLGENFRAMEBUFFERSPROC dolGenFramebuffers;
872 PFNDOLGENRENDERBUFFERSPROC dolGenRenderbuffers;
873 PFNDOLGENERATEMIPMAPPROC dolGenerateMipmap;
874 PFNDOLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC dolGetFramebufferAttachmentParameteriv;
875 PFNDOLGETRENDERBUFFERPARAMETERIVPROC dolGetRenderbufferParameteriv;
876 PFNDOLISFRAMEBUFFERPROC dolIsFramebuffer;
877 PFNDOLISRENDERBUFFERPROC dolIsRenderbuffer;
878 PFNDOLRENDERBUFFERSTORAGEPROC dolRenderbufferStorage;
879 PFNDOLRENDERBUFFERSTORAGEMULTISAMPLEPROC dolRenderbufferStorageMultisample;
880 
881 // ARB_get_program_binary
882 PFNDOLGETPROGRAMBINARYPROC dolGetProgramBinary;
883 PFNDOLPROGRAMBINARYPROC dolProgramBinary;
884 PFNDOLPROGRAMPARAMETERIPROC dolProgramParameteri;
885 
886 // ARB_sync
887 PFNDOLCLIENTWAITSYNCPROC dolClientWaitSync;
888 PFNDOLDELETESYNCPROC dolDeleteSync;
889 PFNDOLFENCESYNCPROC dolFenceSync;
890 PFNDOLGETINTEGER64VPROC dolGetInteger64v;
891 PFNDOLGETSYNCIVPROC dolGetSynciv;
892 PFNDOLISSYNCPROC dolIsSync;
893 PFNDOLWAITSYNCPROC dolWaitSync;
894 
895 // ARB_texture_multisample
896 PFNDOLTEXIMAGE2DMULTISAMPLEPROC dolTexImage2DMultisample;
897 PFNDOLTEXIMAGE3DMULTISAMPLEPROC dolTexImage3DMultisample;
898 PFNDOLGETMULTISAMPLEFVPROC dolGetMultisamplefv;
899 PFNDOLSAMPLEMASKIPROC dolSampleMaski;
900 
901 // ARB_texture_storage
902 PFNDOLTEXSTORAGE1DPROC dolTexStorage1D;
903 PFNDOLTEXSTORAGE2DPROC dolTexStorage2D;
904 PFNDOLTEXSTORAGE3DPROC dolTexStorage3D;
905 
906 // ARB_texture_storage_multisample
907 PFNDOLTEXSTORAGE2DMULTISAMPLEPROC dolTexStorage2DMultisample;
908 PFNDOLTEXSTORAGE3DMULTISAMPLEPROC dolTexStorage3DMultisample;
909 
910 // ARB_ES2_compatibility
911 PFNDOLCLEARDEPTHFPROC dolClearDepthf;
912 PFNDOLDEPTHRANGEFPROC dolDepthRangef;
913 PFNDOLGETSHADERPRECISIONFORMATPROC dolGetShaderPrecisionFormat;
914 PFNDOLRELEASESHADERCOMPILERPROC dolReleaseShaderCompiler;
915 PFNDOLSHADERBINARYPROC dolShaderBinary;
916 
917 // NV_primitive_restart
918 PFNDOLPRIMITIVERESTARTINDEXNVPROC dolPrimitiveRestartIndexNV;
919 PFNDOLPRIMITIVERESTARTNVPROC dolPrimitiveRestartNV;
920 
921 // ARB_blend_func_extended
922 PFNDOLBINDFRAGDATALOCATIONINDEXEDPROC dolBindFragDataLocationIndexed;
923 PFNDOLGETFRAGDATAINDEXPROC dolGetFragDataIndex;
924 
925 // ARB_viewport_array
926 PFNDOLDEPTHRANGEARRAYVPROC dolDepthRangeArrayv;
927 PFNDOLDEPTHRANGEINDEXEDPROC dolDepthRangeIndexed;
928 PFNDOLGETDOUBLEI_VPROC dolGetDoublei_v;
929 PFNDOLGETFLOATI_VPROC dolGetFloati_v;
930 PFNDOLSCISSORARRAYVPROC dolScissorArrayv;
931 PFNDOLSCISSORINDEXEDPROC dolScissorIndexed;
932 PFNDOLSCISSORINDEXEDVPROC dolScissorIndexedv;
933 PFNDOLVIEWPORTARRAYVPROC dolViewportArrayv;
934 PFNDOLVIEWPORTINDEXEDFPROC dolViewportIndexedf;
935 PFNDOLVIEWPORTINDEXEDFVPROC dolViewportIndexedfv;
936 
937 // ARB_draw_elements_base_vertex
938 PFNDOLDRAWELEMENTSBASEVERTEXPROC dolDrawElementsBaseVertex;
939 PFNDOLDRAWELEMENTSINSTANCEDBASEVERTEXPROC dolDrawElementsInstancedBaseVertex;
940 PFNDOLDRAWRANGEELEMENTSBASEVERTEXPROC dolDrawRangeElementsBaseVertex;
941 PFNDOLMULTIDRAWELEMENTSBASEVERTEXPROC dolMultiDrawElementsBaseVertex;
942 
943 // ARB_sample_shading
944 PFNDOLMINSAMPLESHADINGARBPROC dolMinSampleShading;
945 
946 // ARB_debug_output
947 PFNDOLDEBUGMESSAGECALLBACKARBPROC dolDebugMessageCallbackARB;
948 PFNDOLDEBUGMESSAGECONTROLARBPROC dolDebugMessageControlARB;
949 PFNDOLDEBUGMESSAGEINSERTARBPROC dolDebugMessageInsertARB;
950 PFNDOLGETDEBUGMESSAGELOGARBPROC dolGetDebugMessageLogARB;
951 
952 // KHR_debug
953 PFNDOLDEBUGMESSAGECALLBACKPROC dolDebugMessageCallback;
954 PFNDOLDEBUGMESSAGECONTROLPROC dolDebugMessageControl;
955 PFNDOLDEBUGMESSAGEINSERTPROC dolDebugMessageInsert;
956 PFNDOLGETDEBUGMESSAGELOGPROC dolGetDebugMessageLog;
957 PFNDOLGETOBJECTLABELPROC dolGetObjectLabel;
958 PFNDOLGETOBJECTPTRLABELPROC dolGetObjectPtrLabel;
959 PFNDOLOBJECTLABELPROC dolObjectLabel;
960 PFNDOLOBJECTPTRLABELPROC dolObjectPtrLabel;
961 PFNDOLPOPDEBUGGROUPPROC dolPopDebugGroup;
962 PFNDOLPUSHDEBUGGROUPPROC dolPushDebugGroup;
963 
964 // ARB_buffer_storage
965 PFNDOLBUFFERSTORAGEPROC dolBufferStorage;
966 
967 // GL_NV_occlusion_query_samples
968 PFNDOLGENOCCLUSIONQUERIESNVPROC dolGenOcclusionQueriesNV;
969 PFNDOLDELETEOCCLUSIONQUERIESNVPROC dolDeleteOcclusionQueriesNV;
970 PFNDOLISOCCLUSIONQUERYNVPROC dolIsOcclusionQueryNV;
971 PFNDOLBEGINOCCLUSIONQUERYNVPROC dolBeginOcclusionQueryNV;
972 PFNDOLENDOCCLUSIONQUERYNVPROC dolEndOcclusionQueryNV;
973 PFNDOLGETOCCLUSIONQUERYIVNVPROC dolGetOcclusionQueryivNV;
974 PFNDOLGETOCCLUSIONQUERYUIVNVPROC dolGetOcclusionQueryuivNV;
975 
976 // ARB_clip_control
977 PFNDOLCLIPCONTROLPROC dolClipControl;
978 
979 // ARB_copy_image
980 PFNDOLCOPYIMAGESUBDATAPROC dolCopyImageSubData;
981 
982 // ARB_shader_storage_buffer_object
983 PFNDOLSHADERSTORAGEBLOCKBINDINGPROC dolShaderStorageBlockBinding;
984 
985 // NV_depth_buffer_float
986 PFNDOLDEPTHRANGEDNVPROC dolDepthRangedNV;
987 PFNDOLCLEARDEPTHDNVPROC dolClearDepthdNV;
988 PFNDOLDEPTHBOUNDSDNVPROC dolDepthBoundsdNV;
989 
990 // ARB_shader_image_load_store
991 PFNDOLBINDIMAGETEXTUREPROC dolBindImageTexture;
992 PFNDOLMEMORYBARRIERPROC dolMemoryBarrier;
993 
994 // ARB_compute_shader
995 PFNDOLDISPATCHCOMPUTEPROC dolDispatchCompute;
996 PFNDOLDISPATCHCOMPUTEINDIRECTPROC dolDispatchComputeIndirect;
997 
998 // Creates a GLFunc object that requires a feature
999 #define GLFUNC_REQUIRES(x, y)                                                                      \
1000   {                                                                                                \
1001     (void**)&x, #x, y                                                                              \
1002   }
1003 // Creates a GLFunc object with a different function suffix
1004 // For when we want to use the same function pointer, but different function name
1005 #define GLFUNC_SUFFIX(x, y, z)                                                                     \
1006   {                                                                                                \
1007     (void**)&x, #x #y, z                                                                           \
1008   }
1009 // Creates a GLFunc object that should always be able to get grabbed
1010 // Used for Desktop OpenGL functions that should /always/ be provided.
1011 // aka GL 1.1/1.2/1.3/1.4
1012 #define GLFUNC_ALWAYS_REQUIRED(x)                                                                  \
1013   {                                                                                                \
1014     (void**)&x, #x, "VERSION_GL"                                                                   \
1015   }
1016 // Creates a GLFunc object that should be able to get grabbed
1017 // on both GL and ES
1018 #define GL_ES_FUNC_ALWAYS_REQUIRED(x)                                                              \
1019   {                                                                                                \
1020     (void**)&x, #x, "VERSION_GL |VERSION_GLES_2"                                                   \
1021   }
1022 // Creates a GLFunc object that should be able to get grabbed
1023 // on both GL and ES 3.0
1024 #define GL_ES3_FUNC_ALWAYS_REQUIRED(x)                                                             \
1025   {                                                                                                \
1026     (void**)&x, #x, "VERSION_GL |VERSION_GLES_3"                                                   \
1027   }
1028 // Creates a GLFunc object that should be able to get grabbed
1029 // on both GL and ES 3.2
1030 #define GL_ES32_FUNC_ALWAYS_REQUIRED(x)                                                            \
1031   {                                                                                                \
1032     (void**)&x, #x, "VERSION_GL |VERSION_GLES_3_2"                                                 \
1033   }
1034 
1035 struct GLFunc
1036 {
1037   void** function_ptr;
1038   const std::string function_name;
1039   const std::string requirements;
1040 };
1041 
1042 const GLFunc gl_function_array[] = {
1043     // gl_1_1
1044     GLFUNC_ALWAYS_REQUIRED(glClearIndex),
1045     GLFUNC_ALWAYS_REQUIRED(glIndexMask),
1046     GLFUNC_ALWAYS_REQUIRED(glAlphaFunc),
1047     GLFUNC_ALWAYS_REQUIRED(glLogicOp),
1048     GLFUNC_ALWAYS_REQUIRED(glPointSize),
1049     GLFUNC_ALWAYS_REQUIRED(glLineStipple),
1050     GLFUNC_ALWAYS_REQUIRED(glPolygonMode),
1051     GLFUNC_ALWAYS_REQUIRED(glPolygonStipple),
1052     GLFUNC_ALWAYS_REQUIRED(glGetPolygonStipple),
1053     GLFUNC_ALWAYS_REQUIRED(glEdgeFlag),
1054     GLFUNC_ALWAYS_REQUIRED(glEdgeFlagv),
1055     GLFUNC_ALWAYS_REQUIRED(glClipPlane),
1056     GLFUNC_ALWAYS_REQUIRED(glGetClipPlane),
1057     GLFUNC_ALWAYS_REQUIRED(glDrawBuffer),
1058     GLFUNC_ALWAYS_REQUIRED(glEnableClientState),
1059     GLFUNC_ALWAYS_REQUIRED(glDisableClientState),
1060     GLFUNC_ALWAYS_REQUIRED(glGetDoublev),
1061     GLFUNC_ALWAYS_REQUIRED(glPushAttrib),
1062     GLFUNC_ALWAYS_REQUIRED(glPopAttrib),
1063     GLFUNC_ALWAYS_REQUIRED(glPushClientAttrib),
1064     GLFUNC_ALWAYS_REQUIRED(glPopClientAttrib),
1065     GLFUNC_ALWAYS_REQUIRED(glRenderMode),
1066     GLFUNC_ALWAYS_REQUIRED(glClearDepth),
1067     GLFUNC_ALWAYS_REQUIRED(glDepthRange),
1068     GLFUNC_ALWAYS_REQUIRED(glClearAccum),
1069     GLFUNC_ALWAYS_REQUIRED(glAccum),
1070     GLFUNC_ALWAYS_REQUIRED(glMatrixMode),
1071     GLFUNC_ALWAYS_REQUIRED(glOrtho),
1072     GLFUNC_ALWAYS_REQUIRED(glFrustum),
1073     GLFUNC_ALWAYS_REQUIRED(glPushMatrix),
1074     GLFUNC_ALWAYS_REQUIRED(glPopMatrix),
1075     GLFUNC_ALWAYS_REQUIRED(glLoadIdentity),
1076     GLFUNC_ALWAYS_REQUIRED(glLoadMatrixd),
1077     GLFUNC_ALWAYS_REQUIRED(glLoadMatrixf),
1078     GLFUNC_ALWAYS_REQUIRED(glMultMatrixd),
1079     GLFUNC_ALWAYS_REQUIRED(glMultMatrixf),
1080     GLFUNC_ALWAYS_REQUIRED(glRotated),
1081     GLFUNC_ALWAYS_REQUIRED(glRotatef),
1082     GLFUNC_ALWAYS_REQUIRED(glScaled),
1083     GLFUNC_ALWAYS_REQUIRED(glScalef),
1084     GLFUNC_ALWAYS_REQUIRED(glTranslated),
1085     GLFUNC_ALWAYS_REQUIRED(glTranslatef),
1086     GLFUNC_ALWAYS_REQUIRED(glIsList),
1087     GLFUNC_ALWAYS_REQUIRED(glDeleteLists),
1088     GLFUNC_ALWAYS_REQUIRED(glGenLists),
1089     GLFUNC_ALWAYS_REQUIRED(glNewList),
1090     GLFUNC_ALWAYS_REQUIRED(glEndList),
1091     GLFUNC_ALWAYS_REQUIRED(glCallList),
1092     GLFUNC_ALWAYS_REQUIRED(glCallLists),
1093     GLFUNC_ALWAYS_REQUIRED(glListBase),
1094     GLFUNC_ALWAYS_REQUIRED(glBegin),
1095     GLFUNC_ALWAYS_REQUIRED(glEnd),
1096     GLFUNC_ALWAYS_REQUIRED(glVertex2d),
1097     GLFUNC_ALWAYS_REQUIRED(glVertex2f),
1098     GLFUNC_ALWAYS_REQUIRED(glVertex2i),
1099     GLFUNC_ALWAYS_REQUIRED(glVertex2s),
1100     GLFUNC_ALWAYS_REQUIRED(glVertex3d),
1101     GLFUNC_ALWAYS_REQUIRED(glVertex3f),
1102     GLFUNC_ALWAYS_REQUIRED(glVertex3i),
1103     GLFUNC_ALWAYS_REQUIRED(glVertex3s),
1104     GLFUNC_ALWAYS_REQUIRED(glVertex4d),
1105     GLFUNC_ALWAYS_REQUIRED(glVertex4f),
1106     GLFUNC_ALWAYS_REQUIRED(glVertex4i),
1107     GLFUNC_ALWAYS_REQUIRED(glVertex4s),
1108     GLFUNC_ALWAYS_REQUIRED(glVertex2dv),
1109     GLFUNC_ALWAYS_REQUIRED(glVertex2fv),
1110     GLFUNC_ALWAYS_REQUIRED(glVertex2iv),
1111     GLFUNC_ALWAYS_REQUIRED(glVertex2sv),
1112     GLFUNC_ALWAYS_REQUIRED(glVertex3dv),
1113     GLFUNC_ALWAYS_REQUIRED(glVertex3fv),
1114     GLFUNC_ALWAYS_REQUIRED(glVertex3iv),
1115     GLFUNC_ALWAYS_REQUIRED(glVertex3sv),
1116     GLFUNC_ALWAYS_REQUIRED(glVertex4dv),
1117     GLFUNC_ALWAYS_REQUIRED(glVertex4fv),
1118     GLFUNC_ALWAYS_REQUIRED(glVertex4iv),
1119     GLFUNC_ALWAYS_REQUIRED(glVertex4sv),
1120     GLFUNC_ALWAYS_REQUIRED(glNormal3b),
1121     GLFUNC_ALWAYS_REQUIRED(glNormal3d),
1122     GLFUNC_ALWAYS_REQUIRED(glNormal3f),
1123     GLFUNC_ALWAYS_REQUIRED(glNormal3i),
1124     GLFUNC_ALWAYS_REQUIRED(glNormal3s),
1125     GLFUNC_ALWAYS_REQUIRED(glNormal3bv),
1126     GLFUNC_ALWAYS_REQUIRED(glNormal3dv),
1127     GLFUNC_ALWAYS_REQUIRED(glNormal3fv),
1128     GLFUNC_ALWAYS_REQUIRED(glNormal3iv),
1129     GLFUNC_ALWAYS_REQUIRED(glNormal3sv),
1130     GLFUNC_ALWAYS_REQUIRED(glIndexd),
1131     GLFUNC_ALWAYS_REQUIRED(glIndexf),
1132     GLFUNC_ALWAYS_REQUIRED(glIndexi),
1133     GLFUNC_ALWAYS_REQUIRED(glIndexs),
1134     GLFUNC_ALWAYS_REQUIRED(glIndexub),
1135     GLFUNC_ALWAYS_REQUIRED(glIndexdv),
1136     GLFUNC_ALWAYS_REQUIRED(glIndexfv),
1137     GLFUNC_ALWAYS_REQUIRED(glIndexiv),
1138     GLFUNC_ALWAYS_REQUIRED(glIndexsv),
1139     GLFUNC_ALWAYS_REQUIRED(glIndexubv),
1140     GLFUNC_ALWAYS_REQUIRED(glColor3b),
1141     GLFUNC_ALWAYS_REQUIRED(glColor3d),
1142     GLFUNC_ALWAYS_REQUIRED(glColor3f),
1143     GLFUNC_ALWAYS_REQUIRED(glColor3i),
1144     GLFUNC_ALWAYS_REQUIRED(glColor3s),
1145     GLFUNC_ALWAYS_REQUIRED(glColor3ub),
1146     GLFUNC_ALWAYS_REQUIRED(glColor3ui),
1147     GLFUNC_ALWAYS_REQUIRED(glColor3us),
1148     GLFUNC_ALWAYS_REQUIRED(glColor4b),
1149     GLFUNC_ALWAYS_REQUIRED(glColor4d),
1150     GLFUNC_ALWAYS_REQUIRED(glColor4f),
1151     GLFUNC_ALWAYS_REQUIRED(glColor4i),
1152     GLFUNC_ALWAYS_REQUIRED(glColor4s),
1153     GLFUNC_ALWAYS_REQUIRED(glColor4ub),
1154     GLFUNC_ALWAYS_REQUIRED(glColor4ui),
1155     GLFUNC_ALWAYS_REQUIRED(glColor4us),
1156     GLFUNC_ALWAYS_REQUIRED(glColor3bv),
1157     GLFUNC_ALWAYS_REQUIRED(glColor3dv),
1158     GLFUNC_ALWAYS_REQUIRED(glColor3fv),
1159     GLFUNC_ALWAYS_REQUIRED(glColor3iv),
1160     GLFUNC_ALWAYS_REQUIRED(glColor3sv),
1161     GLFUNC_ALWAYS_REQUIRED(glColor3ubv),
1162     GLFUNC_ALWAYS_REQUIRED(glColor3uiv),
1163     GLFUNC_ALWAYS_REQUIRED(glColor3usv),
1164     GLFUNC_ALWAYS_REQUIRED(glColor4bv),
1165     GLFUNC_ALWAYS_REQUIRED(glColor4dv),
1166     GLFUNC_ALWAYS_REQUIRED(glColor4fv),
1167     GLFUNC_ALWAYS_REQUIRED(glColor4iv),
1168     GLFUNC_ALWAYS_REQUIRED(glColor4sv),
1169     GLFUNC_ALWAYS_REQUIRED(glColor4ubv),
1170     GLFUNC_ALWAYS_REQUIRED(glColor4uiv),
1171     GLFUNC_ALWAYS_REQUIRED(glColor4usv),
1172     GLFUNC_ALWAYS_REQUIRED(glTexCoord1d),
1173     GLFUNC_ALWAYS_REQUIRED(glTexCoord1f),
1174     GLFUNC_ALWAYS_REQUIRED(glTexCoord1i),
1175     GLFUNC_ALWAYS_REQUIRED(glTexCoord1s),
1176     GLFUNC_ALWAYS_REQUIRED(glTexCoord2d),
1177     GLFUNC_ALWAYS_REQUIRED(glTexCoord2f),
1178     GLFUNC_ALWAYS_REQUIRED(glTexCoord2i),
1179     GLFUNC_ALWAYS_REQUIRED(glTexCoord2s),
1180     GLFUNC_ALWAYS_REQUIRED(glTexCoord3d),
1181     GLFUNC_ALWAYS_REQUIRED(glTexCoord3f),
1182     GLFUNC_ALWAYS_REQUIRED(glTexCoord3i),
1183     GLFUNC_ALWAYS_REQUIRED(glTexCoord3s),
1184     GLFUNC_ALWAYS_REQUIRED(glTexCoord4d),
1185     GLFUNC_ALWAYS_REQUIRED(glTexCoord4f),
1186     GLFUNC_ALWAYS_REQUIRED(glTexCoord4i),
1187     GLFUNC_ALWAYS_REQUIRED(glTexCoord4s),
1188     GLFUNC_ALWAYS_REQUIRED(glTexCoord1dv),
1189     GLFUNC_ALWAYS_REQUIRED(glTexCoord1fv),
1190     GLFUNC_ALWAYS_REQUIRED(glTexCoord1iv),
1191     GLFUNC_ALWAYS_REQUIRED(glTexCoord1sv),
1192     GLFUNC_ALWAYS_REQUIRED(glTexCoord2dv),
1193     GLFUNC_ALWAYS_REQUIRED(glTexCoord2fv),
1194     GLFUNC_ALWAYS_REQUIRED(glTexCoord2iv),
1195     GLFUNC_ALWAYS_REQUIRED(glTexCoord2sv),
1196     GLFUNC_ALWAYS_REQUIRED(glTexCoord3dv),
1197     GLFUNC_ALWAYS_REQUIRED(glTexCoord3fv),
1198     GLFUNC_ALWAYS_REQUIRED(glTexCoord3iv),
1199     GLFUNC_ALWAYS_REQUIRED(glTexCoord3sv),
1200     GLFUNC_ALWAYS_REQUIRED(glTexCoord4dv),
1201     GLFUNC_ALWAYS_REQUIRED(glTexCoord4fv),
1202     GLFUNC_ALWAYS_REQUIRED(glTexCoord4iv),
1203     GLFUNC_ALWAYS_REQUIRED(glTexCoord4sv),
1204     GLFUNC_ALWAYS_REQUIRED(glRasterPos2d),
1205     GLFUNC_ALWAYS_REQUIRED(glRasterPos2f),
1206     GLFUNC_ALWAYS_REQUIRED(glRasterPos2i),
1207     GLFUNC_ALWAYS_REQUIRED(glRasterPos2s),
1208     GLFUNC_ALWAYS_REQUIRED(glRasterPos3d),
1209     GLFUNC_ALWAYS_REQUIRED(glRasterPos3f),
1210     GLFUNC_ALWAYS_REQUIRED(glRasterPos3i),
1211     GLFUNC_ALWAYS_REQUIRED(glRasterPos3s),
1212     GLFUNC_ALWAYS_REQUIRED(glRasterPos4d),
1213     GLFUNC_ALWAYS_REQUIRED(glRasterPos4f),
1214     GLFUNC_ALWAYS_REQUIRED(glRasterPos4i),
1215     GLFUNC_ALWAYS_REQUIRED(glRasterPos4s),
1216     GLFUNC_ALWAYS_REQUIRED(glRasterPos2dv),
1217     GLFUNC_ALWAYS_REQUIRED(glRasterPos2fv),
1218     GLFUNC_ALWAYS_REQUIRED(glRasterPos2iv),
1219     GLFUNC_ALWAYS_REQUIRED(glRasterPos2sv),
1220     GLFUNC_ALWAYS_REQUIRED(glRasterPos3dv),
1221     GLFUNC_ALWAYS_REQUIRED(glRasterPos3fv),
1222     GLFUNC_ALWAYS_REQUIRED(glRasterPos3iv),
1223     GLFUNC_ALWAYS_REQUIRED(glRasterPos3sv),
1224     GLFUNC_ALWAYS_REQUIRED(glRasterPos4dv),
1225     GLFUNC_ALWAYS_REQUIRED(glRasterPos4fv),
1226     GLFUNC_ALWAYS_REQUIRED(glRasterPos4iv),
1227     GLFUNC_ALWAYS_REQUIRED(glRasterPos4sv),
1228     GLFUNC_ALWAYS_REQUIRED(glRectd),
1229     GLFUNC_ALWAYS_REQUIRED(glRectf),
1230     GLFUNC_ALWAYS_REQUIRED(glRecti),
1231     GLFUNC_ALWAYS_REQUIRED(glRects),
1232     GLFUNC_ALWAYS_REQUIRED(glRectdv),
1233     GLFUNC_ALWAYS_REQUIRED(glRectfv),
1234     GLFUNC_ALWAYS_REQUIRED(glRectiv),
1235     GLFUNC_ALWAYS_REQUIRED(glRectsv),
1236     GLFUNC_ALWAYS_REQUIRED(glVertexPointer),
1237     GLFUNC_ALWAYS_REQUIRED(glNormalPointer),
1238     GLFUNC_ALWAYS_REQUIRED(glColorPointer),
1239     GLFUNC_ALWAYS_REQUIRED(glIndexPointer),
1240     GLFUNC_ALWAYS_REQUIRED(glTexCoordPointer),
1241     GLFUNC_ALWAYS_REQUIRED(glEdgeFlagPointer),
1242     GLFUNC_ALWAYS_REQUIRED(glArrayElement),
1243     GLFUNC_ALWAYS_REQUIRED(glInterleavedArrays),
1244     GLFUNC_ALWAYS_REQUIRED(glShadeModel),
1245     GLFUNC_ALWAYS_REQUIRED(glLightf),
1246     GLFUNC_ALWAYS_REQUIRED(glLighti),
1247     GLFUNC_ALWAYS_REQUIRED(glLightfv),
1248     GLFUNC_ALWAYS_REQUIRED(glLightiv),
1249     GLFUNC_ALWAYS_REQUIRED(glGetLightfv),
1250     GLFUNC_ALWAYS_REQUIRED(glGetLightiv),
1251     GLFUNC_ALWAYS_REQUIRED(glLightModelf),
1252     GLFUNC_ALWAYS_REQUIRED(glLightModeli),
1253     GLFUNC_ALWAYS_REQUIRED(glLightModelfv),
1254     GLFUNC_ALWAYS_REQUIRED(glLightModeliv),
1255     GLFUNC_ALWAYS_REQUIRED(glMaterialf),
1256     GLFUNC_ALWAYS_REQUIRED(glMateriali),
1257     GLFUNC_ALWAYS_REQUIRED(glMaterialfv),
1258     GLFUNC_ALWAYS_REQUIRED(glMaterialiv),
1259     GLFUNC_ALWAYS_REQUIRED(glGetMaterialfv),
1260     GLFUNC_ALWAYS_REQUIRED(glGetMaterialiv),
1261     GLFUNC_ALWAYS_REQUIRED(glColorMaterial),
1262     GLFUNC_ALWAYS_REQUIRED(glPixelZoom),
1263     GLFUNC_ALWAYS_REQUIRED(glPixelStoref),
1264     GLFUNC_ALWAYS_REQUIRED(glPixelTransferf),
1265     GLFUNC_ALWAYS_REQUIRED(glPixelTransferi),
1266     GLFUNC_ALWAYS_REQUIRED(glPixelMapfv),
1267     GLFUNC_ALWAYS_REQUIRED(glPixelMapuiv),
1268     GLFUNC_ALWAYS_REQUIRED(glPixelMapusv),
1269     GLFUNC_ALWAYS_REQUIRED(glGetPixelMapfv),
1270     GLFUNC_ALWAYS_REQUIRED(glGetPixelMapuiv),
1271     GLFUNC_ALWAYS_REQUIRED(glGetPixelMapusv),
1272     GLFUNC_ALWAYS_REQUIRED(glBitmap),
1273     GLFUNC_ALWAYS_REQUIRED(glDrawPixels),
1274     GLFUNC_ALWAYS_REQUIRED(glCopyPixels),
1275     GLFUNC_ALWAYS_REQUIRED(glTexGend),
1276     GLFUNC_ALWAYS_REQUIRED(glTexGenf),
1277     GLFUNC_ALWAYS_REQUIRED(glTexGeni),
1278     GLFUNC_ALWAYS_REQUIRED(glTexGendv),
1279     GLFUNC_ALWAYS_REQUIRED(glTexGenfv),
1280     GLFUNC_ALWAYS_REQUIRED(glTexGeniv),
1281     GLFUNC_ALWAYS_REQUIRED(glGetTexGendv),
1282     GLFUNC_ALWAYS_REQUIRED(glGetTexGenfv),
1283     GLFUNC_ALWAYS_REQUIRED(glGetTexGeniv),
1284     GLFUNC_ALWAYS_REQUIRED(glTexEnvf),
1285     GLFUNC_ALWAYS_REQUIRED(glTexEnvi),
1286     GLFUNC_ALWAYS_REQUIRED(glTexEnvfv),
1287     GLFUNC_ALWAYS_REQUIRED(glTexEnviv),
1288     GLFUNC_ALWAYS_REQUIRED(glGetTexEnvfv),
1289     GLFUNC_ALWAYS_REQUIRED(glGetTexEnviv),
1290     GLFUNC_ALWAYS_REQUIRED(glGetTexLevelParameterfv),
1291     GLFUNC_ALWAYS_REQUIRED(glGetTexLevelParameteriv),
1292     GLFUNC_ALWAYS_REQUIRED(glTexImage1D),
1293     GLFUNC_ALWAYS_REQUIRED(glGetTexImage),
1294     GLFUNC_ALWAYS_REQUIRED(glPrioritizeTextures),
1295     GLFUNC_ALWAYS_REQUIRED(glAreTexturesResident),
1296     GLFUNC_ALWAYS_REQUIRED(glTexSubImage1D),
1297     GLFUNC_ALWAYS_REQUIRED(glCopyTexImage1D),
1298     GLFUNC_ALWAYS_REQUIRED(glCopyTexSubImage1D),
1299     GLFUNC_ALWAYS_REQUIRED(glMap1d),
1300     GLFUNC_ALWAYS_REQUIRED(glMap1f),
1301     GLFUNC_ALWAYS_REQUIRED(glMap2d),
1302     GLFUNC_ALWAYS_REQUIRED(glMap2f),
1303     GLFUNC_ALWAYS_REQUIRED(glGetMapdv),
1304     GLFUNC_ALWAYS_REQUIRED(glGetMapfv),
1305     GLFUNC_ALWAYS_REQUIRED(glGetMapiv),
1306     GLFUNC_ALWAYS_REQUIRED(glEvalCoord1d),
1307     GLFUNC_ALWAYS_REQUIRED(glEvalCoord1f),
1308     GLFUNC_ALWAYS_REQUIRED(glEvalCoord1dv),
1309     GLFUNC_ALWAYS_REQUIRED(glEvalCoord1fv),
1310     GLFUNC_ALWAYS_REQUIRED(glEvalCoord2d),
1311     GLFUNC_ALWAYS_REQUIRED(glEvalCoord2f),
1312     GLFUNC_ALWAYS_REQUIRED(glEvalCoord2dv),
1313     GLFUNC_ALWAYS_REQUIRED(glEvalCoord2fv),
1314     GLFUNC_ALWAYS_REQUIRED(glMapGrid1d),
1315     GLFUNC_ALWAYS_REQUIRED(glMapGrid1f),
1316     GLFUNC_ALWAYS_REQUIRED(glMapGrid2d),
1317     GLFUNC_ALWAYS_REQUIRED(glMapGrid2f),
1318     GLFUNC_ALWAYS_REQUIRED(glEvalPoint1),
1319     GLFUNC_ALWAYS_REQUIRED(glEvalPoint2),
1320     GLFUNC_ALWAYS_REQUIRED(glEvalMesh1),
1321     GLFUNC_ALWAYS_REQUIRED(glEvalMesh2),
1322     GLFUNC_ALWAYS_REQUIRED(glFogf),
1323     GLFUNC_ALWAYS_REQUIRED(glFogi),
1324     GLFUNC_ALWAYS_REQUIRED(glFogfv),
1325     GLFUNC_ALWAYS_REQUIRED(glFogiv),
1326     GLFUNC_ALWAYS_REQUIRED(glFeedbackBuffer),
1327     GLFUNC_ALWAYS_REQUIRED(glPassThrough),
1328     GLFUNC_ALWAYS_REQUIRED(glSelectBuffer),
1329     GLFUNC_ALWAYS_REQUIRED(glInitNames),
1330     GLFUNC_ALWAYS_REQUIRED(glLoadName),
1331     GLFUNC_ALWAYS_REQUIRED(glPushName),
1332     GLFUNC_ALWAYS_REQUIRED(glPopName),
1333     GL_ES_FUNC_ALWAYS_REQUIRED(glTexImage2D),
1334     GL_ES_FUNC_ALWAYS_REQUIRED(glClearColor),
1335     GL_ES_FUNC_ALWAYS_REQUIRED(glClear),
1336     GL_ES_FUNC_ALWAYS_REQUIRED(glColorMask),
1337     GL_ES_FUNC_ALWAYS_REQUIRED(glBlendFunc),
1338     GL_ES_FUNC_ALWAYS_REQUIRED(glCullFace),
1339     GL_ES_FUNC_ALWAYS_REQUIRED(glFrontFace),
1340     GL_ES_FUNC_ALWAYS_REQUIRED(glLineWidth),
1341     GL_ES_FUNC_ALWAYS_REQUIRED(glPolygonOffset),
1342     GL_ES_FUNC_ALWAYS_REQUIRED(glScissor),
1343     GL_ES_FUNC_ALWAYS_REQUIRED(glEnable),
1344     GL_ES_FUNC_ALWAYS_REQUIRED(glDisable),
1345     GL_ES_FUNC_ALWAYS_REQUIRED(glIsEnabled),
1346     GL_ES_FUNC_ALWAYS_REQUIRED(glGetBooleanv),
1347     GL_ES_FUNC_ALWAYS_REQUIRED(glGetFloatv),
1348     GL_ES_FUNC_ALWAYS_REQUIRED(glFinish),
1349     GL_ES_FUNC_ALWAYS_REQUIRED(glFlush),
1350     GL_ES_FUNC_ALWAYS_REQUIRED(glHint),
1351     GL_ES_FUNC_ALWAYS_REQUIRED(glDepthFunc),
1352     GL_ES_FUNC_ALWAYS_REQUIRED(glDepthMask),
1353     GL_ES_FUNC_ALWAYS_REQUIRED(glViewport),
1354     GL_ES_FUNC_ALWAYS_REQUIRED(glDrawArrays),
1355     GL_ES_FUNC_ALWAYS_REQUIRED(glDrawElements),
1356     GL_ES_FUNC_ALWAYS_REQUIRED(glPixelStorei),
1357     GL_ES_FUNC_ALWAYS_REQUIRED(glReadPixels),
1358     GL_ES_FUNC_ALWAYS_REQUIRED(glStencilFunc),
1359     GL_ES_FUNC_ALWAYS_REQUIRED(glStencilMask),
1360     GL_ES_FUNC_ALWAYS_REQUIRED(glStencilOp),
1361     GL_ES_FUNC_ALWAYS_REQUIRED(glClearStencil),
1362     GL_ES_FUNC_ALWAYS_REQUIRED(glTexParameterf),
1363     GL_ES_FUNC_ALWAYS_REQUIRED(glTexParameteri),
1364     GL_ES_FUNC_ALWAYS_REQUIRED(glTexParameterfv),
1365     GL_ES_FUNC_ALWAYS_REQUIRED(glTexParameteriv),
1366     GL_ES_FUNC_ALWAYS_REQUIRED(glGetTexParameterfv),
1367     GL_ES_FUNC_ALWAYS_REQUIRED(glGetTexParameteriv),
1368     GL_ES_FUNC_ALWAYS_REQUIRED(glGenTextures),
1369     GL_ES_FUNC_ALWAYS_REQUIRED(glDeleteTextures),
1370     GL_ES_FUNC_ALWAYS_REQUIRED(glBindTexture),
1371     GL_ES_FUNC_ALWAYS_REQUIRED(glIsTexture),
1372     GL_ES_FUNC_ALWAYS_REQUIRED(glTexSubImage2D),
1373     GL_ES_FUNC_ALWAYS_REQUIRED(glCopyTexImage2D),
1374     GL_ES_FUNC_ALWAYS_REQUIRED(glCopyTexSubImage2D),
1375     GL_ES3_FUNC_ALWAYS_REQUIRED(glReadBuffer),
1376     GL_ES32_FUNC_ALWAYS_REQUIRED(glGetPointerv),
1377 
1378     // gl_1_2
1379     GL_ES3_FUNC_ALWAYS_REQUIRED(glCopyTexSubImage3D),
1380     GL_ES3_FUNC_ALWAYS_REQUIRED(glDrawRangeElements),
1381     GL_ES3_FUNC_ALWAYS_REQUIRED(glTexImage3D),
1382     GL_ES3_FUNC_ALWAYS_REQUIRED(glTexSubImage3D),
1383 
1384     // gl_1_3
1385     GLFUNC_ALWAYS_REQUIRED(glClientActiveTexture),
1386     GLFUNC_ALWAYS_REQUIRED(glCompressedTexImage1D),
1387     GLFUNC_ALWAYS_REQUIRED(glCompressedTexSubImage1D),
1388     GLFUNC_ALWAYS_REQUIRED(glGetCompressedTexImage),
1389     GLFUNC_ALWAYS_REQUIRED(glLoadTransposeMatrixd),
1390     GLFUNC_ALWAYS_REQUIRED(glLoadTransposeMatrixf),
1391     GLFUNC_ALWAYS_REQUIRED(glMultTransposeMatrixd),
1392     GLFUNC_ALWAYS_REQUIRED(glMultTransposeMatrixf),
1393     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord1d),
1394     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord1dv),
1395     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord1f),
1396     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord1fv),
1397     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord1i),
1398     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord1iv),
1399     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord1s),
1400     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord1sv),
1401     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord2d),
1402     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord2dv),
1403     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord2f),
1404     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord2fv),
1405     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord2i),
1406     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord2iv),
1407     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord2s),
1408     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord2sv),
1409     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord3d),
1410     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord3dv),
1411     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord3f),
1412     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord3fv),
1413     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord3i),
1414     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord3iv),
1415     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord3s),
1416     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord3sv),
1417     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord4d),
1418     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord4dv),
1419     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord4f),
1420     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord4fv),
1421     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord4i),
1422     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord4iv),
1423     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord4s),
1424     GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord4sv),
1425     GL_ES_FUNC_ALWAYS_REQUIRED(glSampleCoverage),
1426     GL_ES_FUNC_ALWAYS_REQUIRED(glActiveTexture),
1427     GL_ES_FUNC_ALWAYS_REQUIRED(glCompressedTexImage2D),
1428     GL_ES_FUNC_ALWAYS_REQUIRED(glCompressedTexSubImage2D),
1429     GL_ES3_FUNC_ALWAYS_REQUIRED(glCompressedTexImage3D),
1430     GL_ES3_FUNC_ALWAYS_REQUIRED(glCompressedTexSubImage3D),
1431 
1432     // gl_1_4
1433     GLFUNC_ALWAYS_REQUIRED(glFogCoordPointer),
1434     GLFUNC_ALWAYS_REQUIRED(glFogCoordd),
1435     GLFUNC_ALWAYS_REQUIRED(glFogCoorddv),
1436     GLFUNC_ALWAYS_REQUIRED(glFogCoordf),
1437     GLFUNC_ALWAYS_REQUIRED(glFogCoordfv),
1438     GLFUNC_ALWAYS_REQUIRED(glMultiDrawArrays),
1439     GLFUNC_ALWAYS_REQUIRED(glMultiDrawElements),
1440     GLFUNC_ALWAYS_REQUIRED(glPointParameterf),
1441     GLFUNC_ALWAYS_REQUIRED(glPointParameterfv),
1442     GLFUNC_ALWAYS_REQUIRED(glPointParameteri),
1443     GLFUNC_ALWAYS_REQUIRED(glPointParameteriv),
1444     GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3b),
1445     GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3bv),
1446     GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3d),
1447     GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3dv),
1448     GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3f),
1449     GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3fv),
1450     GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3i),
1451     GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3iv),
1452     GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3s),
1453     GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3sv),
1454     GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3ub),
1455     GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3ubv),
1456     GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3ui),
1457     GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3uiv),
1458     GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3us),
1459     GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3usv),
1460     GLFUNC_ALWAYS_REQUIRED(glSecondaryColorPointer),
1461     GLFUNC_ALWAYS_REQUIRED(glWindowPos2d),
1462     GLFUNC_ALWAYS_REQUIRED(glWindowPos2dv),
1463     GLFUNC_ALWAYS_REQUIRED(glWindowPos2f),
1464     GLFUNC_ALWAYS_REQUIRED(glWindowPos2fv),
1465     GLFUNC_ALWAYS_REQUIRED(glWindowPos2i),
1466     GLFUNC_ALWAYS_REQUIRED(glWindowPos2iv),
1467     GLFUNC_ALWAYS_REQUIRED(glWindowPos2s),
1468     GLFUNC_ALWAYS_REQUIRED(glWindowPos2sv),
1469     GLFUNC_ALWAYS_REQUIRED(glWindowPos3d),
1470     GLFUNC_ALWAYS_REQUIRED(glWindowPos3dv),
1471     GLFUNC_ALWAYS_REQUIRED(glWindowPos3f),
1472     GLFUNC_ALWAYS_REQUIRED(glWindowPos3fv),
1473     GLFUNC_ALWAYS_REQUIRED(glWindowPos3i),
1474     GLFUNC_ALWAYS_REQUIRED(glWindowPos3iv),
1475     GLFUNC_ALWAYS_REQUIRED(glWindowPos3s),
1476     GLFUNC_ALWAYS_REQUIRED(glWindowPos3sv),
1477     GL_ES_FUNC_ALWAYS_REQUIRED(glBlendColor),
1478     GL_ES_FUNC_ALWAYS_REQUIRED(glBlendEquation),
1479     GL_ES_FUNC_ALWAYS_REQUIRED(glBlendFuncSeparate),
1480 
1481     // gl_1_5
1482     GLFUNC_ALWAYS_REQUIRED(glGetBufferSubData),
1483     GLFUNC_ALWAYS_REQUIRED(glGetQueryObjectiv),
1484     GLFUNC_ALWAYS_REQUIRED(glMapBuffer),
1485     GL_ES_FUNC_ALWAYS_REQUIRED(glBindBuffer),
1486     GL_ES_FUNC_ALWAYS_REQUIRED(glBufferData),
1487     GL_ES_FUNC_ALWAYS_REQUIRED(glBufferSubData),
1488     GL_ES_FUNC_ALWAYS_REQUIRED(glDeleteBuffers),
1489     GL_ES_FUNC_ALWAYS_REQUIRED(glGenBuffers),
1490     GL_ES_FUNC_ALWAYS_REQUIRED(glGetBufferParameteriv),
1491     GL_ES_FUNC_ALWAYS_REQUIRED(glIsBuffer),
1492     GL_ES3_FUNC_ALWAYS_REQUIRED(glBeginQuery),
1493     GL_ES3_FUNC_ALWAYS_REQUIRED(glDeleteQueries),
1494     GL_ES3_FUNC_ALWAYS_REQUIRED(glEndQuery),
1495     GL_ES3_FUNC_ALWAYS_REQUIRED(glGenQueries),
1496     GL_ES3_FUNC_ALWAYS_REQUIRED(glIsQuery),
1497     GL_ES3_FUNC_ALWAYS_REQUIRED(glGetQueryiv),
1498     GL_ES3_FUNC_ALWAYS_REQUIRED(glGetQueryObjectuiv),
1499     GL_ES3_FUNC_ALWAYS_REQUIRED(glGetBufferPointerv),
1500     GL_ES3_FUNC_ALWAYS_REQUIRED(glUnmapBuffer),
1501 
1502     // gl_2_0
1503     GLFUNC_ALWAYS_REQUIRED(glGetVertexAttribdv),
1504     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib1d),
1505     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib1dv),
1506     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib1s),
1507     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib1sv),
1508     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib2d),
1509     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib2dv),
1510     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib2s),
1511     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib2sv),
1512     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib3d),
1513     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib3dv),
1514     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib3s),
1515     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib3sv),
1516     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4Nbv),
1517     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4Niv),
1518     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4Nsv),
1519     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4Nub),
1520     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4Nubv),
1521     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4Nuiv),
1522     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4Nusv),
1523     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4bv),
1524     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4d),
1525     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4dv),
1526     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4iv),
1527     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4s),
1528     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4sv),
1529     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4ubv),
1530     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4uiv),
1531     GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4usv),
1532     GL_ES_FUNC_ALWAYS_REQUIRED(glAttachShader),
1533     GL_ES_FUNC_ALWAYS_REQUIRED(glBindAttribLocation),
1534     GL_ES_FUNC_ALWAYS_REQUIRED(glBlendEquationSeparate),
1535     GL_ES_FUNC_ALWAYS_REQUIRED(glCompileShader),
1536     GL_ES_FUNC_ALWAYS_REQUIRED(glCreateProgram),
1537     GL_ES_FUNC_ALWAYS_REQUIRED(glCreateShader),
1538     GL_ES_FUNC_ALWAYS_REQUIRED(glDeleteProgram),
1539     GL_ES_FUNC_ALWAYS_REQUIRED(glDeleteShader),
1540     GL_ES_FUNC_ALWAYS_REQUIRED(glDetachShader),
1541     GL_ES_FUNC_ALWAYS_REQUIRED(glDisableVertexAttribArray),
1542     GL_ES_FUNC_ALWAYS_REQUIRED(glEnableVertexAttribArray),
1543     GL_ES_FUNC_ALWAYS_REQUIRED(glGetActiveAttrib),
1544     GL_ES_FUNC_ALWAYS_REQUIRED(glGetActiveUniform),
1545     GL_ES_FUNC_ALWAYS_REQUIRED(glGetAttachedShaders),
1546     GL_ES_FUNC_ALWAYS_REQUIRED(glGetAttribLocation),
1547     GL_ES_FUNC_ALWAYS_REQUIRED(glGetProgramInfoLog),
1548     GL_ES_FUNC_ALWAYS_REQUIRED(glGetProgramiv),
1549     GL_ES_FUNC_ALWAYS_REQUIRED(glGetShaderInfoLog),
1550     GL_ES_FUNC_ALWAYS_REQUIRED(glGetShaderSource),
1551     GL_ES_FUNC_ALWAYS_REQUIRED(glGetShaderiv),
1552     GL_ES_FUNC_ALWAYS_REQUIRED(glGetUniformLocation),
1553     GL_ES_FUNC_ALWAYS_REQUIRED(glGetUniformfv),
1554     GL_ES_FUNC_ALWAYS_REQUIRED(glGetUniformiv),
1555     GL_ES_FUNC_ALWAYS_REQUIRED(glGetVertexAttribPointerv),
1556     GL_ES_FUNC_ALWAYS_REQUIRED(glGetVertexAttribfv),
1557     GL_ES_FUNC_ALWAYS_REQUIRED(glGetVertexAttribiv),
1558     GL_ES_FUNC_ALWAYS_REQUIRED(glIsProgram),
1559     GL_ES_FUNC_ALWAYS_REQUIRED(glIsShader),
1560     GL_ES_FUNC_ALWAYS_REQUIRED(glLinkProgram),
1561     GL_ES_FUNC_ALWAYS_REQUIRED(glShaderSource),
1562     GL_ES_FUNC_ALWAYS_REQUIRED(glStencilFuncSeparate),
1563     GL_ES_FUNC_ALWAYS_REQUIRED(glStencilMaskSeparate),
1564     GL_ES_FUNC_ALWAYS_REQUIRED(glStencilOpSeparate),
1565     GL_ES_FUNC_ALWAYS_REQUIRED(glUniform1f),
1566     GL_ES_FUNC_ALWAYS_REQUIRED(glUniform1fv),
1567     GL_ES_FUNC_ALWAYS_REQUIRED(glUniform1i),
1568     GL_ES_FUNC_ALWAYS_REQUIRED(glUniform1iv),
1569     GL_ES_FUNC_ALWAYS_REQUIRED(glUniform2f),
1570     GL_ES_FUNC_ALWAYS_REQUIRED(glUniform2fv),
1571     GL_ES_FUNC_ALWAYS_REQUIRED(glUniform2i),
1572     GL_ES_FUNC_ALWAYS_REQUIRED(glUniform2iv),
1573     GL_ES_FUNC_ALWAYS_REQUIRED(glUniform3f),
1574     GL_ES_FUNC_ALWAYS_REQUIRED(glUniform3fv),
1575     GL_ES_FUNC_ALWAYS_REQUIRED(glUniform3i),
1576     GL_ES_FUNC_ALWAYS_REQUIRED(glUniform3iv),
1577     GL_ES_FUNC_ALWAYS_REQUIRED(glUniform4f),
1578     GL_ES_FUNC_ALWAYS_REQUIRED(glUniform4fv),
1579     GL_ES_FUNC_ALWAYS_REQUIRED(glUniform4i),
1580     GL_ES_FUNC_ALWAYS_REQUIRED(glUniform4iv),
1581     GL_ES_FUNC_ALWAYS_REQUIRED(glUniformMatrix2fv),
1582     GL_ES_FUNC_ALWAYS_REQUIRED(glUniformMatrix3fv),
1583     GL_ES_FUNC_ALWAYS_REQUIRED(glUniformMatrix4fv),
1584     GL_ES_FUNC_ALWAYS_REQUIRED(glUseProgram),
1585     GL_ES_FUNC_ALWAYS_REQUIRED(glValidateProgram),
1586     GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttrib1f),
1587     GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttrib1fv),
1588     GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttrib2f),
1589     GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttrib2fv),
1590     GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttrib3f),
1591     GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttrib3fv),
1592     GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttrib4f),
1593     GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttrib4fv),
1594     GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttribPointer),
1595     GL_ES3_FUNC_ALWAYS_REQUIRED(glDrawBuffers),
1596 
1597     // gl_2_1
1598     GLFUNC_ALWAYS_REQUIRED(glUniformMatrix2x3fv),
1599     GLFUNC_ALWAYS_REQUIRED(glUniformMatrix2x4fv),
1600     GLFUNC_ALWAYS_REQUIRED(glUniformMatrix3x2fv),
1601     GLFUNC_ALWAYS_REQUIRED(glUniformMatrix3x4fv),
1602     GLFUNC_ALWAYS_REQUIRED(glUniformMatrix4x2fv),
1603     GLFUNC_ALWAYS_REQUIRED(glUniformMatrix4x3fv),
1604 
1605     // gl_3_0
1606     GLFUNC_REQUIRES(glBeginConditionalRender, "VERSION_3_0"),
1607     GLFUNC_REQUIRES(glBindFragDataLocation, "VERSION_3_0"),
1608     GLFUNC_REQUIRES(glClampColor, "VERSION_3_0"),
1609     GLFUNC_REQUIRES(glEndConditionalRender, "VERSION_3_0"),
1610     GLFUNC_REQUIRES(glGetBooleani_v, "VERSION_3_0"),
1611     GLFUNC_REQUIRES(glVertexAttribI1i, "VERSION_3_0"),
1612     GLFUNC_REQUIRES(glVertexAttribI1iv, "VERSION_3_0"),
1613     GLFUNC_REQUIRES(glVertexAttribI1ui, "VERSION_3_0"),
1614     GLFUNC_REQUIRES(glVertexAttribI1uiv, "VERSION_3_0"),
1615     GLFUNC_REQUIRES(glVertexAttribI2i, "VERSION_3_0"),
1616     GLFUNC_REQUIRES(glVertexAttribI2iv, "VERSION_3_0"),
1617     GLFUNC_REQUIRES(glVertexAttribI2ui, "VERSION_3_0"),
1618     GLFUNC_REQUIRES(glVertexAttribI2uiv, "VERSION_3_0"),
1619     GLFUNC_REQUIRES(glVertexAttribI3i, "VERSION_3_0"),
1620     GLFUNC_REQUIRES(glVertexAttribI3iv, "VERSION_3_0"),
1621     GLFUNC_REQUIRES(glVertexAttribI3ui, "VERSION_3_0"),
1622     GLFUNC_REQUIRES(glVertexAttribI3uiv, "VERSION_3_0"),
1623     GLFUNC_REQUIRES(glVertexAttribI4bv, "VERSION_3_0"),
1624     GLFUNC_REQUIRES(glVertexAttribI4sv, "VERSION_3_0"),
1625     GLFUNC_REQUIRES(glVertexAttribI4ubv, "VERSION_3_0"),
1626     GLFUNC_REQUIRES(glVertexAttribI4usv, "VERSION_3_0"),
1627     GLFUNC_REQUIRES(glBeginTransformFeedback, "VERSION_3_0 |VERSION_GLES_3"),
1628     GLFUNC_REQUIRES(glClearBufferfi, "VERSION_3_0 |VERSION_GLES_3"),
1629     GLFUNC_REQUIRES(glClearBufferfv, "VERSION_3_0 |VERSION_GLES_3"),
1630     GLFUNC_REQUIRES(glClearBufferiv, "VERSION_3_0 |VERSION_GLES_3"),
1631     GLFUNC_REQUIRES(glClearBufferuiv, "VERSION_3_0 |VERSION_GLES_3"),
1632     GLFUNC_REQUIRES(glEndTransformFeedback, "VERSION_3_0 |VERSION_GLES_3"),
1633     GLFUNC_REQUIRES(glGetFragDataLocation, "VERSION_3_0 |VERSION_GLES_3"),
1634     GLFUNC_REQUIRES(glGetStringi, "VERSION_3_0 |VERSION_GLES_3"),
1635     GLFUNC_REQUIRES(glGetTransformFeedbackVarying, "VERSION_3_0 |VERSION_GLES_3"),
1636     GLFUNC_REQUIRES(glGetUniformuiv, "VERSION_3_0 |VERSION_GLES_3"),
1637     GLFUNC_REQUIRES(glGetVertexAttribIiv, "VERSION_3_0 |VERSION_GLES_3"),
1638     GLFUNC_REQUIRES(glGetVertexAttribIuiv, "VERSION_3_0 |VERSION_GLES_3"),
1639     GLFUNC_REQUIRES(glTransformFeedbackVaryings, "VERSION_3_0 |VERSION_GLES_3"),
1640     GLFUNC_REQUIRES(glUniform1ui, "VERSION_3_0 |VERSION_GLES_3"),
1641     GLFUNC_REQUIRES(glUniform1uiv, "VERSION_3_0 |VERSION_GLES_3"),
1642     GLFUNC_REQUIRES(glUniform2ui, "VERSION_3_0 |VERSION_GLES_3"),
1643     GLFUNC_REQUIRES(glUniform2uiv, "VERSION_3_0 |VERSION_GLES_3"),
1644     GLFUNC_REQUIRES(glUniform3ui, "VERSION_3_0 |VERSION_GLES_3"),
1645     GLFUNC_REQUIRES(glUniform3uiv, "VERSION_3_0 |VERSION_GLES_3"),
1646     GLFUNC_REQUIRES(glUniform4ui, "VERSION_3_0 |VERSION_GLES_3"),
1647     GLFUNC_REQUIRES(glUniform4uiv, "VERSION_3_0 |VERSION_GLES_3"),
1648     GLFUNC_REQUIRES(glVertexAttribI4i, "VERSION_3_0 |VERSION_GLES_3"),
1649     GLFUNC_REQUIRES(glVertexAttribI4iv, "VERSION_3_0 |VERSION_GLES_3"),
1650     GLFUNC_REQUIRES(glVertexAttribI4ui, "VERSION_3_0 |VERSION_GLES_3"),
1651     GLFUNC_REQUIRES(glVertexAttribI4uiv, "VERSION_3_0 |VERSION_GLES_3"),
1652     GLFUNC_REQUIRES(glVertexAttribIPointer, "VERSION_3_0 |VERSION_GLES_3"),
1653     GLFUNC_REQUIRES(glColorMaski, "VERSION_3_0 |VERSION_GLES_3_2"),
1654     GLFUNC_REQUIRES(glDisablei, "VERSION_3_0 |VERSION_GLES_3_2"),
1655     GLFUNC_REQUIRES(glEnablei, "VERSION_3_0 |VERSION_GLES_3_2"),
1656     GLFUNC_REQUIRES(glGetTexParameterIiv, "VERSION_3_0 |VERSION_GLES_3_2"),
1657     GLFUNC_REQUIRES(glGetTexParameterIuiv, "VERSION_3_0 |VERSION_GLES_3_2"),
1658     GLFUNC_REQUIRES(glIsEnabledi, "VERSION_3_0 |VERSION_GLES_3_2"),
1659     GLFUNC_REQUIRES(glTexParameterIiv, "VERSION_3_0 |VERSION_GLES_3_2"),
1660     GLFUNC_REQUIRES(glTexParameterIuiv, "VERSION_3_0 |VERSION_GLES_3_2"),
1661 
1662     // gl_3_1
1663     GLFUNC_REQUIRES(glPrimitiveRestartIndex, "VERSION_3_1"),
1664     GLFUNC_REQUIRES(glDrawArraysInstanced, "VERSION_3_1 |VERSION_GLES_3"),
1665     GLFUNC_REQUIRES(glDrawElementsInstanced, "VERSION_3_1 |VERSION_GLES_3"),
1666     GLFUNC_REQUIRES(glTexBuffer, "VERSION_3_1 |VERSION_GLES_3_2"),
1667 
1668     // gl_3_2
1669     GLFUNC_REQUIRES(glGetBufferParameteri64v, "VERSION_3_2 |VERSION_GLES_3"),
1670     GLFUNC_REQUIRES(glGetInteger64i_v, "VERSION_3_2 |VERSION_GLES_3"),
1671     GLFUNC_REQUIRES(glFramebufferTexture, "VERSION_3_2 |VERSION_GLES_3_2"),
1672 
1673     // gl_4_2
1674     GLFUNC_REQUIRES(glDrawArraysInstancedBaseInstance, "VERSION_4_2"),
1675     GLFUNC_REQUIRES(glDrawElementsInstancedBaseInstance, "VERSION_4_2"),
1676     GLFUNC_REQUIRES(glDrawElementsInstancedBaseVertexBaseInstance, "VERSION_4_2"),
1677     GLFUNC_REQUIRES(glGetInternalformativ, "VERSION_4_2"),
1678     GLFUNC_REQUIRES(glGetActiveAtomicCounterBufferiv, "VERSION_4_2"),
1679     GLFUNC_REQUIRES(glBindImageTexture, "VERSION_4_2"),
1680     GLFUNC_REQUIRES(glMemoryBarrier, "VERSION_4_2"),
1681     GLFUNC_REQUIRES(glTexStorage1D, "VERSION_4_2"),
1682     GLFUNC_REQUIRES(glTexStorage2D, "VERSION_4_2"),
1683     GLFUNC_REQUIRES(glTexStorage3D, "VERSION_4_2"),
1684     GLFUNC_REQUIRES(glDrawTransformFeedbackInstanced, "VERSION_4_2"),
1685     GLFUNC_REQUIRES(glDrawTransformFeedbackStreamInstanced, "VERSION_4_2"),
1686 
1687     // gl_4_3
1688     GLFUNC_REQUIRES(glClearBufferData, "VERSION_4_3"),
1689     GLFUNC_REQUIRES(glClearBufferSubData, "VERSION_4_3"),
1690     GLFUNC_REQUIRES(glDispatchCompute, "VERSION_4_3"),
1691     GLFUNC_REQUIRES(glDispatchComputeIndirect, "VERSION_4_3"),
1692     GLFUNC_REQUIRES(glCopyImageSubData, "VERSION_4_3"),
1693     GLFUNC_REQUIRES(glFramebufferParameteri, "VERSION_4_3"),
1694     GLFUNC_REQUIRES(glGetFramebufferParameteriv, "VERSION_4_3"),
1695     GLFUNC_REQUIRES(glGetInternalformati64v, "VERSION_4_3"),
1696     GLFUNC_REQUIRES(glInvalidateTexSubImage, "VERSION_4_3"),
1697     GLFUNC_REQUIRES(glInvalidateTexImage, "VERSION_4_3"),
1698     GLFUNC_REQUIRES(glInvalidateBufferSubData, "VERSION_4_3"),
1699     GLFUNC_REQUIRES(glInvalidateBufferData, "VERSION_4_3"),
1700     GLFUNC_REQUIRES(glInvalidateFramebuffer, "VERSION_4_3"),
1701     GLFUNC_REQUIRES(glInvalidateSubFramebuffer, "VERSION_4_3"),
1702     GLFUNC_REQUIRES(glMultiDrawArraysIndirect, "VERSION_4_3"),
1703     GLFUNC_REQUIRES(glMultiDrawElementsIndirect, "VERSION_4_3"),
1704     GLFUNC_REQUIRES(glGetProgramInterfaceiv, "VERSION_4_3"),
1705     GLFUNC_REQUIRES(glGetProgramResourceIndex, "VERSION_4_3"),
1706     GLFUNC_REQUIRES(glGetProgramResourceName, "VERSION_4_3"),
1707     GLFUNC_REQUIRES(glGetProgramResourceiv, "VERSION_4_3"),
1708     GLFUNC_REQUIRES(glGetProgramResourceLocation, "VERSION_4_3"),
1709     GLFUNC_REQUIRES(glGetProgramResourceLocationIndex, "VERSION_4_3"),
1710     GLFUNC_REQUIRES(glShaderStorageBlockBinding, "VERSION_4_3"),
1711     GLFUNC_REQUIRES(glTexBufferRange, "VERSION_4_3"),
1712     GLFUNC_REQUIRES(glTexStorage2DMultisample, "VERSION_4_3"),
1713     GLFUNC_REQUIRES(glTexStorage3DMultisample, "VERSION_4_3"),
1714     GLFUNC_REQUIRES(glTextureView, "VERSION_4_3"),
1715     GLFUNC_REQUIRES(glBindVertexBuffer, "VERSION_4_3"),
1716     GLFUNC_REQUIRES(glVertexAttribFormat, "VERSION_4_3"),
1717     GLFUNC_REQUIRES(glVertexAttribIFormat, "VERSION_4_3"),
1718     GLFUNC_REQUIRES(glVertexAttribLFormat, "VERSION_4_3"),
1719     GLFUNC_REQUIRES(glVertexAttribBinding, "VERSION_4_3"),
1720     GLFUNC_REQUIRES(glVertexBindingDivisor, "VERSION_4_3"),
1721     GLFUNC_REQUIRES(glDebugMessageControl, "VERSION_4_3"),
1722     GLFUNC_REQUIRES(glDebugMessageInsert, "VERSION_4_3"),
1723     GLFUNC_REQUIRES(glDebugMessageCallback, "VERSION_4_3"),
1724     GLFUNC_REQUIRES(glGetDebugMessageLog, "VERSION_4_3"),
1725     GLFUNC_REQUIRES(glPushDebugGroup, "VERSION_4_3"),
1726     GLFUNC_REQUIRES(glPopDebugGroup, "VERSION_4_3"),
1727     GLFUNC_REQUIRES(glObjectLabel, "VERSION_4_3"),
1728     GLFUNC_REQUIRES(glGetObjectLabel, "VERSION_4_3"),
1729     GLFUNC_REQUIRES(glObjectPtrLabel, "VERSION_4_3"),
1730     GLFUNC_REQUIRES(glGetObjectPtrLabel, "VERSION_4_3"),
1731 
1732     // gl_4_4
1733     GLFUNC_REQUIRES(glBufferStorage, "VERSION_4_4"),
1734     GLFUNC_REQUIRES(glClearTexImage, "VERSION_4_4"),
1735     GLFUNC_REQUIRES(glClearTexSubImage, "VERSION_4_4"),
1736     GLFUNC_REQUIRES(glBindBuffersBase, "VERSION_4_4"),
1737     GLFUNC_REQUIRES(glBindBuffersRange, "VERSION_4_4"),
1738     GLFUNC_REQUIRES(glBindTextures, "VERSION_4_4"),
1739     GLFUNC_REQUIRES(glBindSamplers, "VERSION_4_4"),
1740     GLFUNC_REQUIRES(glBindImageTextures, "VERSION_4_4"),
1741     GLFUNC_REQUIRES(glBindVertexBuffers, "VERSION_4_4"),
1742 
1743     // gl_4_5
1744     GLFUNC_REQUIRES(glClipControl, "VERSION_4_5"),
1745     GLFUNC_REQUIRES(glCreateTransformFeedbacks, "VERSION_4_5"),
1746     GLFUNC_REQUIRES(glTransformFeedbackBufferBase, "VERSION_4_5"),
1747     GLFUNC_REQUIRES(glTransformFeedbackBufferRange, "VERSION_4_5"),
1748     GLFUNC_REQUIRES(glGetTransformFeedbackiv, "VERSION_4_5"),
1749     GLFUNC_REQUIRES(glGetTransformFeedbacki_v, "VERSION_4_5"),
1750     GLFUNC_REQUIRES(glGetTransformFeedbacki64_v, "VERSION_4_5"),
1751     GLFUNC_REQUIRES(glCreateBuffers, "VERSION_4_5"),
1752     GLFUNC_REQUIRES(glNamedBufferStorage, "VERSION_4_5"),
1753     GLFUNC_REQUIRES(glNamedBufferData, "VERSION_4_5"),
1754     GLFUNC_REQUIRES(glNamedBufferSubData, "VERSION_4_5"),
1755     GLFUNC_REQUIRES(glCopyNamedBufferSubData, "VERSION_4_5"),
1756     GLFUNC_REQUIRES(glClearNamedBufferData, "VERSION_4_5"),
1757     GLFUNC_REQUIRES(glClearNamedBufferSubData, "VERSION_4_5"),
1758     GLFUNC_REQUIRES(glMapNamedBuffer, "VERSION_4_5"),
1759     GLFUNC_REQUIRES(glMapNamedBufferRange, "VERSION_4_5"),
1760     GLFUNC_REQUIRES(glUnmapNamedBuffer, "VERSION_4_5"),
1761     GLFUNC_REQUIRES(glFlushMappedNamedBufferRange, "VERSION_4_5"),
1762     GLFUNC_REQUIRES(glGetNamedBufferParameteriv, "VERSION_4_5"),
1763     GLFUNC_REQUIRES(glGetNamedBufferParameteri64v, "VERSION_4_5"),
1764     GLFUNC_REQUIRES(glGetNamedBufferPointerv, "VERSION_4_5"),
1765     GLFUNC_REQUIRES(glGetNamedBufferSubData, "VERSION_4_5"),
1766     GLFUNC_REQUIRES(glCreateFramebuffers, "VERSION_4_5"),
1767     GLFUNC_REQUIRES(glNamedFramebufferRenderbuffer, "VERSION_4_5"),
1768     GLFUNC_REQUIRES(glNamedFramebufferParameteri, "VERSION_4_5"),
1769     GLFUNC_REQUIRES(glNamedFramebufferTexture, "VERSION_4_5"),
1770     GLFUNC_REQUIRES(glNamedFramebufferTextureLayer, "VERSION_4_5"),
1771     GLFUNC_REQUIRES(glNamedFramebufferDrawBuffer, "VERSION_4_5"),
1772     GLFUNC_REQUIRES(glNamedFramebufferDrawBuffers, "VERSION_4_5"),
1773     GLFUNC_REQUIRES(glNamedFramebufferReadBuffer, "VERSION_4_5"),
1774     GLFUNC_REQUIRES(glInvalidateNamedFramebufferData, "VERSION_4_5"),
1775     GLFUNC_REQUIRES(glInvalidateNamedFramebufferSubData, "VERSION_4_5"),
1776     GLFUNC_REQUIRES(glClearNamedFramebufferiv, "VERSION_4_5"),
1777     GLFUNC_REQUIRES(glClearNamedFramebufferuiv, "VERSION_4_5"),
1778     GLFUNC_REQUIRES(glClearNamedFramebufferfv, "VERSION_4_5"),
1779     GLFUNC_REQUIRES(glClearNamedFramebufferfi, "VERSION_4_5"),
1780     GLFUNC_REQUIRES(glBlitNamedFramebuffer, "VERSION_4_5"),
1781     GLFUNC_REQUIRES(glCheckNamedFramebufferStatus, "VERSION_4_5"),
1782     GLFUNC_REQUIRES(glGetNamedFramebufferParameteriv, "VERSION_4_5"),
1783     GLFUNC_REQUIRES(glGetNamedFramebufferAttachmentParameteriv, "VERSION_4_5"),
1784     GLFUNC_REQUIRES(glCreateRenderbuffers, "VERSION_4_5"),
1785     GLFUNC_REQUIRES(glNamedRenderbufferStorage, "VERSION_4_5"),
1786     GLFUNC_REQUIRES(glNamedRenderbufferStorageMultisample, "VERSION_4_5"),
1787     GLFUNC_REQUIRES(glGetNamedRenderbufferParameteriv, "VERSION_4_5"),
1788     GLFUNC_REQUIRES(glCreateTextures, "VERSION_4_5"),
1789     GLFUNC_REQUIRES(glTextureBuffer, "VERSION_4_5"),
1790     GLFUNC_REQUIRES(glTextureBufferRange, "VERSION_4_5"),
1791     GLFUNC_REQUIRES(glTextureStorage1D, "VERSION_4_5"),
1792     GLFUNC_REQUIRES(glTextureStorage2D, "VERSION_4_5"),
1793     GLFUNC_REQUIRES(glTextureStorage3D, "VERSION_4_5"),
1794     GLFUNC_REQUIRES(glTextureStorage2DMultisample, "VERSION_4_5"),
1795     GLFUNC_REQUIRES(glTextureStorage3DMultisample, "VERSION_4_5"),
1796     GLFUNC_REQUIRES(glTextureSubImage1D, "VERSION_4_5"),
1797     GLFUNC_REQUIRES(glTextureSubImage2D, "VERSION_4_5"),
1798     GLFUNC_REQUIRES(glTextureSubImage3D, "VERSION_4_5"),
1799     GLFUNC_REQUIRES(glCompressedTextureSubImage1D, "VERSION_4_5"),
1800     GLFUNC_REQUIRES(glCompressedTextureSubImage2D, "VERSION_4_5"),
1801     GLFUNC_REQUIRES(glCompressedTextureSubImage3D, "VERSION_4_5"),
1802     GLFUNC_REQUIRES(glCopyTextureSubImage1D, "VERSION_4_5"),
1803     GLFUNC_REQUIRES(glCopyTextureSubImage2D, "VERSION_4_5"),
1804     GLFUNC_REQUIRES(glCopyTextureSubImage3D, "VERSION_4_5"),
1805     GLFUNC_REQUIRES(glTextureParameterf, "VERSION_4_5"),
1806     GLFUNC_REQUIRES(glTextureParameterfv, "VERSION_4_5"),
1807     GLFUNC_REQUIRES(glTextureParameteri, "VERSION_4_5"),
1808     GLFUNC_REQUIRES(glTextureParameterIiv, "VERSION_4_5"),
1809     GLFUNC_REQUIRES(glTextureParameterIuiv, "VERSION_4_5"),
1810     GLFUNC_REQUIRES(glTextureParameteriv, "VERSION_4_5"),
1811     GLFUNC_REQUIRES(glGenerateTextureMipmap, "VERSION_4_5"),
1812     GLFUNC_REQUIRES(glBindTextureUnit, "VERSION_4_5"),
1813     GLFUNC_REQUIRES(glGetTextureImage, "VERSION_4_5"),
1814     GLFUNC_REQUIRES(glGetCompressedTextureImage, "VERSION_4_5"),
1815     GLFUNC_REQUIRES(glGetTextureLevelParameterfv, "VERSION_4_5"),
1816     GLFUNC_REQUIRES(glGetTextureLevelParameteriv, "VERSION_4_5"),
1817     GLFUNC_REQUIRES(glGetTextureParameterfv, "VERSION_4_5"),
1818     GLFUNC_REQUIRES(glGetTextureParameterIiv, "VERSION_4_5"),
1819     GLFUNC_REQUIRES(glGetTextureParameterIuiv, "VERSION_4_5"),
1820     GLFUNC_REQUIRES(glGetTextureParameteriv, "VERSION_4_5"),
1821     GLFUNC_REQUIRES(glCreateVertexArrays, "VERSION_4_5"),
1822     GLFUNC_REQUIRES(glDisableVertexArrayAttrib, "VERSION_4_5"),
1823     GLFUNC_REQUIRES(glEnableVertexArrayAttrib, "VERSION_4_5"),
1824     GLFUNC_REQUIRES(glVertexArrayElementBuffer, "VERSION_4_5"),
1825     GLFUNC_REQUIRES(glVertexArrayVertexBuffer, "VERSION_4_5"),
1826     GLFUNC_REQUIRES(glVertexArrayVertexBuffers, "VERSION_4_5"),
1827     GLFUNC_REQUIRES(glVertexArrayAttribBinding, "VERSION_4_5"),
1828     GLFUNC_REQUIRES(glVertexArrayAttribFormat, "VERSION_4_5"),
1829     GLFUNC_REQUIRES(glVertexArrayAttribIFormat, "VERSION_4_5"),
1830     GLFUNC_REQUIRES(glVertexArrayAttribLFormat, "VERSION_4_5"),
1831     GLFUNC_REQUIRES(glVertexArrayBindingDivisor, "VERSION_4_5"),
1832     GLFUNC_REQUIRES(glGetVertexArrayiv, "VERSION_4_5"),
1833     GLFUNC_REQUIRES(glGetVertexArrayIndexediv, "VERSION_4_5"),
1834     GLFUNC_REQUIRES(glGetVertexArrayIndexed64iv, "VERSION_4_5"),
1835     GLFUNC_REQUIRES(glCreateSamplers, "VERSION_4_5"),
1836     GLFUNC_REQUIRES(glCreateProgramPipelines, "VERSION_4_5"),
1837     GLFUNC_REQUIRES(glCreateQueries, "VERSION_4_5"),
1838     GLFUNC_REQUIRES(glGetQueryBufferObjecti64v, "VERSION_4_5"),
1839     GLFUNC_REQUIRES(glGetQueryBufferObjectiv, "VERSION_4_5"),
1840     GLFUNC_REQUIRES(glGetQueryBufferObjectui64v, "VERSION_4_5"),
1841     GLFUNC_REQUIRES(glGetQueryBufferObjectuiv, "VERSION_4_5"),
1842     GLFUNC_REQUIRES(glMemoryBarrierByRegion, "VERSION_4_5"),
1843     GLFUNC_REQUIRES(glGetTextureSubImage, "VERSION_4_5"),
1844     GLFUNC_REQUIRES(glGetCompressedTextureSubImage, "VERSION_4_5"),
1845     GLFUNC_REQUIRES(glGetGraphicsResetStatus, "VERSION_4_5"),
1846     GLFUNC_REQUIRES(glReadnPixels, "VERSION_4_5"),
1847     GLFUNC_REQUIRES(glTextureBarrier, "VERSION_4_5"),
1848     // AMD's video driver is trash and doesn't expose these function pointers
1849     // Remove them for now until they learn how to implement the spec properly.
1850     // GLFUNC_REQUIRES(glGetnCompressedTexImage,                   "VERSION_4_5"),
1851     // GLFUNC_REQUIRES(glGetnTexImage,                             "VERSION_4_5"),
1852     // GLFUNC_REQUIRES(glGetnUniformdv,                            "VERSION_4_5"),
1853     // GLFUNC_REQUIRES(glGetnUniformfv,                            "VERSION_4_5"),
1854     // GLFUNC_REQUIRES(glGetnUniformiv,                            "VERSION_4_5"),
1855     // GLFUNC_REQUIRES(glGetnUniformuiv,                           "VERSION_4_5"),
1856     // GLFUNC_REQUIRES(glGetnMapdv,                                "VERSION_4_5"),
1857     // GLFUNC_REQUIRES(glGetnMapfv,                                "VERSION_4_5"),
1858     // GLFUNC_REQUIRES(glGetnMapiv,                                "VERSION_4_5"),
1859     // GLFUNC_REQUIRES(glGetnPixelMapfv,                           "VERSION_4_5"),
1860     // GLFUNC_REQUIRES(glGetnPixelMapuiv,                          "VERSION_4_5"),
1861     // GLFUNC_REQUIRES(glGetnPixelMapusv,                          "VERSION_4_5"),
1862     // GLFUNC_REQUIRES(glGetnPolygonStipple,                       "VERSION_4_5"),
1863     // GLFUNC_REQUIRES(glGetnColorTable,                           "VERSION_4_5"),
1864     // GLFUNC_REQUIRES(glGetnConvolutionFilter,                    "VERSION_4_5"),
1865     // GLFUNC_REQUIRES(glGetnSeparableFilter,                      "VERSION_4_5"),
1866     // GLFUNC_REQUIRES(glGetnHistogram,                            "VERSION_4_5"),
1867     // GLFUNC_REQUIRES(glGetnMinmax,                               "VERSION_4_5"),
1868 
1869     // ARB_uniform_buffer_object
1870     GLFUNC_REQUIRES(glGetActiveUniformName, "GL_ARB_uniform_buffer_object"),
1871     GLFUNC_REQUIRES(glBindBufferBase, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
1872     GLFUNC_REQUIRES(glBindBufferRange, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
1873     GLFUNC_REQUIRES(glGetActiveUniformBlockName, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
1874     GLFUNC_REQUIRES(glGetActiveUniformBlockiv, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
1875     GLFUNC_REQUIRES(glGetActiveUniformsiv, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
1876     GLFUNC_REQUIRES(glGetIntegeri_v, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
1877     GLFUNC_REQUIRES(glGetUniformBlockIndex, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
1878     GLFUNC_REQUIRES(glGetUniformIndices, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
1879     GLFUNC_REQUIRES(glUniformBlockBinding, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
1880 
1881     // ARB_sampler_objects
1882     GLFUNC_REQUIRES(glBindSampler, "GL_ARB_sampler_objects |VERSION_GLES_3"),
1883     GLFUNC_REQUIRES(glDeleteSamplers, "GL_ARB_sampler_objects |VERSION_GLES_3"),
1884     GLFUNC_REQUIRES(glGenSamplers, "GL_ARB_sampler_objects |VERSION_GLES_3"),
1885     GLFUNC_REQUIRES(glGetSamplerParameterfv, "GL_ARB_sampler_objects |VERSION_GLES_3"),
1886     GLFUNC_REQUIRES(glGetSamplerParameteriv, "GL_ARB_sampler_objects |VERSION_GLES_3"),
1887     GLFUNC_REQUIRES(glIsSampler, "GL_ARB_sampler_objects |VERSION_GLES_3"),
1888     GLFUNC_REQUIRES(glSamplerParameterf, "GL_ARB_sampler_objects |VERSION_GLES_3"),
1889     GLFUNC_REQUIRES(glSamplerParameterfv, "GL_ARB_sampler_objects |VERSION_GLES_3"),
1890     GLFUNC_REQUIRES(glSamplerParameteri, "GL_ARB_sampler_objects |VERSION_GLES_3"),
1891     GLFUNC_REQUIRES(glSamplerParameteriv, "GL_ARB_sampler_objects |VERSION_GLES_3"),
1892     GLFUNC_REQUIRES(glGetSamplerParameterIiv, "GL_ARB_sampler_objects |VERSION_GLES_3_2"),
1893     GLFUNC_REQUIRES(glGetSamplerParameterIuiv, "GL_ARB_sampler_objects |VERSION_GLES_3_2"),
1894     GLFUNC_REQUIRES(glSamplerParameterIiv, "GL_ARB_sampler_objects |VERSION_GLES_3_2"),
1895     GLFUNC_REQUIRES(glSamplerParameterIuiv, "GL_ARB_sampler_objects |VERSION_GLES_3_2"),
1896 
1897     // ARB_map_buffer_range
1898     GLFUNC_REQUIRES(glFlushMappedBufferRange, "GL_ARB_map_buffer_range |VERSION_GLES_3"),
1899     GLFUNC_REQUIRES(glMapBufferRange, "GL_ARB_map_buffer_range |VERSION_GLES_3"),
1900 
1901     // ARB_vertex_array_object
1902     GLFUNC_REQUIRES(glBindVertexArray, "GL_ARB_vertex_array_object |VERSION_GLES_3"),
1903     GLFUNC_REQUIRES(glDeleteVertexArrays, "GL_ARB_vertex_array_object |VERSION_GLES_3"),
1904     GLFUNC_REQUIRES(glGenVertexArrays, "GL_ARB_vertex_array_object |VERSION_GLES_3"),
1905     GLFUNC_REQUIRES(glIsVertexArray, "GL_ARB_vertex_array_object |VERSION_GLES_3"),
1906 
1907     // APPLE_vertex_array_object
1908     GLFUNC_SUFFIX(glBindVertexArray, APPLE,
1909                   "GL_APPLE_vertex_array_object !GL_ARB_vertex_array_object"),
1910     GLFUNC_SUFFIX(glDeleteVertexArrays, APPLE,
1911                   "GL_APPLE_vertex_array_object !GL_ARB_vertex_array_object"),
1912     GLFUNC_SUFFIX(glGenVertexArrays, APPLE,
1913                   "GL_APPLE_vertex_array_object !GL_ARB_vertex_array_object"),
1914     GLFUNC_SUFFIX(glIsVertexArray, APPLE,
1915                   "GL_APPLE_vertex_array_object !GL_ARB_vertex_array_object"),
1916 
1917     // ARB_framebuffer_object
1918     GLFUNC_REQUIRES(glFramebufferTexture1D, "GL_ARB_framebuffer_object"),
1919     GLFUNC_REQUIRES(glFramebufferTexture3D, "GL_ARB_framebuffer_object"),
1920     GLFUNC_REQUIRES(glBindFramebuffer, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
1921     GLFUNC_REQUIRES(glBindRenderbuffer, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
1922     GLFUNC_REQUIRES(glBlitFramebuffer, "GL_ARB_framebuffer_object |VERSION_GLES_3"),
1923     GLFUNC_REQUIRES(glCheckFramebufferStatus, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
1924     GLFUNC_REQUIRES(glDeleteFramebuffers, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
1925     GLFUNC_REQUIRES(glDeleteRenderbuffers, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
1926     GLFUNC_REQUIRES(glFramebufferRenderbuffer, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
1927     GLFUNC_REQUIRES(glFramebufferTexture2D, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
1928     GLFUNC_REQUIRES(glFramebufferTextureLayer, "GL_ARB_framebuffer_object |VERSION_GLES_3"),
1929     GLFUNC_REQUIRES(glGenFramebuffers, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
1930     GLFUNC_REQUIRES(glGenRenderbuffers, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
1931     GLFUNC_REQUIRES(glGenerateMipmap, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
1932     GLFUNC_REQUIRES(glGetFramebufferAttachmentParameteriv,
1933                     "GL_ARB_framebuffer_object |VERSION_GLES_2"),
1934     GLFUNC_REQUIRES(glGetRenderbufferParameteriv, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
1935     GLFUNC_REQUIRES(glIsFramebuffer, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
1936     GLFUNC_REQUIRES(glIsRenderbuffer, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
1937     GLFUNC_REQUIRES(glRenderbufferStorage, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
1938     GLFUNC_REQUIRES(glRenderbufferStorageMultisample, "GL_ARB_framebuffer_object |VERSION_GLES_3"),
1939 
1940     // ARB_get_program_binary
1941     GLFUNC_REQUIRES(glGetProgramBinary, "GL_ARB_get_program_binary |VERSION_GLES_3"),
1942     GLFUNC_REQUIRES(glProgramBinary, "GL_ARB_get_program_binary |VERSION_GLES_3"),
1943     GLFUNC_REQUIRES(glProgramParameteri, "GL_ARB_get_program_binary |VERSION_GLES_3"),
1944 
1945     // ARB_sync
1946     GLFUNC_REQUIRES(glClientWaitSync, "GL_ARB_sync |VERSION_GLES_3"),
1947     GLFUNC_REQUIRES(glDeleteSync, "GL_ARB_sync |VERSION_GLES_3"),
1948     GLFUNC_REQUIRES(glFenceSync, "GL_ARB_sync |VERSION_GLES_3"),
1949     GLFUNC_REQUIRES(glGetInteger64v, "GL_ARB_sync |VERSION_GLES_3"),
1950     GLFUNC_REQUIRES(glGetSynciv, "GL_ARB_sync |VERSION_GLES_3"),
1951     GLFUNC_REQUIRES(glIsSync, "GL_ARB_sync |VERSION_GLES_3"),
1952     GLFUNC_REQUIRES(glWaitSync, "GL_ARB_sync |VERSION_GLES_3"),
1953 
1954     // ARB_texture_multisample
1955     GLFUNC_REQUIRES(glTexImage2DMultisample, "GL_ARB_texture_multisample"),
1956     GLFUNC_REQUIRES(glTexImage3DMultisample, "GL_ARB_texture_multisample"),
1957     GLFUNC_REQUIRES(glGetMultisamplefv, "GL_ARB_texture_multisample"),
1958     GLFUNC_REQUIRES(glSampleMaski, "GL_ARB_texture_multisample"),
1959 
1960     // ARB_texture_storage
1961     GLFUNC_REQUIRES(glTexStorage1D, "GL_ARB_texture_storage !VERSION_4_2"),
1962     GLFUNC_REQUIRES(glTexStorage2D, "GL_ARB_texture_storage !VERSION_4_2 |VERSION_GLES_3"),
1963     GLFUNC_REQUIRES(glTexStorage3D, "GL_ARB_texture_storage !VERSION_4_2 |VERSION_GLES_3"),
1964 
1965     // ARB_texture_storage_multisample
1966     GLFUNC_REQUIRES(glTexStorage2DMultisample,
1967                     "GL_ARB_texture_storage_multisample !VERSION_4_3 |VERSION_GLES_3_1"),
1968     GLFUNC_REQUIRES(glTexStorage3DMultisample,
1969                     "GL_ARB_texture_storage_multisample !VERSION_4_3 |VERSION_GLES_3_2"),
1970     GLFUNC_SUFFIX(glTexStorage3DMultisample, OES,
1971                   "GL_OES_texture_storage_multisample_2d_array !VERSION_GLES_3_2"),
1972 
1973     // ARB_ES2_compatibility
1974     GLFUNC_REQUIRES(glClearDepthf, "GL_ARB_ES2_compatibility |VERSION_GLES_2"),
1975     GLFUNC_REQUIRES(glDepthRangef, "GL_ARB_ES2_compatibility |VERSION_GLES_2"),
1976     GLFUNC_REQUIRES(glGetShaderPrecisionFormat, "GL_ARB_ES2_compatibility |VERSION_GLES_2"),
1977     GLFUNC_REQUIRES(glReleaseShaderCompiler, "GL_ARB_ES2_compatibility |VERSION_GLES_2"),
1978     GLFUNC_REQUIRES(glShaderBinary, "GL_ARB_ES2_compatibility |VERSION_GLES_2"),
1979 
1980     // NV_primitive_restart
1981     GLFUNC_REQUIRES(glPrimitiveRestartIndexNV, "GL_NV_primitive_restart"),
1982     GLFUNC_REQUIRES(glPrimitiveRestartNV, "GL_NV_primitive_restart"),
1983 
1984     // ARB_blend_func_extended
1985     GLFUNC_REQUIRES(glBindFragDataLocationIndexed, "GL_ARB_blend_func_extended"),
1986     GLFUNC_REQUIRES(glGetFragDataIndex, "GL_ARB_blend_func_extended"),
1987 
1988     // ARB_viewport_array
1989     GLFUNC_REQUIRES(glDepthRangeArrayv, "GL_ARB_viewport_array"),
1990     GLFUNC_REQUIRES(glDepthRangeIndexed, "GL_ARB_viewport_array"),
1991     GLFUNC_REQUIRES(glGetDoublei_v, "GL_ARB_viewport_array"),
1992     GLFUNC_REQUIRES(glGetFloati_v, "GL_ARB_viewport_array"),
1993     GLFUNC_REQUIRES(glScissorArrayv, "GL_ARB_viewport_array"),
1994     GLFUNC_REQUIRES(glScissorIndexed, "GL_ARB_viewport_array"),
1995     GLFUNC_REQUIRES(glScissorIndexedv, "GL_ARB_viewport_array"),
1996     GLFUNC_REQUIRES(glViewportArrayv, "GL_ARB_viewport_array"),
1997     GLFUNC_REQUIRES(glViewportIndexedf, "GL_ARB_viewport_array"),
1998     GLFUNC_REQUIRES(glViewportIndexedfv, "GL_ARB_viewport_array"),
1999 
2000     // ARB_draw_elements_base_vertex
2001     GLFUNC_REQUIRES(glDrawElementsBaseVertex, "GL_ARB_draw_elements_base_vertex |VERSION_GLES_3_2"),
2002     GLFUNC_REQUIRES(glDrawElementsInstancedBaseVertex,
2003                     "GL_ARB_draw_elements_base_vertex |VERSION_GLES_3_2"),
2004     GLFUNC_REQUIRES(glDrawRangeElementsBaseVertex,
2005                     "GL_ARB_draw_elements_base_vertex |VERSION_GLES_3_2"),
2006     GLFUNC_REQUIRES(glMultiDrawElementsBaseVertex, "GL_ARB_draw_elements_base_vertex"),
2007 
2008     // OES_draw_elements_base_vertex
2009     GLFUNC_SUFFIX(glDrawElementsBaseVertex, OES,
2010                   "GL_OES_draw_elements_base_vertex !VERSION_GLES_3_2"),
2011     GLFUNC_SUFFIX(glDrawElementsInstancedBaseVertex, OES,
2012                   "GL_OES_draw_elements_base_vertex VERSION_GLES_3 !VERSION_GLES_3_2"),
2013     GLFUNC_SUFFIX(glDrawRangeElementsBaseVertex, OES,
2014                   "GL_OES_draw_elements_base_vertex VERSION_GLES_3 !VERSION_GLES_3_2"),
2015     GLFUNC_SUFFIX(glMultiDrawElementsBaseVertex, EXT,
2016                   "GL_OES_draw_elements_base_vertex GL_EXT_multi_draw_arrays"),
2017 
2018     // EXT_draw_elements_base_vertex
2019     GLFUNC_SUFFIX(
2020         glDrawElementsBaseVertex, EXT,
2021         "GL_EXT_draw_elements_base_vertex !GL_OES_draw_elements_base_vertex !VERSION_GLES_3_2"),
2022     GLFUNC_SUFFIX(glDrawElementsInstancedBaseVertex, EXT,
2023                   "GL_EXT_draw_elements_base_vertex VERSION_GLES_3 "
2024                   "!GL_OES_draw_elements_base_vertex !VERSION_GLES_3_2"),
2025     GLFUNC_SUFFIX(glDrawRangeElementsBaseVertex, EXT,
2026                   "GL_EXT_draw_elements_base_vertex VERSION_GLES_3 "
2027                   "!GL_OES_draw_elements_base_vertex !VERSION_GLES_3_2"),
2028     GLFUNC_SUFFIX(glMultiDrawElementsBaseVertex, EXT,
2029                   "GL_EXT_draw_elements_base_vertex GL_EXT_multi_draw_arrays "
2030                   "!GL_OES_draw_elements_base_vertex !VERSION_GLES_3_2"),
2031 
2032     // ARB_sample_shading
2033     GLFUNC_SUFFIX(glMinSampleShading, ARB, "GL_ARB_sample_shading"),
2034 
2035     // OES_sample_shading
2036     GLFUNC_SUFFIX(glMinSampleShading, OES, "GL_OES_sample_shading !VERSION_GLES_3_2"),
2037     GLFUNC_REQUIRES(glMinSampleShading, "VERSION_GLES_3_2"),
2038 
2039     // ARB_debug_output
2040     GLFUNC_REQUIRES(glDebugMessageCallbackARB, "GL_ARB_debug_output"),
2041     GLFUNC_REQUIRES(glDebugMessageControlARB, "GL_ARB_debug_output"),
2042     GLFUNC_REQUIRES(glDebugMessageInsertARB, "GL_ARB_debug_output"),
2043     GLFUNC_REQUIRES(glGetDebugMessageLogARB, "GL_ARB_debug_output"),
2044 
2045     // KHR_debug
2046     GLFUNC_SUFFIX(glDebugMessageCallback, KHR, "GL_KHR_debug VERSION_GLES_3"),
2047     GLFUNC_SUFFIX(glDebugMessageControl, KHR, "GL_KHR_debug VERSION_GLES_3"),
2048     GLFUNC_SUFFIX(glDebugMessageInsert, KHR, "GL_KHR_debug VERSION_GLES_3"),
2049     GLFUNC_SUFFIX(glGetDebugMessageLog, KHR, "GL_KHR_debug VERSION_GLES_3"),
2050     GLFUNC_SUFFIX(glGetObjectLabel, KHR, "GL_KHR_debug VERSION_GLES_3"),
2051     GLFUNC_SUFFIX(glGetObjectPtrLabel, KHR, "GL_KHR_debug VERSION_GLES_3"),
2052     GLFUNC_SUFFIX(glObjectLabel, KHR, "GL_KHR_debug VERSION_GLES_3"),
2053     GLFUNC_SUFFIX(glObjectPtrLabel, KHR, "GL_KHR_debug VERSION_GLES_3"),
2054     GLFUNC_SUFFIX(glPopDebugGroup, KHR, "GL_KHR_debug VERSION_GLES_3"),
2055     GLFUNC_SUFFIX(glPushDebugGroup, KHR, "GL_KHR_debug VERSION_GLES_3"),
2056     GLFUNC_REQUIRES(glDebugMessageCallback,
2057                     "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
2058     GLFUNC_REQUIRES(glDebugMessageControl,
2059                     "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
2060     GLFUNC_REQUIRES(glDebugMessageInsert,
2061                     "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
2062     GLFUNC_REQUIRES(glGetDebugMessageLog,
2063                     "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
2064     GLFUNC_REQUIRES(glGetObjectLabel,
2065                     "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
2066     GLFUNC_REQUIRES(glGetObjectPtrLabel,
2067                     "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
2068     GLFUNC_REQUIRES(glObjectLabel,
2069                     "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
2070     GLFUNC_REQUIRES(glObjectPtrLabel,
2071                     "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
2072     GLFUNC_REQUIRES(glPopDebugGroup,
2073                     "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
2074     GLFUNC_REQUIRES(glPushDebugGroup,
2075                     "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
2076 
2077     // ARB_buffer_storage
2078     GLFUNC_REQUIRES(glBufferStorage, "GL_ARB_buffer_storage !VERSION_4_4"),
2079     GLFUNC_SUFFIX(glNamedBufferStorage, EXT,
2080                   "GL_ARB_buffer_storage GL_EXT_direct_state_access !VERSION_4_5"),
2081 
2082     // EXT_buffer_storage
2083     GLFUNC_SUFFIX(glBufferStorage, EXT,
2084                   "GL_EXT_buffer_storage !GL_ARB_buffer_storage !VERSION_4_4"),
2085 
2086     // EXT_geometry_shader
2087     GLFUNC_SUFFIX(glFramebufferTexture, EXT, "GL_EXT_geometry_shader !VERSION_3_2"),
2088 
2089     // NV_occlusion_query_samples
2090     GLFUNC_REQUIRES(glGenOcclusionQueriesNV, "GL_NV_occlusion_query_samples"),
2091     GLFUNC_REQUIRES(glDeleteOcclusionQueriesNV, "GL_NV_occlusion_query_samples"),
2092     GLFUNC_REQUIRES(glIsOcclusionQueryNV, "GL_NV_occlusion_query_samples"),
2093     GLFUNC_REQUIRES(glBeginOcclusionQueryNV, "GL_NV_occlusion_query_samples"),
2094     GLFUNC_REQUIRES(glEndOcclusionQueryNV, "GL_NV_occlusion_query_samples"),
2095     GLFUNC_REQUIRES(glGetOcclusionQueryivNV, "GL_NV_occlusion_query_samples"),
2096     GLFUNC_REQUIRES(glGetOcclusionQueryuivNV, "GL_NV_occlusion_query_samples"),
2097 
2098     // ARB_clip_control
2099     GLFUNC_REQUIRES(glClipControl, "GL_ARB_clip_control !VERSION_4_5"),
2100 
2101     // ARB_copy_image
2102     GLFUNC_REQUIRES(glCopyImageSubData, "GL_ARB_copy_image !VERSION_4_3 |VERSION_GLES_3_2"),
2103 
2104     // NV_copy_image
2105     GLFUNC_SUFFIX(glCopyImageSubData, NV, "GL_NV_copy_image !GL_ARB_copy_image !VERSION_GLES_3_2"),
2106 
2107     // OES_copy_image
2108     GLFUNC_SUFFIX(glCopyImageSubData, OES, "GL_OES_copy_image !VERSION_GLES_3_2"),
2109 
2110     // EXT_copy_image
2111     GLFUNC_SUFFIX(glCopyImageSubData, EXT,
2112                   "GL_EXT_copy_image !GL_OES_copy_image !VERSION_GLES_3_2"),
2113 
2114     // EXT_texture_buffer
2115     GLFUNC_SUFFIX(glTexBuffer, OES, "GL_OES_texture_buffer !VERSION_GLES_3_2"),
2116 
2117     // EXT_texture_buffer
2118     GLFUNC_SUFFIX(glTexBuffer, EXT,
2119                   "GL_EXT_texture_buffer !GL_OES_texture_buffer !VERSION_GLES_3_2"),
2120 
2121     // EXT_blend_func_extended
2122     GLFUNC_SUFFIX(glBindFragDataLocationIndexed, EXT, "GL_EXT_blend_func_extended"),
2123     GLFUNC_SUFFIX(glGetFragDataIndex, EXT, "GL_EXT_blend_func_extended"),
2124 
2125     // ARB_shader_storage_buffer_object
2126     GLFUNC_REQUIRES(glShaderStorageBlockBinding, "ARB_shader_storage_buffer_object !VERSION_4_3"),
2127 
2128     // NV_depth_buffer_float
2129     GLFUNC_REQUIRES(glDepthRangedNV, "GL_NV_depth_buffer_float"),
2130     GLFUNC_REQUIRES(glClearDepthdNV, "GL_NV_depth_buffer_float"),
2131     GLFUNC_REQUIRES(glDepthBoundsdNV, "GL_NV_depth_buffer_float"),
2132 
2133     // ARB_shader_image_load_store
2134     GLFUNC_REQUIRES(glBindImageTexture,
2135                     "GL_ARB_shader_image_load_store !VERSION_4_2 |VERSION_GLES_3_1"),
2136     GLFUNC_REQUIRES(glMemoryBarrier,
2137                     "GL_ARB_shader_image_load_store !VERSION_4_2 |VERSION_GLES_3_1"),
2138 
2139     // ARB_compute_shader
2140     GLFUNC_REQUIRES(glDispatchCompute, "GL_ARB_compute_shader !VERSION_4_3 |VERSION_GLES_3_1"),
2141     GLFUNC_REQUIRES(glDispatchComputeIndirect,
2142                     "GL_ARB_compute_shader !VERSION_4_3 |VERSION_GLES_3_1"),
2143 
2144     // ARB_get_texture_sub_image
2145     GLFUNC_REQUIRES(glGetTextureSubImage, "GL_ARB_get_texture_sub_image !VERSION_4_5"),
2146 };
2147 
2148 namespace GLExtensions
2149 {
2150 // Private members and functions
2151 static u32 s_gl_version;
2152 static std::unordered_map<std::string, bool> s_extension_list;
2153 
2154 // Private initialization functions
2155 bool InitFunctionPointers(GLContext* context);
2156 
2157 // Initializes the extension list the old way
InitExtensionList21()2158 static void InitExtensionList21()
2159 {
2160   const char* extensions = (const char*)glGetString(GL_EXTENSIONS);
2161   std::string tmp(extensions);
2162   std::istringstream buffer(tmp);
2163 
2164   while (buffer >> tmp)
2165     s_extension_list[tmp] = true;
2166 }
2167 
InitExtensionList(GLContext * context)2168 static void InitExtensionList(GLContext* context)
2169 {
2170   s_extension_list.clear();
2171   if (context->IsGLES())
2172   {
2173     switch (s_gl_version)
2174     {
2175     default:
2176     case 320:
2177       s_extension_list["VERSION_GLES_3_2"] = true;
2178     case 310:
2179       s_extension_list["VERSION_GLES_3_1"] = true;
2180     case 300:
2181       s_extension_list["VERSION_GLES_3"] = true;
2182       break;
2183     }
2184 
2185     // We always have ES 2.0
2186     s_extension_list["VERSION_GLES_2"] = true;
2187   }
2188   else
2189   {
2190     // Some OpenGL implementations chose to not expose core extensions as extensions
2191     // Let's add them to the list manually depending on which version of OpenGL we have
2192     // We need to be slightly careful here
2193     // When an extension got merged in to core, the naming may have changed
2194 
2195     // This has intentional fall through
2196     switch (s_gl_version)
2197     {
2198     default:
2199     case 450:
2200     {
2201       static const char* const gl450exts[] = {
2202           "GL_ARB_ES3_1_compatibility",
2203           "GL_ARB_clip_control",
2204           "GL_ARB_conditional_render_inverted",
2205           "GL_ARB_cull_distance",
2206           "GL_ARB_derivative_control",
2207           "GL_ARB_direct_state_access",
2208           "GL_ARB_get_texture_sub_image",
2209           "GL_ARB_robustness",
2210           "GL_ARB_shader_texture_image_samples",
2211           "GL_ARB_texture_barrier",
2212           "VERSION_4_5",
2213       };
2214       for (auto it : gl450exts)
2215         s_extension_list[it] = true;
2216     }
2217     case 440:
2218     {
2219       static const char* const gl440exts[] = {
2220           "GL_ARB_buffer_storage",
2221           "GL_ARB_clear_texture",
2222           "GL_ARB_enhanced_layouts",
2223           "GL_ARB_multi_bind",
2224           "GL_ARB_query_buffer_object",
2225           "GL_ARB_texture_mirror_clamp_to_edge",
2226           "GL_ARB_texture_stencil8",
2227           "GL_ARB_vertex_type_10f_11f_11f_rev",
2228           "VERSION_4_4",
2229       };
2230       for (auto it : gl440exts)
2231         s_extension_list[it] = true;
2232     }
2233     case 430:
2234     {
2235       static const char* const gl430exts[] = {
2236           "GL_ARB_ES3_compatibility",
2237           "GL_ARB_arrays_of_arrays",
2238           "GL_ARB_clear_buffer_object",
2239           "GL_ARB_compute_shader",
2240           "GL_ARB_copy_image",
2241           "GL_ARB_explicit_uniform_location",
2242           "GL_ARB_fragment_layer_viewport",
2243           "GL_ARB_framebuffer_no_attachments",
2244           "GL_ARB_internalformat_query2",
2245           "GL_ARB_invalidate_subdata",
2246           "GL_ARB_multi_draw_indirect",
2247           "GL_ARB_program_interface_query",
2248           "GL_ARB_shader_image_size",
2249           "GL_ARB_shader_storage_buffer_object",
2250           "GL_ARB_stencil_texturing",
2251           "GL_ARB_texture_buffer_range",
2252           "GL_ARB_texture_query_levels",
2253           "GL_ARB_texture_storage_multisample",
2254           "GL_ARB_texture_view",
2255           "GL_ARB_vertex_attrib_binding",
2256           "VERSION_4_3",
2257       };
2258       for (auto it : gl430exts)
2259         s_extension_list[it] = true;
2260     }
2261     case 420:
2262     {
2263       static const char* const gl420exts[] = {
2264           "GL_ARB_base_instance",
2265           "GL_ARB_compressed_texture_pixel_storage",
2266           "GL_ARB_conservative_depth",
2267           "GL_ARB_internalformat_query",
2268           "GL_ARB_map_buffer_alignment",
2269           "GL_ARB_shader_atomic_counters",
2270           "GL_ARB_shader_image_load_store",
2271           "GL_ARB_shading_language_420pack",
2272           "GL_ARB_shading_language_packing",
2273           "GL_ARB_texture_compression_BPTC",
2274           "GL_ARB_texture_storage",
2275           "GL_ARB_transform_feedback_instanced",
2276           "VERSION_4_2",
2277       };
2278       for (auto it : gl420exts)
2279         s_extension_list[it] = true;
2280     }
2281     case 410:
2282     {
2283       static const char* const gl410exts[] = {
2284           "GL_ARB_ES2_compatibility",
2285           "GL_ARB_get_program_binary",
2286           "GL_ARB_separate_shader_objects",
2287           "GL_ARB_shader_precision",
2288           "GL_ARB_vertex_attrib_64_bit",
2289           "GL_ARB_viewport_array",
2290           "VERSION_4_1",
2291       };
2292       for (auto it : gl410exts)
2293         s_extension_list[it] = true;
2294     }
2295     case 400:
2296     {
2297       static const char* const gl400exts[] = {
2298           "GL_ARB_draw_indirect",
2299           "GL_ARB_gpu_shader5",
2300           "GL_ARB_gpu_shader_fp64",
2301           "GL_ARB_sample_shading",
2302           "GL_ARB_shader_subroutine",
2303           "GL_ARB_tessellation_shader",
2304           "GL_ARB_texture_buffer_object_rgb32",
2305           "GL_ARB_texture_cube_map_array",
2306           "GL_ARB_texture_gather",
2307           "GL_ARB_texture_query_lod",
2308           "GL_ARB_transform_feedback2",
2309           "GL_ARB_transform_feedback3",
2310           "VERSION_4_0",
2311       };
2312       for (auto it : gl400exts)
2313         s_extension_list[it] = true;
2314     }
2315     case 330:
2316     {
2317       static const char* const gl330exts[] = {
2318           "GL_ARB_shader_bit_encoding",
2319           "GL_ARB_blend_func_extended",
2320           "GL_ARB_explicit_attrib_location",
2321           "GL_ARB_occlusion_query2",
2322           "GL_ARB_sampler_objects",
2323           "GL_ARB_texture_swizzle",
2324           "GL_ARB_timer_query",
2325           "GL_ARB_instanced_arrays",
2326           "GL_ARB_texture_rgb10_a2ui",
2327           "GL_ARB_vertex_type_2_10_10_10_rev",
2328           "VERSION_3_3",
2329       };
2330       for (auto it : gl330exts)
2331         s_extension_list[it] = true;
2332     }
2333     case 320:
2334     {
2335       static const char* const gl320exts[] = {
2336           "GL_ARB_geometry_shader4",
2337           "GL_ARB_sync",
2338           "GL_ARB_vertex_array_bgra",
2339           "GL_ARB_draw_elements_base_vertex",
2340           "GL_ARB_seamless_cube_map",
2341           "GL_ARB_texture_multisample",
2342           "GL_ARB_fragment_coord_conventions",
2343           "GL_ARB_provoking_vertex",
2344           "GL_ARB_depth_clamp",
2345           "VERSION_3_2",
2346       };
2347       for (auto it : gl320exts)
2348         s_extension_list[it] = true;
2349     }
2350     case 310:
2351     {
2352       // Can't add NV_primitive_restart since function name changed
2353       static const char* const gl310exts[] = {
2354           "GL_ARB_draw_instanced",
2355           "GL_ARB_copy_buffer",
2356           "GL_ARB_texture_buffer_object",
2357           "GL_ARB_texture_rectangle",
2358           "GL_ARB_uniform_buffer_object",
2359           //"GL_NV_primitive_restart",
2360           "VERSION_3_1",
2361       };
2362       for (auto it : gl310exts)
2363         s_extension_list[it] = true;
2364     }
2365     case 300:
2366     {
2367       // Quite a lot of these had their names changed when merged in to core
2368       // Disable the ones that have
2369       static const char* const gl300exts[] = {
2370           "GL_ARB_map_buffer_range",
2371           "GL_ARB_color_buffer_float",
2372           "GL_ARB_texture_float",
2373           "GL_ARB_half_float_pixel",
2374           "GL_ARB_framebuffer_object",
2375           "GL_ARB_texture_float",
2376           "GL_ARB_vertex_array_object",
2377           "GL_ARB_depth_buffer_float",
2378           //"GL_EXT_texture_integer",
2379           //"GL_EXT_gpu_shader4",
2380           //"GL_APPLE_flush_buffer_range",
2381           //"GL_EXT_packed_float",
2382           //"GL_EXT_texture_shared_exponent",
2383           //"GL_NV_half_float",
2384           //"GL_EXT_framebuffer_sRGB",
2385           //"GL_EXT_draw_buffers2",
2386           //"GL_EXT_texture_integer",
2387           //"GL_EXT_texture_array",
2388           //"GL_EXT_texture_compression_rgtc",
2389           //"GL_EXT_transform_feedback",
2390           //"GL_NV_conditional_render",
2391           "VERSION_3_0",
2392       };
2393       for (auto it : gl300exts)
2394         s_extension_list[it] = true;
2395     }
2396     case 210:
2397     case 200:
2398     case 150:
2399     case 140:
2400     case 130:
2401     case 121:
2402     case 120:
2403     case 110:
2404     case 100:
2405       break;
2406     }
2407     // So we can easily determine if we are running dekstop GL
2408     s_extension_list["VERSION_GL"] = true;
2409   }
2410 
2411   if (s_gl_version < 300)
2412   {
2413     InitExtensionList21();
2414     return;
2415   }
2416   GLint NumExtension = 0;
2417   glGetIntegerv(GL_NUM_EXTENSIONS, &NumExtension);
2418   for (GLint i = 0; i < NumExtension; ++i)
2419     s_extension_list[std::string((const char*)glGetStringi(GL_EXTENSIONS, i))] = true;
2420 }
InitVersion()2421 static void InitVersion()
2422 {
2423   GLint major, minor;
2424   glGetIntegerv(GL_MAJOR_VERSION, &major);
2425   glGetIntegerv(GL_MINOR_VERSION, &minor);
2426   if (glGetError() == GL_NO_ERROR)
2427     s_gl_version = major * 100 + minor * 10;
2428   else
2429     s_gl_version = 210;
2430 }
2431 
GetFuncAddress(GLContext * context,const std::string & name,void ** func)2432 static void* GetFuncAddress(GLContext* context, const std::string& name, void** func)
2433 {
2434   *func = context->GetFuncAddress(name);
2435   if (*func == nullptr)
2436   {
2437 #if defined(__linux__) || defined(__APPLE__)
2438     // Give it a second try with dlsym
2439     *func = dlsym(RTLD_NEXT, name.c_str());
2440 #endif
2441     if (*func == nullptr)
2442       ERROR_LOG(VIDEO, "Couldn't load function %s", name.c_str());
2443   }
2444   return *func;
2445 }
2446 
2447 // Public members
Version()2448 u32 Version()
2449 {
2450   return s_gl_version;
2451 }
Supports(const std::string & name)2452 bool Supports(const std::string& name)
2453 {
2454   return s_extension_list[name];
2455 }
2456 
Init(GLContext * context)2457 bool Init(GLContext* context)
2458 {
2459   // Grab a few functions for initial checking
2460   // We need them to grab the extension list
2461   // Also to check if there is an error grabbing the version
2462   if (GetFuncAddress(context, "glGetIntegerv", (void**)&glGetIntegerv) == nullptr)
2463     return false;
2464   if (GetFuncAddress(context, "glGetString", (void**)&glGetString) == nullptr)
2465     return false;
2466   if (GetFuncAddress(context, "glGetError", (void**)&glGetError) == nullptr)
2467     return false;
2468 
2469   InitVersion();
2470 
2471   // We need to use glGetStringi to get the extension list
2472   // if we are using GLES3 or a GL version greater than 2.1
2473   if (s_gl_version > 210 &&
2474       GetFuncAddress(context, "glGetStringi", (void**)&glGetStringi) == nullptr)
2475     return false;
2476 
2477   InitExtensionList(context);
2478 
2479   return InitFunctionPointers(context);
2480 }
2481 
2482 // Private initialization functions
HasFeatures(const std::string & extensions)2483 static bool HasFeatures(const std::string& extensions)
2484 {
2485   bool result = true;
2486   std::string tmp;
2487   std::istringstream buffer(extensions);
2488 
2489   while (buffer >> tmp)
2490   {
2491     if (tmp[0] == '!')
2492       result &= !s_extension_list[tmp.erase(0, 1)];
2493     else if (tmp[0] == '|')
2494       result |= s_extension_list[tmp.erase(0, 1)];
2495     else
2496       result &= s_extension_list[tmp];
2497   }
2498   return result;
2499 }
InitFunctionPointers(GLContext * context)2500 bool InitFunctionPointers(GLContext* context)
2501 {
2502   bool result = true;
2503   for (const auto& it : gl_function_array)
2504     if (HasFeatures(it.requirements))
2505       result &= !!GetFuncAddress(context, it.function_name, it.function_ptr);
2506   return result;
2507 }
2508 }  // namespace GLExtensions
2509