forked from dolphin-emu/dolphin
		
	
		
			
				
	
	
		
			2509 lines
		
	
	
		
			109 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			2509 lines
		
	
	
		
			109 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Copyright 2013 Dolphin Emulator Project
 | 
						|
// Licensed under GPLv2+
 | 
						|
// Refer to the license.txt file included.
 | 
						|
 | 
						|
#include <sstream>
 | 
						|
#include <unordered_map>
 | 
						|
 | 
						|
#include "Common/GL/GLContext.h"
 | 
						|
#include "Common/GL/GLExtensions/GLExtensions.h"
 | 
						|
#include "Common/Logging/Log.h"
 | 
						|
 | 
						|
#if defined(__linux__) || defined(__APPLE__)
 | 
						|
#include <dlfcn.h>
 | 
						|
#endif
 | 
						|
 | 
						|
// gl_1_1
 | 
						|
PFNDOLCLEARINDEXPROC dolClearIndex;
 | 
						|
PFNDOLCLEARCOLORPROC dolClearColor;
 | 
						|
PFNDOLCLEARPROC dolClear;
 | 
						|
PFNDOLINDEXMASKPROC dolIndexMask;
 | 
						|
PFNDOLCOLORMASKPROC dolColorMask;
 | 
						|
PFNDOLALPHAFUNCPROC dolAlphaFunc;
 | 
						|
PFNDOLBLENDFUNCPROC dolBlendFunc;
 | 
						|
PFNDOLLOGICOPPROC dolLogicOp;
 | 
						|
PFNDOLCULLFACEPROC dolCullFace;
 | 
						|
PFNDOLFRONTFACEPROC dolFrontFace;
 | 
						|
PFNDOLPOINTSIZEPROC dolPointSize;
 | 
						|
PFNDOLLINEWIDTHPROC dolLineWidth;
 | 
						|
PFNDOLLINESTIPPLEPROC dolLineStipple;
 | 
						|
PFNDOLPOLYGONMODEPROC dolPolygonMode;
 | 
						|
PFNDOLPOLYGONOFFSETPROC dolPolygonOffset;
 | 
						|
PFNDOLPOLYGONSTIPPLEPROC dolPolygonStipple;
 | 
						|
PFNDOLGETPOLYGONSTIPPLEPROC dolGetPolygonStipple;
 | 
						|
PFNDOLEDGEFLAGPROC dolEdgeFlag;
 | 
						|
PFNDOLEDGEFLAGVPROC dolEdgeFlagv;
 | 
						|
PFNDOLSCISSORPROC dolScissor;
 | 
						|
PFNDOLCLIPPLANEPROC dolClipPlane;
 | 
						|
PFNDOLGETCLIPPLANEPROC dolGetClipPlane;
 | 
						|
PFNDOLDRAWBUFFERPROC dolDrawBuffer;
 | 
						|
PFNDOLREADBUFFERPROC dolReadBuffer;
 | 
						|
PFNDOLENABLEPROC dolEnable;
 | 
						|
PFNDOLDISABLEPROC dolDisable;
 | 
						|
PFNDOLISENABLEDPROC dolIsEnabled;
 | 
						|
PFNDOLENABLECLIENTSTATEPROC dolEnableClientState;
 | 
						|
PFNDOLDISABLECLIENTSTATEPROC dolDisableClientState;
 | 
						|
PFNDOLGETBOOLEANVPROC dolGetBooleanv;
 | 
						|
PFNDOLGETDOUBLEVPROC dolGetDoublev;
 | 
						|
PFNDOLGETFLOATVPROC dolGetFloatv;
 | 
						|
PFNDOLGETINTEGERVPROC dolGetIntegerv;
 | 
						|
PFNDOLPUSHATTRIBPROC dolPushAttrib;
 | 
						|
PFNDOLPOPATTRIBPROC dolPopAttrib;
 | 
						|
PFNDOLPUSHCLIENTATTRIBPROC dolPushClientAttrib;
 | 
						|
PFNDOLPOPCLIENTATTRIBPROC dolPopClientAttrib;
 | 
						|
PFNDOLRENDERMODEPROC dolRenderMode;
 | 
						|
PFNDOLGETERRORPROC dolGetError;
 | 
						|
PFNDOLGETSTRINGPROC dolGetString;
 | 
						|
PFNDOLFINISHPROC dolFinish;
 | 
						|
PFNDOLFLUSHPROC dolFlush;
 | 
						|
PFNDOLHINTPROC dolHint;
 | 
						|
PFNDOLCLEARDEPTHPROC dolClearDepth;
 | 
						|
PFNDOLDEPTHFUNCPROC dolDepthFunc;
 | 
						|
PFNDOLDEPTHMASKPROC dolDepthMask;
 | 
						|
PFNDOLDEPTHRANGEPROC dolDepthRange;
 | 
						|
PFNDOLCLEARACCUMPROC dolClearAccum;
 | 
						|
PFNDOLACCUMPROC dolAccum;
 | 
						|
PFNDOLMATRIXMODEPROC dolMatrixMode;
 | 
						|
PFNDOLORTHOPROC dolOrtho;
 | 
						|
PFNDOLFRUSTUMPROC dolFrustum;
 | 
						|
PFNDOLVIEWPORTPROC dolViewport;
 | 
						|
PFNDOLPUSHMATRIXPROC dolPushMatrix;
 | 
						|
PFNDOLPOPMATRIXPROC dolPopMatrix;
 | 
						|
PFNDOLLOADIDENTITYPROC dolLoadIdentity;
 | 
						|
PFNDOLLOADMATRIXDPROC dolLoadMatrixd;
 | 
						|
PFNDOLLOADMATRIXFPROC dolLoadMatrixf;
 | 
						|
PFNDOLMULTMATRIXDPROC dolMultMatrixd;
 | 
						|
PFNDOLMULTMATRIXFPROC dolMultMatrixf;
 | 
						|
PFNDOLROTATEDPROC dolRotated;
 | 
						|
PFNDOLROTATEFPROC dolRotatef;
 | 
						|
PFNDOLSCALEDPROC dolScaled;
 | 
						|
PFNDOLSCALEFPROC dolScalef;
 | 
						|
PFNDOLTRANSLATEDPROC dolTranslated;
 | 
						|
PFNDOLTRANSLATEFPROC dolTranslatef;
 | 
						|
PFNDOLISLISTPROC dolIsList;
 | 
						|
PFNDOLDELETELISTSPROC dolDeleteLists;
 | 
						|
PFNDOLGENLISTSPROC dolGenLists;
 | 
						|
PFNDOLNEWLISTPROC dolNewList;
 | 
						|
PFNDOLENDLISTPROC dolEndList;
 | 
						|
PFNDOLCALLLISTPROC dolCallList;
 | 
						|
PFNDOLCALLLISTSPROC dolCallLists;
 | 
						|
PFNDOLLISTBASEPROC dolListBase;
 | 
						|
PFNDOLBEGINPROC dolBegin;
 | 
						|
PFNDOLENDPROC dolEnd;
 | 
						|
PFNDOLVERTEX2DPROC dolVertex2d;
 | 
						|
PFNDOLVERTEX2FPROC dolVertex2f;
 | 
						|
PFNDOLVERTEX2IPROC dolVertex2i;
 | 
						|
PFNDOLVERTEX2SPROC dolVertex2s;
 | 
						|
PFNDOLVERTEX3DPROC dolVertex3d;
 | 
						|
PFNDOLVERTEX3FPROC dolVertex3f;
 | 
						|
PFNDOLVERTEX3IPROC dolVertex3i;
 | 
						|
PFNDOLVERTEX3SPROC dolVertex3s;
 | 
						|
PFNDOLVERTEX4DPROC dolVertex4d;
 | 
						|
PFNDOLVERTEX4FPROC dolVertex4f;
 | 
						|
PFNDOLVERTEX4IPROC dolVertex4i;
 | 
						|
PFNDOLVERTEX4SPROC dolVertex4s;
 | 
						|
PFNDOLVERTEX2DVPROC dolVertex2dv;
 | 
						|
PFNDOLVERTEX2FVPROC dolVertex2fv;
 | 
						|
PFNDOLVERTEX2IVPROC dolVertex2iv;
 | 
						|
PFNDOLVERTEX2SVPROC dolVertex2sv;
 | 
						|
PFNDOLVERTEX3DVPROC dolVertex3dv;
 | 
						|
PFNDOLVERTEX3FVPROC dolVertex3fv;
 | 
						|
PFNDOLVERTEX3IVPROC dolVertex3iv;
 | 
						|
PFNDOLVERTEX3SVPROC dolVertex3sv;
 | 
						|
PFNDOLVERTEX4DVPROC dolVertex4dv;
 | 
						|
PFNDOLVERTEX4FVPROC dolVertex4fv;
 | 
						|
PFNDOLVERTEX4IVPROC dolVertex4iv;
 | 
						|
PFNDOLVERTEX4SVPROC dolVertex4sv;
 | 
						|
PFNDOLNORMAL3BPROC dolNormal3b;
 | 
						|
PFNDOLNORMAL3DPROC dolNormal3d;
 | 
						|
PFNDOLNORMAL3FPROC dolNormal3f;
 | 
						|
PFNDOLNORMAL3IPROC dolNormal3i;
 | 
						|
PFNDOLNORMAL3SPROC dolNormal3s;
 | 
						|
PFNDOLNORMAL3BVPROC dolNormal3bv;
 | 
						|
PFNDOLNORMAL3DVPROC dolNormal3dv;
 | 
						|
PFNDOLNORMAL3FVPROC dolNormal3fv;
 | 
						|
PFNDOLNORMAL3IVPROC dolNormal3iv;
 | 
						|
PFNDOLNORMAL3SVPROC dolNormal3sv;
 | 
						|
PFNDOLINDEXDPROC dolIndexd;
 | 
						|
PFNDOLINDEXFPROC dolIndexf;
 | 
						|
PFNDOLINDEXIPROC dolIndexi;
 | 
						|
PFNDOLINDEXSPROC dolIndexs;
 | 
						|
PFNDOLINDEXUBPROC dolIndexub;
 | 
						|
PFNDOLINDEXDVPROC dolIndexdv;
 | 
						|
PFNDOLINDEXFVPROC dolIndexfv;
 | 
						|
PFNDOLINDEXIVPROC dolIndexiv;
 | 
						|
PFNDOLINDEXSVPROC dolIndexsv;
 | 
						|
PFNDOLINDEXUBVPROC dolIndexubv;
 | 
						|
PFNDOLCOLOR3BPROC dolColor3b;
 | 
						|
PFNDOLCOLOR3DPROC dolColor3d;
 | 
						|
PFNDOLCOLOR3FPROC dolColor3f;
 | 
						|
PFNDOLCOLOR3IPROC dolColor3i;
 | 
						|
PFNDOLCOLOR3SPROC dolColor3s;
 | 
						|
PFNDOLCOLOR3UBPROC dolColor3ub;
 | 
						|
PFNDOLCOLOR3UIPROC dolColor3ui;
 | 
						|
PFNDOLCOLOR3USPROC dolColor3us;
 | 
						|
PFNDOLCOLOR4BPROC dolColor4b;
 | 
						|
PFNDOLCOLOR4DPROC dolColor4d;
 | 
						|
PFNDOLCOLOR4FPROC dolColor4f;
 | 
						|
PFNDOLCOLOR4IPROC dolColor4i;
 | 
						|
PFNDOLCOLOR4SPROC dolColor4s;
 | 
						|
PFNDOLCOLOR4UBPROC dolColor4ub;
 | 
						|
PFNDOLCOLOR4UIPROC dolColor4ui;
 | 
						|
PFNDOLCOLOR4USPROC dolColor4us;
 | 
						|
PFNDOLCOLOR3BVPROC dolColor3bv;
 | 
						|
PFNDOLCOLOR3DVPROC dolColor3dv;
 | 
						|
PFNDOLCOLOR3FVPROC dolColor3fv;
 | 
						|
PFNDOLCOLOR3IVPROC dolColor3iv;
 | 
						|
PFNDOLCOLOR3SVPROC dolColor3sv;
 | 
						|
PFNDOLCOLOR3UBVPROC dolColor3ubv;
 | 
						|
PFNDOLCOLOR3UIVPROC dolColor3uiv;
 | 
						|
PFNDOLCOLOR3USVPROC dolColor3usv;
 | 
						|
PFNDOLCOLOR4BVPROC dolColor4bv;
 | 
						|
PFNDOLCOLOR4DVPROC dolColor4dv;
 | 
						|
PFNDOLCOLOR4FVPROC dolColor4fv;
 | 
						|
PFNDOLCOLOR4IVPROC dolColor4iv;
 | 
						|
PFNDOLCOLOR4SVPROC dolColor4sv;
 | 
						|
PFNDOLCOLOR4UBVPROC dolColor4ubv;
 | 
						|
PFNDOLCOLOR4UIVPROC dolColor4uiv;
 | 
						|
PFNDOLCOLOR4USVPROC dolColor4usv;
 | 
						|
PFNDOLTEXCOORD1DPROC dolTexCoord1d;
 | 
						|
PFNDOLTEXCOORD1FPROC dolTexCoord1f;
 | 
						|
PFNDOLTEXCOORD1IPROC dolTexCoord1i;
 | 
						|
PFNDOLTEXCOORD1SPROC dolTexCoord1s;
 | 
						|
PFNDOLTEXCOORD2DPROC dolTexCoord2d;
 | 
						|
PFNDOLTEXCOORD2FPROC dolTexCoord2f;
 | 
						|
PFNDOLTEXCOORD2IPROC dolTexCoord2i;
 | 
						|
PFNDOLTEXCOORD2SPROC dolTexCoord2s;
 | 
						|
PFNDOLTEXCOORD3DPROC dolTexCoord3d;
 | 
						|
PFNDOLTEXCOORD3FPROC dolTexCoord3f;
 | 
						|
PFNDOLTEXCOORD3IPROC dolTexCoord3i;
 | 
						|
PFNDOLTEXCOORD3SPROC dolTexCoord3s;
 | 
						|
PFNDOLTEXCOORD4DPROC dolTexCoord4d;
 | 
						|
PFNDOLTEXCOORD4FPROC dolTexCoord4f;
 | 
						|
PFNDOLTEXCOORD4IPROC dolTexCoord4i;
 | 
						|
PFNDOLTEXCOORD4SPROC dolTexCoord4s;
 | 
						|
PFNDOLTEXCOORD1DVPROC dolTexCoord1dv;
 | 
						|
PFNDOLTEXCOORD1FVPROC dolTexCoord1fv;
 | 
						|
PFNDOLTEXCOORD1IVPROC dolTexCoord1iv;
 | 
						|
PFNDOLTEXCOORD1SVPROC dolTexCoord1sv;
 | 
						|
PFNDOLTEXCOORD2DVPROC dolTexCoord2dv;
 | 
						|
PFNDOLTEXCOORD2FVPROC dolTexCoord2fv;
 | 
						|
PFNDOLTEXCOORD2IVPROC dolTexCoord2iv;
 | 
						|
PFNDOLTEXCOORD2SVPROC dolTexCoord2sv;
 | 
						|
PFNDOLTEXCOORD3DVPROC dolTexCoord3dv;
 | 
						|
PFNDOLTEXCOORD3FVPROC dolTexCoord3fv;
 | 
						|
PFNDOLTEXCOORD3IVPROC dolTexCoord3iv;
 | 
						|
PFNDOLTEXCOORD3SVPROC dolTexCoord3sv;
 | 
						|
PFNDOLTEXCOORD4DVPROC dolTexCoord4dv;
 | 
						|
PFNDOLTEXCOORD4FVPROC dolTexCoord4fv;
 | 
						|
PFNDOLTEXCOORD4IVPROC dolTexCoord4iv;
 | 
						|
PFNDOLTEXCOORD4SVPROC dolTexCoord4sv;
 | 
						|
PFNDOLRASTERPOS2DPROC dolRasterPos2d;
 | 
						|
PFNDOLRASTERPOS2FPROC dolRasterPos2f;
 | 
						|
PFNDOLRASTERPOS2IPROC dolRasterPos2i;
 | 
						|
PFNDOLRASTERPOS2SPROC dolRasterPos2s;
 | 
						|
PFNDOLRASTERPOS3DPROC dolRasterPos3d;
 | 
						|
PFNDOLRASTERPOS3FPROC dolRasterPos3f;
 | 
						|
PFNDOLRASTERPOS3IPROC dolRasterPos3i;
 | 
						|
PFNDOLRASTERPOS3SPROC dolRasterPos3s;
 | 
						|
PFNDOLRASTERPOS4DPROC dolRasterPos4d;
 | 
						|
PFNDOLRASTERPOS4FPROC dolRasterPos4f;
 | 
						|
PFNDOLRASTERPOS4IPROC dolRasterPos4i;
 | 
						|
PFNDOLRASTERPOS4SPROC dolRasterPos4s;
 | 
						|
PFNDOLRASTERPOS2DVPROC dolRasterPos2dv;
 | 
						|
PFNDOLRASTERPOS2FVPROC dolRasterPos2fv;
 | 
						|
PFNDOLRASTERPOS2IVPROC dolRasterPos2iv;
 | 
						|
PFNDOLRASTERPOS2SVPROC dolRasterPos2sv;
 | 
						|
PFNDOLRASTERPOS3DVPROC dolRasterPos3dv;
 | 
						|
PFNDOLRASTERPOS3FVPROC dolRasterPos3fv;
 | 
						|
PFNDOLRASTERPOS3IVPROC dolRasterPos3iv;
 | 
						|
PFNDOLRASTERPOS3SVPROC dolRasterPos3sv;
 | 
						|
PFNDOLRASTERPOS4DVPROC dolRasterPos4dv;
 | 
						|
PFNDOLRASTERPOS4FVPROC dolRasterPos4fv;
 | 
						|
PFNDOLRASTERPOS4IVPROC dolRasterPos4iv;
 | 
						|
PFNDOLRASTERPOS4SVPROC dolRasterPos4sv;
 | 
						|
PFNDOLRECTDPROC dolRectd;
 | 
						|
PFNDOLRECTFPROC dolRectf;
 | 
						|
PFNDOLRECTIPROC dolRecti;
 | 
						|
PFNDOLRECTSPROC dolRects;
 | 
						|
PFNDOLRECTDVPROC dolRectdv;
 | 
						|
PFNDOLRECTFVPROC dolRectfv;
 | 
						|
PFNDOLRECTIVPROC dolRectiv;
 | 
						|
PFNDOLRECTSVPROC dolRectsv;
 | 
						|
PFNDOLVERTEXPOINTERPROC dolVertexPointer;
 | 
						|
PFNDOLNORMALPOINTERPROC dolNormalPointer;
 | 
						|
PFNDOLCOLORPOINTERPROC dolColorPointer;
 | 
						|
PFNDOLINDEXPOINTERPROC dolIndexPointer;
 | 
						|
PFNDOLTEXCOORDPOINTERPROC dolTexCoordPointer;
 | 
						|
PFNDOLEDGEFLAGPOINTERPROC dolEdgeFlagPointer;
 | 
						|
PFNDOLGETPOINTERVPROC dolGetPointerv;
 | 
						|
PFNDOLARRAYELEMENTPROC dolArrayElement;
 | 
						|
PFNDOLDRAWARRAYSPROC dolDrawArrays;
 | 
						|
PFNDOLDRAWELEMENTSPROC dolDrawElements;
 | 
						|
PFNDOLINTERLEAVEDARRAYSPROC dolInterleavedArrays;
 | 
						|
PFNDOLSHADEMODELPROC dolShadeModel;
 | 
						|
PFNDOLLIGHTFPROC dolLightf;
 | 
						|
PFNDOLLIGHTIPROC dolLighti;
 | 
						|
PFNDOLLIGHTFVPROC dolLightfv;
 | 
						|
PFNDOLLIGHTIVPROC dolLightiv;
 | 
						|
PFNDOLGETLIGHTFVPROC dolGetLightfv;
 | 
						|
PFNDOLGETLIGHTIVPROC dolGetLightiv;
 | 
						|
PFNDOLLIGHTMODELFPROC dolLightModelf;
 | 
						|
PFNDOLLIGHTMODELIPROC dolLightModeli;
 | 
						|
PFNDOLLIGHTMODELFVPROC dolLightModelfv;
 | 
						|
PFNDOLLIGHTMODELIVPROC dolLightModeliv;
 | 
						|
PFNDOLMATERIALFPROC dolMaterialf;
 | 
						|
PFNDOLMATERIALIPROC dolMateriali;
 | 
						|
PFNDOLMATERIALFVPROC dolMaterialfv;
 | 
						|
PFNDOLMATERIALIVPROC dolMaterialiv;
 | 
						|
PFNDOLGETMATERIALFVPROC dolGetMaterialfv;
 | 
						|
PFNDOLGETMATERIALIVPROC dolGetMaterialiv;
 | 
						|
PFNDOLCOLORMATERIALPROC dolColorMaterial;
 | 
						|
PFNDOLPIXELZOOMPROC dolPixelZoom;
 | 
						|
PFNDOLPIXELSTOREFPROC dolPixelStoref;
 | 
						|
PFNDOLPIXELSTOREIPROC dolPixelStorei;
 | 
						|
PFNDOLPIXELTRANSFERFPROC dolPixelTransferf;
 | 
						|
PFNDOLPIXELTRANSFERIPROC dolPixelTransferi;
 | 
						|
PFNDOLPIXELMAPFVPROC dolPixelMapfv;
 | 
						|
PFNDOLPIXELMAPUIVPROC dolPixelMapuiv;
 | 
						|
PFNDOLPIXELMAPUSVPROC dolPixelMapusv;
 | 
						|
PFNDOLGETPIXELMAPFVPROC dolGetPixelMapfv;
 | 
						|
PFNDOLGETPIXELMAPUIVPROC dolGetPixelMapuiv;
 | 
						|
PFNDOLGETPIXELMAPUSVPROC dolGetPixelMapusv;
 | 
						|
PFNDOLBITMAPPROC dolBitmap;
 | 
						|
PFNDOLREADPIXELSPROC dolReadPixels;
 | 
						|
PFNDOLDRAWPIXELSPROC dolDrawPixels;
 | 
						|
PFNDOLCOPYPIXELSPROC dolCopyPixels;
 | 
						|
PFNDOLSTENCILFUNCPROC dolStencilFunc;
 | 
						|
PFNDOLSTENCILMASKPROC dolStencilMask;
 | 
						|
PFNDOLSTENCILOPPROC dolStencilOp;
 | 
						|
PFNDOLCLEARSTENCILPROC dolClearStencil;
 | 
						|
PFNDOLTEXGENDPROC dolTexGend;
 | 
						|
PFNDOLTEXGENFPROC dolTexGenf;
 | 
						|
PFNDOLTEXGENIPROC dolTexGeni;
 | 
						|
PFNDOLTEXGENDVPROC dolTexGendv;
 | 
						|
PFNDOLTEXGENFVPROC dolTexGenfv;
 | 
						|
PFNDOLTEXGENIVPROC dolTexGeniv;
 | 
						|
PFNDOLGETTEXGENDVPROC dolGetTexGendv;
 | 
						|
PFNDOLGETTEXGENFVPROC dolGetTexGenfv;
 | 
						|
PFNDOLGETTEXGENIVPROC dolGetTexGeniv;
 | 
						|
PFNDOLTEXENVFPROC dolTexEnvf;
 | 
						|
PFNDOLTEXENVIPROC dolTexEnvi;
 | 
						|
PFNDOLTEXENVFVPROC dolTexEnvfv;
 | 
						|
PFNDOLTEXENVIVPROC dolTexEnviv;
 | 
						|
PFNDOLGETTEXENVFVPROC dolGetTexEnvfv;
 | 
						|
PFNDOLGETTEXENVIVPROC dolGetTexEnviv;
 | 
						|
PFNDOLTEXPARAMETERFPROC dolTexParameterf;
 | 
						|
PFNDOLTEXPARAMETERIPROC dolTexParameteri;
 | 
						|
PFNDOLTEXPARAMETERFVPROC dolTexParameterfv;
 | 
						|
PFNDOLTEXPARAMETERIVPROC dolTexParameteriv;
 | 
						|
PFNDOLGETTEXPARAMETERFVPROC dolGetTexParameterfv;
 | 
						|
PFNDOLGETTEXPARAMETERIVPROC dolGetTexParameteriv;
 | 
						|
PFNDOLGETTEXLEVELPARAMETERFVPROC dolGetTexLevelParameterfv;
 | 
						|
PFNDOLGETTEXLEVELPARAMETERIVPROC dolGetTexLevelParameteriv;
 | 
						|
PFNDOLTEXIMAGE1DPROC dolTexImage1D;
 | 
						|
PFNDOLTEXIMAGE2DPROC dolTexImage2D;
 | 
						|
PFNDOLGETTEXIMAGEPROC dolGetTexImage;
 | 
						|
PFNDOLGENTEXTURESPROC dolGenTextures;
 | 
						|
PFNDOLDELETETEXTURESPROC dolDeleteTextures;
 | 
						|
PFNDOLBINDTEXTUREPROC dolBindTexture;
 | 
						|
PFNDOLPRIORITIZETEXTURESPROC dolPrioritizeTextures;
 | 
						|
PFNDOLARETEXTURESRESIDENTPROC dolAreTexturesResident;
 | 
						|
PFNDOLISTEXTUREPROC dolIsTexture;
 | 
						|
PFNDOLTEXSUBIMAGE1DPROC dolTexSubImage1D;
 | 
						|
PFNDOLTEXSUBIMAGE2DPROC dolTexSubImage2D;
 | 
						|
PFNDOLCOPYTEXIMAGE1DPROC dolCopyTexImage1D;
 | 
						|
PFNDOLCOPYTEXIMAGE2DPROC dolCopyTexImage2D;
 | 
						|
PFNDOLCOPYTEXSUBIMAGE1DPROC dolCopyTexSubImage1D;
 | 
						|
PFNDOLCOPYTEXSUBIMAGE2DPROC dolCopyTexSubImage2D;
 | 
						|
PFNDOLMAP1DPROC dolMap1d;
 | 
						|
PFNDOLMAP1FPROC dolMap1f;
 | 
						|
PFNDOLMAP2DPROC dolMap2d;
 | 
						|
PFNDOLMAP2FPROC dolMap2f;
 | 
						|
PFNDOLGETMAPDVPROC dolGetMapdv;
 | 
						|
PFNDOLGETMAPFVPROC dolGetMapfv;
 | 
						|
PFNDOLGETMAPIVPROC dolGetMapiv;
 | 
						|
PFNDOLEVALCOORD1DPROC dolEvalCoord1d;
 | 
						|
PFNDOLEVALCOORD1FPROC dolEvalCoord1f;
 | 
						|
PFNDOLEVALCOORD1DVPROC dolEvalCoord1dv;
 | 
						|
PFNDOLEVALCOORD1FVPROC dolEvalCoord1fv;
 | 
						|
PFNDOLEVALCOORD2DPROC dolEvalCoord2d;
 | 
						|
PFNDOLEVALCOORD2FPROC dolEvalCoord2f;
 | 
						|
PFNDOLEVALCOORD2DVPROC dolEvalCoord2dv;
 | 
						|
PFNDOLEVALCOORD2FVPROC dolEvalCoord2fv;
 | 
						|
PFNDOLMAPGRID1DPROC dolMapGrid1d;
 | 
						|
PFNDOLMAPGRID1FPROC dolMapGrid1f;
 | 
						|
PFNDOLMAPGRID2DPROC dolMapGrid2d;
 | 
						|
PFNDOLMAPGRID2FPROC dolMapGrid2f;
 | 
						|
PFNDOLEVALPOINT1PROC dolEvalPoint1;
 | 
						|
PFNDOLEVALPOINT2PROC dolEvalPoint2;
 | 
						|
PFNDOLEVALMESH1PROC dolEvalMesh1;
 | 
						|
PFNDOLEVALMESH2PROC dolEvalMesh2;
 | 
						|
PFNDOLFOGFPROC dolFogf;
 | 
						|
PFNDOLFOGIPROC dolFogi;
 | 
						|
PFNDOLFOGFVPROC dolFogfv;
 | 
						|
PFNDOLFOGIVPROC dolFogiv;
 | 
						|
PFNDOLFEEDBACKBUFFERPROC dolFeedbackBuffer;
 | 
						|
PFNDOLPASSTHROUGHPROC dolPassThrough;
 | 
						|
PFNDOLSELECTBUFFERPROC dolSelectBuffer;
 | 
						|
PFNDOLINITNAMESPROC dolInitNames;
 | 
						|
PFNDOLLOADNAMEPROC dolLoadName;
 | 
						|
PFNDOLPUSHNAMEPROC dolPushName;
 | 
						|
PFNDOLPOPNAMEPROC dolPopName;
 | 
						|
 | 
						|
// gl_1_2
 | 
						|
PFNDOLCOPYTEXSUBIMAGE3DPROC dolCopyTexSubImage3D;
 | 
						|
PFNDOLDRAWRANGEELEMENTSPROC dolDrawRangeElements;
 | 
						|
PFNDOLTEXIMAGE3DPROC dolTexImage3D;
 | 
						|
PFNDOLTEXSUBIMAGE3DPROC dolTexSubImage3D;
 | 
						|
 | 
						|
// gl_1_3
 | 
						|
PFNDOLACTIVETEXTUREARBPROC dolActiveTexture;
 | 
						|
PFNDOLCLIENTACTIVETEXTUREARBPROC dolClientActiveTexture;
 | 
						|
PFNDOLCOMPRESSEDTEXIMAGE1DPROC dolCompressedTexImage1D;
 | 
						|
PFNDOLCOMPRESSEDTEXIMAGE2DPROC dolCompressedTexImage2D;
 | 
						|
PFNDOLCOMPRESSEDTEXIMAGE3DPROC dolCompressedTexImage3D;
 | 
						|
PFNDOLCOMPRESSEDTEXSUBIMAGE1DPROC dolCompressedTexSubImage1D;
 | 
						|
PFNDOLCOMPRESSEDTEXSUBIMAGE2DPROC dolCompressedTexSubImage2D;
 | 
						|
PFNDOLCOMPRESSEDTEXSUBIMAGE3DPROC dolCompressedTexSubImage3D;
 | 
						|
PFNDOLGETCOMPRESSEDTEXIMAGEPROC dolGetCompressedTexImage;
 | 
						|
PFNDOLLOADTRANSPOSEMATRIXDARBPROC dolLoadTransposeMatrixd;
 | 
						|
PFNDOLLOADTRANSPOSEMATRIXFARBPROC dolLoadTransposeMatrixf;
 | 
						|
PFNDOLMULTTRANSPOSEMATRIXDARBPROC dolMultTransposeMatrixd;
 | 
						|
PFNDOLMULTTRANSPOSEMATRIXFARBPROC dolMultTransposeMatrixf;
 | 
						|
PFNDOLMULTITEXCOORD1DARBPROC dolMultiTexCoord1d;
 | 
						|
PFNDOLMULTITEXCOORD1DVARBPROC dolMultiTexCoord1dv;
 | 
						|
PFNDOLMULTITEXCOORD1FARBPROC dolMultiTexCoord1f;
 | 
						|
PFNDOLMULTITEXCOORD1FVARBPROC dolMultiTexCoord1fv;
 | 
						|
PFNDOLMULTITEXCOORD1IARBPROC dolMultiTexCoord1i;
 | 
						|
PFNDOLMULTITEXCOORD1IVARBPROC dolMultiTexCoord1iv;
 | 
						|
PFNDOLMULTITEXCOORD1SARBPROC dolMultiTexCoord1s;
 | 
						|
PFNDOLMULTITEXCOORD1SVARBPROC dolMultiTexCoord1sv;
 | 
						|
PFNDOLMULTITEXCOORD2DARBPROC dolMultiTexCoord2d;
 | 
						|
PFNDOLMULTITEXCOORD2DVARBPROC dolMultiTexCoord2dv;
 | 
						|
PFNDOLMULTITEXCOORD2FARBPROC dolMultiTexCoord2f;
 | 
						|
PFNDOLMULTITEXCOORD2FVARBPROC dolMultiTexCoord2fv;
 | 
						|
PFNDOLMULTITEXCOORD2IARBPROC dolMultiTexCoord2i;
 | 
						|
PFNDOLMULTITEXCOORD2IVARBPROC dolMultiTexCoord2iv;
 | 
						|
PFNDOLMULTITEXCOORD2SARBPROC dolMultiTexCoord2s;
 | 
						|
PFNDOLMULTITEXCOORD2SVARBPROC dolMultiTexCoord2sv;
 | 
						|
PFNDOLMULTITEXCOORD3DARBPROC dolMultiTexCoord3d;
 | 
						|
PFNDOLMULTITEXCOORD3DVARBPROC dolMultiTexCoord3dv;
 | 
						|
PFNDOLMULTITEXCOORD3FARBPROC dolMultiTexCoord3f;
 | 
						|
PFNDOLMULTITEXCOORD3FVARBPROC dolMultiTexCoord3fv;
 | 
						|
PFNDOLMULTITEXCOORD3IARBPROC dolMultiTexCoord3i;
 | 
						|
PFNDOLMULTITEXCOORD3IVARBPROC dolMultiTexCoord3iv;
 | 
						|
PFNDOLMULTITEXCOORD3SARBPROC dolMultiTexCoord3s;
 | 
						|
PFNDOLMULTITEXCOORD3SVARBPROC dolMultiTexCoord3sv;
 | 
						|
PFNDOLMULTITEXCOORD4DARBPROC dolMultiTexCoord4d;
 | 
						|
PFNDOLMULTITEXCOORD4DVARBPROC dolMultiTexCoord4dv;
 | 
						|
PFNDOLMULTITEXCOORD4FARBPROC dolMultiTexCoord4f;
 | 
						|
PFNDOLMULTITEXCOORD4FVARBPROC dolMultiTexCoord4fv;
 | 
						|
PFNDOLMULTITEXCOORD4IARBPROC dolMultiTexCoord4i;
 | 
						|
PFNDOLMULTITEXCOORD4IVARBPROC dolMultiTexCoord4iv;
 | 
						|
PFNDOLMULTITEXCOORD4SARBPROC dolMultiTexCoord4s;
 | 
						|
PFNDOLMULTITEXCOORD4SVARBPROC dolMultiTexCoord4sv;
 | 
						|
PFNDOLSAMPLECOVERAGEARBPROC dolSampleCoverage;
 | 
						|
 | 
						|
// gl_1_4
 | 
						|
PFNDOLBLENDCOLORPROC dolBlendColor;
 | 
						|
PFNDOLBLENDEQUATIONPROC dolBlendEquation;
 | 
						|
PFNDOLBLENDFUNCSEPARATEPROC dolBlendFuncSeparate;
 | 
						|
PFNDOLFOGCOORDPOINTERPROC dolFogCoordPointer;
 | 
						|
PFNDOLFOGCOORDDPROC dolFogCoordd;
 | 
						|
PFNDOLFOGCOORDDVPROC dolFogCoorddv;
 | 
						|
PFNDOLFOGCOORDFPROC dolFogCoordf;
 | 
						|
PFNDOLFOGCOORDFVPROC dolFogCoordfv;
 | 
						|
PFNDOLMULTIDRAWARRAYSPROC dolMultiDrawArrays;
 | 
						|
PFNDOLMULTIDRAWELEMENTSPROC dolMultiDrawElements;
 | 
						|
PFNDOLPOINTPARAMETERFPROC dolPointParameterf;
 | 
						|
PFNDOLPOINTPARAMETERFVPROC dolPointParameterfv;
 | 
						|
PFNDOLPOINTPARAMETERIPROC dolPointParameteri;
 | 
						|
PFNDOLPOINTPARAMETERIVPROC dolPointParameteriv;
 | 
						|
PFNDOLSECONDARYCOLOR3BPROC dolSecondaryColor3b;
 | 
						|
PFNDOLSECONDARYCOLOR3BVPROC dolSecondaryColor3bv;
 | 
						|
PFNDOLSECONDARYCOLOR3DPROC dolSecondaryColor3d;
 | 
						|
PFNDOLSECONDARYCOLOR3DVPROC dolSecondaryColor3dv;
 | 
						|
PFNDOLSECONDARYCOLOR3FPROC dolSecondaryColor3f;
 | 
						|
PFNDOLSECONDARYCOLOR3FVPROC dolSecondaryColor3fv;
 | 
						|
PFNDOLSECONDARYCOLOR3IPROC dolSecondaryColor3i;
 | 
						|
PFNDOLSECONDARYCOLOR3IVPROC dolSecondaryColor3iv;
 | 
						|
PFNDOLSECONDARYCOLOR3SPROC dolSecondaryColor3s;
 | 
						|
PFNDOLSECONDARYCOLOR3SVPROC dolSecondaryColor3sv;
 | 
						|
PFNDOLSECONDARYCOLOR3UBPROC dolSecondaryColor3ub;
 | 
						|
PFNDOLSECONDARYCOLOR3UBVPROC dolSecondaryColor3ubv;
 | 
						|
PFNDOLSECONDARYCOLOR3UIPROC dolSecondaryColor3ui;
 | 
						|
PFNDOLSECONDARYCOLOR3UIVPROC dolSecondaryColor3uiv;
 | 
						|
PFNDOLSECONDARYCOLOR3USPROC dolSecondaryColor3us;
 | 
						|
PFNDOLSECONDARYCOLOR3USVPROC dolSecondaryColor3usv;
 | 
						|
PFNDOLSECONDARYCOLORPOINTERPROC dolSecondaryColorPointer;
 | 
						|
PFNDOLWINDOWPOS2DPROC dolWindowPos2d;
 | 
						|
PFNDOLWINDOWPOS2DVPROC dolWindowPos2dv;
 | 
						|
PFNDOLWINDOWPOS2FPROC dolWindowPos2f;
 | 
						|
PFNDOLWINDOWPOS2FVPROC dolWindowPos2fv;
 | 
						|
PFNDOLWINDOWPOS2IPROC dolWindowPos2i;
 | 
						|
PFNDOLWINDOWPOS2IVPROC dolWindowPos2iv;
 | 
						|
PFNDOLWINDOWPOS2SPROC dolWindowPos2s;
 | 
						|
PFNDOLWINDOWPOS2SVPROC dolWindowPos2sv;
 | 
						|
PFNDOLWINDOWPOS3DPROC dolWindowPos3d;
 | 
						|
PFNDOLWINDOWPOS3DVPROC dolWindowPos3dv;
 | 
						|
PFNDOLWINDOWPOS3FPROC dolWindowPos3f;
 | 
						|
PFNDOLWINDOWPOS3FVPROC dolWindowPos3fv;
 | 
						|
PFNDOLWINDOWPOS3IPROC dolWindowPos3i;
 | 
						|
PFNDOLWINDOWPOS3IVPROC dolWindowPos3iv;
 | 
						|
PFNDOLWINDOWPOS3SPROC dolWindowPos3s;
 | 
						|
PFNDOLWINDOWPOS3SVPROC dolWindowPos3sv;
 | 
						|
 | 
						|
// gl_1_5
 | 
						|
PFNDOLBEGINQUERYPROC dolBeginQuery;
 | 
						|
PFNDOLBINDBUFFERPROC dolBindBuffer;
 | 
						|
PFNDOLBUFFERDATAPROC dolBufferData;
 | 
						|
PFNDOLBUFFERSUBDATAPROC dolBufferSubData;
 | 
						|
PFNDOLDELETEBUFFERSPROC dolDeleteBuffers;
 | 
						|
PFNDOLDELETEQUERIESPROC dolDeleteQueries;
 | 
						|
PFNDOLENDQUERYPROC dolEndQuery;
 | 
						|
PFNDOLGENBUFFERSPROC dolGenBuffers;
 | 
						|
PFNDOLGENQUERIESPROC dolGenQueries;
 | 
						|
PFNDOLGETBUFFERPARAMETERIVPROC dolGetBufferParameteriv;
 | 
						|
PFNDOLGETBUFFERPOINTERVPROC dolGetBufferPointerv;
 | 
						|
PFNDOLGETBUFFERSUBDATAPROC dolGetBufferSubData;
 | 
						|
PFNDOLGETQUERYOBJECTIVPROC dolGetQueryObjectiv;
 | 
						|
PFNDOLGETQUERYOBJECTUIVPROC dolGetQueryObjectuiv;
 | 
						|
PFNDOLGETQUERYIVPROC dolGetQueryiv;
 | 
						|
PFNDOLISBUFFERPROC dolIsBuffer;
 | 
						|
PFNDOLISQUERYPROC dolIsQuery;
 | 
						|
PFNDOLMAPBUFFERPROC dolMapBuffer;
 | 
						|
PFNDOLUNMAPBUFFERPROC dolUnmapBuffer;
 | 
						|
 | 
						|
// gl_2_0
 | 
						|
PFNDOLATTACHSHADERPROC dolAttachShader;
 | 
						|
PFNDOLBINDATTRIBLOCATIONPROC dolBindAttribLocation;
 | 
						|
PFNDOLBLENDEQUATIONSEPARATEPROC dolBlendEquationSeparate;
 | 
						|
PFNDOLCOMPILESHADERPROC dolCompileShader;
 | 
						|
PFNDOLCREATEPROGRAMPROC dolCreateProgram;
 | 
						|
PFNDOLCREATESHADERPROC dolCreateShader;
 | 
						|
PFNDOLDELETEPROGRAMPROC dolDeleteProgram;
 | 
						|
PFNDOLDELETESHADERPROC dolDeleteShader;
 | 
						|
PFNDOLDETACHSHADERPROC dolDetachShader;
 | 
						|
PFNDOLDISABLEVERTEXATTRIBARRAYPROC dolDisableVertexAttribArray;
 | 
						|
PFNDOLDRAWBUFFERSPROC dolDrawBuffers;
 | 
						|
PFNDOLENABLEVERTEXATTRIBARRAYPROC dolEnableVertexAttribArray;
 | 
						|
PFNDOLGETACTIVEATTRIBPROC dolGetActiveAttrib;
 | 
						|
PFNDOLGETACTIVEUNIFORMPROC dolGetActiveUniform;
 | 
						|
PFNDOLGETATTACHEDSHADERSPROC dolGetAttachedShaders;
 | 
						|
PFNDOLGETATTRIBLOCATIONPROC dolGetAttribLocation;
 | 
						|
PFNDOLGETPROGRAMINFOLOGPROC dolGetProgramInfoLog;
 | 
						|
PFNDOLGETPROGRAMIVPROC dolGetProgramiv;
 | 
						|
PFNDOLGETSHADERINFOLOGPROC dolGetShaderInfoLog;
 | 
						|
PFNDOLGETSHADERSOURCEPROC dolGetShaderSource;
 | 
						|
PFNDOLGETSHADERIVPROC dolGetShaderiv;
 | 
						|
PFNDOLGETUNIFORMLOCATIONPROC dolGetUniformLocation;
 | 
						|
PFNDOLGETUNIFORMFVPROC dolGetUniformfv;
 | 
						|
PFNDOLGETUNIFORMIVPROC dolGetUniformiv;
 | 
						|
PFNDOLGETVERTEXATTRIBPOINTERVPROC dolGetVertexAttribPointerv;
 | 
						|
PFNDOLGETVERTEXATTRIBDVPROC dolGetVertexAttribdv;
 | 
						|
PFNDOLGETVERTEXATTRIBFVPROC dolGetVertexAttribfv;
 | 
						|
PFNDOLGETVERTEXATTRIBIVPROC dolGetVertexAttribiv;
 | 
						|
PFNDOLISPROGRAMPROC dolIsProgram;
 | 
						|
PFNDOLISSHADERPROC dolIsShader;
 | 
						|
PFNDOLLINKPROGRAMPROC dolLinkProgram;
 | 
						|
PFNDOLSHADERSOURCEPROC dolShaderSource;
 | 
						|
PFNDOLSTENCILFUNCSEPARATEPROC dolStencilFuncSeparate;
 | 
						|
PFNDOLSTENCILMASKSEPARATEPROC dolStencilMaskSeparate;
 | 
						|
PFNDOLSTENCILOPSEPARATEPROC dolStencilOpSeparate;
 | 
						|
PFNDOLUNIFORM1FPROC dolUniform1f;
 | 
						|
PFNDOLUNIFORM1FVPROC dolUniform1fv;
 | 
						|
PFNDOLUNIFORM1IPROC dolUniform1i;
 | 
						|
PFNDOLUNIFORM1IVPROC dolUniform1iv;
 | 
						|
PFNDOLUNIFORM2FPROC dolUniform2f;
 | 
						|
PFNDOLUNIFORM2FVPROC dolUniform2fv;
 | 
						|
PFNDOLUNIFORM2IPROC dolUniform2i;
 | 
						|
PFNDOLUNIFORM2IVPROC dolUniform2iv;
 | 
						|
PFNDOLUNIFORM3FPROC dolUniform3f;
 | 
						|
PFNDOLUNIFORM3FVPROC dolUniform3fv;
 | 
						|
PFNDOLUNIFORM3IPROC dolUniform3i;
 | 
						|
PFNDOLUNIFORM3IVPROC dolUniform3iv;
 | 
						|
PFNDOLUNIFORM4FPROC dolUniform4f;
 | 
						|
PFNDOLUNIFORM4FVPROC dolUniform4fv;
 | 
						|
PFNDOLUNIFORM4IPROC dolUniform4i;
 | 
						|
PFNDOLUNIFORM4IVPROC dolUniform4iv;
 | 
						|
PFNDOLUNIFORMMATRIX2FVPROC dolUniformMatrix2fv;
 | 
						|
PFNDOLUNIFORMMATRIX3FVPROC dolUniformMatrix3fv;
 | 
						|
PFNDOLUNIFORMMATRIX4FVPROC dolUniformMatrix4fv;
 | 
						|
PFNDOLUSEPROGRAMPROC dolUseProgram;
 | 
						|
PFNDOLVALIDATEPROGRAMPROC dolValidateProgram;
 | 
						|
PFNDOLVERTEXATTRIB1DPROC dolVertexAttrib1d;
 | 
						|
PFNDOLVERTEXATTRIB1DVPROC dolVertexAttrib1dv;
 | 
						|
PFNDOLVERTEXATTRIB1FPROC dolVertexAttrib1f;
 | 
						|
PFNDOLVERTEXATTRIB1FVPROC dolVertexAttrib1fv;
 | 
						|
PFNDOLVERTEXATTRIB1SPROC dolVertexAttrib1s;
 | 
						|
PFNDOLVERTEXATTRIB1SVPROC dolVertexAttrib1sv;
 | 
						|
PFNDOLVERTEXATTRIB2DPROC dolVertexAttrib2d;
 | 
						|
PFNDOLVERTEXATTRIB2DVPROC dolVertexAttrib2dv;
 | 
						|
PFNDOLVERTEXATTRIB2FPROC dolVertexAttrib2f;
 | 
						|
PFNDOLVERTEXATTRIB2FVPROC dolVertexAttrib2fv;
 | 
						|
PFNDOLVERTEXATTRIB2SPROC dolVertexAttrib2s;
 | 
						|
PFNDOLVERTEXATTRIB2SVPROC dolVertexAttrib2sv;
 | 
						|
PFNDOLVERTEXATTRIB3DPROC dolVertexAttrib3d;
 | 
						|
PFNDOLVERTEXATTRIB3DVPROC dolVertexAttrib3dv;
 | 
						|
PFNDOLVERTEXATTRIB3FPROC dolVertexAttrib3f;
 | 
						|
PFNDOLVERTEXATTRIB3FVPROC dolVertexAttrib3fv;
 | 
						|
PFNDOLVERTEXATTRIB3SPROC dolVertexAttrib3s;
 | 
						|
PFNDOLVERTEXATTRIB3SVPROC dolVertexAttrib3sv;
 | 
						|
PFNDOLVERTEXATTRIB4NBVPROC dolVertexAttrib4Nbv;
 | 
						|
PFNDOLVERTEXATTRIB4NIVPROC dolVertexAttrib4Niv;
 | 
						|
PFNDOLVERTEXATTRIB4NSVPROC dolVertexAttrib4Nsv;
 | 
						|
PFNDOLVERTEXATTRIB4NUBPROC dolVertexAttrib4Nub;
 | 
						|
PFNDOLVERTEXATTRIB4NUBVPROC dolVertexAttrib4Nubv;
 | 
						|
PFNDOLVERTEXATTRIB4NUIVPROC dolVertexAttrib4Nuiv;
 | 
						|
PFNDOLVERTEXATTRIB4NUSVPROC dolVertexAttrib4Nusv;
 | 
						|
PFNDOLVERTEXATTRIB4BVPROC dolVertexAttrib4bv;
 | 
						|
PFNDOLVERTEXATTRIB4DPROC dolVertexAttrib4d;
 | 
						|
PFNDOLVERTEXATTRIB4DVPROC dolVertexAttrib4dv;
 | 
						|
PFNDOLVERTEXATTRIB4FPROC dolVertexAttrib4f;
 | 
						|
PFNDOLVERTEXATTRIB4FVPROC dolVertexAttrib4fv;
 | 
						|
PFNDOLVERTEXATTRIB4IVPROC dolVertexAttrib4iv;
 | 
						|
PFNDOLVERTEXATTRIB4SPROC dolVertexAttrib4s;
 | 
						|
PFNDOLVERTEXATTRIB4SVPROC dolVertexAttrib4sv;
 | 
						|
PFNDOLVERTEXATTRIB4UBVPROC dolVertexAttrib4ubv;
 | 
						|
PFNDOLVERTEXATTRIB4UIVPROC dolVertexAttrib4uiv;
 | 
						|
PFNDOLVERTEXATTRIB4USVPROC dolVertexAttrib4usv;
 | 
						|
PFNDOLVERTEXATTRIBPOINTERPROC dolVertexAttribPointer;
 | 
						|
 | 
						|
// gl_2_1
 | 
						|
PFNDOLUNIFORMMATRIX2X3FVPROC dolUniformMatrix2x3fv;
 | 
						|
PFNDOLUNIFORMMATRIX2X4FVPROC dolUniformMatrix2x4fv;
 | 
						|
PFNDOLUNIFORMMATRIX3X2FVPROC dolUniformMatrix3x2fv;
 | 
						|
PFNDOLUNIFORMMATRIX3X4FVPROC dolUniformMatrix3x4fv;
 | 
						|
PFNDOLUNIFORMMATRIX4X2FVPROC dolUniformMatrix4x2fv;
 | 
						|
PFNDOLUNIFORMMATRIX4X3FVPROC dolUniformMatrix4x3fv;
 | 
						|
 | 
						|
// gl_3_0
 | 
						|
PFNDOLBEGINCONDITIONALRENDERPROC dolBeginConditionalRender;
 | 
						|
PFNDOLBEGINTRANSFORMFEEDBACKPROC dolBeginTransformFeedback;
 | 
						|
PFNDOLBINDFRAGDATALOCATIONPROC dolBindFragDataLocation;
 | 
						|
PFNDOLCLAMPCOLORPROC dolClampColor;
 | 
						|
PFNDOLCLEARBUFFERFIPROC dolClearBufferfi;
 | 
						|
PFNDOLCLEARBUFFERFVPROC dolClearBufferfv;
 | 
						|
PFNDOLCLEARBUFFERIVPROC dolClearBufferiv;
 | 
						|
PFNDOLCLEARBUFFERUIVPROC dolClearBufferuiv;
 | 
						|
PFNDOLCOLORMASKIPROC dolColorMaski;
 | 
						|
PFNDOLDISABLEIPROC dolDisablei;
 | 
						|
PFNDOLENABLEIPROC dolEnablei;
 | 
						|
PFNDOLENDCONDITIONALRENDERPROC dolEndConditionalRender;
 | 
						|
PFNDOLENDTRANSFORMFEEDBACKPROC dolEndTransformFeedback;
 | 
						|
PFNDOLGETBOOLEANI_VPROC dolGetBooleani_v;
 | 
						|
PFNDOLGETFRAGDATALOCATIONPROC dolGetFragDataLocation;
 | 
						|
PFNDOLGETSTRINGIPROC dolGetStringi;
 | 
						|
PFNDOLGETTEXPARAMETERIIVPROC dolGetTexParameterIiv;
 | 
						|
PFNDOLGETTEXPARAMETERIUIVPROC dolGetTexParameterIuiv;
 | 
						|
PFNDOLGETTRANSFORMFEEDBACKVARYINGPROC dolGetTransformFeedbackVarying;
 | 
						|
PFNDOLGETUNIFORMUIVPROC dolGetUniformuiv;
 | 
						|
PFNDOLGETVERTEXATTRIBIIVPROC dolGetVertexAttribIiv;
 | 
						|
PFNDOLGETVERTEXATTRIBIUIVPROC dolGetVertexAttribIuiv;
 | 
						|
PFNDOLISENABLEDIPROC dolIsEnabledi;
 | 
						|
PFNDOLTEXPARAMETERIIVPROC dolTexParameterIiv;
 | 
						|
PFNDOLTEXPARAMETERIUIVPROC dolTexParameterIuiv;
 | 
						|
PFNDOLTRANSFORMFEEDBACKVARYINGSPROC dolTransformFeedbackVaryings;
 | 
						|
PFNDOLUNIFORM1UIPROC dolUniform1ui;
 | 
						|
PFNDOLUNIFORM1UIVPROC dolUniform1uiv;
 | 
						|
PFNDOLUNIFORM2UIPROC dolUniform2ui;
 | 
						|
PFNDOLUNIFORM2UIVPROC dolUniform2uiv;
 | 
						|
PFNDOLUNIFORM3UIPROC dolUniform3ui;
 | 
						|
PFNDOLUNIFORM3UIVPROC dolUniform3uiv;
 | 
						|
PFNDOLUNIFORM4UIPROC dolUniform4ui;
 | 
						|
PFNDOLUNIFORM4UIVPROC dolUniform4uiv;
 | 
						|
PFNDOLVERTEXATTRIBI1IPROC dolVertexAttribI1i;
 | 
						|
PFNDOLVERTEXATTRIBI1IVPROC dolVertexAttribI1iv;
 | 
						|
PFNDOLVERTEXATTRIBI1UIPROC dolVertexAttribI1ui;
 | 
						|
PFNDOLVERTEXATTRIBI1UIVPROC dolVertexAttribI1uiv;
 | 
						|
PFNDOLVERTEXATTRIBI2IPROC dolVertexAttribI2i;
 | 
						|
PFNDOLVERTEXATTRIBI2IVPROC dolVertexAttribI2iv;
 | 
						|
PFNDOLVERTEXATTRIBI2UIPROC dolVertexAttribI2ui;
 | 
						|
PFNDOLVERTEXATTRIBI2UIVPROC dolVertexAttribI2uiv;
 | 
						|
PFNDOLVERTEXATTRIBI3IPROC dolVertexAttribI3i;
 | 
						|
PFNDOLVERTEXATTRIBI3IVPROC dolVertexAttribI3iv;
 | 
						|
PFNDOLVERTEXATTRIBI3UIPROC dolVertexAttribI3ui;
 | 
						|
PFNDOLVERTEXATTRIBI3UIVPROC dolVertexAttribI3uiv;
 | 
						|
PFNDOLVERTEXATTRIBI4BVPROC dolVertexAttribI4bv;
 | 
						|
PFNDOLVERTEXATTRIBI4IPROC dolVertexAttribI4i;
 | 
						|
PFNDOLVERTEXATTRIBI4IVPROC dolVertexAttribI4iv;
 | 
						|
PFNDOLVERTEXATTRIBI4SVPROC dolVertexAttribI4sv;
 | 
						|
PFNDOLVERTEXATTRIBI4UBVPROC dolVertexAttribI4ubv;
 | 
						|
PFNDOLVERTEXATTRIBI4UIPROC dolVertexAttribI4ui;
 | 
						|
PFNDOLVERTEXATTRIBI4UIVPROC dolVertexAttribI4uiv;
 | 
						|
PFNDOLVERTEXATTRIBI4USVPROC dolVertexAttribI4usv;
 | 
						|
PFNDOLVERTEXATTRIBIPOINTERPROC dolVertexAttribIPointer;
 | 
						|
 | 
						|
// gl_3_1
 | 
						|
PFNDOLDRAWARRAYSINSTANCEDPROC dolDrawArraysInstanced;
 | 
						|
PFNDOLDRAWELEMENTSINSTANCEDPROC dolDrawElementsInstanced;
 | 
						|
PFNDOLPRIMITIVERESTARTINDEXPROC dolPrimitiveRestartIndex;
 | 
						|
PFNDOLTEXBUFFERPROC dolTexBuffer;
 | 
						|
 | 
						|
// gl_3_2
 | 
						|
PFNDOLFRAMEBUFFERTEXTUREPROC dolFramebufferTexture;
 | 
						|
PFNDOLGETBUFFERPARAMETERI64VPROC dolGetBufferParameteri64v;
 | 
						|
PFNDOLGETINTEGER64I_VPROC dolGetInteger64i_v;
 | 
						|
 | 
						|
// gl 4_2
 | 
						|
PFNDOLDRAWARRAYSINSTANCEDBASEINSTANCEPROC dolDrawArraysInstancedBaseInstance;
 | 
						|
PFNDOLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC dolDrawElementsInstancedBaseInstance;
 | 
						|
PFNDOLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC
 | 
						|
dolDrawElementsInstancedBaseVertexBaseInstance;
 | 
						|
PFNDOLGETINTERNALFORMATIVPROC dolGetInternalformativ;
 | 
						|
PFNDOLGETACTIVEATOMICCOUNTERBUFFERIVPROC dolGetActiveAtomicCounterBufferiv;
 | 
						|
PFNDOLDRAWTRANSFORMFEEDBACKINSTANCEDPROC dolDrawTransformFeedbackInstanced;
 | 
						|
PFNDOLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC dolDrawTransformFeedbackStreamInstanced;
 | 
						|
 | 
						|
// gl_4_3
 | 
						|
PFNDOLCLEARBUFFERDATAPROC dolClearBufferData;
 | 
						|
PFNDOLCLEARBUFFERSUBDATAPROC dolClearBufferSubData;
 | 
						|
PFNDOLFRAMEBUFFERPARAMETERIPROC dolFramebufferParameteri;
 | 
						|
PFNDOLGETFRAMEBUFFERPARAMETERIVPROC dolGetFramebufferParameteriv;
 | 
						|
PFNDOLGETINTERNALFORMATI64VPROC dolGetInternalformati64v;
 | 
						|
PFNDOLINVALIDATETEXSUBIMAGEPROC dolInvalidateTexSubImage;
 | 
						|
PFNDOLINVALIDATETEXIMAGEPROC dolInvalidateTexImage;
 | 
						|
PFNDOLINVALIDATEBUFFERSUBDATAPROC dolInvalidateBufferSubData;
 | 
						|
PFNDOLINVALIDATEBUFFERDATAPROC dolInvalidateBufferData;
 | 
						|
PFNDOLINVALIDATEFRAMEBUFFERPROC dolInvalidateFramebuffer;
 | 
						|
PFNDOLINVALIDATESUBFRAMEBUFFERPROC dolInvalidateSubFramebuffer;
 | 
						|
PFNDOLMULTIDRAWARRAYSINDIRECTPROC dolMultiDrawArraysIndirect;
 | 
						|
PFNDOLMULTIDRAWELEMENTSINDIRECTPROC dolMultiDrawElementsIndirect;
 | 
						|
PFNDOLGETPROGRAMINTERFACEIVPROC dolGetProgramInterfaceiv;
 | 
						|
PFNDOLGETPROGRAMRESOURCEINDEXPROC dolGetProgramResourceIndex;
 | 
						|
PFNDOLGETPROGRAMRESOURCENAMEPROC dolGetProgramResourceName;
 | 
						|
PFNDOLGETPROGRAMRESOURCEIVPROC dolGetProgramResourceiv;
 | 
						|
PFNDOLGETPROGRAMRESOURCELOCATIONPROC dolGetProgramResourceLocation;
 | 
						|
PFNDOLGETPROGRAMRESOURCELOCATIONINDEXPROC dolGetProgramResourceLocationIndex;
 | 
						|
PFNDOLTEXBUFFERRANGEPROC dolTexBufferRange;
 | 
						|
PFNDOLTEXTUREVIEWPROC dolTextureView;
 | 
						|
PFNDOLBINDVERTEXBUFFERPROC dolBindVertexBuffer;
 | 
						|
PFNDOLVERTEXATTRIBFORMATPROC dolVertexAttribFormat;
 | 
						|
PFNDOLVERTEXATTRIBIFORMATPROC dolVertexAttribIFormat;
 | 
						|
PFNDOLVERTEXATTRIBLFORMATPROC dolVertexAttribLFormat;
 | 
						|
PFNDOLVERTEXATTRIBBINDINGPROC dolVertexAttribBinding;
 | 
						|
PFNDOLVERTEXBINDINGDIVISORPROC dolVertexBindingDivisor;
 | 
						|
 | 
						|
// gl_4_4
 | 
						|
PFNDOLCLEARTEXIMAGEPROC dolClearTexImage;
 | 
						|
PFNDOLCLEARTEXSUBIMAGEPROC dolClearTexSubImage;
 | 
						|
PFNDOLBINDBUFFERSBASEPROC dolBindBuffersBase;
 | 
						|
PFNDOLBINDBUFFERSRANGEPROC dolBindBuffersRange;
 | 
						|
PFNDOLBINDTEXTURESPROC dolBindTextures;
 | 
						|
PFNDOLBINDSAMPLERSPROC dolBindSamplers;
 | 
						|
PFNDOLBINDIMAGETEXTURESPROC dolBindImageTextures;
 | 
						|
PFNDOLBINDVERTEXBUFFERSPROC dolBindVertexBuffers;
 | 
						|
 | 
						|
// gl_4_5
 | 
						|
PFNDOLCREATETRANSFORMFEEDBACKSPROC dolCreateTransformFeedbacks;
 | 
						|
PFNDOLTRANSFORMFEEDBACKBUFFERBASEPROC dolTransformFeedbackBufferBase;
 | 
						|
PFNDOLTRANSFORMFEEDBACKBUFFERRANGEPROC dolTransformFeedbackBufferRange;
 | 
						|
PFNDOLGETTRANSFORMFEEDBACKIVPROC dolGetTransformFeedbackiv;
 | 
						|
PFNDOLGETTRANSFORMFEEDBACKI_VPROC dolGetTransformFeedbacki_v;
 | 
						|
PFNDOLGETTRANSFORMFEEDBACKI64_VPROC dolGetTransformFeedbacki64_v;
 | 
						|
PFNDOLCREATEBUFFERSPROC dolCreateBuffers;
 | 
						|
PFNDOLNAMEDBUFFERSTORAGEPROC dolNamedBufferStorage;
 | 
						|
PFNDOLNAMEDBUFFERDATAPROC dolNamedBufferData;
 | 
						|
PFNDOLNAMEDBUFFERSUBDATAPROC dolNamedBufferSubData;
 | 
						|
PFNDOLCOPYNAMEDBUFFERSUBDATAPROC dolCopyNamedBufferSubData;
 | 
						|
PFNDOLCLEARNAMEDBUFFERDATAPROC dolClearNamedBufferData;
 | 
						|
PFNDOLCLEARNAMEDBUFFERSUBDATAPROC dolClearNamedBufferSubData;
 | 
						|
PFNDOLMAPNAMEDBUFFERPROC dolMapNamedBuffer;
 | 
						|
PFNDOLMAPNAMEDBUFFERRANGEPROC dolMapNamedBufferRange;
 | 
						|
PFNDOLUNMAPNAMEDBUFFERPROC dolUnmapNamedBuffer;
 | 
						|
PFNDOLFLUSHMAPPEDNAMEDBUFFERRANGEPROC dolFlushMappedNamedBufferRange;
 | 
						|
PFNDOLGETNAMEDBUFFERPARAMETERIVPROC dolGetNamedBufferParameteriv;
 | 
						|
PFNDOLGETNAMEDBUFFERPARAMETERI64VPROC dolGetNamedBufferParameteri64v;
 | 
						|
PFNDOLGETNAMEDBUFFERPOINTERVPROC dolGetNamedBufferPointerv;
 | 
						|
PFNDOLGETNAMEDBUFFERSUBDATAPROC dolGetNamedBufferSubData;
 | 
						|
PFNDOLCREATEFRAMEBUFFERSPROC dolCreateFramebuffers;
 | 
						|
PFNDOLNAMEDFRAMEBUFFERRENDERBUFFERPROC dolNamedFramebufferRenderbuffer;
 | 
						|
PFNDOLNAMEDFRAMEBUFFERPARAMETERIPROC dolNamedFramebufferParameteri;
 | 
						|
PFNDOLNAMEDFRAMEBUFFERTEXTUREPROC dolNamedFramebufferTexture;
 | 
						|
PFNDOLNAMEDFRAMEBUFFERTEXTURELAYERPROC dolNamedFramebufferTextureLayer;
 | 
						|
PFNDOLNAMEDFRAMEBUFFERDRAWBUFFERPROC dolNamedFramebufferDrawBuffer;
 | 
						|
PFNDOLNAMEDFRAMEBUFFERDRAWBUFFERSPROC dolNamedFramebufferDrawBuffers;
 | 
						|
PFNDOLNAMEDFRAMEBUFFERREADBUFFERPROC dolNamedFramebufferReadBuffer;
 | 
						|
PFNDOLINVALIDATENAMEDFRAMEBUFFERDATAPROC dolInvalidateNamedFramebufferData;
 | 
						|
PFNDOLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC dolInvalidateNamedFramebufferSubData;
 | 
						|
PFNDOLCLEARNAMEDFRAMEBUFFERIVPROC dolClearNamedFramebufferiv;
 | 
						|
PFNDOLCLEARNAMEDFRAMEBUFFERUIVPROC dolClearNamedFramebufferuiv;
 | 
						|
PFNDOLCLEARNAMEDFRAMEBUFFERFVPROC dolClearNamedFramebufferfv;
 | 
						|
PFNDOLCLEARNAMEDFRAMEBUFFERFIPROC dolClearNamedFramebufferfi;
 | 
						|
PFNDOLBLITNAMEDFRAMEBUFFERPROC dolBlitNamedFramebuffer;
 | 
						|
PFNDOLCHECKNAMEDFRAMEBUFFERSTATUSPROC dolCheckNamedFramebufferStatus;
 | 
						|
PFNDOLGETNAMEDFRAMEBUFFERPARAMETERIVPROC dolGetNamedFramebufferParameteriv;
 | 
						|
PFNDOLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC dolGetNamedFramebufferAttachmentParameteriv;
 | 
						|
PFNDOLCREATERENDERBUFFERSPROC dolCreateRenderbuffers;
 | 
						|
PFNDOLNAMEDRENDERBUFFERSTORAGEPROC dolNamedRenderbufferStorage;
 | 
						|
PFNDOLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC dolNamedRenderbufferStorageMultisample;
 | 
						|
PFNDOLGETNAMEDRENDERBUFFERPARAMETERIVPROC dolGetNamedRenderbufferParameteriv;
 | 
						|
PFNDOLCREATETEXTURESPROC dolCreateTextures;
 | 
						|
PFNDOLTEXTUREBUFFERPROC dolTextureBuffer;
 | 
						|
PFNDOLTEXTUREBUFFERRANGEPROC dolTextureBufferRange;
 | 
						|
PFNDOLTEXTURESTORAGE1DPROC dolTextureStorage1D;
 | 
						|
PFNDOLTEXTURESTORAGE2DPROC dolTextureStorage2D;
 | 
						|
PFNDOLTEXTURESTORAGE3DPROC dolTextureStorage3D;
 | 
						|
PFNDOLTEXTURESTORAGE2DMULTISAMPLEPROC dolTextureStorage2DMultisample;
 | 
						|
PFNDOLTEXTURESTORAGE3DMULTISAMPLEPROC dolTextureStorage3DMultisample;
 | 
						|
PFNDOLTEXTURESUBIMAGE1DPROC dolTextureSubImage1D;
 | 
						|
PFNDOLTEXTURESUBIMAGE2DPROC dolTextureSubImage2D;
 | 
						|
PFNDOLTEXTURESUBIMAGE3DPROC dolTextureSubImage3D;
 | 
						|
PFNDOLCOMPRESSEDTEXTURESUBIMAGE1DPROC dolCompressedTextureSubImage1D;
 | 
						|
PFNDOLCOMPRESSEDTEXTURESUBIMAGE2DPROC dolCompressedTextureSubImage2D;
 | 
						|
PFNDOLCOMPRESSEDTEXTURESUBIMAGE3DPROC dolCompressedTextureSubImage3D;
 | 
						|
PFNDOLCOPYTEXTURESUBIMAGE1DPROC dolCopyTextureSubImage1D;
 | 
						|
PFNDOLCOPYTEXTURESUBIMAGE2DPROC dolCopyTextureSubImage2D;
 | 
						|
PFNDOLCOPYTEXTURESUBIMAGE3DPROC dolCopyTextureSubImage3D;
 | 
						|
PFNDOLTEXTUREPARAMETERFPROC dolTextureParameterf;
 | 
						|
PFNDOLTEXTUREPARAMETERFVPROC dolTextureParameterfv;
 | 
						|
PFNDOLTEXTUREPARAMETERIPROC dolTextureParameteri;
 | 
						|
PFNDOLTEXTUREPARAMETERIIVPROC dolTextureParameterIiv;
 | 
						|
PFNDOLTEXTUREPARAMETERIUIVPROC dolTextureParameterIuiv;
 | 
						|
PFNDOLTEXTUREPARAMETERIVPROC dolTextureParameteriv;
 | 
						|
PFNDOLGENERATETEXTUREMIPMAPPROC dolGenerateTextureMipmap;
 | 
						|
PFNDOLBINDTEXTUREUNITPROC dolBindTextureUnit;
 | 
						|
PFNDOLGETTEXTUREIMAGEPROC dolGetTextureImage;
 | 
						|
PFNDOLGETCOMPRESSEDTEXTUREIMAGEPROC dolGetCompressedTextureImage;
 | 
						|
PFNDOLGETTEXTURELEVELPARAMETERFVPROC dolGetTextureLevelParameterfv;
 | 
						|
PFNDOLGETTEXTURELEVELPARAMETERIVPROC dolGetTextureLevelParameteriv;
 | 
						|
PFNDOLGETTEXTUREPARAMETERFVPROC dolGetTextureParameterfv;
 | 
						|
PFNDOLGETTEXTUREPARAMETERIIVPROC dolGetTextureParameterIiv;
 | 
						|
PFNDOLGETTEXTUREPARAMETERIUIVPROC dolGetTextureParameterIuiv;
 | 
						|
PFNDOLGETTEXTUREPARAMETERIVPROC dolGetTextureParameteriv;
 | 
						|
PFNDOLCREATEVERTEXARRAYSPROC dolCreateVertexArrays;
 | 
						|
PFNDOLDISABLEVERTEXARRAYATTRIBPROC dolDisableVertexArrayAttrib;
 | 
						|
PFNDOLENABLEVERTEXARRAYATTRIBPROC dolEnableVertexArrayAttrib;
 | 
						|
PFNDOLVERTEXARRAYELEMENTBUFFERPROC dolVertexArrayElementBuffer;
 | 
						|
PFNDOLVERTEXARRAYVERTEXBUFFERPROC dolVertexArrayVertexBuffer;
 | 
						|
PFNDOLVERTEXARRAYVERTEXBUFFERSPROC dolVertexArrayVertexBuffers;
 | 
						|
PFNDOLVERTEXARRAYATTRIBBINDINGPROC dolVertexArrayAttribBinding;
 | 
						|
PFNDOLVERTEXARRAYATTRIBFORMATPROC dolVertexArrayAttribFormat;
 | 
						|
PFNDOLVERTEXARRAYATTRIBIFORMATPROC dolVertexArrayAttribIFormat;
 | 
						|
PFNDOLVERTEXARRAYATTRIBLFORMATPROC dolVertexArrayAttribLFormat;
 | 
						|
PFNDOLVERTEXARRAYBINDINGDIVISORPROC dolVertexArrayBindingDivisor;
 | 
						|
PFNDOLGETVERTEXARRAYIVPROC dolGetVertexArrayiv;
 | 
						|
PFNDOLGETVERTEXARRAYINDEXEDIVPROC dolGetVertexArrayIndexediv;
 | 
						|
PFNDOLGETVERTEXARRAYINDEXED64IVPROC dolGetVertexArrayIndexed64iv;
 | 
						|
PFNDOLCREATESAMPLERSPROC dolCreateSamplers;
 | 
						|
PFNDOLCREATEPROGRAMPIPELINESPROC dolCreateProgramPipelines;
 | 
						|
PFNDOLCREATEQUERIESPROC dolCreateQueries;
 | 
						|
PFNDOLGETQUERYBUFFEROBJECTI64VPROC dolGetQueryBufferObjecti64v;
 | 
						|
PFNDOLGETQUERYBUFFEROBJECTIVPROC dolGetQueryBufferObjectiv;
 | 
						|
PFNDOLGETQUERYBUFFEROBJECTUI64VPROC dolGetQueryBufferObjectui64v;
 | 
						|
PFNDOLGETQUERYBUFFEROBJECTUIVPROC dolGetQueryBufferObjectuiv;
 | 
						|
PFNDOLMEMORYBARRIERBYREGIONPROC dolMemoryBarrierByRegion;
 | 
						|
PFNDOLGETTEXTURESUBIMAGEPROC dolGetTextureSubImage;
 | 
						|
PFNDOLGETCOMPRESSEDTEXTURESUBIMAGEPROC dolGetCompressedTextureSubImage;
 | 
						|
PFNDOLGETGRAPHICSRESETSTATUSPROC dolGetGraphicsResetStatus;
 | 
						|
PFNDOLGETNCOMPRESSEDTEXIMAGEPROC dolGetnCompressedTexImage;
 | 
						|
PFNDOLGETNTEXIMAGEPROC dolGetnTexImage;
 | 
						|
PFNDOLGETNUNIFORMDVPROC dolGetnUniformdv;
 | 
						|
PFNDOLGETNUNIFORMFVPROC dolGetnUniformfv;
 | 
						|
PFNDOLGETNUNIFORMIVPROC dolGetnUniformiv;
 | 
						|
PFNDOLGETNUNIFORMUIVPROC dolGetnUniformuiv;
 | 
						|
PFNDOLREADNPIXELSPROC dolReadnPixels;
 | 
						|
PFNDOLGETNMAPDVPROC dolGetnMapdv;
 | 
						|
PFNDOLGETNMAPFVPROC dolGetnMapfv;
 | 
						|
PFNDOLGETNMAPIVPROC dolGetnMapiv;
 | 
						|
PFNDOLGETNPIXELMAPFVPROC dolGetnPixelMapfv;
 | 
						|
PFNDOLGETNPIXELMAPUIVPROC dolGetnPixelMapuiv;
 | 
						|
PFNDOLGETNPIXELMAPUSVPROC dolGetnPixelMapusv;
 | 
						|
PFNDOLGETNPOLYGONSTIPPLEPROC dolGetnPolygonStipple;
 | 
						|
PFNDOLGETNCOLORTABLEPROC dolGetnColorTable;
 | 
						|
PFNDOLGETNCONVOLUTIONFILTERPROC dolGetnConvolutionFilter;
 | 
						|
PFNDOLGETNSEPARABLEFILTERPROC dolGetnSeparableFilter;
 | 
						|
PFNDOLGETNHISTOGRAMPROC dolGetnHistogram;
 | 
						|
PFNDOLGETNMINMAXPROC dolGetnMinmax;
 | 
						|
PFNDOLTEXTUREBARRIERPROC dolTextureBarrier;
 | 
						|
 | 
						|
// ARB_uniform_buffer_object
 | 
						|
PFNDOLBINDBUFFERBASEPROC dolBindBufferBase;
 | 
						|
PFNDOLBINDBUFFERRANGEPROC dolBindBufferRange;
 | 
						|
PFNDOLGETACTIVEUNIFORMBLOCKNAMEPROC dolGetActiveUniformBlockName;
 | 
						|
PFNDOLGETACTIVEUNIFORMBLOCKIVPROC dolGetActiveUniformBlockiv;
 | 
						|
PFNDOLGETACTIVEUNIFORMNAMEPROC dolGetActiveUniformName;
 | 
						|
PFNDOLGETACTIVEUNIFORMSIVPROC dolGetActiveUniformsiv;
 | 
						|
PFNDOLGETINTEGERI_VPROC dolGetIntegeri_v;
 | 
						|
PFNDOLGETUNIFORMBLOCKINDEXPROC dolGetUniformBlockIndex;
 | 
						|
PFNDOLGETUNIFORMINDICESPROC dolGetUniformIndices;
 | 
						|
PFNDOLUNIFORMBLOCKBINDINGPROC dolUniformBlockBinding;
 | 
						|
 | 
						|
// ARB_sampler_objects
 | 
						|
PFNDOLBINDSAMPLERPROC dolBindSampler;
 | 
						|
PFNDOLDELETESAMPLERSPROC dolDeleteSamplers;
 | 
						|
PFNDOLGENSAMPLERSPROC dolGenSamplers;
 | 
						|
PFNDOLGETSAMPLERPARAMETERIIVPROC dolGetSamplerParameterIiv;
 | 
						|
PFNDOLGETSAMPLERPARAMETERIUIVPROC dolGetSamplerParameterIuiv;
 | 
						|
PFNDOLGETSAMPLERPARAMETERFVPROC dolGetSamplerParameterfv;
 | 
						|
PFNDOLGETSAMPLERPARAMETERIVPROC dolGetSamplerParameteriv;
 | 
						|
PFNDOLISSAMPLERPROC dolIsSampler;
 | 
						|
PFNDOLSAMPLERPARAMETERIIVPROC dolSamplerParameterIiv;
 | 
						|
PFNDOLSAMPLERPARAMETERIUIVPROC dolSamplerParameterIuiv;
 | 
						|
PFNDOLSAMPLERPARAMETERFPROC dolSamplerParameterf;
 | 
						|
PFNDOLSAMPLERPARAMETERFVPROC dolSamplerParameterfv;
 | 
						|
PFNDOLSAMPLERPARAMETERIPROC dolSamplerParameteri;
 | 
						|
PFNDOLSAMPLERPARAMETERIVPROC dolSamplerParameteriv;
 | 
						|
 | 
						|
// ARB_map_buffer_range
 | 
						|
PFNDOLFLUSHMAPPEDBUFFERRANGEPROC dolFlushMappedBufferRange;
 | 
						|
PFNDOLMAPBUFFERRANGEPROC dolMapBufferRange;
 | 
						|
 | 
						|
// ARB_vertex_array_object
 | 
						|
PFNDOLBINDVERTEXARRAYPROC dolBindVertexArray;
 | 
						|
PFNDOLDELETEVERTEXARRAYSPROC dolDeleteVertexArrays;
 | 
						|
PFNDOLGENVERTEXARRAYSPROC dolGenVertexArrays;
 | 
						|
PFNDOLISVERTEXARRAYPROC dolIsVertexArray;
 | 
						|
 | 
						|
// ARB_framebuffer_object
 | 
						|
PFNDOLBINDFRAMEBUFFERPROC dolBindFramebuffer;
 | 
						|
PFNDOLBINDRENDERBUFFERPROC dolBindRenderbuffer;
 | 
						|
PFNDOLBLITFRAMEBUFFERPROC dolBlitFramebuffer;
 | 
						|
PFNDOLCHECKFRAMEBUFFERSTATUSPROC dolCheckFramebufferStatus;
 | 
						|
PFNDOLDELETEFRAMEBUFFERSPROC dolDeleteFramebuffers;
 | 
						|
PFNDOLDELETERENDERBUFFERSPROC dolDeleteRenderbuffers;
 | 
						|
PFNDOLFRAMEBUFFERRENDERBUFFERPROC dolFramebufferRenderbuffer;
 | 
						|
PFNDOLFRAMEBUFFERTEXTURE1DPROC dolFramebufferTexture1D;
 | 
						|
PFNDOLFRAMEBUFFERTEXTURE2DPROC dolFramebufferTexture2D;
 | 
						|
PFNDOLFRAMEBUFFERTEXTURE3DPROC dolFramebufferTexture3D;
 | 
						|
PFNDOLFRAMEBUFFERTEXTURELAYERPROC dolFramebufferTextureLayer;
 | 
						|
PFNDOLGENFRAMEBUFFERSPROC dolGenFramebuffers;
 | 
						|
PFNDOLGENRENDERBUFFERSPROC dolGenRenderbuffers;
 | 
						|
PFNDOLGENERATEMIPMAPPROC dolGenerateMipmap;
 | 
						|
PFNDOLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC dolGetFramebufferAttachmentParameteriv;
 | 
						|
PFNDOLGETRENDERBUFFERPARAMETERIVPROC dolGetRenderbufferParameteriv;
 | 
						|
PFNDOLISFRAMEBUFFERPROC dolIsFramebuffer;
 | 
						|
PFNDOLISRENDERBUFFERPROC dolIsRenderbuffer;
 | 
						|
PFNDOLRENDERBUFFERSTORAGEPROC dolRenderbufferStorage;
 | 
						|
PFNDOLRENDERBUFFERSTORAGEMULTISAMPLEPROC dolRenderbufferStorageMultisample;
 | 
						|
 | 
						|
// ARB_get_program_binary
 | 
						|
PFNDOLGETPROGRAMBINARYPROC dolGetProgramBinary;
 | 
						|
PFNDOLPROGRAMBINARYPROC dolProgramBinary;
 | 
						|
PFNDOLPROGRAMPARAMETERIPROC dolProgramParameteri;
 | 
						|
 | 
						|
// ARB_sync
 | 
						|
PFNDOLCLIENTWAITSYNCPROC dolClientWaitSync;
 | 
						|
PFNDOLDELETESYNCPROC dolDeleteSync;
 | 
						|
PFNDOLFENCESYNCPROC dolFenceSync;
 | 
						|
PFNDOLGETINTEGER64VPROC dolGetInteger64v;
 | 
						|
PFNDOLGETSYNCIVPROC dolGetSynciv;
 | 
						|
PFNDOLISSYNCPROC dolIsSync;
 | 
						|
PFNDOLWAITSYNCPROC dolWaitSync;
 | 
						|
 | 
						|
// ARB_texture_multisample
 | 
						|
PFNDOLTEXIMAGE2DMULTISAMPLEPROC dolTexImage2DMultisample;
 | 
						|
PFNDOLTEXIMAGE3DMULTISAMPLEPROC dolTexImage3DMultisample;
 | 
						|
PFNDOLGETMULTISAMPLEFVPROC dolGetMultisamplefv;
 | 
						|
PFNDOLSAMPLEMASKIPROC dolSampleMaski;
 | 
						|
 | 
						|
// ARB_texture_storage
 | 
						|
PFNDOLTEXSTORAGE1DPROC dolTexStorage1D;
 | 
						|
PFNDOLTEXSTORAGE2DPROC dolTexStorage2D;
 | 
						|
PFNDOLTEXSTORAGE3DPROC dolTexStorage3D;
 | 
						|
 | 
						|
// ARB_texture_storage_multisample
 | 
						|
PFNDOLTEXSTORAGE2DMULTISAMPLEPROC dolTexStorage2DMultisample;
 | 
						|
PFNDOLTEXSTORAGE3DMULTISAMPLEPROC dolTexStorage3DMultisample;
 | 
						|
 | 
						|
// ARB_ES2_compatibility
 | 
						|
PFNDOLCLEARDEPTHFPROC dolClearDepthf;
 | 
						|
PFNDOLDEPTHRANGEFPROC dolDepthRangef;
 | 
						|
PFNDOLGETSHADERPRECISIONFORMATPROC dolGetShaderPrecisionFormat;
 | 
						|
PFNDOLRELEASESHADERCOMPILERPROC dolReleaseShaderCompiler;
 | 
						|
PFNDOLSHADERBINARYPROC dolShaderBinary;
 | 
						|
 | 
						|
// NV_primitive_restart
 | 
						|
PFNDOLPRIMITIVERESTARTINDEXNVPROC dolPrimitiveRestartIndexNV;
 | 
						|
PFNDOLPRIMITIVERESTARTNVPROC dolPrimitiveRestartNV;
 | 
						|
 | 
						|
// ARB_blend_func_extended
 | 
						|
PFNDOLBINDFRAGDATALOCATIONINDEXEDPROC dolBindFragDataLocationIndexed;
 | 
						|
PFNDOLGETFRAGDATAINDEXPROC dolGetFragDataIndex;
 | 
						|
 | 
						|
// ARB_viewport_array
 | 
						|
PFNDOLDEPTHRANGEARRAYVPROC dolDepthRangeArrayv;
 | 
						|
PFNDOLDEPTHRANGEINDEXEDPROC dolDepthRangeIndexed;
 | 
						|
PFNDOLGETDOUBLEI_VPROC dolGetDoublei_v;
 | 
						|
PFNDOLGETFLOATI_VPROC dolGetFloati_v;
 | 
						|
PFNDOLSCISSORARRAYVPROC dolScissorArrayv;
 | 
						|
PFNDOLSCISSORINDEXEDPROC dolScissorIndexed;
 | 
						|
PFNDOLSCISSORINDEXEDVPROC dolScissorIndexedv;
 | 
						|
PFNDOLVIEWPORTARRAYVPROC dolViewportArrayv;
 | 
						|
PFNDOLVIEWPORTINDEXEDFPROC dolViewportIndexedf;
 | 
						|
PFNDOLVIEWPORTINDEXEDFVPROC dolViewportIndexedfv;
 | 
						|
 | 
						|
// ARB_draw_elements_base_vertex
 | 
						|
PFNDOLDRAWELEMENTSBASEVERTEXPROC dolDrawElementsBaseVertex;
 | 
						|
PFNDOLDRAWELEMENTSINSTANCEDBASEVERTEXPROC dolDrawElementsInstancedBaseVertex;
 | 
						|
PFNDOLDRAWRANGEELEMENTSBASEVERTEXPROC dolDrawRangeElementsBaseVertex;
 | 
						|
PFNDOLMULTIDRAWELEMENTSBASEVERTEXPROC dolMultiDrawElementsBaseVertex;
 | 
						|
 | 
						|
// ARB_sample_shading
 | 
						|
PFNDOLMINSAMPLESHADINGARBPROC dolMinSampleShading;
 | 
						|
 | 
						|
// ARB_debug_output
 | 
						|
PFNDOLDEBUGMESSAGECALLBACKARBPROC dolDebugMessageCallbackARB;
 | 
						|
PFNDOLDEBUGMESSAGECONTROLARBPROC dolDebugMessageControlARB;
 | 
						|
PFNDOLDEBUGMESSAGEINSERTARBPROC dolDebugMessageInsertARB;
 | 
						|
PFNDOLGETDEBUGMESSAGELOGARBPROC dolGetDebugMessageLogARB;
 | 
						|
 | 
						|
// KHR_debug
 | 
						|
PFNDOLDEBUGMESSAGECALLBACKPROC dolDebugMessageCallback;
 | 
						|
PFNDOLDEBUGMESSAGECONTROLPROC dolDebugMessageControl;
 | 
						|
PFNDOLDEBUGMESSAGEINSERTPROC dolDebugMessageInsert;
 | 
						|
PFNDOLGETDEBUGMESSAGELOGPROC dolGetDebugMessageLog;
 | 
						|
PFNDOLGETOBJECTLABELPROC dolGetObjectLabel;
 | 
						|
PFNDOLGETOBJECTPTRLABELPROC dolGetObjectPtrLabel;
 | 
						|
PFNDOLOBJECTLABELPROC dolObjectLabel;
 | 
						|
PFNDOLOBJECTPTRLABELPROC dolObjectPtrLabel;
 | 
						|
PFNDOLPOPDEBUGGROUPPROC dolPopDebugGroup;
 | 
						|
PFNDOLPUSHDEBUGGROUPPROC dolPushDebugGroup;
 | 
						|
 | 
						|
// ARB_buffer_storage
 | 
						|
PFNDOLBUFFERSTORAGEPROC dolBufferStorage;
 | 
						|
 | 
						|
// GL_NV_occlusion_query_samples
 | 
						|
PFNDOLGENOCCLUSIONQUERIESNVPROC dolGenOcclusionQueriesNV;
 | 
						|
PFNDOLDELETEOCCLUSIONQUERIESNVPROC dolDeleteOcclusionQueriesNV;
 | 
						|
PFNDOLISOCCLUSIONQUERYNVPROC dolIsOcclusionQueryNV;
 | 
						|
PFNDOLBEGINOCCLUSIONQUERYNVPROC dolBeginOcclusionQueryNV;
 | 
						|
PFNDOLENDOCCLUSIONQUERYNVPROC dolEndOcclusionQueryNV;
 | 
						|
PFNDOLGETOCCLUSIONQUERYIVNVPROC dolGetOcclusionQueryivNV;
 | 
						|
PFNDOLGETOCCLUSIONQUERYUIVNVPROC dolGetOcclusionQueryuivNV;
 | 
						|
 | 
						|
// ARB_clip_control
 | 
						|
PFNDOLCLIPCONTROLPROC dolClipControl;
 | 
						|
 | 
						|
// ARB_copy_image
 | 
						|
PFNDOLCOPYIMAGESUBDATAPROC dolCopyImageSubData;
 | 
						|
 | 
						|
// ARB_shader_storage_buffer_object
 | 
						|
PFNDOLSHADERSTORAGEBLOCKBINDINGPROC dolShaderStorageBlockBinding;
 | 
						|
 | 
						|
// NV_depth_buffer_float
 | 
						|
PFNDOLDEPTHRANGEDNVPROC dolDepthRangedNV;
 | 
						|
PFNDOLCLEARDEPTHDNVPROC dolClearDepthdNV;
 | 
						|
PFNDOLDEPTHBOUNDSDNVPROC dolDepthBoundsdNV;
 | 
						|
 | 
						|
// ARB_shader_image_load_store
 | 
						|
PFNDOLBINDIMAGETEXTUREPROC dolBindImageTexture;
 | 
						|
PFNDOLMEMORYBARRIERPROC dolMemoryBarrier;
 | 
						|
 | 
						|
// ARB_compute_shader
 | 
						|
PFNDOLDISPATCHCOMPUTEPROC dolDispatchCompute;
 | 
						|
PFNDOLDISPATCHCOMPUTEINDIRECTPROC dolDispatchComputeIndirect;
 | 
						|
 | 
						|
// Creates a GLFunc object that requires a feature
 | 
						|
#define GLFUNC_REQUIRES(x, y)                                                                      \
 | 
						|
  {                                                                                                \
 | 
						|
    (void**)&x, #x, y                                                                              \
 | 
						|
  }
 | 
						|
// Creates a GLFunc object with a different function suffix
 | 
						|
// For when we want to use the same function pointer, but different function name
 | 
						|
#define GLFUNC_SUFFIX(x, y, z)                                                                     \
 | 
						|
  {                                                                                                \
 | 
						|
    (void**)&x, #x #y, z                                                                           \
 | 
						|
  }
 | 
						|
// Creates a GLFunc object that should always be able to get grabbed
 | 
						|
// Used for Desktop OpenGL functions that should /always/ be provided.
 | 
						|
// aka GL 1.1/1.2/1.3/1.4
 | 
						|
#define GLFUNC_ALWAYS_REQUIRED(x)                                                                  \
 | 
						|
  {                                                                                                \
 | 
						|
    (void**)&x, #x, "VERSION_GL"                                                                   \
 | 
						|
  }
 | 
						|
// Creates a GLFunc object that should be able to get grabbed
 | 
						|
// on both GL and ES
 | 
						|
#define GL_ES_FUNC_ALWAYS_REQUIRED(x)                                                              \
 | 
						|
  {                                                                                                \
 | 
						|
    (void**)&x, #x, "VERSION_GL |VERSION_GLES_2"                                                   \
 | 
						|
  }
 | 
						|
// Creates a GLFunc object that should be able to get grabbed
 | 
						|
// on both GL and ES 3.0
 | 
						|
#define GL_ES3_FUNC_ALWAYS_REQUIRED(x)                                                             \
 | 
						|
  {                                                                                                \
 | 
						|
    (void**)&x, #x, "VERSION_GL |VERSION_GLES_3"                                                   \
 | 
						|
  }
 | 
						|
// Creates a GLFunc object that should be able to get grabbed
 | 
						|
// on both GL and ES 3.2
 | 
						|
#define GL_ES32_FUNC_ALWAYS_REQUIRED(x)                                                            \
 | 
						|
  {                                                                                                \
 | 
						|
    (void**)&x, #x, "VERSION_GL |VERSION_GLES_3_2"                                                 \
 | 
						|
  }
 | 
						|
 | 
						|
struct GLFunc
 | 
						|
{
 | 
						|
  void** function_ptr;
 | 
						|
  const std::string function_name;
 | 
						|
  const std::string requirements;
 | 
						|
};
 | 
						|
 | 
						|
const GLFunc gl_function_array[] = {
 | 
						|
    // gl_1_1
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glClearIndex),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glIndexMask),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glAlphaFunc),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glLogicOp),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPointSize),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glLineStipple),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPolygonMode),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPolygonStipple),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetPolygonStipple),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEdgeFlag),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEdgeFlagv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glClipPlane),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetClipPlane),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glDrawBuffer),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEnableClientState),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glDisableClientState),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetDoublev),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPushAttrib),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPopAttrib),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPushClientAttrib),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPopClientAttrib),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRenderMode),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glClearDepth),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glDepthRange),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glClearAccum),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glAccum),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMatrixMode),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glOrtho),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glFrustum),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPushMatrix),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPopMatrix),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glLoadIdentity),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glLoadMatrixd),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glLoadMatrixf),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultMatrixd),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultMatrixf),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRotated),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRotatef),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glScaled),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glScalef),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTranslated),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTranslatef),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glIsList),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glDeleteLists),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGenLists),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glNewList),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEndList),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glCallList),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glCallLists),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glListBase),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glBegin),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEnd),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex2d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex2f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex2i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex2s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex3d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex3f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex3i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex3s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex4d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex4f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex4i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex4s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex2dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex2fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex2iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex2sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex3dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex3fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex3iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex3sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex4dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex4fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex4iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertex4sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glNormal3b),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glNormal3d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glNormal3f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glNormal3i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glNormal3s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glNormal3bv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glNormal3dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glNormal3fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glNormal3iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glNormal3sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glIndexd),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glIndexf),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glIndexi),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glIndexs),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glIndexub),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glIndexdv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glIndexfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glIndexiv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glIndexsv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glIndexubv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor3b),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor3d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor3f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor3i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor3s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor3ub),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor3ui),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor3us),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor4b),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor4d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor4f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor4i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor4s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor4ub),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor4ui),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor4us),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor3bv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor3dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor3fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor3iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor3sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor3ubv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor3uiv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor3usv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor4bv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor4dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor4fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor4iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor4sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor4ubv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor4uiv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColor4usv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord1d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord1f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord1i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord1s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord2d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord2f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord2i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord2s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord3d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord3f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord3i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord3s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord4d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord4f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord4i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord4s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord1dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord1fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord1iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord1sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord2dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord2fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord2iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord2sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord3dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord3fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord3iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord3sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord4dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord4fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord4iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoord4sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos2d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos2f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos2i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos2s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos3d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos3f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos3i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos3s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos4d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos4f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos4i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos4s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos2dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos2fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos2iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos2sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos3dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos3fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos3iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos3sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos4dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos4fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos4iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRasterPos4sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRectd),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRectf),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRecti),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRects),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRectdv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRectfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRectiv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glRectsv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexPointer),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glNormalPointer),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColorPointer),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glIndexPointer),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexCoordPointer),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEdgeFlagPointer),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glArrayElement),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glInterleavedArrays),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glShadeModel),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glLightf),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glLighti),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glLightfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glLightiv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetLightfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetLightiv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glLightModelf),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glLightModeli),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glLightModelfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glLightModeliv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMaterialf),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMateriali),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMaterialfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMaterialiv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetMaterialfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetMaterialiv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glColorMaterial),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPixelZoom),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPixelStoref),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPixelTransferf),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPixelTransferi),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPixelMapfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPixelMapuiv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPixelMapusv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetPixelMapfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetPixelMapuiv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetPixelMapusv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glBitmap),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glDrawPixels),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glCopyPixels),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexGend),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexGenf),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexGeni),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexGendv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexGenfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexGeniv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetTexGendv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetTexGenfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetTexGeniv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexEnvf),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexEnvi),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexEnvfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexEnviv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetTexEnvfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetTexEnviv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetTexLevelParameterfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetTexLevelParameteriv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexImage1D),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetTexImage),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPrioritizeTextures),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glAreTexturesResident),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glTexSubImage1D),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glCopyTexImage1D),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glCopyTexSubImage1D),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMap1d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMap1f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMap2d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMap2f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetMapdv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetMapfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetMapiv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEvalCoord1d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEvalCoord1f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEvalCoord1dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEvalCoord1fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEvalCoord2d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEvalCoord2f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEvalCoord2dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEvalCoord2fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMapGrid1d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMapGrid1f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMapGrid2d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMapGrid2f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEvalPoint1),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEvalPoint2),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEvalMesh1),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glEvalMesh2),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glFogf),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glFogi),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glFogfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glFogiv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glFeedbackBuffer),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPassThrough),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSelectBuffer),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glInitNames),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glLoadName),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPushName),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPopName),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glTexImage2D),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glClearColor),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glClear),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glColorMask),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glBlendFunc),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glCullFace),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glFrontFace),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glLineWidth),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glPolygonOffset),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glScissor),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glEnable),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glDisable),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glIsEnabled),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetBooleanv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetFloatv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glFinish),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glFlush),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glHint),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glDepthFunc),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glDepthMask),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glViewport),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glDrawArrays),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glDrawElements),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glPixelStorei),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glReadPixels),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glStencilFunc),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glStencilMask),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glStencilOp),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glClearStencil),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glTexParameterf),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glTexParameteri),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glTexParameterfv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glTexParameteriv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetTexParameterfv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetTexParameteriv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGenTextures),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glDeleteTextures),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glBindTexture),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glIsTexture),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glTexSubImage2D),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glCopyTexImage2D),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glCopyTexSubImage2D),
 | 
						|
    GL_ES3_FUNC_ALWAYS_REQUIRED(glReadBuffer),
 | 
						|
    GL_ES32_FUNC_ALWAYS_REQUIRED(glGetPointerv),
 | 
						|
 | 
						|
    // gl_1_2
 | 
						|
    GL_ES3_FUNC_ALWAYS_REQUIRED(glCopyTexSubImage3D),
 | 
						|
    GL_ES3_FUNC_ALWAYS_REQUIRED(glDrawRangeElements),
 | 
						|
    GL_ES3_FUNC_ALWAYS_REQUIRED(glTexImage3D),
 | 
						|
    GL_ES3_FUNC_ALWAYS_REQUIRED(glTexSubImage3D),
 | 
						|
 | 
						|
    // gl_1_3
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glClientActiveTexture),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glCompressedTexImage1D),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glCompressedTexSubImage1D),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetCompressedTexImage),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glLoadTransposeMatrixd),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glLoadTransposeMatrixf),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultTransposeMatrixd),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultTransposeMatrixf),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord1d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord1dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord1f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord1fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord1i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord1iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord1s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord1sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord2d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord2dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord2f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord2fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord2i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord2iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord2s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord2sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord3d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord3dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord3f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord3fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord3i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord3iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord3s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord3sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord4d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord4dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord4f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord4fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord4i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord4iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord4s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiTexCoord4sv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glSampleCoverage),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glActiveTexture),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glCompressedTexImage2D),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glCompressedTexSubImage2D),
 | 
						|
    GL_ES3_FUNC_ALWAYS_REQUIRED(glCompressedTexImage3D),
 | 
						|
    GL_ES3_FUNC_ALWAYS_REQUIRED(glCompressedTexSubImage3D),
 | 
						|
 | 
						|
    // gl_1_4
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glFogCoordPointer),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glFogCoordd),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glFogCoorddv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glFogCoordf),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glFogCoordfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiDrawArrays),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMultiDrawElements),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPointParameterf),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPointParameterfv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPointParameteri),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glPointParameteriv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3b),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3bv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3ub),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3ubv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3ui),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3uiv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3us),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSecondaryColor3usv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glSecondaryColorPointer),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glWindowPos2d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glWindowPos2dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glWindowPos2f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glWindowPos2fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glWindowPos2i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glWindowPos2iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glWindowPos2s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glWindowPos2sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glWindowPos3d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glWindowPos3dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glWindowPos3f),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glWindowPos3fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glWindowPos3i),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glWindowPos3iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glWindowPos3s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glWindowPos3sv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glBlendColor),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glBlendEquation),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glBlendFuncSeparate),
 | 
						|
 | 
						|
    // gl_1_5
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetBufferSubData),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetQueryObjectiv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glMapBuffer),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glBindBuffer),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glBufferData),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glBufferSubData),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glDeleteBuffers),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGenBuffers),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetBufferParameteriv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glIsBuffer),
 | 
						|
    GL_ES3_FUNC_ALWAYS_REQUIRED(glBeginQuery),
 | 
						|
    GL_ES3_FUNC_ALWAYS_REQUIRED(glDeleteQueries),
 | 
						|
    GL_ES3_FUNC_ALWAYS_REQUIRED(glEndQuery),
 | 
						|
    GL_ES3_FUNC_ALWAYS_REQUIRED(glGenQueries),
 | 
						|
    GL_ES3_FUNC_ALWAYS_REQUIRED(glIsQuery),
 | 
						|
    GL_ES3_FUNC_ALWAYS_REQUIRED(glGetQueryiv),
 | 
						|
    GL_ES3_FUNC_ALWAYS_REQUIRED(glGetQueryObjectuiv),
 | 
						|
    GL_ES3_FUNC_ALWAYS_REQUIRED(glGetBufferPointerv),
 | 
						|
    GL_ES3_FUNC_ALWAYS_REQUIRED(glUnmapBuffer),
 | 
						|
 | 
						|
    // gl_2_0
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glGetVertexAttribdv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib1d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib1dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib1s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib1sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib2d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib2dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib2s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib2sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib3d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib3dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib3s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib3sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4Nbv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4Niv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4Nsv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4Nub),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4Nubv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4Nuiv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4Nusv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4bv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4d),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4dv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4iv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4s),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4sv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4ubv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4uiv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glVertexAttrib4usv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glAttachShader),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glBindAttribLocation),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glBlendEquationSeparate),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glCompileShader),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glCreateProgram),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glCreateShader),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glDeleteProgram),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glDeleteShader),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glDetachShader),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glDisableVertexAttribArray),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glEnableVertexAttribArray),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetActiveAttrib),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetActiveUniform),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetAttachedShaders),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetAttribLocation),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetProgramInfoLog),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetProgramiv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetShaderInfoLog),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetShaderSource),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetShaderiv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetUniformLocation),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetUniformfv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetUniformiv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetVertexAttribPointerv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetVertexAttribfv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glGetVertexAttribiv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glIsProgram),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glIsShader),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glLinkProgram),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glShaderSource),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glStencilFuncSeparate),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glStencilMaskSeparate),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glStencilOpSeparate),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniform1f),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniform1fv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniform1i),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniform1iv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniform2f),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniform2fv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniform2i),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniform2iv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniform3f),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniform3fv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniform3i),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniform3iv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniform4f),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniform4fv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniform4i),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniform4iv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniformMatrix2fv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniformMatrix3fv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUniformMatrix4fv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glUseProgram),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glValidateProgram),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttrib1f),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttrib1fv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttrib2f),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttrib2fv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttrib3f),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttrib3fv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttrib4f),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttrib4fv),
 | 
						|
    GL_ES_FUNC_ALWAYS_REQUIRED(glVertexAttribPointer),
 | 
						|
    GL_ES3_FUNC_ALWAYS_REQUIRED(glDrawBuffers),
 | 
						|
 | 
						|
    // gl_2_1
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glUniformMatrix2x3fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glUniformMatrix2x4fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glUniformMatrix3x2fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glUniformMatrix3x4fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glUniformMatrix4x2fv),
 | 
						|
    GLFUNC_ALWAYS_REQUIRED(glUniformMatrix4x3fv),
 | 
						|
 | 
						|
    // gl_3_0
 | 
						|
    GLFUNC_REQUIRES(glBeginConditionalRender, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glBindFragDataLocation, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glClampColor, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glEndConditionalRender, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glGetBooleani_v, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI1i, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI1iv, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI1ui, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI1uiv, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI2i, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI2iv, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI2ui, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI2uiv, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI3i, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI3iv, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI3ui, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI3uiv, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI4bv, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI4sv, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI4ubv, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI4usv, "VERSION_3_0"),
 | 
						|
    GLFUNC_REQUIRES(glBeginTransformFeedback, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glClearBufferfi, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glClearBufferfv, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glClearBufferiv, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glClearBufferuiv, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glEndTransformFeedback, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetFragDataLocation, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetStringi, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetTransformFeedbackVarying, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetUniformuiv, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetVertexAttribIiv, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetVertexAttribIuiv, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glTransformFeedbackVaryings, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glUniform1ui, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glUniform1uiv, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glUniform2ui, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glUniform2uiv, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glUniform3ui, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glUniform3uiv, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glUniform4ui, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glUniform4uiv, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI4i, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI4iv, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI4ui, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribI4uiv, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribIPointer, "VERSION_3_0 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glColorMaski, "VERSION_3_0 |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glDisablei, "VERSION_3_0 |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glEnablei, "VERSION_3_0 |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glGetTexParameterIiv, "VERSION_3_0 |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glGetTexParameterIuiv, "VERSION_3_0 |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glIsEnabledi, "VERSION_3_0 |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glTexParameterIiv, "VERSION_3_0 |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glTexParameterIuiv, "VERSION_3_0 |VERSION_GLES_3_2"),
 | 
						|
 | 
						|
    // gl_3_1
 | 
						|
    GLFUNC_REQUIRES(glPrimitiveRestartIndex, "VERSION_3_1"),
 | 
						|
    GLFUNC_REQUIRES(glDrawArraysInstanced, "VERSION_3_1 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glDrawElementsInstanced, "VERSION_3_1 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glTexBuffer, "VERSION_3_1 |VERSION_GLES_3_2"),
 | 
						|
 | 
						|
    // gl_3_2
 | 
						|
    GLFUNC_REQUIRES(glGetBufferParameteri64v, "VERSION_3_2 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetInteger64i_v, "VERSION_3_2 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glFramebufferTexture, "VERSION_3_2 |VERSION_GLES_3_2"),
 | 
						|
 | 
						|
    // gl_4_2
 | 
						|
    GLFUNC_REQUIRES(glDrawArraysInstancedBaseInstance, "VERSION_4_2"),
 | 
						|
    GLFUNC_REQUIRES(glDrawElementsInstancedBaseInstance, "VERSION_4_2"),
 | 
						|
    GLFUNC_REQUIRES(glDrawElementsInstancedBaseVertexBaseInstance, "VERSION_4_2"),
 | 
						|
    GLFUNC_REQUIRES(glGetInternalformativ, "VERSION_4_2"),
 | 
						|
    GLFUNC_REQUIRES(glGetActiveAtomicCounterBufferiv, "VERSION_4_2"),
 | 
						|
    GLFUNC_REQUIRES(glBindImageTexture, "VERSION_4_2"),
 | 
						|
    GLFUNC_REQUIRES(glMemoryBarrier, "VERSION_4_2"),
 | 
						|
    GLFUNC_REQUIRES(glTexStorage1D, "VERSION_4_2"),
 | 
						|
    GLFUNC_REQUIRES(glTexStorage2D, "VERSION_4_2"),
 | 
						|
    GLFUNC_REQUIRES(glTexStorage3D, "VERSION_4_2"),
 | 
						|
    GLFUNC_REQUIRES(glDrawTransformFeedbackInstanced, "VERSION_4_2"),
 | 
						|
    GLFUNC_REQUIRES(glDrawTransformFeedbackStreamInstanced, "VERSION_4_2"),
 | 
						|
 | 
						|
    // gl_4_3
 | 
						|
    GLFUNC_REQUIRES(glClearBufferData, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glClearBufferSubData, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glDispatchCompute, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glDispatchComputeIndirect, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glCopyImageSubData, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glFramebufferParameteri, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetFramebufferParameteriv, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetInternalformati64v, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glInvalidateTexSubImage, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glInvalidateTexImage, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glInvalidateBufferSubData, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glInvalidateBufferData, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glInvalidateFramebuffer, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glInvalidateSubFramebuffer, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glMultiDrawArraysIndirect, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glMultiDrawElementsIndirect, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetProgramInterfaceiv, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetProgramResourceIndex, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetProgramResourceName, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetProgramResourceiv, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetProgramResourceLocation, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetProgramResourceLocationIndex, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glShaderStorageBlockBinding, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glTexBufferRange, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glTexStorage2DMultisample, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glTexStorage3DMultisample, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glTextureView, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glBindVertexBuffer, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribFormat, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribIFormat, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribLFormat, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glVertexAttribBinding, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glVertexBindingDivisor, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glDebugMessageControl, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glDebugMessageInsert, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glDebugMessageCallback, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetDebugMessageLog, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glPushDebugGroup, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glPopDebugGroup, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glObjectLabel, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetObjectLabel, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glObjectPtrLabel, "VERSION_4_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetObjectPtrLabel, "VERSION_4_3"),
 | 
						|
 | 
						|
    // gl_4_4
 | 
						|
    GLFUNC_REQUIRES(glBufferStorage, "VERSION_4_4"),
 | 
						|
    GLFUNC_REQUIRES(glClearTexImage, "VERSION_4_4"),
 | 
						|
    GLFUNC_REQUIRES(glClearTexSubImage, "VERSION_4_4"),
 | 
						|
    GLFUNC_REQUIRES(glBindBuffersBase, "VERSION_4_4"),
 | 
						|
    GLFUNC_REQUIRES(glBindBuffersRange, "VERSION_4_4"),
 | 
						|
    GLFUNC_REQUIRES(glBindTextures, "VERSION_4_4"),
 | 
						|
    GLFUNC_REQUIRES(glBindSamplers, "VERSION_4_4"),
 | 
						|
    GLFUNC_REQUIRES(glBindImageTextures, "VERSION_4_4"),
 | 
						|
    GLFUNC_REQUIRES(glBindVertexBuffers, "VERSION_4_4"),
 | 
						|
 | 
						|
    // gl_4_5
 | 
						|
    GLFUNC_REQUIRES(glClipControl, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glCreateTransformFeedbacks, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTransformFeedbackBufferBase, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTransformFeedbackBufferRange, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetTransformFeedbackiv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetTransformFeedbacki_v, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetTransformFeedbacki64_v, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glCreateBuffers, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glNamedBufferStorage, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glNamedBufferData, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glNamedBufferSubData, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glCopyNamedBufferSubData, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glClearNamedBufferData, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glClearNamedBufferSubData, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glMapNamedBuffer, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glMapNamedBufferRange, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glUnmapNamedBuffer, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glFlushMappedNamedBufferRange, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetNamedBufferParameteriv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetNamedBufferParameteri64v, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetNamedBufferPointerv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetNamedBufferSubData, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glCreateFramebuffers, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glNamedFramebufferRenderbuffer, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glNamedFramebufferParameteri, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glNamedFramebufferTexture, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glNamedFramebufferTextureLayer, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glNamedFramebufferDrawBuffer, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glNamedFramebufferDrawBuffers, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glNamedFramebufferReadBuffer, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glInvalidateNamedFramebufferData, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glInvalidateNamedFramebufferSubData, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glClearNamedFramebufferiv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glClearNamedFramebufferuiv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glClearNamedFramebufferfv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glClearNamedFramebufferfi, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glBlitNamedFramebuffer, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glCheckNamedFramebufferStatus, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetNamedFramebufferParameteriv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetNamedFramebufferAttachmentParameteriv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glCreateRenderbuffers, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glNamedRenderbufferStorage, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glNamedRenderbufferStorageMultisample, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetNamedRenderbufferParameteriv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glCreateTextures, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTextureBuffer, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTextureBufferRange, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTextureStorage1D, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTextureStorage2D, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTextureStorage3D, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTextureStorage2DMultisample, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTextureStorage3DMultisample, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTextureSubImage1D, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTextureSubImage2D, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTextureSubImage3D, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glCompressedTextureSubImage1D, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glCompressedTextureSubImage2D, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glCompressedTextureSubImage3D, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glCopyTextureSubImage1D, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glCopyTextureSubImage2D, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glCopyTextureSubImage3D, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTextureParameterf, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTextureParameterfv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTextureParameteri, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTextureParameterIiv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTextureParameterIuiv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTextureParameteriv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGenerateTextureMipmap, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glBindTextureUnit, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetTextureImage, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetCompressedTextureImage, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetTextureLevelParameterfv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetTextureLevelParameteriv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetTextureParameterfv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetTextureParameterIiv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetTextureParameterIuiv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetTextureParameteriv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glCreateVertexArrays, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glDisableVertexArrayAttrib, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glEnableVertexArrayAttrib, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glVertexArrayElementBuffer, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glVertexArrayVertexBuffer, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glVertexArrayVertexBuffers, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glVertexArrayAttribBinding, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glVertexArrayAttribFormat, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glVertexArrayAttribIFormat, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glVertexArrayAttribLFormat, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glVertexArrayBindingDivisor, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetVertexArrayiv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetVertexArrayIndexediv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetVertexArrayIndexed64iv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glCreateSamplers, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glCreateProgramPipelines, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glCreateQueries, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetQueryBufferObjecti64v, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetQueryBufferObjectiv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetQueryBufferObjectui64v, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetQueryBufferObjectuiv, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glMemoryBarrierByRegion, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetTextureSubImage, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetCompressedTextureSubImage, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glGetGraphicsResetStatus, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glReadnPixels, "VERSION_4_5"),
 | 
						|
    GLFUNC_REQUIRES(glTextureBarrier, "VERSION_4_5"),
 | 
						|
    // AMD's video driver is trash and doesn't expose these function pointers
 | 
						|
    // Remove them for now until they learn how to implement the spec properly.
 | 
						|
    // GLFUNC_REQUIRES(glGetnCompressedTexImage,                   "VERSION_4_5"),
 | 
						|
    // GLFUNC_REQUIRES(glGetnTexImage,                             "VERSION_4_5"),
 | 
						|
    // GLFUNC_REQUIRES(glGetnUniformdv,                            "VERSION_4_5"),
 | 
						|
    // GLFUNC_REQUIRES(glGetnUniformfv,                            "VERSION_4_5"),
 | 
						|
    // GLFUNC_REQUIRES(glGetnUniformiv,                            "VERSION_4_5"),
 | 
						|
    // GLFUNC_REQUIRES(glGetnUniformuiv,                           "VERSION_4_5"),
 | 
						|
    // GLFUNC_REQUIRES(glGetnMapdv,                                "VERSION_4_5"),
 | 
						|
    // GLFUNC_REQUIRES(glGetnMapfv,                                "VERSION_4_5"),
 | 
						|
    // GLFUNC_REQUIRES(glGetnMapiv,                                "VERSION_4_5"),
 | 
						|
    // GLFUNC_REQUIRES(glGetnPixelMapfv,                           "VERSION_4_5"),
 | 
						|
    // GLFUNC_REQUIRES(glGetnPixelMapuiv,                          "VERSION_4_5"),
 | 
						|
    // GLFUNC_REQUIRES(glGetnPixelMapusv,                          "VERSION_4_5"),
 | 
						|
    // GLFUNC_REQUIRES(glGetnPolygonStipple,                       "VERSION_4_5"),
 | 
						|
    // GLFUNC_REQUIRES(glGetnColorTable,                           "VERSION_4_5"),
 | 
						|
    // GLFUNC_REQUIRES(glGetnConvolutionFilter,                    "VERSION_4_5"),
 | 
						|
    // GLFUNC_REQUIRES(glGetnSeparableFilter,                      "VERSION_4_5"),
 | 
						|
    // GLFUNC_REQUIRES(glGetnHistogram,                            "VERSION_4_5"),
 | 
						|
    // GLFUNC_REQUIRES(glGetnMinmax,                               "VERSION_4_5"),
 | 
						|
 | 
						|
    // ARB_uniform_buffer_object
 | 
						|
    GLFUNC_REQUIRES(glGetActiveUniformName, "GL_ARB_uniform_buffer_object"),
 | 
						|
    GLFUNC_REQUIRES(glBindBufferBase, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glBindBufferRange, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetActiveUniformBlockName, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetActiveUniformBlockiv, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetActiveUniformsiv, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetIntegeri_v, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetUniformBlockIndex, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetUniformIndices, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glUniformBlockBinding, "GL_ARB_uniform_buffer_object |VERSION_GLES_3"),
 | 
						|
 | 
						|
    // ARB_sampler_objects
 | 
						|
    GLFUNC_REQUIRES(glBindSampler, "GL_ARB_sampler_objects |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glDeleteSamplers, "GL_ARB_sampler_objects |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGenSamplers, "GL_ARB_sampler_objects |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetSamplerParameterfv, "GL_ARB_sampler_objects |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetSamplerParameteriv, "GL_ARB_sampler_objects |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glIsSampler, "GL_ARB_sampler_objects |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glSamplerParameterf, "GL_ARB_sampler_objects |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glSamplerParameterfv, "GL_ARB_sampler_objects |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glSamplerParameteri, "GL_ARB_sampler_objects |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glSamplerParameteriv, "GL_ARB_sampler_objects |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetSamplerParameterIiv, "GL_ARB_sampler_objects |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glGetSamplerParameterIuiv, "GL_ARB_sampler_objects |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glSamplerParameterIiv, "GL_ARB_sampler_objects |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glSamplerParameterIuiv, "GL_ARB_sampler_objects |VERSION_GLES_3_2"),
 | 
						|
 | 
						|
    // ARB_map_buffer_range
 | 
						|
    GLFUNC_REQUIRES(glFlushMappedBufferRange, "GL_ARB_map_buffer_range |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glMapBufferRange, "GL_ARB_map_buffer_range |VERSION_GLES_3"),
 | 
						|
 | 
						|
    // ARB_vertex_array_object
 | 
						|
    GLFUNC_REQUIRES(glBindVertexArray, "GL_ARB_vertex_array_object |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glDeleteVertexArrays, "GL_ARB_vertex_array_object |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGenVertexArrays, "GL_ARB_vertex_array_object |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glIsVertexArray, "GL_ARB_vertex_array_object |VERSION_GLES_3"),
 | 
						|
 | 
						|
    // APPLE_vertex_array_object
 | 
						|
    GLFUNC_SUFFIX(glBindVertexArray, APPLE,
 | 
						|
                  "GL_APPLE_vertex_array_object !GL_ARB_vertex_array_object"),
 | 
						|
    GLFUNC_SUFFIX(glDeleteVertexArrays, APPLE,
 | 
						|
                  "GL_APPLE_vertex_array_object !GL_ARB_vertex_array_object"),
 | 
						|
    GLFUNC_SUFFIX(glGenVertexArrays, APPLE,
 | 
						|
                  "GL_APPLE_vertex_array_object !GL_ARB_vertex_array_object"),
 | 
						|
    GLFUNC_SUFFIX(glIsVertexArray, APPLE,
 | 
						|
                  "GL_APPLE_vertex_array_object !GL_ARB_vertex_array_object"),
 | 
						|
 | 
						|
    // ARB_framebuffer_object
 | 
						|
    GLFUNC_REQUIRES(glFramebufferTexture1D, "GL_ARB_framebuffer_object"),
 | 
						|
    GLFUNC_REQUIRES(glFramebufferTexture3D, "GL_ARB_framebuffer_object"),
 | 
						|
    GLFUNC_REQUIRES(glBindFramebuffer, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glBindRenderbuffer, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glBlitFramebuffer, "GL_ARB_framebuffer_object |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glCheckFramebufferStatus, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glDeleteFramebuffers, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glDeleteRenderbuffers, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glFramebufferRenderbuffer, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glFramebufferTexture2D, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glFramebufferTextureLayer, "GL_ARB_framebuffer_object |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGenFramebuffers, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glGenRenderbuffers, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glGenerateMipmap, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glGetFramebufferAttachmentParameteriv,
 | 
						|
                    "GL_ARB_framebuffer_object |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glGetRenderbufferParameteriv, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glIsFramebuffer, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glIsRenderbuffer, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glRenderbufferStorage, "GL_ARB_framebuffer_object |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glRenderbufferStorageMultisample, "GL_ARB_framebuffer_object |VERSION_GLES_3"),
 | 
						|
 | 
						|
    // ARB_get_program_binary
 | 
						|
    GLFUNC_REQUIRES(glGetProgramBinary, "GL_ARB_get_program_binary |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glProgramBinary, "GL_ARB_get_program_binary |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glProgramParameteri, "GL_ARB_get_program_binary |VERSION_GLES_3"),
 | 
						|
 | 
						|
    // ARB_sync
 | 
						|
    GLFUNC_REQUIRES(glClientWaitSync, "GL_ARB_sync |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glDeleteSync, "GL_ARB_sync |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glFenceSync, "GL_ARB_sync |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetInteger64v, "GL_ARB_sync |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glGetSynciv, "GL_ARB_sync |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glIsSync, "GL_ARB_sync |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glWaitSync, "GL_ARB_sync |VERSION_GLES_3"),
 | 
						|
 | 
						|
    // ARB_texture_multisample
 | 
						|
    GLFUNC_REQUIRES(glTexImage2DMultisample, "GL_ARB_texture_multisample"),
 | 
						|
    GLFUNC_REQUIRES(glTexImage3DMultisample, "GL_ARB_texture_multisample"),
 | 
						|
    GLFUNC_REQUIRES(glGetMultisamplefv, "GL_ARB_texture_multisample"),
 | 
						|
    GLFUNC_REQUIRES(glSampleMaski, "GL_ARB_texture_multisample"),
 | 
						|
 | 
						|
    // ARB_texture_storage
 | 
						|
    GLFUNC_REQUIRES(glTexStorage1D, "GL_ARB_texture_storage !VERSION_4_2"),
 | 
						|
    GLFUNC_REQUIRES(glTexStorage2D, "GL_ARB_texture_storage !VERSION_4_2 |VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glTexStorage3D, "GL_ARB_texture_storage !VERSION_4_2 |VERSION_GLES_3"),
 | 
						|
 | 
						|
    // ARB_texture_storage_multisample
 | 
						|
    GLFUNC_REQUIRES(glTexStorage2DMultisample,
 | 
						|
                    "GL_ARB_texture_storage_multisample !VERSION_4_3 |VERSION_GLES_3_1"),
 | 
						|
    GLFUNC_REQUIRES(glTexStorage3DMultisample,
 | 
						|
                    "GL_ARB_texture_storage_multisample !VERSION_4_3 |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_SUFFIX(glTexStorage3DMultisample, OES,
 | 
						|
                  "GL_OES_texture_storage_multisample_2d_array !VERSION_GLES_3_2"),
 | 
						|
 | 
						|
    // ARB_ES2_compatibility
 | 
						|
    GLFUNC_REQUIRES(glClearDepthf, "GL_ARB_ES2_compatibility |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glDepthRangef, "GL_ARB_ES2_compatibility |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glGetShaderPrecisionFormat, "GL_ARB_ES2_compatibility |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glReleaseShaderCompiler, "GL_ARB_ES2_compatibility |VERSION_GLES_2"),
 | 
						|
    GLFUNC_REQUIRES(glShaderBinary, "GL_ARB_ES2_compatibility |VERSION_GLES_2"),
 | 
						|
 | 
						|
    // NV_primitive_restart
 | 
						|
    GLFUNC_REQUIRES(glPrimitiveRestartIndexNV, "GL_NV_primitive_restart"),
 | 
						|
    GLFUNC_REQUIRES(glPrimitiveRestartNV, "GL_NV_primitive_restart"),
 | 
						|
 | 
						|
    // ARB_blend_func_extended
 | 
						|
    GLFUNC_REQUIRES(glBindFragDataLocationIndexed, "GL_ARB_blend_func_extended"),
 | 
						|
    GLFUNC_REQUIRES(glGetFragDataIndex, "GL_ARB_blend_func_extended"),
 | 
						|
 | 
						|
    // ARB_viewport_array
 | 
						|
    GLFUNC_REQUIRES(glDepthRangeArrayv, "GL_ARB_viewport_array"),
 | 
						|
    GLFUNC_REQUIRES(glDepthRangeIndexed, "GL_ARB_viewport_array"),
 | 
						|
    GLFUNC_REQUIRES(glGetDoublei_v, "GL_ARB_viewport_array"),
 | 
						|
    GLFUNC_REQUIRES(glGetFloati_v, "GL_ARB_viewport_array"),
 | 
						|
    GLFUNC_REQUIRES(glScissorArrayv, "GL_ARB_viewport_array"),
 | 
						|
    GLFUNC_REQUIRES(glScissorIndexed, "GL_ARB_viewport_array"),
 | 
						|
    GLFUNC_REQUIRES(glScissorIndexedv, "GL_ARB_viewport_array"),
 | 
						|
    GLFUNC_REQUIRES(glViewportArrayv, "GL_ARB_viewport_array"),
 | 
						|
    GLFUNC_REQUIRES(glViewportIndexedf, "GL_ARB_viewport_array"),
 | 
						|
    GLFUNC_REQUIRES(glViewportIndexedfv, "GL_ARB_viewport_array"),
 | 
						|
 | 
						|
    // ARB_draw_elements_base_vertex
 | 
						|
    GLFUNC_REQUIRES(glDrawElementsBaseVertex, "GL_ARB_draw_elements_base_vertex |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glDrawElementsInstancedBaseVertex,
 | 
						|
                    "GL_ARB_draw_elements_base_vertex |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glDrawRangeElementsBaseVertex,
 | 
						|
                    "GL_ARB_draw_elements_base_vertex |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glMultiDrawElementsBaseVertex, "GL_ARB_draw_elements_base_vertex"),
 | 
						|
 | 
						|
    // OES_draw_elements_base_vertex
 | 
						|
    GLFUNC_SUFFIX(glDrawElementsBaseVertex, OES,
 | 
						|
                  "GL_OES_draw_elements_base_vertex !VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_SUFFIX(glDrawElementsInstancedBaseVertex, OES,
 | 
						|
                  "GL_OES_draw_elements_base_vertex VERSION_GLES_3 !VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_SUFFIX(glDrawRangeElementsBaseVertex, OES,
 | 
						|
                  "GL_OES_draw_elements_base_vertex VERSION_GLES_3 !VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_SUFFIX(glMultiDrawElementsBaseVertex, EXT,
 | 
						|
                  "GL_OES_draw_elements_base_vertex GL_EXT_multi_draw_arrays"),
 | 
						|
 | 
						|
    // EXT_draw_elements_base_vertex
 | 
						|
    GLFUNC_SUFFIX(
 | 
						|
        glDrawElementsBaseVertex, EXT,
 | 
						|
        "GL_EXT_draw_elements_base_vertex !GL_OES_draw_elements_base_vertex !VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_SUFFIX(glDrawElementsInstancedBaseVertex, EXT,
 | 
						|
                  "GL_EXT_draw_elements_base_vertex VERSION_GLES_3 "
 | 
						|
                  "!GL_OES_draw_elements_base_vertex !VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_SUFFIX(glDrawRangeElementsBaseVertex, EXT,
 | 
						|
                  "GL_EXT_draw_elements_base_vertex VERSION_GLES_3 "
 | 
						|
                  "!GL_OES_draw_elements_base_vertex !VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_SUFFIX(glMultiDrawElementsBaseVertex, EXT,
 | 
						|
                  "GL_EXT_draw_elements_base_vertex GL_EXT_multi_draw_arrays "
 | 
						|
                  "!GL_OES_draw_elements_base_vertex !VERSION_GLES_3_2"),
 | 
						|
 | 
						|
    // ARB_sample_shading
 | 
						|
    GLFUNC_SUFFIX(glMinSampleShading, ARB, "GL_ARB_sample_shading"),
 | 
						|
 | 
						|
    // OES_sample_shading
 | 
						|
    GLFUNC_SUFFIX(glMinSampleShading, OES, "GL_OES_sample_shading !VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glMinSampleShading, "VERSION_GLES_3_2"),
 | 
						|
 | 
						|
    // ARB_debug_output
 | 
						|
    GLFUNC_REQUIRES(glDebugMessageCallbackARB, "GL_ARB_debug_output"),
 | 
						|
    GLFUNC_REQUIRES(glDebugMessageControlARB, "GL_ARB_debug_output"),
 | 
						|
    GLFUNC_REQUIRES(glDebugMessageInsertARB, "GL_ARB_debug_output"),
 | 
						|
    GLFUNC_REQUIRES(glGetDebugMessageLogARB, "GL_ARB_debug_output"),
 | 
						|
 | 
						|
    // KHR_debug
 | 
						|
    GLFUNC_SUFFIX(glDebugMessageCallback, KHR, "GL_KHR_debug VERSION_GLES_3"),
 | 
						|
    GLFUNC_SUFFIX(glDebugMessageControl, KHR, "GL_KHR_debug VERSION_GLES_3"),
 | 
						|
    GLFUNC_SUFFIX(glDebugMessageInsert, KHR, "GL_KHR_debug VERSION_GLES_3"),
 | 
						|
    GLFUNC_SUFFIX(glGetDebugMessageLog, KHR, "GL_KHR_debug VERSION_GLES_3"),
 | 
						|
    GLFUNC_SUFFIX(glGetObjectLabel, KHR, "GL_KHR_debug VERSION_GLES_3"),
 | 
						|
    GLFUNC_SUFFIX(glGetObjectPtrLabel, KHR, "GL_KHR_debug VERSION_GLES_3"),
 | 
						|
    GLFUNC_SUFFIX(glObjectLabel, KHR, "GL_KHR_debug VERSION_GLES_3"),
 | 
						|
    GLFUNC_SUFFIX(glObjectPtrLabel, KHR, "GL_KHR_debug VERSION_GLES_3"),
 | 
						|
    GLFUNC_SUFFIX(glPopDebugGroup, KHR, "GL_KHR_debug VERSION_GLES_3"),
 | 
						|
    GLFUNC_SUFFIX(glPushDebugGroup, KHR, "GL_KHR_debug VERSION_GLES_3"),
 | 
						|
    GLFUNC_REQUIRES(glDebugMessageCallback,
 | 
						|
                    "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glDebugMessageControl,
 | 
						|
                    "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glDebugMessageInsert,
 | 
						|
                    "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glGetDebugMessageLog,
 | 
						|
                    "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glGetObjectLabel,
 | 
						|
                    "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glGetObjectPtrLabel,
 | 
						|
                    "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glObjectLabel,
 | 
						|
                    "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glObjectPtrLabel,
 | 
						|
                    "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glPopDebugGroup,
 | 
						|
                    "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
 | 
						|
    GLFUNC_REQUIRES(glPushDebugGroup,
 | 
						|
                    "GL_KHR_debug !VERSION_GLES_3 !VERSION_GL_4_3 |VERSION_GLES_3_2"),
 | 
						|
 | 
						|
    // ARB_buffer_storage
 | 
						|
    GLFUNC_REQUIRES(glBufferStorage, "GL_ARB_buffer_storage !VERSION_4_4"),
 | 
						|
    GLFUNC_SUFFIX(glNamedBufferStorage, EXT,
 | 
						|
                  "GL_ARB_buffer_storage GL_EXT_direct_state_access !VERSION_4_5"),
 | 
						|
 | 
						|
    // EXT_buffer_storage
 | 
						|
    GLFUNC_SUFFIX(glBufferStorage, EXT,
 | 
						|
                  "GL_EXT_buffer_storage !GL_ARB_buffer_storage !VERSION_4_4"),
 | 
						|
 | 
						|
    // EXT_geometry_shader
 | 
						|
    GLFUNC_SUFFIX(glFramebufferTexture, EXT, "GL_EXT_geometry_shader !VERSION_3_2"),
 | 
						|
 | 
						|
    // NV_occlusion_query_samples
 | 
						|
    GLFUNC_REQUIRES(glGenOcclusionQueriesNV, "GL_NV_occlusion_query_samples"),
 | 
						|
    GLFUNC_REQUIRES(glDeleteOcclusionQueriesNV, "GL_NV_occlusion_query_samples"),
 | 
						|
    GLFUNC_REQUIRES(glIsOcclusionQueryNV, "GL_NV_occlusion_query_samples"),
 | 
						|
    GLFUNC_REQUIRES(glBeginOcclusionQueryNV, "GL_NV_occlusion_query_samples"),
 | 
						|
    GLFUNC_REQUIRES(glEndOcclusionQueryNV, "GL_NV_occlusion_query_samples"),
 | 
						|
    GLFUNC_REQUIRES(glGetOcclusionQueryivNV, "GL_NV_occlusion_query_samples"),
 | 
						|
    GLFUNC_REQUIRES(glGetOcclusionQueryuivNV, "GL_NV_occlusion_query_samples"),
 | 
						|
 | 
						|
    // ARB_clip_control
 | 
						|
    GLFUNC_REQUIRES(glClipControl, "GL_ARB_clip_control !VERSION_4_5"),
 | 
						|
 | 
						|
    // ARB_copy_image
 | 
						|
    GLFUNC_REQUIRES(glCopyImageSubData, "GL_ARB_copy_image !VERSION_4_3 |VERSION_GLES_3_2"),
 | 
						|
 | 
						|
    // NV_copy_image
 | 
						|
    GLFUNC_SUFFIX(glCopyImageSubData, NV, "GL_NV_copy_image !GL_ARB_copy_image !VERSION_GLES_3_2"),
 | 
						|
 | 
						|
    // OES_copy_image
 | 
						|
    GLFUNC_SUFFIX(glCopyImageSubData, OES, "GL_OES_copy_image !VERSION_GLES_3_2"),
 | 
						|
 | 
						|
    // EXT_copy_image
 | 
						|
    GLFUNC_SUFFIX(glCopyImageSubData, EXT,
 | 
						|
                  "GL_EXT_copy_image !GL_OES_copy_image !VERSION_GLES_3_2"),
 | 
						|
 | 
						|
    // EXT_texture_buffer
 | 
						|
    GLFUNC_SUFFIX(glTexBuffer, OES, "GL_OES_texture_buffer !VERSION_GLES_3_2"),
 | 
						|
 | 
						|
    // EXT_texture_buffer
 | 
						|
    GLFUNC_SUFFIX(glTexBuffer, EXT,
 | 
						|
                  "GL_EXT_texture_buffer !GL_OES_texture_buffer !VERSION_GLES_3_2"),
 | 
						|
 | 
						|
    // EXT_blend_func_extended
 | 
						|
    GLFUNC_SUFFIX(glBindFragDataLocationIndexed, EXT, "GL_EXT_blend_func_extended"),
 | 
						|
    GLFUNC_SUFFIX(glGetFragDataIndex, EXT, "GL_EXT_blend_func_extended"),
 | 
						|
 | 
						|
    // ARB_shader_storage_buffer_object
 | 
						|
    GLFUNC_REQUIRES(glShaderStorageBlockBinding, "ARB_shader_storage_buffer_object !VERSION_4_3"),
 | 
						|
 | 
						|
    // NV_depth_buffer_float
 | 
						|
    GLFUNC_REQUIRES(glDepthRangedNV, "GL_NV_depth_buffer_float"),
 | 
						|
    GLFUNC_REQUIRES(glClearDepthdNV, "GL_NV_depth_buffer_float"),
 | 
						|
    GLFUNC_REQUIRES(glDepthBoundsdNV, "GL_NV_depth_buffer_float"),
 | 
						|
 | 
						|
    // ARB_shader_image_load_store
 | 
						|
    GLFUNC_REQUIRES(glBindImageTexture,
 | 
						|
                    "GL_ARB_shader_image_load_store !VERSION_4_2 |VERSION_GLES_3_1"),
 | 
						|
    GLFUNC_REQUIRES(glMemoryBarrier,
 | 
						|
                    "GL_ARB_shader_image_load_store !VERSION_4_2 |VERSION_GLES_3_1"),
 | 
						|
 | 
						|
    // ARB_compute_shader
 | 
						|
    GLFUNC_REQUIRES(glDispatchCompute, "GL_ARB_compute_shader !VERSION_4_3 |VERSION_GLES_3_1"),
 | 
						|
    GLFUNC_REQUIRES(glDispatchComputeIndirect,
 | 
						|
                    "GL_ARB_compute_shader !VERSION_4_3 |VERSION_GLES_3_1"),
 | 
						|
 | 
						|
    // ARB_get_texture_sub_image
 | 
						|
    GLFUNC_REQUIRES(glGetTextureSubImage, "GL_ARB_get_texture_sub_image !VERSION_4_5"),
 | 
						|
};
 | 
						|
 | 
						|
namespace GLExtensions
 | 
						|
{
 | 
						|
// Private members and functions
 | 
						|
static u32 s_gl_version;
 | 
						|
static std::unordered_map<std::string, bool> s_extension_list;
 | 
						|
 | 
						|
// Private initialization functions
 | 
						|
bool InitFunctionPointers(GLContext* context);
 | 
						|
 | 
						|
// Initializes the extension list the old way
 | 
						|
static void InitExtensionList21()
 | 
						|
{
 | 
						|
  const char* extensions = (const char*)glGetString(GL_EXTENSIONS);
 | 
						|
  std::string tmp(extensions);
 | 
						|
  std::istringstream buffer(tmp);
 | 
						|
 | 
						|
  while (buffer >> tmp)
 | 
						|
    s_extension_list[tmp] = true;
 | 
						|
}
 | 
						|
 | 
						|
static void InitExtensionList(GLContext* context)
 | 
						|
{
 | 
						|
  s_extension_list.clear();
 | 
						|
  if (context->IsGLES())
 | 
						|
  {
 | 
						|
    switch (s_gl_version)
 | 
						|
    {
 | 
						|
    default:
 | 
						|
    case 320:
 | 
						|
      s_extension_list["VERSION_GLES_3_2"] = true;
 | 
						|
    case 310:
 | 
						|
      s_extension_list["VERSION_GLES_3_1"] = true;
 | 
						|
    case 300:
 | 
						|
      s_extension_list["VERSION_GLES_3"] = true;
 | 
						|
      break;
 | 
						|
    }
 | 
						|
 | 
						|
    // We always have ES 2.0
 | 
						|
    s_extension_list["VERSION_GLES_2"] = true;
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {
 | 
						|
    // Some OpenGL implementations chose to not expose core extensions as extensions
 | 
						|
    // Let's add them to the list manually depending on which version of OpenGL we have
 | 
						|
    // We need to be slightly careful here
 | 
						|
    // When an extension got merged in to core, the naming may have changed
 | 
						|
 | 
						|
    // This has intentional fall through
 | 
						|
    switch (s_gl_version)
 | 
						|
    {
 | 
						|
    default:
 | 
						|
    case 450:
 | 
						|
    {
 | 
						|
      std::string gl450exts[] = {
 | 
						|
          "GL_ARB_ES3_1_compatibility",
 | 
						|
          "GL_ARB_clip_control",
 | 
						|
          "GL_ARB_conditional_render_inverted",
 | 
						|
          "GL_ARB_cull_distance",
 | 
						|
          "GL_ARB_derivative_control",
 | 
						|
          "GL_ARB_direct_state_access",
 | 
						|
          "GL_ARB_get_texture_sub_image",
 | 
						|
          "GL_ARB_robustness",
 | 
						|
          "GL_ARB_shader_texture_image_samples",
 | 
						|
          "GL_ARB_texture_barrier",
 | 
						|
          "VERSION_4_5",
 | 
						|
      };
 | 
						|
      for (auto it : gl450exts)
 | 
						|
        s_extension_list[it] = true;
 | 
						|
    }
 | 
						|
    case 440:
 | 
						|
    {
 | 
						|
      std::string gl440exts[] = {
 | 
						|
          "GL_ARB_buffer_storage",
 | 
						|
          "GL_ARB_clear_texture",
 | 
						|
          "GL_ARB_enhanced_layouts",
 | 
						|
          "GL_ARB_multi_bind",
 | 
						|
          "GL_ARB_query_buffer_object",
 | 
						|
          "GL_ARB_texture_mirror_clamp_to_edge",
 | 
						|
          "GL_ARB_texture_stencil8",
 | 
						|
          "GL_ARB_vertex_type_10f_11f_11f_rev",
 | 
						|
          "VERSION_4_4",
 | 
						|
      };
 | 
						|
      for (auto it : gl440exts)
 | 
						|
        s_extension_list[it] = true;
 | 
						|
    }
 | 
						|
    case 430:
 | 
						|
    {
 | 
						|
      std::string gl430exts[] = {
 | 
						|
          "GL_ARB_ES3_compatibility",
 | 
						|
          "GL_ARB_arrays_of_arrays",
 | 
						|
          "GL_ARB_clear_buffer_object",
 | 
						|
          "GL_ARB_compute_shader",
 | 
						|
          "GL_ARB_copy_image",
 | 
						|
          "GL_ARB_explicit_uniform_location",
 | 
						|
          "GL_ARB_fragment_layer_viewport",
 | 
						|
          "GL_ARB_framebuffer_no_attachments",
 | 
						|
          "GL_ARB_internalformat_query2",
 | 
						|
          "GL_ARB_invalidate_subdata",
 | 
						|
          "GL_ARB_multi_draw_indirect",
 | 
						|
          "GL_ARB_program_interface_query",
 | 
						|
          "GL_ARB_shader_image_size",
 | 
						|
          "GL_ARB_shader_storage_buffer_object",
 | 
						|
          "GL_ARB_stencil_texturing",
 | 
						|
          "GL_ARB_texture_buffer_range",
 | 
						|
          "GL_ARB_texture_query_levels",
 | 
						|
          "GL_ARB_texture_storage_multisample",
 | 
						|
          "GL_ARB_texture_view",
 | 
						|
          "GL_ARB_vertex_attrib_binding",
 | 
						|
          "VERSION_4_3",
 | 
						|
      };
 | 
						|
      for (auto it : gl430exts)
 | 
						|
        s_extension_list[it] = true;
 | 
						|
    }
 | 
						|
    case 420:
 | 
						|
    {
 | 
						|
      std::string gl420exts[] = {
 | 
						|
          "GL_ARB_base_instance",
 | 
						|
          "GL_ARB_compressed_texture_pixel_storage",
 | 
						|
          "GL_ARB_conservative_depth",
 | 
						|
          "GL_ARB_internalformat_query",
 | 
						|
          "GL_ARB_map_buffer_alignment",
 | 
						|
          "GL_ARB_shader_atomic_counters",
 | 
						|
          "GL_ARB_shader_image_load_store",
 | 
						|
          "GL_ARB_shading_language_420pack",
 | 
						|
          "GL_ARB_shading_language_packing",
 | 
						|
          "GL_ARB_texture_compression_BPTC",
 | 
						|
          "GL_ARB_texture_storage",
 | 
						|
          "GL_ARB_transform_feedback_instanced",
 | 
						|
          "VERSION_4_2",
 | 
						|
      };
 | 
						|
      for (auto it : gl420exts)
 | 
						|
        s_extension_list[it] = true;
 | 
						|
    }
 | 
						|
    case 410:
 | 
						|
    {
 | 
						|
      std::string gl410exts[] = {
 | 
						|
          "GL_ARB_ES2_compatibility",
 | 
						|
          "GL_ARB_get_program_binary",
 | 
						|
          "GL_ARB_separate_shader_objects",
 | 
						|
          "GL_ARB_shader_precision",
 | 
						|
          "GL_ARB_vertex_attrib_64_bit",
 | 
						|
          "GL_ARB_viewport_array",
 | 
						|
          "VERSION_4_1",
 | 
						|
      };
 | 
						|
      for (auto it : gl410exts)
 | 
						|
        s_extension_list[it] = true;
 | 
						|
    }
 | 
						|
    case 400:
 | 
						|
    {
 | 
						|
      std::string gl400exts[] = {
 | 
						|
          "GL_ARB_draw_indirect",
 | 
						|
          "GL_ARB_gpu_shader5",
 | 
						|
          "GL_ARB_gpu_shader_fp64",
 | 
						|
          "GL_ARB_sample_shading",
 | 
						|
          "GL_ARB_shader_subroutine",
 | 
						|
          "GL_ARB_tessellation_shader",
 | 
						|
          "GL_ARB_texture_buffer_object_rgb32",
 | 
						|
          "GL_ARB_texture_cube_map_array",
 | 
						|
          "GL_ARB_texture_gather",
 | 
						|
          "GL_ARB_texture_query_lod",
 | 
						|
          "GL_ARB_transform_feedback2",
 | 
						|
          "GL_ARB_transform_feedback3",
 | 
						|
          "VERSION_4_0",
 | 
						|
      };
 | 
						|
      for (auto it : gl400exts)
 | 
						|
        s_extension_list[it] = true;
 | 
						|
    }
 | 
						|
    case 330:
 | 
						|
    {
 | 
						|
      std::string gl330exts[] = {
 | 
						|
          "GL_ARB_shader_bit_encoding",
 | 
						|
          "GL_ARB_blend_func_extended",
 | 
						|
          "GL_ARB_explicit_attrib_location",
 | 
						|
          "GL_ARB_occlusion_query2",
 | 
						|
          "GL_ARB_sampler_objects",
 | 
						|
          "GL_ARB_texture_swizzle",
 | 
						|
          "GL_ARB_timer_query",
 | 
						|
          "GL_ARB_instanced_arrays",
 | 
						|
          "GL_ARB_texture_rgb10_a2ui",
 | 
						|
          "GL_ARB_vertex_type_2_10_10_10_rev",
 | 
						|
          "VERSION_3_3",
 | 
						|
      };
 | 
						|
      for (auto it : gl330exts)
 | 
						|
        s_extension_list[it] = true;
 | 
						|
    }
 | 
						|
    case 320:
 | 
						|
    {
 | 
						|
      std::string gl320exts[] = {
 | 
						|
          "GL_ARB_geometry_shader4",
 | 
						|
          "GL_ARB_sync",
 | 
						|
          "GL_ARB_vertex_array_bgra",
 | 
						|
          "GL_ARB_draw_elements_base_vertex",
 | 
						|
          "GL_ARB_seamless_cube_map",
 | 
						|
          "GL_ARB_texture_multisample",
 | 
						|
          "GL_ARB_fragment_coord_conventions",
 | 
						|
          "GL_ARB_provoking_vertex",
 | 
						|
          "GL_ARB_depth_clamp",
 | 
						|
          "VERSION_3_2",
 | 
						|
      };
 | 
						|
      for (auto it : gl320exts)
 | 
						|
        s_extension_list[it] = true;
 | 
						|
    }
 | 
						|
    case 310:
 | 
						|
    {
 | 
						|
      // Can't add NV_primitive_restart since function name changed
 | 
						|
      std::string gl310exts[] = {
 | 
						|
          "GL_ARB_draw_instanced",
 | 
						|
          "GL_ARB_copy_buffer",
 | 
						|
          "GL_ARB_texture_buffer_object",
 | 
						|
          "GL_ARB_texture_rectangle",
 | 
						|
          "GL_ARB_uniform_buffer_object",
 | 
						|
          //"GL_NV_primitive_restart",
 | 
						|
          "VERSION_3_1",
 | 
						|
      };
 | 
						|
      for (auto it : gl310exts)
 | 
						|
        s_extension_list[it] = true;
 | 
						|
    }
 | 
						|
    case 300:
 | 
						|
    {
 | 
						|
      // Quite a lot of these had their names changed when merged in to core
 | 
						|
      // Disable the ones that have
 | 
						|
      std::string gl300exts[] = {
 | 
						|
          "GL_ARB_map_buffer_range",
 | 
						|
          "GL_ARB_color_buffer_float",
 | 
						|
          "GL_ARB_texture_float",
 | 
						|
          "GL_ARB_half_float_pixel",
 | 
						|
          "GL_ARB_framebuffer_object",
 | 
						|
          "GL_ARB_texture_float",
 | 
						|
          "GL_ARB_vertex_array_object",
 | 
						|
          "GL_ARB_depth_buffer_float",
 | 
						|
          //"GL_EXT_texture_integer",
 | 
						|
          //"GL_EXT_gpu_shader4",
 | 
						|
          //"GL_APPLE_flush_buffer_range",
 | 
						|
          //"GL_EXT_packed_float",
 | 
						|
          //"GL_EXT_texture_shared_exponent",
 | 
						|
          //"GL_NV_half_float",
 | 
						|
          //"GL_EXT_framebuffer_sRGB",
 | 
						|
          //"GL_EXT_draw_buffers2",
 | 
						|
          //"GL_EXT_texture_integer",
 | 
						|
          //"GL_EXT_texture_array",
 | 
						|
          //"GL_EXT_texture_compression_rgtc",
 | 
						|
          //"GL_EXT_transform_feedback",
 | 
						|
          //"GL_NV_conditional_render",
 | 
						|
          "VERSION_3_0",
 | 
						|
      };
 | 
						|
      for (auto it : gl300exts)
 | 
						|
        s_extension_list[it] = true;
 | 
						|
    }
 | 
						|
    case 210:
 | 
						|
    case 200:
 | 
						|
    case 150:
 | 
						|
    case 140:
 | 
						|
    case 130:
 | 
						|
    case 121:
 | 
						|
    case 120:
 | 
						|
    case 110:
 | 
						|
    case 100:
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    // So we can easily determine if we are running dekstop GL
 | 
						|
    s_extension_list["VERSION_GL"] = true;
 | 
						|
  }
 | 
						|
 | 
						|
  if (s_gl_version < 300)
 | 
						|
  {
 | 
						|
    InitExtensionList21();
 | 
						|
    return;
 | 
						|
  }
 | 
						|
  GLint NumExtension = 0;
 | 
						|
  glGetIntegerv(GL_NUM_EXTENSIONS, &NumExtension);
 | 
						|
  for (GLint i = 0; i < NumExtension; ++i)
 | 
						|
    s_extension_list[std::string((const char*)glGetStringi(GL_EXTENSIONS, i))] = true;
 | 
						|
}
 | 
						|
static void InitVersion()
 | 
						|
{
 | 
						|
  GLint major, minor;
 | 
						|
  glGetIntegerv(GL_MAJOR_VERSION, &major);
 | 
						|
  glGetIntegerv(GL_MINOR_VERSION, &minor);
 | 
						|
  if (glGetError() == GL_NO_ERROR)
 | 
						|
    s_gl_version = major * 100 + minor * 10;
 | 
						|
  else
 | 
						|
    s_gl_version = 210;
 | 
						|
}
 | 
						|
 | 
						|
static void* GetFuncAddress(GLContext* context, const std::string& name, void** func)
 | 
						|
{
 | 
						|
  *func = context->GetFuncAddress(name);
 | 
						|
  if (*func == nullptr)
 | 
						|
  {
 | 
						|
#if defined(__linux__) || defined(__APPLE__)
 | 
						|
    // Give it a second try with dlsym
 | 
						|
    *func = dlsym(RTLD_NEXT, name.c_str());
 | 
						|
#endif
 | 
						|
    if (*func == nullptr)
 | 
						|
      ERROR_LOG(VIDEO, "Couldn't load function %s", name.c_str());
 | 
						|
  }
 | 
						|
  return *func;
 | 
						|
}
 | 
						|
 | 
						|
// Public members
 | 
						|
u32 Version()
 | 
						|
{
 | 
						|
  return s_gl_version;
 | 
						|
}
 | 
						|
bool Supports(const std::string& name)
 | 
						|
{
 | 
						|
  return s_extension_list[name];
 | 
						|
}
 | 
						|
 | 
						|
bool Init(GLContext* context)
 | 
						|
{
 | 
						|
  // Grab a few functions for initial checking
 | 
						|
  // We need them to grab the extension list
 | 
						|
  // Also to check if there is an error grabbing the version
 | 
						|
  if (GetFuncAddress(context, "glGetIntegerv", (void**)&glGetIntegerv) == nullptr)
 | 
						|
    return false;
 | 
						|
  if (GetFuncAddress(context, "glGetString", (void**)&glGetString) == nullptr)
 | 
						|
    return false;
 | 
						|
  if (GetFuncAddress(context, "glGetError", (void**)&glGetError) == nullptr)
 | 
						|
    return false;
 | 
						|
 | 
						|
  InitVersion();
 | 
						|
 | 
						|
  // We need to use glGetStringi to get the extension list
 | 
						|
  // if we are using GLES3 or a GL version greater than 2.1
 | 
						|
  if (s_gl_version > 210 &&
 | 
						|
      GetFuncAddress(context, "glGetStringi", (void**)&glGetStringi) == nullptr)
 | 
						|
    return false;
 | 
						|
 | 
						|
  InitExtensionList(context);
 | 
						|
 | 
						|
  return InitFunctionPointers(context);
 | 
						|
}
 | 
						|
 | 
						|
// Private initialization functions
 | 
						|
static bool HasFeatures(const std::string& extensions)
 | 
						|
{
 | 
						|
  bool result = true;
 | 
						|
  std::string tmp;
 | 
						|
  std::istringstream buffer(extensions);
 | 
						|
 | 
						|
  while (buffer >> tmp)
 | 
						|
  {
 | 
						|
    if (tmp[0] == '!')
 | 
						|
      result &= !s_extension_list[tmp.erase(0, 1)];
 | 
						|
    else if (tmp[0] == '|')
 | 
						|
      result |= s_extension_list[tmp.erase(0, 1)];
 | 
						|
    else
 | 
						|
      result &= s_extension_list[tmp];
 | 
						|
  }
 | 
						|
  return result;
 | 
						|
}
 | 
						|
bool InitFunctionPointers(GLContext* context)
 | 
						|
{
 | 
						|
  bool result = true;
 | 
						|
  for (const auto& it : gl_function_array)
 | 
						|
    if (HasFeatures(it.requirements))
 | 
						|
      result &= !!GetFuncAddress(context, it.function_name, it.function_ptr);
 | 
						|
  return result;
 | 
						|
}
 | 
						|
}  // namespace GLExtensions
 |