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