// OpenGL 1.1 - 2.0
GLFUNC(PFNGLDRAWBUFFERPROC, glDrawBuffer)
GLFUNC(PFNGLGENTEXTURESPROC, glGenTextures)
GLFUNC(PFNGLDELETETEXTURESPROC, glDeleteTextures)
GLFUNC(PFNGLBINDTEXTUREPROC, glBindTexture)
GLFUNC(PFNGLTEXPARAMETERIPROC, glTexParameteri)
GLFUNC(PFNGLTEXIMAGE2DPROC, glTexImage2D)
GLFUNC(PFNGLTEXSUBIMAGE2DPROC, glTexSubImage2D)
GLFUNC(PFNGLTEXIMAGE1DPROC, glTexImage1D)
GLFUNC(PFNGLTEXSUBIMAGE1DPROC, glTexSubImage1D)
GLFUNC(PFNGLGETTEXIMAGEPROC, glGetTexImage)
GLFUNC(PFNGLENABLEPROC, glEnable)
GLFUNC(PFNGLDISABLEPROC, glDisable)
GLFUNC(PFNGLISENABLEDPROC, glIsEnabled)
GLFUNC(PFNGLCLEARPROC, glClear)
GLFUNC(PFNGLCLEARCOLORPROC, glClearColor)
GLFUNC(PFNGLCLEARDEPTHPROC, glClearDepth)
GLFUNC(PFNGLCLEARSTENCILPROC, glClearStencil)
GLFUNC(PFNGLFLUSHPROC, glFlush)
GLFUNC(PFNGLFINISHPROC, glFinish)
GLFUNC(PFNGLPIXELSTOREIPROC, glPixelStorei)
GLFUNC(PFNGLGETSTRINGPROC, glGetString)
GLFUNC(PFNGLGETINTEGERVPROC, glGetIntegerv)
GLFUNC(PFNGLGETTEXLEVELPARAMETERIVPROC, glGetTexLevelParameteriv)
GLFUNC(PFNGLTEXPARAMETERFPROC, glTexParameterf)
GLFUNC(PFNGLTEXPARAMETERFVPROC, glTexParameterfv)
GLFUNC(PFNGLDEPTHFUNCPROC, glDepthFunc)
GLFUNC(PFNGLDEPTHMASKPROC, glDepthMask)
GLFUNC(PFNGLDEPTHRANGEPROC, glDepthRange)
GLFUNC(PFNGLFRONTFACEPROC, glFrontFace)
GLFUNC(PFNGLCULLFACEPROC, glCullFace)
GLFUNC(PFNGLPOLYGONOFFSETPROC, glPolygonOffset)
GLFUNC(PFNGLPOINTSIZEPROC, glPointSize)
GLFUNC(PFNGLLOGICOPPROC, glLogicOp)
GLFUNC(PFNGLPOLYGONMODEPROC, glPolygonMode)
GLFUNC(PFNGLSCISSORPROC, glScissor)
GLFUNC(PFNGLVIEWPORTPROC, glViewport)
GLFUNC(PFNGLGETERRORPROC, glGetError)
GLFUNC(PFNGLDRAWARRAYSPROC, glDrawArrays)

// everything else

GLFUNC(PFNGLUNIFORM1IPROC, glUniform1i)
GLFUNC(PFNGLUNIFORM2IPROC, glUniform2i)
GLFUNC(PFNGLUNIFORM2FPROC, glUniform2f)
GLFUNC(PFNGLUNIFORM4FVPROC, glUniform4fv)
GLFUNC(PFNGLUNIFORMMATRIX4FVPROC, glUniformMatrix4fv)


GLFUNC(PFNGLGETSHADERINFOLOGPROC, glGetShaderInfoLog)

GLFUNC(PFNGLUSEPROGRAMPROC, glUseProgram)

GLFUNC(PFNGLGETUNIFORMLOCATIONPROC, glGetUniformLocation)

GLFUNC(PFNGLACTIVETEXTUREPROC, glActiveTexture)
GLFUNC(PFNGLCLIENTACTIVETEXTUREPROC, glClientActiveTexture)

GLFUNC(PFNGLPRIMITIVERESTARTINDEXPROC, glPrimitiveRestartIndex)

GLFUNC(PFNGLDRAWRANGEELEMENTSPROC, glDrawRangeElements)
GLFUNC(PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC, glDrawRangeElementsBaseVertex)

GLFUNC(PFNGLGENBUFFERSPROC, glGenBuffers)
GLFUNC(PFNGLBINDBUFFERPROC, glBindBuffer)
GLFUNC(PFNGLBUFFERDATAPROC, glBufferData)
GLFUNC(PFNGLBUFFERSUBDATAPROC, glBufferSubData)
GLFUNC(PFNGLMAPBUFFERPROC, glMapBuffer)
GLFUNC(PFNGLUNMAPBUFFERPROC, glUnmapBuffer)
GLFUNC(PFNGLDELETEBUFFERSARBPROC, glDeleteBuffers)

GLFUNC(PFNGLENABLEVERTEXATTRIBARRAYPROC, glEnableVertexAttribArray)
GLFUNC(PFNGLDISABLEVERTEXATTRIBARRAYPROC, glDisableVertexAttribArray)
GLFUNC(PFNGLGETATTRIBLOCATIONPROC, glGetAttribLocation)
GLFUNC(PFNGLBINDATTRIBLOCATIONPROC, glBindAttribLocation)
GLFUNC(PFNGLVERTEXATTRIBPOINTERPROC, glVertexAttribPointer)
GLFUNC(PFNGLVERTEXATTRIBIPOINTERPROC, glVertexAttribIPointer)

GLFUNC(PFNGLBLENDEQUATIONPROC, glBlendEquation)
GLFUNC(PFNGLBLENDFUNCSEPARATEEXTPROC, glBlendFuncSeparate)
GLFUNC(PFNGLBLENDEQUATIONSEPARATEEXTPROC, glBlendEquationSeparate)
GLFUNC(PFNGLBLENDEQUATIONSEPARATEIPROC, glBlendEquationSeparatei)
GLFUNC(PFNGLBLENDFUNCSEPARATEIPROC, glBlendFuncSeparatei)
GLFUNC(PFNGLBLENDCOLORPROC, glBlendColor)

GLFUNC(PFNGLDRAWBUFFERSPROC, glDrawBuffers)
GLFUNC(PFNGLCLAMPCOLORARBPROC, glClampColor)

GLFUNC(PFNGLBINDFRAGDATALOCATIONEXTPROC, glBindFragDataLocation)

GLFUNC(PFNGLSHADERSOURCEPROC, glShaderSource)
GLFUNC(PFNGLCOMPILESHADERPROC, glCompileShader)
GLFUNC(PFNGLATTACHSHADERPROC, glAttachShader)
GLFUNC(PFNGLLINKPROGRAMPROC, glLinkProgram)
GLFUNC(PFNGLGETSHADERIVPROC, glGetShaderiv)
GLFUNC(PFNGLGETPROGRAMIVPROC, glGetProgramiv)
GLFUNC(PFNGLGETPROGRAMINFOLOGPROC, glGetProgramInfoLog)
GLFUNC(PFNGLGETPROGRAMBINARYPROC, glGetProgramBinary)
GLFUNC(PFNGLPROGRAMBINARYPROC, glProgramBinary)
GLFUNC(PFNGLPROGRAMPARAMETERIPROC, glProgramParameteri)
GLFUNC(PFNGLCREATEPROGRAMPROC, glCreateProgram)
GLFUNC(PFNGLCREATESHADERPROC, glCreateShader)
GLFUNC(PFNGLDELETEPROGRAMPROC, glDeleteProgram)
GLFUNC(PFNGLDELETESHADERPROC, glDeleteShader)
GLFUNC(PFNGLDETACHSHADERPROC, glDetachShader)
GLFUNC(PFNGLGETATTACHEDSHADERSPROC, glGetAttachedShaders)

GLFUNC(PFNGLCREATESHADERPROGRAMVPROC, glCreateShaderProgramv)
GLFUNC(PFNGLUSEPROGRAMSTAGESPROC, glUseProgramStages)
GLFUNC(PFNGLBINDPROGRAMPIPELINEPROC, glBindProgramPipeline)
GLFUNC(PFNGLGENPROGRAMPIPELINESPROC, glGenProgramPipelines)
GLFUNC(PFNGLACTIVESHADERPROGRAMPROC, glActiveShaderProgram)
GLFUNC(PFNGLDELETEPROGRAMPIPELINESPROC, glDeleteProgramPipelines)

GLFUNC(PFNGLPROGRAMUNIFORM1IPROC, glProgramUniform1i)
GLFUNC(PFNGLPROGRAMUNIFORM2IPROC, glProgramUniform2i)
GLFUNC(PFNGLPROGRAMUNIFORM1IVPROC, glProgramUniform1iv)
GLFUNC(PFNGLPROGRAMUNIFORM4IVPROC, glProgramUniform4iv)
GLFUNC(PFNGLPROGRAMUNIFORM1FVPROC, glProgramUniform1fv)
GLFUNC(PFNGLPROGRAMUNIFORM2FVPROC, glProgramUniform2fv)

// FBO

GLFUNC(PFNGLGENFRAMEBUFFERSPROC, glGenFramebuffers)
GLFUNC(PFNGLBINDFRAMEBUFFERPROC, glBindFramebuffer)
GLFUNC(PFNGLFRAMEBUFFERTEXTURE2DPROC, glFramebufferTexture2D)
GLFUNC(PFNGLFRAMEBUFFERTEXTURELAYERPROC, glFramebufferTextureLayer)
GLFUNC(PFNGLNAMEDFRAMEBUFFERTEXTUREPROC, glNamedFramebufferTexture)
GLFUNC(PFNGLCHECKFRAMEBUFFERSTATUSPROC, glCheckFramebufferStatus)
GLFUNC(PFNGLINVALIDATEFRAMEBUFFERPROC, glInvalidateFramebuffer)
GLFUNC(PFNGLDELETEFRAMEBUFFERSPROC, glDeleteFramebuffers)

//GLFUNC(PFNGLNAMEDFRAMEBUFFERTEXTUREPROC, glNamedFramebufferTexture)
GLFUNC(PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC, glNamedFramebufferTexture2DEXT)
GLFUNC(PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC, glNamedFramebufferTextureLayer)

GLFUNC(PFNGLENABLEIPROC, glEnablei)
GLFUNC(PFNGLDISABLEIPROC, glDisablei)

GLFUNC(PFNGLBEGINQUERYINDEXEDPROC, glBeginQueryIndexed)
GLFUNC(PFNGLENDQUERYINDEXEDPROC, glEndQueryIndexed)
GLFUNC(PFNGLGETQUERYINDEXEDIVPROC, glGetQueryIndexediv)
GLFUNC(PFNGLGETQUERYOBJECTI64VPROC, glGetQueryObjecti64v)

GLFUNC(PFNGLGENQUERIESPROC, glGenQueries)
GLFUNC(PFNGLDELETEQUERIESPROC, glDeleteQueries)
GLFUNC(PFNGLQUERYCOUNTERPROC, glQueryCounter)
GLFUNC(PFNGLGETQUERYOBJECTIVPROC, glGetQueryObjectiv)

// FBO DSA

GLFUNC(PFNGLCREATEFRAMEBUFFERSPROC, glCreateFramebuffers)
GLFUNC(PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC, glInvalidateNamedFramebufferData)


// misc

GLFUNC(PFNGLCOLORMASKIPROC, glColorMaski)
GLFUNC(PFNGLTEXTUREBARRIERPROC, glTextureBarrier)
GLFUNC(PFNGLCLIPCONTROLPROC, glClipControl)
GLFUNC(PFNGLVIEWPORTINDEXEDFPROC, glViewportIndexedf)
GLFUNC(PFNGLMAXSHADERCOMPILERTHREADSARBPROC, glMaxShaderCompilerThreadsARB)
GLFUNC(PFNGLDEPTHRANGEDNVPROC, glDepthRangedNV)
GLFUNC(PFNGLPOLYGONOFFSETCLAMPEXTPROC, glPolygonOffsetClampEXT)

// texture 

GLFUNC(PFNGLTEXTUREVIEWPROC, glTextureView)
GLFUNC(PFNGLTEXSTORAGE1DPROC, glTexStorage1D)
GLFUNC(PFNGLTEXSTORAGE2DPROC, glTexStorage2D)
GLFUNC(PFNGLTEXSTORAGE3DPROC, glTexStorage3D)
GLFUNC(PFNGLTEXIMAGE3DPROC, glTexImage3D)
GLFUNC(PFNGLTEXSUBIMAGE3DPROC, glTexSubImage3D)
GLFUNC(PFNGLCOMPRESSEDTEXIMAGE1DPROC, glCompressedTexImage1D)
GLFUNC(PFNGLCOMPRESSEDTEXIMAGE2DPROC, glCompressedTexImage2D)
GLFUNC(PFNGLCOMPRESSEDTEXIMAGE3DPROC, glCompressedTexImage3D)
GLFUNC(PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC, glCompressedTexSubImage1D)
GLFUNC(PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC, glCompressedTexSubImage2D)
GLFUNC(PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC, glCompressedTexSubImage3D)
GLFUNC(PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC, glCompressedTextureSubImage1D)
GLFUNC(PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC, glCompressedTextureSubImage2D)
GLFUNC(PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC, glCompressedTextureSubImage3D)
GLFUNC(PFNGLCOPYIMAGESUBDATAPROC, glCopyImageSubData)
GLFUNC(PFNGLCLEARTEXIMAGEPROC, glClearTexImage)
GLFUNC(PFNGLCLEARTEXSUBIMAGEPROC, glClearTexSubImage)
GLFUNC(PFNGLINVALIDATETEXIMAGEPROC, glInvalidateTexImage)

// texture DSA

GLFUNC(PFNGLCREATETEXTURESPROC, glCreateTextures)
GLFUNC(PFNGLBINDTEXTUREUNITPROC, glBindTextureUnit)
GLFUNC(PFNGLGETTEXTURELEVELPARAMETERIVPROC, glGetTextureLevelParameteriv)
GLFUNC(PFNGLTEXTUREPARAMETERIPROC, glTextureParameteri)
GLFUNC(PFNGLGETTEXTURESUBIMAGEPROC, glGetTextureSubImage)
GLFUNC(PFNGLTEXTURESUBIMAGE1DPROC, glTextureSubImage1D)
GLFUNC(PFNGLTEXTURESUBIMAGE2DPROC, glTextureSubImage2D);
GLFUNC(PFNGLTEXTURESUBIMAGE3DPROC, glTextureSubImage3D)
GLFUNC(PFNGLTEXTURESTORAGE1DPROC, glTextureStorage1D)
GLFUNC(PFNGLTEXTURESTORAGE2DPROC, glTextureStorage2D)
GLFUNC(PFNGLTEXTURESTORAGE3DPROC, glTextureStorage3D)

// instancing / draw

GLFUNC(PFNGLDRAWELEMENTSBASEVERTEXPROC, glDrawElementsBaseVertex)
GLFUNC(PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC, glDrawElementsInstancedBaseVertexBaseInstance)
GLFUNC(PFNGLDRAWARRAYSINSTANCEDPROC, glDrawArraysInstanced)

// vertex array

GLFUNC(PFNGLGENVERTEXARRAYSPROC, glGenVertexArrays)
GLFUNC(PFNGLBINDVERTEXARRAYPROC, glBindVertexArray)
GLFUNC(PFNGLDELETEVERTEXARRAYSPROC, glDeleteVertexArrays)
GLFUNC(PFNGLBINDVERTEXBUFFERPROC, glBindVertexBuffer)
GLFUNC(PFNGLVERTEXATTRIBFORMATPROC, glVertexAttribFormat)
GLFUNC(PFNGLVERTEXATTRIBIFORMATPROC, glVertexAttribIFormat)
GLFUNC(PFNGLVERTEXATTRIBBINDINGPROC, glVertexAttribBinding)
GLFUNC(PFNGLVERTEXBINDINGDIVISORPROC, glVertexBindingDivisor)
GLFUNC(PFNGLVERTEXATTRIBDIVISORPROC, glVertexAttribDivisor)

// vertex array DSA

GLFUNC(PFNGLCREATEVERTEXARRAYSPROC, glCreateVertexArrays)
GLFUNC(PFNGLDISABLEVERTEXARRAYATTRIBPROC, glDisableVertexArrayAttrib)
GLFUNC(PFNGLENABLEVERTEXARRAYATTRIBPROC, glEnableVertexArrayAttrib)
GLFUNC(PFNGLVERTEXARRAYELEMENTBUFFERPROC, glVertexArrayElementBuffer)
GLFUNC(PFNGLVERTEXARRAYVERTEXBUFFERPROC, glVertexArrayVertexBuffer)
GLFUNC(PFNGLVERTEXARRAYATTRIBBINDINGPROC, glVertexArrayAttribBinding)
GLFUNC(PFNGLVERTEXARRAYATTRIBIFORMATPROC, glVertexArrayAttribIFormat)
GLFUNC(PFNGLVERTEXARRAYBINDINGDIVISORPROC, glVertexArrayBindingDivisor)

// sampler

GLFUNC(PFNGLGENSAMPLERSPROC, glGenSamplers)
GLFUNC(PFNGLBINDSAMPLERPROC, glBindSampler)
GLFUNC(PFNGLSAMPLERPARAMETERIPROC, glSamplerParameteri)
GLFUNC(PFNGLSAMPLERPARAMETERFPROC, glSamplerParameterf)
GLFUNC(PFNGLSAMPLERPARAMETERIVPROC, glSamplerParameteriv)
GLFUNC(PFNGLSAMPLERPARAMETERFVPROC, glSamplerParameterfv)

// buffer object

GLFUNC(PFNGLGETUNIFORMBLOCKINDEXPROC, glGetUniformBlockIndex)
GLFUNC(PFNGLUNIFORMBLOCKBINDINGPROC, glUniformBlockBinding)
GLFUNC(PFNGLBINDBUFFERBASEPROC, glBindBufferBase)
GLFUNC(PFNGLBINDBUFFERRANGEPROC, glBindBufferRange)
GLFUNC(PFNGLGETBUFFERSUBDATAPROC, glGetBufferSubData)

// uniform storage buffer object

GLFUNC(PFNGLGETPROGRAMRESOURCEINDEXPROC, glGetProgramResourceIndex)
GLFUNC(PFNGLSHADERSTORAGEBLOCKBINDINGPROC, glShaderStorageBlockBinding)

// stencil 

GLFUNC(PFNGLSTENCILOPSEPARATEPROC, glStencilOpSeparate)
GLFUNC(PFNGLSTENCILFUNCSEPARATEPROC, glStencilFuncSeparate)
GLFUNC(PFNGLSTENCILMASKSEPARATEPROC, glStencilMaskSeparate)

// buffer

GLFUNC(PFNGLCREATEBUFFERSPROC, glCreateBuffers)
GLFUNC(PFNGLBUFFERSTORAGEPROC, glBufferStorage)
GLFUNC(PFNGLNAMEDBUFFERSTORAGEPROC, glNamedBufferStorage)
GLFUNC(PFNGLMAPNAMEDBUFFERPROC, glMapNamedBuffer)
GLFUNC(PFNGLMAPNAMEDBUFFERRANGEPROC, glMapNamedBufferRange)
GLFUNC(PFNGLMAPBUFFERRANGEPROC, glMapBufferRange)
GLFUNC(PFNGLFLUSHMAPPEDBUFFERRANGEPROC, glFlushMappedBufferRange)
GLFUNC(PFNGLMEMORYBARRIERPROC, glMemoryBarrier)
GLFUNC(PFNGLCOPYBUFFERSUBDATAPROC, glCopyBufferSubData)
GLFUNC(PFNGLCOPYNAMEDBUFFERSUBDATAPROC, glCopyNamedBufferSubData)
GLFUNC(PFNGLNAMEDBUFFERSUBDATAPROC, glNamedBufferSubData)
GLFUNC(PFNGLGETNAMEDBUFFERSUBDATAPROC, glGetNamedBufferSubData);

// transform feedback

GLFUNC(PFNGLBEGINTRANSFORMFEEDBACKPROC, glBeginTransformFeedback)
GLFUNC(PFNGLENDTRANSFORMFEEDBACKPROC, glEndTransformFeedback)
GLFUNC(PFNGLTRANSFORMFEEDBACKVARYINGSPROC, glTransformFeedbackVaryings)

// sync / fence

GLFUNC(PFNGLFENCESYNCPROC, glFenceSync)
GLFUNC(PFNGLCLIENTWAITSYNCPROC, glClientWaitSync)
GLFUNC(PFNGLDELETESYNCPROC, glDeleteSync)

// debugging

GLFUNC(PFNGLOBJECTLABELPROC, glObjectLabel)
GLFUNC(PFNGLDEBUGMESSAGECALLBACKPROC, glDebugMessageCallback)
GLFUNC(PFNGLDEBUGMESSAGECONTROLPROC, glDebugMessageControl)

// wgl

#if BOOST_OS_WINDOWS
GLFUNC(PFNWGLSWAPINTERVALEXTPROC, wglSwapIntervalEXT)
#endif

// x

#if BOOST_OS_LINUX
EGLFUNC(PFNEGLSWAPINTERVALPROC, eglSwapInterval)
EGLFUNC(PFNEGLGETCURRENTDISPLAYPROC, eglGetCurrentDisplay)
#endif
