From c4b348cf8bc4a3dbc750d366d64fb48d9e56edfb Mon Sep 17 00:00:00 2001 From: Jarcode Date: Wed, 11 Sep 2019 15:24:07 -0700 Subject: [PATCH] Added support for accelerated transformations & #expand directive --- glad_generate.sh | 2 +- glava/glad.c | 2097 +++++++++++++------------- glava/glad.h | 16 +- glava/glava.c | 21 +- glava/glsl_ext.c | 109 +- glava/glsl_ext.h | 34 +- glava/render.c | 582 ++++--- meson.build | 4 + shaders/glava/rc.glsl | 10 +- shaders/glava/util/average_pass.frag | 37 + shaders/glava/util/common.glsl | 21 + shaders/glava/util/gravity_pass.frag | 9 + shaders/glava/util/smooth.glsl | 20 +- 13 files changed, 1677 insertions(+), 1285 deletions(-) create mode 100644 shaders/glava/util/average_pass.frag create mode 100644 shaders/glava/util/common.glsl create mode 100644 shaders/glava/util/gravity_pass.frag diff --git a/glad_generate.sh b/glad_generate.sh index 2d70be4..c1e7424 100755 --- a/glad_generate.sh +++ b/glad_generate.sh @@ -4,7 +4,7 @@ set -e GLAD_GEN="${1:-c}" pushd glad -python -m glad --generator=${GLAD_GEN} --extensions=GL_EXT_framebuffer_multisample,GL_EXT_texture_filter_anisotropic --local-files --out-path=. +python -m glad --generator=${GLAD_GEN} --extensions=GL_EXT_framebuffer_multisample,GL_EXT_texture_filter_anisotropic,GL_NV_texture_barrier --local-files --out-path=. popd cp glad/*.h glava/ cp glad/glad.c glava/ diff --git a/glava/glad.c b/glava/glad.c index e1c39ad..637dafe 100644 --- a/glava/glad.c +++ b/glava/glad.c @@ -1,6 +1,6 @@ /* - OpenGL loader generated by glad 0.1.24a0 on Mon Aug 26 20:23:32 2019. + OpenGL loader generated by glad 0.1.24a0 on Tue Sep 10 15:02:41 2019. Language/Generator: C/C++ Specification: gl @@ -8,15 +8,16 @@ Profile: compatibility Extensions: GL_EXT_framebuffer_multisample, - GL_EXT_texture_filter_anisotropic + GL_EXT_texture_filter_anisotropic, + GL_NV_texture_barrier Loader: True Local files: True Omit khrplatform: False Commandline: - --profile="compatibility" --api="gl=4.6" --generator="c" --spec="gl" --local-files --extensions="GL_EXT_framebuffer_multisample,GL_EXT_texture_filter_anisotropic" + --profile="compatibility" --api="gl=4.6" --generator="c" --spec="gl" --local-files --extensions="GL_EXT_framebuffer_multisample,GL_EXT_texture_filter_anisotropic,GL_NV_texture_barrier" Online: - http://glad.dav1d.de/#profile=compatibility&language=c&specification=gl&loader=on&api=gl%3D4.6&extensions=GL_EXT_framebuffer_multisample&extensions=GL_EXT_texture_filter_anisotropic + http://glad.dav1d.de/#profile=compatibility&language=c&specification=gl&loader=on&api=gl%3D4.6&extensions=GL_EXT_framebuffer_multisample&extensions=GL_EXT_texture_filter_anisotropic&extensions=GL_NV_texture_barrier */ #include @@ -274,1057 +275,1059 @@ int GLAD_GL_VERSION_4_3; int GLAD_GL_VERSION_4_4; int GLAD_GL_VERSION_4_5; int GLAD_GL_VERSION_4_6; -PFNGLGETFRAMEBUFFERPARAMETERIVPROC glad_glGetFramebufferParameteriv; -PFNGLMULTITEXCOORD4SVPROC glad_glMultiTexCoord4sv; -PFNGLPOINTPARAMETERIPROC glad_glPointParameteri; -PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; -PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; -PFNGLLOADIDENTITYPROC glad_glLoadIdentity; -PFNGLROTATEDPROC glad_glRotated; -PFNGLWINDOWPOS3FPROC glad_glWindowPos3f; -PFNGLGETNCOLORTABLEPROC glad_glGetnColorTable; -PFNGLTEXTUREPARAMETERIPROC glad_glTextureParameteri; -PFNGLGETSYNCIVPROC glad_glGetSynciv; -PFNGLVERTEX4IPROC glad_glVertex4i; -PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; -PFNGLGETTRANSFORMFEEDBACKI64_VPROC glad_glGetTransformFeedbacki64_v; -PFNGLTRANSLATEDPROC glad_glTranslated; -PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; -PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv; -PFNGLTEXIMAGE2DPROC glad_glTexImage2D; -PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; -PFNGLGETMAPDVPROC glad_glGetMapdv; -PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv; -PFNGLCOLOR3USPROC glad_glColor3us; -PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; -PFNGLMAPGRID2FPROC glad_glMapGrid2f; -PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; -PFNGLPROGRAMUNIFORM4UIVPROC glad_glProgramUniform4uiv; -PFNGLCOLOR4SVPROC glad_glColor4sv; -PFNGLTEXTURESTORAGE1DPROC glad_glTextureStorage1D; -PFNGLSTENCILFUNCPROC glad_glStencilFunc; -PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex; -PFNGLGETQUERYBUFFEROBJECTUIVPROC glad_glGetQueryBufferObjectuiv; -PFNGLGETTEXTUREPARAMETERIUIVPROC glad_glGetTextureParameterIuiv; -PFNGLTEXCOORD2IPROC glad_glTexCoord2i; -PFNGLPOPATTRIBPROC glad_glPopAttrib; -PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; -PFNGLLOADMATRIXDPROC glad_glLoadMatrixd; -PFNGLCREATESAMPLERSPROC glad_glCreateSamplers; -PFNGLMULTITEXCOORD2IVPROC glad_glMultiTexCoord2iv; -PFNGLDISPATCHCOMPUTEPROC glad_glDispatchCompute; -PFNGLUNIFORM4IVPROC glad_glUniform4iv; -PFNGLGETVERTEXARRAYIVPROC glad_glGetVertexArrayiv; -PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; -PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; -PFNGLMINSAMPLESHADINGPROC glad_glMinSampleShading; -PFNGLLIGHTIVPROC glad_glLightiv; -PFNGLBINDTEXTUREUNITPROC glad_glBindTextureUnit; -PFNGLEVALCOORD1DVPROC glad_glEvalCoord1dv; -PFNGLGETCLIPPLANEPROC glad_glGetClipPlane; -PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D; -PFNGLSECONDARYCOLOR3USVPROC glad_glSecondaryColor3usv; -PFNGLPROGRAMUNIFORM1FVPROC glad_glProgramUniform1fv; -PFNGLINITNAMESPROC glad_glInitNames; -PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; -PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; -PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; -PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ; -PFNGLINVALIDATEBUFFERDATAPROC glad_glInvalidateBufferData; -PFNGLBINDVERTEXBUFFERPROC glad_glBindVertexBuffer; -PFNGLTEXCOORD3DPROC glad_glTexCoord3d; -PFNGLCLEARACCUMPROC glad_glClearAccum; -PFNGLNORMAL3BVPROC glad_glNormal3bv; -PFNGLTEXCOORD2DVPROC glad_glTexCoord2dv; -PFNGLEVALCOORD2FVPROC glad_glEvalCoord2fv; -PFNGLMULTITEXCOORD2SVPROC glad_glMultiTexCoord2sv; -PFNGLUNIFORM3IPROC glad_glUniform3i; -PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glad_glProgramUniformMatrix4x2dv; -PFNGLTEXTUREPARAMETERFPROC glad_glTextureParameterf; -PFNGLPUSHATTRIBPROC glad_glPushAttrib; -PFNGLDETACHSHADERPROC glad_glDetachShader; -PFNGLTEXENVFVPROC glad_glTexEnvfv; -PFNGLVERTEX4DVPROC glad_glVertex4dv; -PFNGLDRAWPIXELSPROC glad_glDrawPixels; -PFNGLTEXGENIPROC glad_glTexGeni; -PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv; -PFNGLISPROGRAMPIPELINEPROC glad_glIsProgramPipeline; -PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample; -PFNGLLIGHTFVPROC glad_glLightfv; -PFNGLRASTERPOS3DVPROC glad_glRasterPos3dv; -PFNGLMULTITEXCOORD1FPROC glad_glMultiTexCoord1f; -PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d; -PFNGLGETMATERIALFVPROC glad_glGetMaterialfv; -PFNGLCREATEFRAMEBUFFERSPROC glad_glCreateFramebuffers; -PFNGLUNIFORM4UIPROC glad_glUniform4ui; -PFNGLGETTEXTURESUBIMAGEPROC glad_glGetTextureSubImage; -PFNGLCREATERENDERBUFFERSPROC glad_glCreateRenderbuffers; -PFNGLREADNPIXELSPROC glad_glReadnPixels; -PFNGLISTRANSFORMFEEDBACKPROC glad_glIsTransformFeedback; -PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC glad_glTextureStorage3DMultisample; -PFNGLGETQUERYBUFFEROBJECTI64VPROC glad_glGetQueryBufferObjecti64v; -PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv; -PFNGLCOLOR3IVPROC glad_glColor3iv; -PFNGLEDGEFLAGPROC glad_glEdgeFlag; -PFNGLDELETESHADERPROC glad_glDeleteShader; -PFNGLCOPYTEXTURESUBIMAGE1DPROC glad_glCopyTextureSubImage1D; -PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv; -PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; -PFNGLGETPROGRAMPIPELINEIVPROC glad_glGetProgramPipelineiv; -PFNGLUNIFORM4IPROC glad_glUniform4i; -PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glad_glClearNamedFramebufferuiv; -PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v; -PFNGLCOLORMASKPROC glad_glColorMask; -PFNGLRASTERPOS3FVPROC glad_glRasterPos3fv; -PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; -PFNGLROTATEFPROC glad_glRotatef; -PFNGLNAMEDRENDERBUFFERSTORAGEPROC glad_glNamedRenderbufferStorage; -PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glad_glProgramUniformMatrix2x3fv; -PFNGLMULTITEXCOORD2DPROC glad_glMultiTexCoord2d; -PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv; -PFNGLUNIFORM4DVPROC glad_glUniform4dv; -PFNGLGETNPIXELMAPUSVPROC glad_glGetnPixelMapusv; -PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv; -PFNGLRASTERPOS2DPROC glad_glRasterPos2d; -PFNGLTEXCOORD4DPROC glad_glTexCoord4d; -PFNGLINDEXUBVPROC glad_glIndexubv; -PFNGLSECONDARYCOLOR3FVPROC glad_glSecondaryColor3fv; -PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; -PFNGLVERTEX2IVPROC glad_glVertex2iv; -PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; -PFNGLUNIFORM4DPROC glad_glUniform4d; -PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation; -PFNGLPUSHNAMEPROC glad_glPushName; -PFNGLGETPIXELMAPUSVPROC glad_glGetPixelMapusv; -PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv; -PFNGLCREATESHADERPROGRAMVPROC glad_glCreateShaderProgramv; -PFNGLGETNMAPDVPROC glad_glGetnMapdv; -PFNGLVERTEX4DPROC glad_glVertex4d; -PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv; -PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; -PFNGLSECONDARYCOLOR3UBPROC glad_glSecondaryColor3ub; -PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glad_glProgramUniformMatrix3x2dv; -PFNGLGETNPOLYGONSTIPPLEPROC glad_glGetnPolygonStipple; -PFNGLREADPIXELSPROC glad_glReadPixels; -PFNGLGETMATERIALIVPROC glad_glGetMaterialiv; -PFNGLNORMALP3UIVPROC glad_glNormalP3uiv; -PFNGLSECONDARYCOLORPOINTERPROC glad_glSecondaryColorPointer; -PFNGLENDQUERYINDEXEDPROC glad_glEndQueryIndexed; -PFNGLCLEARNAMEDBUFFERSUBDATAPROC glad_glClearNamedBufferSubData; -PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv; -PFNGLCOLOR4USPROC glad_glColor4us; -PFNGLCREATEPROGRAMPIPELINESPROC glad_glCreateProgramPipelines; -PFNGLCALLLISTPROC glad_glCallList; -PFNGLVERTEX2IPROC glad_glVertex2i; -PFNGLSECONDARYCOLOR3USPROC glad_glSecondaryColor3us; -PFNGLNAMEDBUFFERSUBDATAPROC glad_glNamedBufferSubData; -PFNGLLOADNAMEPROC glad_glLoadName; -PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; -PFNGLINDEXSPROC glad_glIndexs; -PFNGLTEXCOORD1IVPROC glad_glTexCoord1iv; -PFNGLSPECIALIZESHADERPROC glad_glSpecializeShader; -PFNGLBLENDCOLORPROC glad_glBlendColor; -PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv; -PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced; -PFNGLVERTEXARRAYELEMENTBUFFERPROC glad_glVertexArrayElementBuffer; -PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v; -PFNGLSELECTBUFFERPROC glad_glSelectBuffer; -PFNGLPROGRAMUNIFORM4DVPROC glad_glProgramUniform4dv; -PFNGLVALIDATEPROGRAMPIPELINEPROC glad_glValidateProgramPipeline; -PFNGLCLIENTACTIVETEXTUREPROC glad_glClientActiveTexture; -PFNGLUNIFORM2FPROC glad_glUniform2f; -PFNGLCOLOR4BVPROC glad_glColor4bv; -PFNGLWINDOWPOS2IPROC glad_glWindowPos2i; -PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed; -PFNGLPROGRAMUNIFORM2DPROC glad_glProgramUniform2d; -PFNGLPIXELZOOMPROC glad_glPixelZoom; -PFNGLCLIPCONTROLPROC glad_glClipControl; -PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv; -PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex; -PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv; -PFNGLMULTITEXCOORD2FPROC glad_glMultiTexCoord2f; -PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC glad_glNamedFramebufferDrawBuffer; -PFNGLMULTITEXCOORD2FVPROC glad_glMultiTexCoord2fv; -PFNGLCOLORP3UIVPROC glad_glColorP3uiv; -PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; -PFNGLARETEXTURESRESIDENTPROC glad_glAreTexturesResident; -PFNGLNORMAL3SVPROC glad_glNormal3sv; -PFNGLNORMAL3FVPROC glad_glNormal3fv; -PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; -PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv; -PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; -PFNGLVERTEX2SPROC glad_glVertex2s; -PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glad_glDrawTransformFeedbackStream; -PFNGLVERTEX4SPROC glad_glVertex4s; -PFNGLTEXCOORD4SVPROC glad_glTexCoord4sv; -PFNGLTEXCOORD1SPROC glad_glTexCoord1s; -PFNGLGETDOUBLEVPROC glad_glGetDoublev; -PFNGLCOPYPIXELSPROC glad_glCopyPixels; -PFNGLDEPTHRANGEFPROC glad_glDepthRangef; -PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glad_glGetProgramResourceLocationIndex; -PFNGLDEPTHRANGEARRAYVPROC glad_glDepthRangeArrayv; -PFNGLINDEXFVPROC glad_glIndexfv; -PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui; -PFNGLPIXELSTOREIPROC glad_glPixelStorei; -PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; -PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui; -PFNGLVERTEXP3UIPROC glad_glVertexP3ui; -PFNGLTEXIMAGE1DPROC glad_glTexImage1D; -PFNGLDRAWELEMENTSINDIRECTPROC glad_glDrawElementsIndirect; -PFNGLGETNUNIFORMUIVPROC glad_glGetnUniformuiv; -PFNGLFOGCOORDDVPROC glad_glFogCoorddv; -PFNGLTEXCOORD4FVPROC glad_glTexCoord4fv; -PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler; -PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; -PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui; -PFNGLRASTERPOS2FVPROC glad_glRasterPos2fv; -PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui; -PFNGLGETDEBUGMESSAGELOGPROC glad_glGetDebugMessageLog; -PFNGLDISABLECLIENTSTATEPROC glad_glDisableClientState; -PFNGLVERTEXATTRIBIFORMATPROC glad_glVertexAttribIFormat; -PFNGLGETMAPFVPROC glad_glGetMapfv; -PFNGLUSEPROGRAMPROC glad_glUseProgram; -PFNGLRASTERPOS2IPROC glad_glRasterPos2i; -PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i; -PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glad_glGetActiveSubroutineUniformiv; -PFNGLSHADERBINARYPROC glad_glShaderBinary; -PFNGLFOGCOORDFVPROC glad_glFogCoordfv; -PFNGLUNIFORM3DVPROC glad_glUniform3dv; -PFNGLTEXTUREPARAMETERIIVPROC glad_glTextureParameterIiv; -PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced; -PFNGLSECONDARYCOLOR3UIVPROC glad_glSecondaryColor3uiv; -PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; -PFNGLACCUMPROC glad_glAccum; -PFNGLGETNAMEDBUFFERPARAMETERIVPROC glad_glGetNamedBufferParameteriv; -PFNGLVERTEX4SVPROC glad_glVertex4sv; -PFNGLLIGHTMODELFPROC glad_glLightModelf; -PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D; -PFNGLINDEXUBPROC glad_glIndexub; -PFNGLGETGRAPHICSRESETSTATUSPROC glad_glGetGraphicsResetStatus; -PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; -PFNGLRASTERPOS2SPROC glad_glRasterPos2s; -PFNGLPROGRAMUNIFORM2DVPROC glad_glProgramUniform2dv; -PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender; -PFNGLCREATEPROGRAMPROC glad_glCreateProgram; -PFNGLMATERIALIPROC glad_glMateriali; -PFNGLPROGRAMUNIFORMMATRIX4DVPROC glad_glProgramUniformMatrix4dv; -PFNGLDELETEPROGRAMPIPELINESPROC glad_glDeleteProgramPipelines; -PFNGLVERTEXATTRIBLFORMATPROC glad_glVertexAttribLFormat; -PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv; -PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; -PFNGLPROGRAMUNIFORM1UIVPROC glad_glProgramUniform1uiv; -PFNGLPROGRAMUNIFORMMATRIX2FVPROC glad_glProgramUniformMatrix2fv; -PFNGLUNIFORMMATRIX2DVPROC glad_glUniformMatrix2dv; -PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv; -PFNGLTEXCOORDPOINTERPROC glad_glTexCoordPointer; -PFNGLUNIFORMMATRIX3X4DVPROC glad_glUniformMatrix3x4dv; -PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; -PFNGLCOLOR3BPROC glad_glColor3b; -PFNGLPOPCLIENTATTRIBPROC glad_glPopClientAttrib; -PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s; -PFNGLPROGRAMUNIFORMMATRIX3DVPROC glad_glProgramUniformMatrix3dv; -PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glad_glProgramUniformMatrix2x4fv; -PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC glad_glInvalidateNamedFramebufferData; -PFNGLCOLOR3FVPROC glad_glColor3fv; -PFNGLCOLOR4BPROC glad_glColor4b; -PFNGLMULTITEXCOORD3DPROC glad_glMultiTexCoord3d; -PFNGLTRANSLATEFPROC glad_glTranslatef; -PFNGLGETQUERYBUFFEROBJECTUI64VPROC glad_glGetQueryBufferObjectui64v; -PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; -PFNGLWAITSYNCPROC glad_glWaitSync; -PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv; -PFNGLFOGCOORDPOINTERPROC glad_glFogCoordPointer; -PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui; -PFNGLPROGRAMUNIFORM4FPROC glad_glProgramUniform4f; -PFNGLMAP1DPROC glad_glMap1d; -PFNGLCOMPILESHADERPROC glad_glCompileShader; -PFNGLTEXTURESTORAGE2DPROC glad_glTextureStorage2D; -PFNGLVERTEXARRAYATTRIBIFORMATPROC glad_glVertexArrayAttribIFormat; -PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; -PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv; -PFNGLVIEWPORTINDEXEDFVPROC glad_glViewportIndexedfv; -PFNGLRASTERPOS2FPROC glad_glRasterPos2f; -PFNGLBINDSAMPLERPROC glad_glBindSampler; -PFNGLMATERIALFPROC glad_glMaterialf; -PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D; -PFNGLGETDOUBLEI_VPROC glad_glGetDoublei_v; -PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; -PFNGLTEXCOORD3SVPROC glad_glTexCoord3sv; -PFNGLCOLOR4UBVPROC glad_glColor4ubv; -PFNGLINDEXPOINTERPROC glad_glIndexPointer; -PFNGLCLEARBUFFERSUBDATAPROC glad_glClearBufferSubData; -PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; -PFNGLTEXCOORD3FPROC glad_glTexCoord3f; -PFNGLTEXCOORD4IVPROC glad_glTexCoord4iv; -PFNGLRECTSVPROC glad_glRectsv; -PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; -PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v; -PFNGLPROGRAMUNIFORM3UIPROC glad_glProgramUniform3ui; -PFNGLWINDOWPOS3FVPROC glad_glWindowPos3fv; -PFNGLMULTITEXCOORD4DPROC glad_glMultiTexCoord4d; -PFNGLINVALIDATEFRAMEBUFFERPROC glad_glInvalidateFramebuffer; -PFNGLGETOBJECTPTRLABELPROC glad_glGetObjectPtrLabel; -PFNGLISBUFFERPROC glad_glIsBuffer; -PFNGLCOLORP4UIVPROC glad_glColorP4uiv; -PFNGLVERTEXATTRIBL3DPROC glad_glVertexAttribL3d; -PFNGLEVALCOORD2FPROC glad_glEvalCoord2f; -PFNGLTEXCOORD4SPROC glad_glTexCoord4s; -PFNGLSCISSORPROC glad_glScissor; -PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample; -PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv; -PFNGLISPROGRAMPROC glad_glIsProgram; -PFNGLISENABLEDIPROC glad_glIsEnabledi; -PFNGLCOLOR3UIPROC glad_glColor3ui; -PFNGLISQUERYPROC glad_glIsQuery; -PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; -PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC glad_glMultiDrawElementsIndirectCount; -PFNGLCOPYNAMEDBUFFERSUBDATAPROC glad_glCopyNamedBufferSubData; -PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d; -PFNGLVERTEXATTRIBL2DPROC glad_glVertexAttribL2d; -PFNGLBEGINQUERYPROC glad_glBeginQuery; -PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync; -PFNGLWINDOWPOS3IVPROC glad_glWindowPos3iv; -PFNGLBUFFERDATAPROC glad_glBufferData; -PFNGLCOLOR4IPROC glad_glColor4i; -PFNGLFLUSHPROC glad_glFlush; -PFNGLBITMAPPROC glad_glBitmap; -PFNGLTEXCOORD2DPROC glad_glTexCoord2d; -PFNGLPOPNAMEPROC glad_glPopName; -PFNGLGETLIGHTFVPROC glad_glGetLightfv; -PFNGLPROGRAMUNIFORMMATRIX4FVPROC glad_glProgramUniformMatrix4fv; -PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; -PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv; -PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv; -PFNGLDEBUGMESSAGECONTROLPROC glad_glDebugMessageControl; -PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; -PFNGLVERTEXP4UIPROC glad_glVertexP4ui; -PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; -PFNGLNORMAL3SPROC glad_glNormal3s; -PFNGLPUSHCLIENTATTRIBPROC glad_glPushClientAttrib; -PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData; -PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC glad_glNamedFramebufferDrawBuffers; -PFNGLRECTSPROC glad_glRects; -PFNGLWINDOWPOS2IVPROC glad_glWindowPos2iv; -PFNGLGENLISTSPROC glad_glGenLists; -PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; -PFNGLLIGHTMODELFVPROC glad_glLightModelfv; -PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat; -PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC glad_glDrawTransformFeedbackInstanced; -PFNGLNORMALPOINTERPROC glad_glNormalPointer; -PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glad_glClearNamedFramebufferfv; -PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv; -PFNGLRASTERPOS4FVPROC glad_glRasterPos4fv; -PFNGLGETTEXIMAGEPROC glad_glGetTexImage; -PFNGLRASTERPOS2IVPROC glad_glRasterPos2iv; -PFNGLPROGRAMUNIFORMMATRIX3FVPROC glad_glProgramUniformMatrix3fv; -PFNGLGETNMINMAXPROC glad_glGetnMinmax; -PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; -PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC glad_glCompressedTextureSubImage2D; -PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; -PFNGLMULTITEXCOORD4FPROC glad_glMultiTexCoord4f; -PFNGLWINDOWPOS2FPROC glad_glWindowPos2f; -PFNGLTEXCOORD1FPROC glad_glTexCoord1f; -PFNGLSECONDARYCOLOR3IPROC glad_glSecondaryColor3i; -PFNGLENABLECLIENTSTATEPROC glad_glEnableClientState; -PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; -PFNGLDRAWTRANSFORMFEEDBACKPROC glad_glDrawTransformFeedback; -PFNGLPROGRAMUNIFORM1FPROC glad_glProgramUniform1f; -PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui; -PFNGLVERTEXATTRIBL3DVPROC glad_glVertexAttribL3dv; -PFNGLINVALIDATESUBFRAMEBUFFERPROC glad_glInvalidateSubFramebuffer; -PFNGLRASTERPOS2DVPROC glad_glRasterPos2dv; -PFNGLLIGHTMODELIVPROC glad_glLightModeliv; -PFNGLCOLOR4IVPROC glad_glColor4iv; -PFNGLUNIFORM3FVPROC glad_glUniform3fv; -PFNGLVERTEXATTRIBL1DVPROC glad_glVertexAttribL1dv; -PFNGLPIXELSTOREFPROC glad_glPixelStoref; -PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui; -PFNGLTEXSTORAGE1DPROC glad_glTexStorage1D; -PFNGLCOLOR3USVPROC glad_glColor3usv; -PFNGLDISPATCHCOMPUTEINDIRECTPROC glad_glDispatchComputeIndirect; -PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC glad_glInvalidateNamedFramebufferSubData; -PFNGLTEXTUREVIEWPROC glad_glTextureView; -PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; -PFNGLTEXTUREPARAMETERIVPROC glad_glTextureParameteriv; -PFNGLWINDOWPOS2FVPROC glad_glWindowPos2fv; -PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; -PFNGLINDEXFPROC glad_glIndexf; -PFNGLOBJECTLABELPROC glad_glObjectLabel; -PFNGLCREATEBUFFERSPROC glad_glCreateBuffers; -PFNGLCOLOR4UBPROC glad_glColor4ub; -PFNGLRASTERPOS3SVPROC glad_glRasterPos3sv; -PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui; -PFNGLMULTITEXCOORD1SVPROC glad_glMultiTexCoord1sv; -PFNGLGETLIGHTIVPROC glad_glGetLightiv; -PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; -PFNGLSECONDARYCOLOR3UIPROC glad_glSecondaryColor3ui; -PFNGLUNIFORM1IVPROC glad_glUniform1iv; -PFNGLGETSUBROUTINEINDEXPROC glad_glGetSubroutineIndex; -PFNGLSECONDARYCOLOR3DVPROC glad_glSecondaryColor3dv; -PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv; -PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv; -PFNGLINVALIDATETEXSUBIMAGEPROC glad_glInvalidateTexSubImage; -PFNGLGETVERTEXARRAYINDEXED64IVPROC glad_glGetVertexArrayIndexed64iv; -PFNGLALPHAFUNCPROC glad_glAlphaFunc; -PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; -PFNGLCOLOR4UIPROC glad_glColor4ui; -PFNGLCOLORMATERIALPROC glad_glColorMaterial; -PFNGLVERTEXATTRIBL4DVPROC glad_glVertexAttribL4dv; -PFNGLPOLYGONMODEPROC glad_glPolygonMode; -PFNGLCOLOR3BVPROC glad_glColor3bv; -PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; -PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture; -PFNGLGENTRANSFORMFEEDBACKSPROC glad_glGenTransformFeedbacks; -PFNGLSECONDARYCOLOR3SPROC glad_glSecondaryColor3s; -PFNGLMAP2DPROC glad_glMap2d; -PFNGLBINDIMAGETEXTUREPROC glad_glBindImageTexture; -PFNGLVERTEX2DPROC glad_glVertex2d; -PFNGLGETNCONVOLUTIONFILTERPROC glad_glGetnConvolutionFilter; -PFNGLPROGRAMBINARYPROC glad_glProgramBinary; -PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor; -PFNGLINTERLEAVEDARRAYSPROC glad_glInterleavedArrays; -PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; -PFNGLTEXCOORD3DVPROC glad_glTexCoord3dv; -PFNGLMULTMATRIXDPROC glad_glMultMatrixd; -PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv; -PFNGLPOPDEBUGGROUPPROC glad_glPopDebugGroup; -PFNGLENABLEVERTEXARRAYATTRIBPROC glad_glEnableVertexArrayAttrib; -PFNGLGETTEXTURELEVELPARAMETERFVPROC glad_glGetTextureLevelParameterfv; -PFNGLCOLOR3SVPROC glad_glColor3sv; -PFNGLCREATETEXTURESPROC glad_glCreateTextures; -PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC glad_glGetNamedRenderbufferParameteriv; -PFNGLSHADERSTORAGEBLOCKBINDINGPROC glad_glShaderStorageBlockBinding; -PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; -PFNGLFENCESYNCPROC glad_glFenceSync; -PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding; -PFNGLCOLOR3UBPROC glad_glColor3ub; -PFNGLGETVERTEXARRAYINDEXEDIVPROC glad_glGetVertexArrayIndexediv; -PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui; -PFNGLTEXCOORD1DVPROC glad_glTexCoord1dv; -PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex; -PFNGLSECONDARYCOLOR3SVPROC glad_glSecondaryColor3sv; -PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui; -PFNGLPATCHPARAMETERFVPROC glad_glPatchParameterfv; -PFNGLPROGRAMUNIFORM4IPROC glad_glProgramUniform4i; -PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v; -PFNGLPROGRAMUNIFORM4DPROC glad_glProgramUniform4d; -PFNGLUNIFORM2DVPROC glad_glUniform2dv; -PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; -PFNGLPROGRAMUNIFORM3FVPROC glad_glProgramUniform3fv; -PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui; -PFNGLPROGRAMUNIFORM3FPROC glad_glProgramUniform3f; -PFNGLDRAWARRAYSINDIRECTPROC glad_glDrawArraysIndirect; -PFNGLUNIFORMMATRIX4X2DVPROC glad_glUniformMatrix4x2dv; -PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; -PFNGLPIXELMAPUSVPROC glad_glPixelMapusv; -PFNGLVERTEXARRAYATTRIBBINDINGPROC glad_glVertexArrayAttribBinding; -PFNGLPROGRAMUNIFORM2UIVPROC glad_glProgramUniform2uiv; -PFNGLUNIFORMSUBROUTINESUIVPROC glad_glUniformSubroutinesuiv; -PFNGLTEXCOORD2FVPROC glad_glTexCoord2fv; -PFNGLPROGRAMUNIFORMMATRIX2DVPROC glad_glProgramUniformMatrix2dv; -PFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback; -PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv; -PFNGLMAPNAMEDBUFFERRANGEPROC glad_glMapNamedBufferRange; -PFNGLGETTEXTUREIMAGEPROC glad_glGetTextureImage; -PFNGLBLENDFUNCSEPARATEIPROC glad_glBlendFuncSeparatei; -PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays; -PFNGLCREATEVERTEXARRAYSPROC glad_glCreateVertexArrays; -PFNGLGETSTRINGPROC glad_glGetString; -PFNGLVERTEXARRAYVERTEXBUFFERPROC glad_glVertexArrayVertexBuffer; -PFNGLTEXTURESUBIMAGE3DPROC glad_glTextureSubImage3D; -PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC glad_glMultiDrawArraysIndirectCount; -PFNGLGETOBJECTLABELPROC glad_glGetObjectLabel; -PFNGLTEXCOORD4IPROC glad_glTexCoord4i; -PFNGLUNIFORM2FVPROC glad_glUniform2fv; -PFNGLPROGRAMUNIFORM3UIVPROC glad_glProgramUniform3uiv; -PFNGLGETPROGRAMPIPELINEINFOLOGPROC glad_glGetProgramPipelineInfoLog; -PFNGLMAPGRID1FPROC glad_glMapGrid1f; -PFNGLPIXELMAPUIVPROC glad_glPixelMapuiv; -PFNGLFRUSTUMPROC glad_glFrustum; -PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; -PFNGLMULTITEXCOORD2IPROC glad_glMultiTexCoord2i; -PFNGLINDEXDPROC glad_glIndexd; -PFNGLENABLEPROC glad_glEnable; -PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui; -PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s; -PFNGLMAP1FPROC glad_glMap1f; -PFNGLGETTRANSFORMFEEDBACKIVPROC glad_glGetTransformFeedbackiv; -PFNGLVERTEXPOINTERPROC glad_glVertexPointer; -PFNGLRASTERPOS4SVPROC glad_glRasterPos4sv; -PFNGLCOLOR3IPROC glad_glColor3i; -PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i; -PFNGLBUFFERSTORAGEPROC glad_glBufferStorage; -PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC glad_glCompressedTextureSubImage1D; -PFNGLRECTFPROC glad_glRectf; -PFNGLRASTERPOS4FPROC glad_glRasterPos4f; -PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glad_glProgramUniformMatrix3x2fv; -PFNGLTEXGENIVPROC glad_glTexGeniv; -PFNGLORTHOPROC glad_glOrtho; -PFNGLUNIFORM4FPROC glad_glUniform4f; -PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC glad_glTransformFeedbackBufferRange; -PFNGLTEXSTORAGE3DMULTISAMPLEPROC glad_glTexStorage3DMultisample; -PFNGLTEXTUREBARRIERPROC glad_glTextureBarrier; -PFNGLBLENDFUNCIPROC glad_glBlendFunci; -PFNGLMULTITEXCOORD3SVPROC glad_glMultiTexCoord3sv; -PFNGLUNIFORM3DPROC glad_glUniform3d; -PFNGLTEXCOORD1FVPROC glad_glTexCoord1fv; -PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC glad_glCompressedTextureSubImage3D; -PFNGLQUERYCOUNTERPROC glad_glQueryCounter; -PFNGLEVALPOINT2PROC glad_glEvalPoint2; -PFNGLOBJECTPTRLABELPROC glad_glObjectPtrLabel; -PFNGLISLISTPROC glad_glIsList; -PFNGLGETPROGRAMINTERFACEIVPROC glad_glGetProgramInterfaceiv; -PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv; -PFNGLGETFLOATVPROC glad_glGetFloatv; -PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; -PFNGLMULTITEXCOORD3DVPROC glad_glMultiTexCoord3dv; -PFNGLMAPNAMEDBUFFERPROC glad_glMapNamedBuffer; -PFNGLGETTEXGENFVPROC glad_glGetTexGenfv; -PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv; -PFNGLTEXBUFFERRANGEPROC glad_glTexBufferRange; -PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv; -PFNGLARRAYELEMENTPROC glad_glArrayElement; -PFNGLTEXGENFVPROC glad_glTexGenfv; -PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv; -PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex; -PFNGLTEXSTORAGE2DMULTISAMPLEPROC glad_glTexStorage2DMultisample; -PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D; -PFNGLEDGEFLAGPOINTERPROC glad_glEdgeFlagPointer; -PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; -PFNGLBLENDEQUATIONPROC glad_glBlendEquation; -PFNGLGETTEXTUREPARAMETERIIVPROC glad_glGetTextureParameterIiv; -PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex; -PFNGLPROGRAMUNIFORM1IPROC glad_glProgramUniform1i; -PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC glad_glNamedFramebufferTextureLayer; -PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv; -PFNGLDELETETRANSFORMFEEDBACKSPROC glad_glDeleteTransformFeedbacks; -PFNGLVERTEX4FPROC glad_glVertex4f; -PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; -PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; -PFNGLDEPTHFUNCPROC glad_glDepthFunc; -PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glad_glGetActiveSubroutineUniformName; -PFNGLSECONDARYCOLOR3BPROC glad_glSecondaryColor3b; -PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; -PFNGLCOLOR4UIVPROC glad_glColor4uiv; -PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; -PFNGLCLEARINDEXPROC glad_glClearIndex; -PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv; -PFNGLNEWLISTPROC glad_glNewList; -PFNGLDEPTHRANGEINDEXEDPROC glad_glDepthRangeIndexed; -PFNGLLIGHTMODELIPROC glad_glLightModeli; -PFNGLTEXTUREBUFFERRANGEPROC glad_glTextureBufferRange; -PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glad_glGetCompressedTextureImage; -PFNGLVERTEXARRAYBINDINGDIVISORPROC glad_glVertexArrayBindingDivisor; -PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; -PFNGLSCALEFPROC glad_glScalef; -PFNGLGETPROGRAMSTAGEIVPROC glad_glGetProgramStageiv; -PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; -PFNGLCOLORMASKIPROC glad_glColorMaski; -PFNGLFOGFVPROC glad_glFogfv; -PFNGLCOLOR3FPROC glad_glColor3f; -PFNGLNORMAL3BPROC glad_glNormal3b; -PFNGLTEXGENFPROC glad_glTexGenf; -PFNGLEVALCOORD1DPROC glad_glEvalCoord1d; -PFNGLPUSHMATRIXPROC glad_glPushMatrix; -PFNGLGETPIXELMAPFVPROC glad_glGetPixelMapfv; -PFNGLUNIFORMMATRIX2X4DVPROC glad_glUniformMatrix2x4dv; -PFNGLVERTEXP2UIPROC glad_glVertexP2ui; -PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glad_glProgramUniformMatrix2x4dv; -PFNGLMATERIALFVPROC glad_glMaterialfv; -PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glad_glDrawElementsInstancedBaseVertexBaseInstance; -PFNGLMEMORYBARRIERBYREGIONPROC glad_glMemoryBarrierByRegion; -PFNGLTEXBUFFERPROC glad_glTexBuffer; -PFNGLCREATETRANSFORMFEEDBACKSPROC glad_glCreateTransformFeedbacks; -PFNGLPROGRAMPARAMETERIPROC glad_glProgramParameteri; -PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName; -PFNGLWINDOWPOS3SVPROC glad_glWindowPos3sv; -PFNGLBINDTEXTURESPROC glad_glBindTextures; -PFNGLPROGRAMUNIFORM2IVPROC glad_glProgramUniform2iv; -PFNGLSTENCILMASKPROC glad_glStencilMask; -PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv; -PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; -PFNGLINVALIDATEBUFFERSUBDATAPROC glad_glInvalidateBufferSubData; -PFNGLPROGRAMUNIFORM2UIPROC glad_glProgramUniform2ui; -PFNGLINDEXIPROC glad_glIndexi; -PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; -PFNGLPROGRAMUNIFORM1DVPROC glad_glProgramUniform1dv; -PFNGLSCALEDPROC glad_glScaled; -PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s; -PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glad_glProgramUniformMatrix4x3dv; -PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v; -PFNGLWINDOWPOS2DPROC glad_glWindowPos2d; -PFNGLDISABLEIPROC glad_glDisablei; -PFNGLPROGRAMUNIFORM2FVPROC glad_glProgramUniform2fv; -PFNGLCOLOR4DVPROC glad_glColor4dv; -PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv; -PFNGLPROGRAMUNIFORM3IVPROC glad_glProgramUniform3iv; -PFNGLCOLORPOINTERPROC glad_glColorPointer; -PFNGLTEXCOORD3IPROC glad_glTexCoord3i; -PFNGLBINDSAMPLERSPROC glad_glBindSamplers; -PFNGLUNMAPNAMEDBUFFERPROC glad_glUnmapNamedBuffer; -PFNGLMULTIDRAWELEMENTSINDIRECTPROC glad_glMultiDrawElementsIndirect; -PFNGLCLEARSTENCILPROC glad_glClearStencil; -PFNGLUNIFORM2DPROC glad_glUniform2d; -PFNGLFRONTFACEPROC glad_glFrontFace; -PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv; -PFNGLRASTERPOS3SPROC glad_glRasterPos3s; -PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; -PFNGLEDGEFLAGVPROC glad_glEdgeFlagv; -PFNGLMAP2FPROC glad_glMap2f; -PFNGLLIGHTIPROC glad_glLighti; -PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv; -PFNGLMULTIDRAWARRAYSINDIRECTPROC glad_glMultiDrawArraysIndirect; -PFNGLCOPYTEXTURESUBIMAGE3DPROC glad_glCopyTextureSubImage3D; -PFNGLVERTEX2SVPROC glad_glVertex2sv; -PFNGLEVALPOINT1PROC glad_glEvalPoint1; -PFNGLRASTERPOS3IPROC glad_glRasterPos3i; -PFNGLGETTEXGENDVPROC glad_glGetTexGendv; -PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s; -PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv; -PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glad_glDrawArraysInstancedBaseInstance; -PFNGLCOLOR3SPROC glad_glColor3s; -PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; -PFNGLGETPIXELMAPUIVPROC glad_glGetPixelMapuiv; -PFNGLEVALCOORD2DVPROC glad_glEvalCoord2dv; -PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glad_glClearNamedFramebufferiv; -PFNGLMULTMATRIXFPROC glad_glMultMatrixf; -PFNGLTEXCOORD1SVPROC glad_glTexCoord1sv; -PFNGLMULTITEXCOORD1DVPROC glad_glMultiTexCoord1dv; -PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; -PFNGLMAPGRID2DPROC glad_glMapGrid2d; -PFNGLGENQUERIESPROC glad_glGenQueries; -PFNGLCOLOR4FVPROC glad_glColor4fv; -PFNGLNAMEDBUFFERSTORAGEPROC glad_glNamedBufferStorage; -PFNGLRASTERPOS3IVPROC glad_glRasterPos3iv; -PFNGLPROGRAMUNIFORM3DPROC glad_glProgramUniform3d; -PFNGLGETPROGRAMRESOURCEIVPROC glad_glGetProgramResourceiv; -PFNGLPASSTHROUGHPROC glad_glPassThrough; -PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glad_glProgramUniformMatrix3x4dv; -PFNGLVERTEXATTRIBL4DPROC glad_glVertexAttribL4d; -PFNGLRASTERPOS4DPROC glad_glRasterPos4d; -PFNGLGETPOINTERVPROC glad_glGetPointerv; -PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; -PFNGLNAMEDBUFFERDATAPROC glad_glNamedBufferData; -PFNGLVERTEX3SPROC glad_glVertex3s; -PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage; -PFNGLGETNCOMPRESSEDTEXIMAGEPROC glad_glGetnCompressedTexImage; -PFNGLVERTEX2FPROC glad_glVertex2f; -PFNGLGETPROGRAMRESOURCELOCATIONPROC glad_glGetProgramResourceLocation; -PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; -PFNGLFOGIPROC glad_glFogi; -PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d; -PFNGLCLAMPCOLORPROC glad_glClampColor; -PFNGLWINDOWPOS3SPROC glad_glWindowPos3s; -PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; -PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui; -PFNGLPATCHPARAMETERIPROC glad_glPatchParameteri; -PFNGLCOPYIMAGESUBDATAPROC glad_glCopyImageSubData; -PFNGLDEBUGMESSAGECALLBACKPROC glad_glDebugMessageCallback; -PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf; -PFNGLWINDOWPOS3DPROC glad_glWindowPos3d; -PFNGLISENABLEDPROC glad_glIsEnabled; -PFNGLLINESTIPPLEPROC glad_glLineStipple; -PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; -PFNGLVERTEXATTRIBBINDINGPROC glad_glVertexAttribBinding; -PFNGLVERTEXATTRIBFORMATPROC glad_glVertexAttribFormat; -PFNGLPROGRAMUNIFORM4FVPROC glad_glProgramUniform4fv; -PFNGLISSHADERPROC glad_glIsShader; -PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv; -PFNGLTEXTURESUBIMAGE2DPROC glad_glTextureSubImage2D; -PFNGLRENDERMODEPROC glad_glRenderMode; -PFNGLINDEXSVPROC glad_glIndexsv; -PFNGLNORMALP3UIPROC glad_glNormalP3ui; -PFNGLDELETELISTSPROC glad_glDeleteLists; -PFNGLFINISHPROC glad_glFinish; -PFNGLGETACTIVESUBROUTINENAMEPROC glad_glGetActiveSubroutineName; -PFNGLGETUNIFORMSUBROUTINEUIVPROC glad_glGetUniformSubroutineuiv; -PFNGLGETVERTEXATTRIBLDVPROC glad_glGetVertexAttribLdv; -PFNGLTEXENVFPROC glad_glTexEnvf; -PFNGLFOGFPROC glad_glFogf; -PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glad_glFlushMappedNamedBufferRange; -PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv; -PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; -PFNGLTEXSTORAGE2DPROC glad_glTexStorage2D; -PFNGLGETNAMEDBUFFERSUBDATAPROC glad_glGetNamedBufferSubData; -PFNGLCOLOR3UIVPROC glad_glColor3uiv; -PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC glad_glCheckNamedFramebufferStatus; -PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex; -PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glad_glProgramUniformMatrix4x2fv; -PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; -PFNGLCOLOR4FPROC glad_glColor4f; -PFNGLACTIVETEXTUREPROC glad_glActiveTexture; -PFNGLLOADMATRIXFPROC glad_glLoadMatrixf; -PFNGLBINDBUFFERPROC glad_glBindBuffer; -PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; -PFNGLDRAWARRAYSPROC glad_glDrawArrays; -PFNGLMULTITEXCOORD1IPROC glad_glMultiTexCoord1i; -PFNGLPOLYGONOFFSETCLAMPPROC glad_glPolygonOffsetClamp; -PFNGLSECONDARYCOLOR3DPROC glad_glSecondaryColor3d; -PFNGLWINDOWPOS3IPROC glad_glWindowPos3i; -PFNGLBINDVERTEXBUFFERSPROC glad_glBindVertexBuffers; -PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC glad_glNamedFramebufferReadBuffer; -PFNGLINVALIDATETEXIMAGEPROC glad_glInvalidateTexImage; -PFNGLEVALCOORD1FVPROC glad_glEvalCoord1fv; -PFNGLINDEXIVPROC glad_glIndexiv; -PFNGLVERTEX3FPROC glad_glVertex3f; -PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; -PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glNamedRenderbufferStorageMultisample; -PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv; -PFNGLTEXIMAGE3DPROC glad_glTexImage3D; -PFNGLPROGRAMUNIFORM2FPROC glad_glProgramUniform2f; -PFNGLCLEARDEPTHPROC glad_glClearDepth; -PFNGLTEXTURESTORAGE3DPROC glad_glTextureStorage3D; -PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv; -PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; -PFNGLRASTERPOS4DVPROC glad_glRasterPos4dv; -PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender; -PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; -PFNGLFOGCOORDFPROC glad_glFogCoordf; -PFNGLRASTERPOS4SPROC glad_glRasterPos4s; -PFNGLUNIFORMMATRIX4DVPROC glad_glUniformMatrix4dv; -PFNGLLINKPROGRAMPROC glad_glLinkProgram; -PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub; -PFNGLMULTTRANSPOSEMATRIXFPROC glad_glMultTransposeMatrixf; -PFNGLSAMPLEMASKIPROC glad_glSampleMaski; -PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv; -PFNGLGETERRORPROC glad_glGetError; -PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv; -PFNGLGETNUNIFORMIVPROC glad_glGetnUniformiv; -PFNGLDEPTHRANGEPROC glad_glDepthRange; -PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv; -PFNGLMULTITEXCOORD3IPROC glad_glMultiTexCoord3i; -PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers; -PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; -PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; -PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC glad_glTextureStorage2DMultisample; -PFNGLCOLORP3UIPROC glad_glColorP3ui; -PFNGLPIXELMAPFVPROC glad_glPixelMapfv; -PFNGLBINDBUFFERSBASEPROC glad_glBindBuffersBase; -PFNGLGENBUFFERSPROC glad_glGenBuffers; -PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; -PFNGLRASTERPOS4IVPROC glad_glRasterPos4iv; -PFNGLMULTITEXCOORD1FVPROC glad_glMultiTexCoord1fv; -PFNGLPROGRAMUNIFORM4UIPROC glad_glProgramUniform4ui; -PFNGLGETNMAPIVPROC glad_glGetnMapiv; -PFNGLGETNUNIFORMFVPROC glad_glGetnUniformfv; -PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex; -PFNGLMULTITEXCOORD1DPROC glad_glMultiTexCoord1d; -PFNGLGETTEXTURELEVELPARAMETERIVPROC glad_glGetTextureLevelParameteriv; -PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui; -PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices; -PFNGLDISABLEVERTEXARRAYATTRIBPROC glad_glDisableVertexArrayAttrib; -PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName; -PFNGLSECONDARYCOLOR3IVPROC glad_glSecondaryColor3iv; -PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D; -PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; -PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; -PFNGLWINDOWPOS2DVPROC glad_glWindowPos2dv; -PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri; -PFNGLDISABLEPROC glad_glDisable; -PFNGLNORMAL3DPROC glad_glNormal3d; -PFNGLEVALMESH1PROC glad_glEvalMesh1; -PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i; -PFNGLUNIFORM2UIPROC glad_glUniform2ui; -PFNGLISSAMPLERPROC glad_glIsSampler; -PFNGLDEPTHMASKPROC glad_glDepthMask; -PFNGLDELETETEXTURESPROC glad_glDeleteTextures; -PFNGLPROGRAMUNIFORM2IPROC glad_glProgramUniform2i; -PFNGLUNIFORM1FPROC glad_glUniform1f; -PFNGLDELETEQUERIESPROC glad_glDeleteQueries; -PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; -PFNGLUNIFORM3IVPROC glad_glUniform3iv; -PFNGLCOPYTEXTURESUBIMAGE2DPROC glad_glCopyTextureSubImage2D; -PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; -PFNGLGENSAMPLERSPROC glad_glGenSamplers; -PFNGLPRIORITIZETEXTURESPROC glad_glPrioritizeTextures; -PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv; -PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; -PFNGLGETNAMEDBUFFERPOINTERVPROC glad_glGetNamedBufferPointerv; -PFNGLGETPOLYGONSTIPPLEPROC glad_glGetPolygonStipple; -PFNGLTEXCOORD3FVPROC glad_glTexCoord3fv; -PFNGLLISTBASEPROC glad_glListBase; -PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; -PFNGLMATERIALIVPROC glad_glMaterialiv; -PFNGLUNIFORM2IPROC glad_glUniform2i; -PFNGLRASTERPOS4IPROC glad_glRasterPos4i; -PFNGLCALLLISTSPROC glad_glCallLists; -PFNGLVERTEX3IPROC glad_glVertex3i; -PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; -PFNGLTEXCOORD2SVPROC glad_glTexCoord2sv; -PFNGLVERTEXATTRIBL2DVPROC glad_glVertexAttribL2dv; -PFNGLSCISSORINDEXEDPROC glad_glScissorIndexed; -PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; -PFNGLFRAMEBUFFERPARAMETERIPROC glad_glFramebufferParameteri; -PFNGLRECTIPROC glad_glRecti; -PFNGLENDLISTPROC glad_glEndList; -PFNGLTEXTURESUBIMAGE1DPROC glad_glTextureSubImage1D; -PFNGLBLITNAMEDFRAMEBUFFERPROC glad_glBlitNamedFramebuffer; -PFNGLBLENDFUNCPROC glad_glBlendFunc; -PFNGLENDPROC glad_glEnd; -PFNGLLOGICOPPROC glad_glLogicOp; -PFNGLSHADERSOURCEPROC glad_glShaderSource; -PFNGLCOLOR4DPROC glad_glColor4d; -PFNGLSECONDARYCOLOR3UBVPROC glad_glSecondaryColor3ubv; -PFNGLVERTEXARRAYATTRIBLFORMATPROC glad_glVertexArrayAttribLFormat; -PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glad_glGetActiveAtomicCounterBufferiv; -PFNGLGETBOOLEANVPROC glad_glGetBooleanv; -PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; -PFNGLTEXTUREBUFFERPROC glad_glTextureBuffer; -PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; -PFNGLDRAWBUFFERPROC glad_glDrawBuffer; -PFNGLTEXCOORD4DVPROC glad_glTexCoord4dv; PFNGLMULTITEXCOORD2SPROC glad_glMultiTexCoord2s; -PFNGLTEXCOORD1IPROC glad_glTexCoord1i; -PFNGLWINDOWPOS3DVPROC glad_glWindowPos3dv; -PFNGLBINDTEXTUREPROC glad_glBindTexture; -PFNGLGENERATETEXTUREMIPMAPPROC glad_glGenerateTextureMipmap; -PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; -PFNGLPOINTSIZEPROC glad_glPointSize; -PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glad_glGetNamedBufferParameteri64v; -PFNGLGETNPIXELMAPUIVPROC glad_glGetnPixelMapuiv; -PFNGLGETNUNIFORMDVPROC glad_glGetnUniformdv; -PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui; -PFNGLUNIFORMMATRIX3DVPROC glad_glUniformMatrix3dv; -PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv; -PFNGLLIGHTFPROC glad_glLightf; -PFNGLENABLEIPROC glad_glEnablei; -PFNGLGETPROGRAMBINARYPROC glad_glGetProgramBinary; -PFNGLGETFLOATI_VPROC glad_glGetFloati_v; -PFNGLUNIFORM3FPROC glad_glUniform3f; -PFNGLLOADTRANSPOSEMATRIXDPROC glad_glLoadTransposeMatrixd; -PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv; -PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glad_glProgramUniformMatrix4x3fv; -PFNGLCLEARBUFFERDATAPROC glad_glClearBufferData; -PFNGLPUSHDEBUGGROUPPROC glad_glPushDebugGroup; -PFNGLMULTITEXCOORD4IPROC glad_glMultiTexCoord4i; -PFNGLBEGINQUERYINDEXEDPROC glad_glBeginQueryIndexed; -PFNGLGETQUERYIVPROC glad_glGetQueryiv; -PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv; -PFNGLPROGRAMUNIFORM1DPROC glad_glProgramUniform1d; -PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv; -PFNGLWINDOWPOS2SVPROC glad_glWindowPos2sv; -PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv; -PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv; -PFNGLUNIFORM1DPROC glad_glUniform1d; -PFNGLTEXCOORD3SPROC glad_glTexCoord3s; -PFNGLTEXPARAMETERFPROC glad_glTexParameterf; -PFNGLMULTITEXCOORD3IVPROC glad_glMultiTexCoord3iv; -PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glad_glProgramUniformMatrix3x4fv; -PFNGLMAPGRID1DPROC glad_glMapGrid1d; -PFNGLBEGINPROC glad_glBegin; +PFNGLCOLOR4DPROC glad_glColor4d; +PFNGLBEGINQUERYPROC glad_glBeginQuery; +PFNGLINDEXFPROC glad_glIndexf; +PFNGLDISABLEIPROC glad_glDisablei; PFNGLGETTRANSFORMFEEDBACKI_VPROC glad_glGetTransformFeedbacki_v; -PFNGLCLEARNAMEDFRAMEBUFFERFIPROC glad_glClearNamedFramebufferfi; -PFNGLGETTEXENVFVPROC glad_glGetTexEnvfv; -PFNGLTEXCOORD2SPROC glad_glTexCoord2s; -PFNGLNORMAL3DVPROC glad_glNormal3dv; -PFNGLMULTITEXCOORD4SPROC glad_glMultiTexCoord4s; -PFNGLTEXCOORD3IVPROC glad_glTexCoord3iv; -PFNGLMULTITEXCOORD1IVPROC glad_glMultiTexCoord1iv; -PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv; -PFNGLTEXENVIPROC glad_glTexEnvi; -PFNGLPOPMATRIXPROC glad_glPopMatrix; -PFNGLMULTITEXCOORD3FVPROC glad_glMultiTexCoord3fv; -PFNGLSCISSORINDEXEDVPROC glad_glScissorIndexedv; -PFNGLVERTEX3DVPROC glad_glVertex3dv; -PFNGLGETTEXENVIVPROC glad_glGetTexEnviv; -PFNGLTEXCOORD2IVPROC glad_glTexCoord2iv; -PFNGLISSYNCPROC glad_glIsSync; -PFNGLUNIFORM4FVPROC glad_glUniform4fv; -PFNGLPOLYGONSTIPPLEPROC glad_glPolygonStipple; -PFNGLATTACHSHADERPROC glad_glAttachShader; -PFNGLCOLORP4UIPROC glad_glColorP4ui; -PFNGLPROGRAMUNIFORM3IPROC glad_glProgramUniform3i; -PFNGLNORMAL3IPROC glad_glNormal3i; -PFNGLRECTFVPROC glad_glRectfv; -PFNGLEVALCOORD2DPROC glad_glEvalCoord2d; -PFNGLTEXPARAMETERIPROC glad_glTexParameteri; -PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; -PFNGLACTIVESHADERPROGRAMPROC glad_glActiveShaderProgram; -PFNGLGETNPIXELMAPFVPROC glad_glGetnPixelMapfv; -PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; -PFNGLGETQUERYINDEXEDIVPROC glad_glGetQueryIndexediv; -PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; -PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D; +PFNGLCOLORMASKPROC glad_glColorMask; PFNGLDRAWBUFFERSPROC glad_glDrawBuffers; -PFNGLTEXTUREPARAMETERFVPROC glad_glTextureParameterfv; -PFNGLSTENCILOPPROC glad_glStencilOp; -PFNGLSHADEMODELPROC glad_glShadeModel; -PFNGLTEXGENDPROC glad_glTexGend; -PFNGLMULTITEXCOORD4FVPROC glad_glMultiTexCoord4fv; -PFNGLWINDOWPOS2SPROC glad_glWindowPos2s; -PFNGLGETNMAPFVPROC glad_glGetnMapfv; -PFNGLPROGRAMUNIFORM1IVPROC glad_glProgramUniform1iv; -PFNGLVERTEX3DPROC glad_glVertex3d; -PFNGLMULTITEXCOORD3SPROC glad_glMultiTexCoord3s; -PFNGLCOLOR4USVPROC glad_glColor4usv; -PFNGLFOGCOORDDPROC glad_glFogCoordd; -PFNGLUNIFORMMATRIX2X3DVPROC glad_glUniformMatrix2x3dv; -PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; -PFNGLCOLOR3DVPROC glad_glColor3dv; -PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; -PFNGLSECONDARYCOLOR3FPROC glad_glSecondaryColor3f; -PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv; -PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv; -PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; -PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; -PFNGLBINDPROGRAMPIPELINEPROC glad_glBindProgramPipeline; -PFNGLVERTEXATTRIBLPOINTERPROC glad_glVertexAttribLPointer; -PFNGLGETTEXTUREPARAMETERFVPROC glad_glGetTextureParameterfv; -PFNGLGETINTEGERVPROC glad_glGetIntegerv; -PFNGLCLEARTEXIMAGEPROC glad_glClearTexImage; -PFNGLNORMAL3IVPROC glad_glNormal3iv; -PFNGLFOGIVPROC glad_glFogiv; -PFNGLGETQUERYBUFFEROBJECTIVPROC glad_glGetQueryBufferObjectiv; -PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC glad_glNamedFramebufferRenderbuffer; -PFNGLGETINTEGER64VPROC glad_glGetInteger64v; -PFNGLMULTITEXCOORD1SPROC glad_glMultiTexCoord1s; -PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv; -PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC glad_glDrawTransformFeedbackStreamInstanced; -PFNGLGETNTEXIMAGEPROC glad_glGetnTexImage; -PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv; -PFNGLMULTITEXCOORD4IVPROC glad_glMultiTexCoord4iv; -PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; -PFNGLHINTPROC glad_glHint; -PFNGLRECTIVPROC glad_glRectiv; -PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv; -PFNGLINDEXDVPROC glad_glIndexdv; -PFNGLUNIFORM1UIPROC glad_glUniform1ui; -PFNGLGETNHISTOGRAMPROC glad_glGetnHistogram; -PFNGLGENTEXTURESPROC glad_glGenTextures; -PFNGLGETTEXGENIVPROC glad_glGetTexGeniv; -PFNGLUNIFORM1IPROC glad_glUniform1i; -PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; -PFNGLCREATEQUERIESPROC glad_glCreateQueries; -PFNGLGETPROGRAMRESOURCEINDEXPROC glad_glGetProgramResourceIndex; -PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; -PFNGLFEEDBACKBUFFERPROC glad_glFeedbackBuffer; -PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements; -PFNGLUNIFORMMATRIX4X3DVPROC glad_glUniformMatrix4x3dv; -PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; -PFNGLSCISSORARRAYVPROC glad_glScissorArrayv; -PFNGLGETPROGRAMRESOURCENAMEPROC glad_glGetProgramResourceName; -PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC glad_glGetNamedFramebufferParameteriv; -PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glad_glDrawElementsInstancedBaseInstance; -PFNGLVERTEX2DVPROC glad_glVertex2dv; -PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv; -PFNGLCOLOR4SPROC glad_glColor4s; -PFNGLUNIFORM2IVPROC glad_glUniform2iv; -PFNGLUNIFORM3UIPROC glad_glUniform3ui; -PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; -PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; -PFNGLRECTDPROC glad_glRectd; -PFNGLTEXCOORD1DPROC glad_glTexCoord1d; -PFNGLGETMAPIVPROC glad_glGetMapiv; -PFNGLTEXENVIVPROC glad_glTexEnviv; -PFNGLMATRIXMODEPROC glad_glMatrixMode; -PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; -PFNGLUNIFORM1FVPROC glad_glUniform1fv; -PFNGLPROGRAMUNIFORM3DVPROC glad_glProgramUniform3dv; -PFNGLGETINTERNALFORMATI64VPROC glad_glGetInternalformati64v; -PFNGLVERTEX4IVPROC glad_glVertex4iv; -PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; -PFNGLDELETESYNCPROC glad_glDeleteSync; -PFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback; -PFNGLBINDIMAGETEXTURESPROC glad_glBindImageTextures; -PFNGLGETNSEPARABLEFILTERPROC glad_glGetnSeparableFilter; -PFNGLUNIFORMMATRIX3X2DVPROC glad_glUniformMatrix3x2dv; -PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; -PFNGLVERTEXARRAYVERTEXBUFFERSPROC glad_glVertexArrayVertexBuffers; -PFNGLENDQUERYPROC glad_glEndQuery; -PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; -PFNGLTEXSTORAGE3DPROC glad_glTexStorage3D; -PFNGLNORMAL3FPROC glad_glNormal3f; -PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv; +PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; +PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv; +PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv; +PFNGLVERTEXP4UIPROC glad_glVertexP4ui; +PFNGLLINKPROGRAMPROC glad_glLinkProgram; +PFNGLGETNPIXELMAPUIVPROC glad_glGetnPixelMapuiv; +PFNGLDEBUGMESSAGECONTROLPROC glad_glDebugMessageControl; +PFNGLBUFFERSTORAGEPROC glad_glBufferStorage; +PFNGLGETPOLYGONSTIPPLEPROC glad_glGetPolygonStipple; +PFNGLGETNMAPDVPROC glad_glGetnMapdv; +PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glad_glProgramUniformMatrix3x2fv; +PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv; +PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC glad_glMultiDrawElementsIndirectCount; PFNGLVIEWPORTPROC glad_glViewport; PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv; -PFNGLDRAWELEMENTSPROC glad_glDrawElements; -PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glad_glGetSubroutineUniformLocation; -PFNGLVERTEX4FVPROC glad_glVertex4fv; -PFNGLRECTDVPROC glad_glRectdv; -PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv; -PFNGLUSEPROGRAMSTAGESPROC glad_glUseProgramStages; -PFNGLCLEARPROC glad_glClear; -PFNGLEVALMESH2PROC glad_glEvalMesh2; -PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetNamedFramebufferAttachmentParameteriv; -PFNGLVERTEXATTRIBL1DPROC glad_glVertexAttribL1d; -PFNGLVIEWPORTINDEXEDFPROC glad_glViewportIndexedf; -PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; -PFNGLNAMEDFRAMEBUFFERTEXTUREPROC glad_glNamedFramebufferTexture; -PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; -PFNGLGENPROGRAMPIPELINESPROC glad_glGenProgramPipelines; -PFNGLGETSTRINGIPROC glad_glGetStringi; -PFNGLTEXGENDVPROC glad_glTexGendv; -PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui; +PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender; +PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; +PFNGLRECTIPROC glad_glRecti; +PFNGLBINDBUFFERSBASEPROC glad_glBindBuffersBase; +PFNGLMULTITEXCOORD1FVPROC glad_glMultiTexCoord1fv; +PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glad_glClearNamedFramebufferuiv; +PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; +PFNGLNAMEDRENDERBUFFERSTORAGEPROC glad_glNamedRenderbufferStorage; +PFNGLLOGICOPPROC glad_glLogicOp; +PFNGLMULTITEXCOORD1DVPROC glad_glMultiTexCoord1dv; +PFNGLTRANSLATEFPROC glad_glTranslatef; +PFNGLCREATESHADERPROGRAMVPROC glad_glCreateShaderProgramv; PFNGLRASTERPOS3DPROC glad_glRasterPos3d; +PFNGLUNIFORM3UIPROC glad_glUniform3ui; +PFNGLRASTERPOS2DVPROC glad_glRasterPos2dv; +PFNGLGETPROGRAMPIPELINEINFOLOGPROC glad_glGetProgramPipelineInfoLog; +PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glad_glGetActiveAtomicCounterBufferiv; +PFNGLGETQUERYBUFFEROBJECTIVPROC glad_glGetQueryBufferObjectiv; +PFNGLVERTEX2SPROC glad_glVertex2s; +PFNGLOBJECTLABELPROC glad_glObjectLabel; +PFNGLMULTITEXCOORD3DPROC glad_glMultiTexCoord3d; +PFNGLUNMAPNAMEDBUFFERPROC glad_glUnmapNamedBuffer; +PFNGLRASTERPOS4SPROC glad_glRasterPos4s; +PFNGLPIXELMAPUIVPROC glad_glPixelMapuiv; +PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; +PFNGLGETMAPIVPROC glad_glGetMapiv; +PFNGLGETACTIVESUBROUTINENAMEPROC glad_glGetActiveSubroutineName; +PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; +PFNGLVERTEXATTRIBL2DPROC glad_glVertexAttribL2d; +PFNGLMULTITEXCOORD3SVPROC glad_glMultiTexCoord3sv; +PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri; +PFNGLPROGRAMUNIFORM3FVPROC glad_glProgramUniform3fv; +PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; +PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; +PFNGLCOLOR4FPROC glad_glColor4f; +PFNGLACTIVESHADERPROGRAMPROC glad_glActiveShaderProgram; PFNGLMEMORYBARRIERPROC glad_glMemoryBarrier; -PFNGLBINDBUFFERSRANGEPROC glad_glBindBuffersRange; -PFNGLGETTEXTUREPARAMETERIVPROC glad_glGetTextureParameteriv; -PFNGLISTEXTUREPROC glad_glIsTexture; -PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; -PFNGLMULTTRANSPOSEMATRIXDPROC glad_glMultTransposeMatrixd; -PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glad_glGetCompressedTextureSubImage; -PFNGLMAPBUFFERPROC glad_glMapBuffer; -PFNGLVIEWPORTARRAYVPROC glad_glViewportArrayv; -PFNGLSECONDARYCOLOR3BVPROC glad_glSecondaryColor3bv; -PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex; -PFNGLTEXTUREPARAMETERIUIVPROC glad_glTextureParameterIuiv; -PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv; -PFNGLCLEARNAMEDBUFFERDATAPROC glad_glClearNamedBufferData; -PFNGLTEXCOORD4FPROC glad_glTexCoord4f; -PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; -PFNGLCLEARDEPTHFPROC glad_glClearDepthf; -PFNGLPROGRAMUNIFORM1UIPROC glad_glProgramUniform1ui; -PFNGLLINEWIDTHPROC glad_glLineWidth; -PFNGLMULTITEXCOORD4DVPROC glad_glMultiTexCoord4dv; -PFNGLVERTEX3IVPROC glad_glVertex3iv; -PFNGLPIXELTRANSFERFPROC glad_glPixelTransferf; -PFNGLCLEARTEXSUBIMAGEPROC glad_glClearTexSubImage; -PFNGLCLEARCOLORPROC glad_glClearColor; -PFNGLCREATESHADERPROC glad_glCreateShader; -PFNGLRASTERPOS3FPROC glad_glRasterPos3f; -PFNGLINDEXMASKPROC glad_glIndexMask; -PFNGLDEBUGMESSAGEINSERTPROC glad_glDebugMessageInsert; -PFNGLVERTEXARRAYATTRIBFORMATPROC glad_glVertexArrayAttribFormat; -PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; -PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv; -PFNGLCOLOR3DPROC glad_glColor3d; -PFNGLVERTEX2FVPROC glad_glVertex2fv; -PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; -PFNGLRASTERPOS2SVPROC glad_glRasterPos2sv; -PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv; -PFNGLPROGRAMUNIFORM4IVPROC glad_glProgramUniform4iv; -PFNGLRESUMETRANSFORMFEEDBACKPROC glad_glResumeTransformFeedback; -PFNGLMULTITEXCOORD3FPROC glad_glMultiTexCoord3f; -PFNGLEVALCOORD1FPROC glad_glEvalCoord1f; -PFNGLREADBUFFERPROC glad_glReadBuffer; -PFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor; -PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; -PFNGLTEXCOORD2FPROC glad_glTexCoord2f; -PFNGLMULTITEXCOORD2DVPROC glad_glMultiTexCoord2dv; -PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC glad_glNamedFramebufferParameteri; -PFNGLCOLOR3UBVPROC glad_glColor3ubv; -PFNGLVERTEX3FVPROC glad_glVertex3fv; -PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d; -PFNGLLOADTRANSPOSEMATRIXFPROC glad_glLoadTransposeMatrixf; -PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; -PFNGLVERTEX3SVPROC glad_glVertex3sv; -PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glad_glProgramUniformMatrix2x3dv; -PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC glad_glTransformFeedbackBufferBase; -PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv; -PFNGLPIXELTRANSFERIPROC glad_glPixelTransferi; -PFNGLBLENDEQUATIONIPROC glad_glBlendEquationi; -PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData; -PFNGLBLENDEQUATIONSEPARATEIPROC glad_glBlendEquationSeparatei; -PFNGLUNIFORM1DVPROC glad_glUniform1dv; -PFNGLCULLFACEPROC glad_glCullFace; -PFNGLGETUNIFORMDVPROC glad_glGetUniformdv; -PFNGLCLIPPLANEPROC glad_glClipPlane; -PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; +PFNGLMAPNAMEDBUFFERRANGEPROC glad_glMapNamedBufferRange; +PFNGLGETNSEPARABLEFILTERPROC glad_glGetnSeparableFilter; +PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC glad_glGetNamedRenderbufferParameteriv; +PFNGLDELETETEXTURESPROC glad_glDeleteTextures; +PFNGLMULTITEXCOORD4FPROC glad_glMultiTexCoord4f; +PFNGLLIGHTFVPROC glad_glLightfv; +PFNGLDEPTHRANGEPROC glad_glDepthRange; +PFNGLGETQUERYBUFFEROBJECTI64VPROC glad_glGetQueryBufferObjecti64v; +PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; +PFNGLRASTERPOS2DPROC glad_glRasterPos2d; +PFNGLGETPROGRAMRESOURCENAMEPROC glad_glGetProgramResourceName; +PFNGLTEXCOORD3FVPROC glad_glTexCoord3fv; +PFNGLVERTEX4DPROC glad_glVertex4d; +PFNGLPATCHPARAMETERIPROC glad_glPatchParameteri; +PFNGLGETUNIFORMSUBROUTINEUIVPROC glad_glGetUniformSubroutineuiv; +PFNGLUNIFORM4DPROC glad_glUniform4d; +PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; +PFNGLTEXCOORD3DPROC glad_glTexCoord3d; +PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv; +PFNGLTEXGENFPROC glad_glTexGenf; +PFNGLCOLOR4USVPROC glad_glColor4usv; +PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv; +PFNGLCOLOR4IPROC glad_glColor4i; +PFNGLVERTEX4SVPROC glad_glVertex4sv; +PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; +PFNGLGETDOUBLEVPROC glad_glGetDoublev; +PFNGLGETTEXTUREIMAGEPROC glad_glGetTextureImage; +PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex; +PFNGLVERTEXPOINTERPROC glad_glVertexPointer; +PFNGLGETSYNCIVPROC glad_glGetSynciv; +PFNGLRASTERPOS4DPROC glad_glRasterPos4d; +PFNGLFOGFPROC glad_glFogf; +PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv; +PFNGLSTENCILOPPROC glad_glStencilOp; +PFNGLTEXGENIPROC glad_glTexGeni; +PFNGLMULTITEXCOORD2DPROC glad_glMultiTexCoord2d; +PFNGLRASTERPOS3FVPROC glad_glRasterPos3fv; +PFNGLTEXCOORD4DPROC glad_glTexCoord4d; +PFNGLSECONDARYCOLOR3SPROC glad_glSecondaryColor3s; +PFNGLWINDOWPOS3FPROC glad_glWindowPos3f; +PFNGLTEXCOORD4DVPROC glad_glTexCoord4dv; +PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; +PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; +PFNGLPROGRAMUNIFORM2FVPROC glad_glProgramUniform2fv; +PFNGLMAP1FPROC glad_glMap1f; +PFNGLEVALCOORD2FPROC glad_glEvalCoord2f; +PFNGLGENTEXTURESPROC glad_glGenTextures; +PFNGLTEXIMAGE2DPROC glad_glTexImage2D; +PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; +PFNGLUNIFORMMATRIX4DVPROC glad_glUniformMatrix4dv; +PFNGLCREATEQUERIESPROC glad_glCreateQueries; +PFNGLGENQUERIESPROC glad_glGenQueries; +PFNGLGETVERTEXATTRIBLDVPROC glad_glGetVertexAttribLdv; +PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D; +PFNGLALPHAFUNCPROC glad_glAlphaFunc; +PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s; +PFNGLFRONTFACEPROC glad_glFrontFace; PFNGLGETSHADERIVPROC glad_glGetShaderiv; +PFNGLUNIFORM2IPROC glad_glUniform2i; +PFNGLFOGIVPROC glad_glFogiv; +PFNGLRASTERPOS2FVPROC glad_glRasterPos2fv; +PFNGLINTERLEAVEDARRAYSPROC glad_glInterleavedArrays; +PFNGLLIGHTIPROC glad_glLighti; +PFNGLFEEDBACKBUFFERPROC glad_glFeedbackBuffer; +PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; +PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; +PFNGLNORMAL3DPROC glad_glNormal3d; +PFNGLDELETEQUERIESPROC glad_glDeleteQueries; +PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices; +PFNGLUNIFORM2FPROC glad_glUniform2f; +PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC glad_glCompressedTextureSubImage3D; +PFNGLGETVERTEXARRAYINDEXEDIVPROC glad_glGetVertexArrayIndexediv; +PFNGLRASTERPOS4IVPROC glad_glRasterPos4iv; +PFNGLUNIFORMMATRIX2X3DVPROC glad_glUniformMatrix2x3dv; +PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; +PFNGLUNIFORMMATRIX4X2DVPROC glad_glUniformMatrix4x2dv; +PFNGLTEXCOORD1SVPROC glad_glTexCoord1sv; +PFNGLRASTERPOS3IPROC glad_glRasterPos3i; +PFNGLUNIFORM3IPROC glad_glUniform3i; +PFNGLPROGRAMUNIFORM3DVPROC glad_glProgramUniform3dv; +PFNGLSTENCILFUNCPROC glad_glStencilFunc; +PFNGLTEXTURESTORAGE1DPROC glad_glTextureStorage1D; +PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; +PFNGLGETNCOMPRESSEDTEXIMAGEPROC glad_glGetnCompressedTexImage; +PFNGLSHADEMODELPROC glad_glShadeModel; +PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv; +PFNGLGETPIXELMAPFVPROC glad_glGetPixelMapfv; +PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv; +PFNGLMULTIDRAWELEMENTSINDIRECTPROC glad_glMultiDrawElementsIndirect; +PFNGLREADBUFFERPROC glad_glReadBuffer; +PFNGLMULTITEXCOORD2FPROC glad_glMultiTexCoord2f; +PFNGLGETFRAMEBUFFERPARAMETERIVPROC glad_glGetFramebufferParameteriv; +PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; +PFNGLCOLOR3USPROC glad_glColor3us; +PFNGLSECONDARYCOLOR3FPROC glad_glSecondaryColor3f; +PFNGLUNIFORM4FVPROC glad_glUniform4fv; +PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glad_glProgramUniformMatrix4x2dv; +PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers; +PFNGLMAPGRID1FPROC glad_glMapGrid1f; +PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; +PFNGLGETNAMEDBUFFERSUBDATAPROC glad_glGetNamedBufferSubData; +PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; +PFNGLVERTEX2FVPROC glad_glVertex2fv; +PFNGLPROGRAMUNIFORM2IPROC glad_glProgramUniform2i; +PFNGLTEXSTORAGE2DMULTISAMPLEPROC glad_glTexStorage2DMultisample; +PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui; +PFNGLGETQUERYINDEXEDIVPROC glad_glGetQueryIndexediv; +PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i; +PFNGLLIGHTIVPROC glad_glLightiv; +PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv; +PFNGLGETLIGHTFVPROC glad_glGetLightfv; +PFNGLSECONDARYCOLOR3BPROC glad_glSecondaryColor3b; +PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; +PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; +PFNGLTEXENVIVPROC glad_glTexEnviv; +PFNGLUNIFORMSUBROUTINESUIVPROC glad_glUniformSubroutinesuiv; +PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; +PFNGLCOLOR4IVPROC glad_glColor4iv; +PFNGLBLENDFUNCSEPARATEIPROC glad_glBlendFuncSeparatei; +PFNGLSPECIALIZESHADERPROC glad_glSpecializeShader; +PFNGLPIXELZOOMPROC glad_glPixelZoom; +PFNGLCLEARINDEXPROC glad_glClearIndex; +PFNGLCOLOR3UBPROC glad_glColor3ub; +PFNGLEVALMESH1PROC glad_glEvalMesh1; +PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf; +PFNGLVERTEXP2UIPROC glad_glVertexP2ui; +PFNGLUNIFORM3DVPROC glad_glUniform3dv; +PFNGLARRAYELEMENTPROC glad_glArrayElement; +PFNGLLIGHTMODELFPROC glad_glLightModelf; +PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui; +PFNGLBEGINQUERYINDEXEDPROC glad_glBeginQueryIndexed; +PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glad_glDrawElementsInstancedBaseVertexBaseInstance; +PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv; +PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; +PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv; +PFNGLMULTITEXCOORD4SPROC glad_glMultiTexCoord4s; +PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced; +PFNGLCLEARCOLORPROC glad_glClearColor; +PFNGLGETNAMEDBUFFERPARAMETERIVPROC glad_glGetNamedBufferParameteriv; +PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d; +PFNGLUNIFORMMATRIX4X3DVPROC glad_glUniformMatrix4x3dv; +PFNGLRASTERPOS3IVPROC glad_glRasterPos3iv; +PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex; +PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC glad_glTextureStorage3DMultisample; +PFNGLINDEXSPROC glad_glIndexs; +PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; +PFNGLLIGHTFPROC glad_glLightf; +PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; +PFNGLMULTIDRAWARRAYSINDIRECTPROC glad_glMultiDrawArraysIndirect; +PFNGLGETPOINTERVPROC glad_glGetPointerv; +PFNGLNORMAL3BPROC glad_glNormal3b; +PFNGLCLEARACCUMPROC glad_glClearAccum; +PFNGLPROGRAMPARAMETERIPROC glad_glProgramParameteri; +PFNGLCREATEPROGRAMPROC glad_glCreateProgram; +PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; +PFNGLDELETEPROGRAMPIPELINESPROC glad_glDeleteProgramPipelines; +PFNGLRASTERPOS2IPROC glad_glRasterPos2i; +PFNGLDRAWARRAYSPROC glad_glDrawArrays; +PFNGLGETUNIFORMDVPROC glad_glGetUniformdv; +PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; +PFNGLVERTEXP3UIPROC glad_glVertexP3ui; +PFNGLPROGRAMUNIFORM4DVPROC glad_glProgramUniform4dv; +PFNGLPROGRAMUNIFORM1UIPROC glad_glProgramUniform1ui; +PFNGLPATCHPARAMETERFVPROC glad_glPatchParameterfv; +PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; +PFNGLACCUMPROC glad_glAccum; +PFNGLMULTITEXCOORD2SVPROC glad_glMultiTexCoord2sv; +PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv; +PFNGLFRUSTUMPROC glad_glFrustum; +PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui; +PFNGLVERTEXATTRIBLFORMATPROC glad_glVertexAttribLFormat; +PFNGLGETSUBROUTINEINDEXPROC glad_glGetSubroutineIndex; +PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex; +PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC glad_glTransformFeedbackBufferRange; +PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; +PFNGLWINDOWPOS3SVPROC glad_glWindowPos3sv; +PFNGLCOLOR3BPROC glad_glColor3b; +PFNGLMULTITEXCOORD1DPROC glad_glMultiTexCoord1d; +PFNGLTEXTUREPARAMETERIIVPROC glad_glTextureParameterIiv; +PFNGLDEPTHFUNCPROC glad_glDepthFunc; +PFNGLTEXCOORD4IPROC glad_glTexCoord4i; +PFNGLRECTFVPROC glad_glRectfv; +PFNGLTEXCOORD1SPROC glad_glTexCoord1s; +PFNGLTEXENVFPROC glad_glTexEnvf; +PFNGLNORMAL3SPROC glad_glNormal3s; +PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; +PFNGLPROGRAMUNIFORM4FPROC glad_glProgramUniform4f; +PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glad_glProgramUniformMatrix3x2dv; +PFNGLGETNAMEDBUFFERPOINTERVPROC glad_glGetNamedBufferPointerv; +PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor; +PFNGLBLENDFUNCPROC glad_glBlendFunc; +PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData; +PFNGLTEXTUREPARAMETERIPROC glad_glTextureParameteri; +PFNGLPROGRAMUNIFORM4IVPROC glad_glProgramUniform4iv; +PFNGLVERTEX3DPROC glad_glVertex3d; +PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; +PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui; +PFNGLBLENDEQUATIONSEPARATEIPROC glad_glBlendEquationSeparatei; +PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glad_glProgramUniformMatrix4x3fv; +PFNGLMINSAMPLESHADINGPROC glad_glMinSampleShading; +PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; +PFNGLTEXCOORD4SPROC glad_glTexCoord4s; +PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glad_glGetProgramResourceLocationIndex; +PFNGLGETTEXTUREPARAMETERIVPROC glad_glGetTextureParameteriv; +PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv; +PFNGLCOLOR3UIPROC glad_glColor3ui; +PFNGLEDGEFLAGPROC glad_glEdgeFlag; +PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv; +PFNGLISSAMPLERPROC glad_glIsSampler; +PFNGLCOPYIMAGESUBDATAPROC glad_glCopyImageSubData; +PFNGLCOLOR4FVPROC glad_glColor4fv; +PFNGLPROGRAMUNIFORM3DPROC glad_glProgramUniform3d; +PFNGLCOLORP4UIVPROC glad_glColorP4uiv; +PFNGLCOPYTEXTURESUBIMAGE1DPROC glad_glCopyTextureSubImage1D; +PFNGLRENDERMODEPROC glad_glRenderMode; +PFNGLGETBOOLEANVPROC glad_glGetBooleanv; +PFNGLVIEWPORTARRAYVPROC glad_glViewportArrayv; +PFNGLMULTITEXCOORD3DVPROC glad_glMultiTexCoord3dv; +PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D; +PFNGLBLITNAMEDFRAMEBUFFERPROC glad_glBlitNamedFramebuffer; +PFNGLGETNMINMAXPROC glad_glGetnMinmax; +PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC glad_glTextureStorage2DMultisample; +PFNGLCREATEFRAMEBUFFERSPROC glad_glCreateFramebuffers; +PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; +PFNGLCOMPILESHADERPROC glad_glCompileShader; +PFNGLUNIFORM4FPROC glad_glUniform4f; +PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; +PFNGLWAITSYNCPROC glad_glWaitSync; +PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; +PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glad_glProgramUniformMatrix4x3dv; +PFNGLEVALCOORD1DPROC glad_glEvalCoord1d; +PFNGLGETTEXENVIVPROC glad_glGetTexEnviv; +PFNGLGETTRANSFORMFEEDBACKIVPROC glad_glGetTransformFeedbackiv; +PFNGLGETNUNIFORMUIVPROC glad_glGetnUniformuiv; +PFNGLTEXCOORD1IPROC glad_glTexCoord1i; +PFNGLFLUSHPROC glad_glFlush; +PFNGLCOLOR4SVPROC glad_glColor4sv; +PFNGLEVALCOORD1DVPROC glad_glEvalCoord1dv; +PFNGLPIXELMAPFVPROC glad_glPixelMapfv; +PFNGLVERTEX3SPROC glad_glVertex3s; +PFNGLENABLEIPROC glad_glEnablei; +PFNGLMULTITEXCOORD2DVPROC glad_glMultiTexCoord2dv; +PFNGLCOLOR3SVPROC glad_glColor3sv; +PFNGLPOPNAMEPROC glad_glPopName; +PFNGLTEXPARAMETERFPROC glad_glTexParameterf; +PFNGLBINDSAMPLERSPROC glad_glBindSamplers; +PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv; +PFNGLBUFFERDATAPROC glad_glBufferData; +PFNGLCLIPCONTROLPROC glad_glClipControl; +PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage; +PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui; +PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui; +PFNGLCOLOR3BVPROC glad_glColor3bv; +PFNGLVERTEXARRAYVERTEXBUFFERSPROC glad_glVertexArrayVertexBuffers; +PFNGLWINDOWPOS2IVPROC glad_glWindowPos2iv; +PFNGLGETTEXIMAGEPROC glad_glGetTexImage; +PFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor; +PFNGLRASTERPOS3DVPROC glad_glRasterPos3dv; +PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glad_glGetNamedBufferParameteri64v; +PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC glad_glNamedFramebufferReadBuffer; +PFNGLWINDOWPOS2DPROC glad_glWindowPos2d; +PFNGLGETTEXTUREPARAMETERIUIVPROC glad_glGetTextureParameterIuiv; +PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex; +PFNGLVERTEX4FPROC glad_glVertex4f; +PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv; +PFNGLMULTITEXCOORD4FVPROC glad_glMultiTexCoord4fv; +PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv; +PFNGLLOADTRANSPOSEMATRIXFPROC glad_glLoadTransposeMatrixf; +PFNGLTEXCOORD2FVPROC glad_glTexCoord2fv; +PFNGLPROGRAMUNIFORM1IPROC glad_glProgramUniform1i; +PFNGLINDEXUBPROC glad_glIndexub; +PFNGLNORMAL3DVPROC glad_glNormal3dv; +PFNGLINDEXMASKPROC glad_glIndexMask; +PFNGLPOINTPARAMETERIPROC glad_glPointParameteri; +PFNGLSECONDARYCOLOR3UIVPROC glad_glSecondaryColor3uiv; +PFNGLCOLOR4USPROC glad_glColor4us; +PFNGLTEXIMAGE3DPROC glad_glTexImage3D; +PFNGLGETNHISTOGRAMPROC glad_glGetnHistogram; +PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v; +PFNGLSECONDARYCOLOR3UIPROC glad_glSecondaryColor3ui; +PFNGLROTATEDPROC glad_glRotated; +PFNGLCOLOR3IVPROC glad_glColor3iv; +PFNGLRESUMETRANSFORMFEEDBACKPROC glad_glResumeTransformFeedback; +PFNGLMULTITEXCOORD3SPROC glad_glMultiTexCoord3s; +PFNGLUNIFORM4DVPROC glad_glUniform4dv; +PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC glad_glGetNamedFramebufferParameteriv; +PFNGLVERTEX4IPROC glad_glVertex4i; +PFNGLGETTEXTURESUBIMAGEPROC glad_glGetTextureSubImage; +PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui; +PFNGLCOLOR4BVPROC glad_glColor4bv; +PFNGLORTHOPROC glad_glOrtho; +PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; +PFNGLINVALIDATEBUFFERSUBDATAPROC glad_glInvalidateBufferSubData; +PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture; +PFNGLCOLOR4UIVPROC glad_glColor4uiv; +PFNGLCOLOR3DVPROC glad_glColor3dv; +PFNGLGETDEBUGMESSAGELOGPROC glad_glGetDebugMessageLog; +PFNGLGETOBJECTPTRLABELPROC glad_glGetObjectPtrLabel; +PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; +PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; +PFNGLINDEXDVPROC glad_glIndexdv; +PFNGLTEXCOORD4SVPROC glad_glTexCoord4sv; +PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC glad_glNamedFramebufferParameteri; +PFNGLISPROGRAMPROC glad_glIsProgram; +PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv; +PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; +PFNGLFOGCOORDFVPROC glad_glFogCoordfv; +PFNGLFENCESYNCPROC glad_glFenceSync; +PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glad_glProgramUniformMatrix3x4dv; +PFNGLSCISSORINDEXEDVPROC glad_glScissorIndexedv; +PFNGLGETVERTEXARRAYINDEXED64IVPROC glad_glGetVertexArrayIndexed64iv; +PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; +PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glad_glDrawArraysInstancedBaseInstance; +PFNGLSECONDARYCOLOR3USVPROC glad_glSecondaryColor3usv; +PFNGLTEXCOORD3IVPROC glad_glTexCoord3iv; +PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample; +PFNGLGETDOUBLEI_VPROC glad_glGetDoublei_v; +PFNGLGETNMAPFVPROC glad_glGetnMapfv; +PFNGLGETNPIXELMAPFVPROC glad_glGetnPixelMapfv; +PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays; +PFNGLVERTEXATTRIBL2DVPROC glad_glVertexAttribL2dv; +PFNGLNAMEDFRAMEBUFFERTEXTUREPROC glad_glNamedFramebufferTexture; +PFNGLREADNPIXELSPROC glad_glReadnPixels; +PFNGLCULLFACEPROC glad_glCullFace; +PFNGLVERTEXATTRIBIFORMATPROC glad_glVertexAttribIFormat; +PFNGLTEXCOORD3SPROC glad_glTexCoord3s; +PFNGLVERTEX4DVPROC glad_glVertex4dv; +PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; +PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv; +PFNGLLINESTIPPLEPROC glad_glLineStipple; +PFNGLSCALEDPROC glad_glScaled; +PFNGLBINDTEXTUREUNITPROC glad_glBindTextureUnit; +PFNGLBINDSAMPLERPROC glad_glBindSampler; +PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; +PFNGLUNIFORM1FVPROC glad_glUniform1fv; +PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv; +PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv; +PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; +PFNGLLOADIDENTITYPROC glad_glLoadIdentity; +PFNGLBLENDCOLORPROC glad_glBlendColor; +PFNGLMULTITEXCOORD3IPROC glad_glMultiTexCoord3i; +PFNGLBINDBUFFERPROC glad_glBindBuffer; +PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui; +PFNGLVERTEXATTRIBL3DPROC glad_glVertexAttribL3d; +PFNGLISPROGRAMPIPELINEPROC glad_glIsProgramPipeline; +PFNGLCLEARNAMEDFRAMEBUFFERFIPROC glad_glClearNamedFramebufferfi; +PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; +PFNGLBITMAPPROC glad_glBitmap; +PFNGLLOADMATRIXDPROC glad_glLoadMatrixd; +PFNGLMULTTRANSPOSEMATRIXDPROC glad_glMultTransposeMatrixd; +PFNGLUNIFORMMATRIX3X4DVPROC glad_glUniformMatrix3x4dv; +PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC glad_glInvalidateNamedFramebufferSubData; +PFNGLINDEXIVPROC glad_glIndexiv; +PFNGLPOPATTRIBPROC glad_glPopAttrib; +PFNGLINDEXDPROC glad_glIndexd; +PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation; +PFNGLFOGFVPROC glad_glFogfv; +PFNGLINITNAMESPROC glad_glInitNames; +PFNGLSECONDARYCOLOR3UBVPROC glad_glSecondaryColor3ubv; +PFNGLISBUFFERPROC glad_glIsBuffer; +PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; +PFNGLMULTITEXCOORD1FPROC glad_glMultiTexCoord1f; +PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv; +PFNGLGETNPOLYGONSTIPPLEPROC glad_glGetnPolygonStipple; +PFNGLISTEXTUREPROC glad_glIsTexture; +PFNGLUNIFORM1IVPROC glad_glUniform1iv; +PFNGLPROGRAMUNIFORM2IVPROC glad_glProgramUniform2iv; +PFNGLDISABLECLIENTSTATEPROC glad_glDisableClientState; +PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv; +PFNGLEVALCOORD2DVPROC glad_glEvalCoord2dv; +PFNGLVERTEX3FVPROC glad_glVertex3fv; +PFNGLPROGRAMUNIFORM3UIPROC glad_glProgramUniform3ui; +PFNGLPOPDEBUGGROUPPROC glad_glPopDebugGroup; +PFNGLTEXSTORAGE3DPROC glad_glTexStorage3D; +PFNGLSHADERSOURCEPROC glad_glShaderSource; +PFNGLEVALPOINT1PROC glad_glEvalPoint1; +PFNGLCOLOR4BPROC glad_glColor4b; +PFNGLPIXELTRANSFERIPROC glad_glPixelTransferi; +PFNGLREADPIXELSPROC glad_glReadPixels; +PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv; +PFNGLTEXCOORD2SVPROC glad_glTexCoord2sv; +PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui; +PFNGLINDEXUBVPROC glad_glIndexubv; +PFNGLISENABLEDIPROC glad_glIsEnabledi; +PFNGLSCISSORARRAYVPROC glad_glScissorArrayv; +PFNGLTEXCOORD2IVPROC glad_glTexCoord2iv; +PFNGLVERTEXARRAYATTRIBFORMATPROC glad_glVertexArrayAttribFormat; +PFNGLGETTEXGENFVPROC glad_glGetTexGenfv; +PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; +PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s; +PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; +PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv; +PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; +PFNGLLIGHTMODELIPROC glad_glLightModeli; +PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui; +PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glad_glGetSubroutineUniformLocation; +PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glad_glGetActiveSubroutineUniformName; +PFNGLCLEARDEPTHFPROC glad_glClearDepthf; +PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui; +PFNGLDETACHSHADERPROC glad_glDetachShader; +PFNGLGETMAPFVPROC glad_glGetMapfv; +PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; +PFNGLCOLOR3FVPROC glad_glColor3fv; +PFNGLVERTEXATTRIBFORMATPROC glad_glVertexAttribFormat; +PFNGLISENABLEDPROC glad_glIsEnabled; +PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; +PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv; +PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glad_glProgramUniformMatrix2x4fv; +PFNGLUNIFORMMATRIX3X2DVPROC glad_glUniformMatrix3x2dv; +PFNGLEVALCOORD2DPROC glad_glEvalCoord2d; +PFNGLGETFLOATI_VPROC glad_glGetFloati_v; +PFNGLCLEARBUFFERSUBDATAPROC glad_glClearBufferSubData; +PFNGLGETMATERIALFVPROC glad_glGetMaterialfv; +PFNGLMATERIALIVPROC glad_glMaterialiv; +PFNGLCOLORP3UIPROC glad_glColorP3ui; +PFNGLPROGRAMUNIFORMMATRIX4FVPROC glad_glProgramUniformMatrix4fv; +PFNGLVERTEXARRAYATTRIBBINDINGPROC glad_glVertexArrayAttribBinding; +PFNGLCOLOR3IPROC glad_glColor3i; +PFNGLTEXBUFFERPROC glad_glTexBuffer; +PFNGLVERTEX4SPROC glad_glVertex4s; +PFNGLBLENDFUNCIPROC glad_glBlendFunci; +PFNGLGETQUERYBUFFEROBJECTUIVPROC glad_glGetQueryBufferObjectuiv; +PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; +PFNGLMAP2DPROC glad_glMap2d; +PFNGLGETGRAPHICSRESETSTATUSPROC glad_glGetGraphicsResetStatus; +PFNGLPIXELMAPUSVPROC glad_glPixelMapusv; +PFNGLENDQUERYINDEXEDPROC glad_glEndQueryIndexed; +PFNGLMULTMATRIXDPROC glad_glMultMatrixd; +PFNGLCLEARBUFFERDATAPROC glad_glClearBufferData; +PFNGLGETFLOATVPROC glad_glGetFloatv; +PFNGLRASTERPOS3SPROC glad_glRasterPos3s; +PFNGLVERTEX4FVPROC glad_glVertex4fv; +PFNGLMAPNAMEDBUFFERPROC glad_glMapNamedBuffer; +PFNGLGETPIXELMAPUSVPROC glad_glGetPixelMapusv; +PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; +PFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback; +PFNGLMATERIALFPROC glad_glMaterialf; +PFNGLWINDOWPOS2FPROC glad_glWindowPos2f; +PFNGLGETINTERNALFORMATI64VPROC glad_glGetInternalformati64v; +PFNGLGETQUERYBUFFEROBJECTUI64VPROC glad_glGetQueryBufferObjectui64v; +PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv; +PFNGLGETINTEGERVPROC glad_glGetIntegerv; +PFNGLEVALPOINT2PROC glad_glEvalPoint2; +PFNGLINDEXPOINTERPROC glad_glIndexPointer; +PFNGLMULTTRANSPOSEMATRIXFPROC glad_glMultTransposeMatrixf; +PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; +PFNGLPROGRAMUNIFORMMATRIX2FVPROC glad_glProgramUniformMatrix2fv; +PFNGLPROGRAMUNIFORMMATRIX3FVPROC glad_glProgramUniformMatrix3fv; +PFNGLUSEPROGRAMSTAGESPROC glad_glUseProgramStages; +PFNGLUNIFORM1DVPROC glad_glUniform1dv; +PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv; +PFNGLCOLOR3USVPROC glad_glColor3usv; +PFNGLPROGRAMUNIFORM3IVPROC glad_glProgramUniform3iv; +PFNGLPROGRAMUNIFORM3FPROC glad_glProgramUniform3f; +PFNGLGETPIXELMAPUIVPROC glad_glGetPixelMapuiv; +PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glad_glClearNamedFramebufferiv; +PFNGLMULTITEXCOORD2IPROC glad_glMultiTexCoord2i; +PFNGLSECONDARYCOLOR3USPROC glad_glSecondaryColor3us; +PFNGLPROGRAMUNIFORM2DPROC glad_glProgramUniform2d; +PFNGLVERTEXARRAYATTRIBIFORMATPROC glad_glVertexArrayAttribIFormat; +PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; +PFNGLCALLLISTPROC glad_glCallList; +PFNGLMULTITEXCOORD4IPROC glad_glMultiTexCoord4i; +PFNGLISQUERYPROC glad_glIsQuery; +PFNGLUNIFORMMATRIX2X4DVPROC glad_glUniformMatrix2x4dv; +PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glad_glClearNamedFramebufferfv; +PFNGLGETTEXTURELEVELPARAMETERIVPROC glad_glGetTextureLevelParameteriv; +PFNGLMULTITEXCOORD3IVPROC glad_glMultiTexCoord3iv; +PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed; +PFNGLGETNPIXELMAPUSVPROC glad_glGetnPixelMapusv; +PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v; +PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; +PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; +PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; +PFNGLVERTEXARRAYVERTEXBUFFERPROC glad_glVertexArrayVertexBuffer; +PFNGLQUERYCOUNTERPROC glad_glQueryCounter; +PFNGLTEXCOORD3SVPROC glad_glTexCoord3sv; +PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D; +PFNGLHINTPROC glad_glHint; +PFNGLPOLYGONMODEPROC glad_glPolygonMode; +PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; +PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; +PFNGLPROGRAMUNIFORM4UIPROC glad_glProgramUniform4ui; +PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; +PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC glad_glMultiDrawArraysIndirectCount; +PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; +PFNGLPROGRAMUNIFORM3IPROC glad_glProgramUniform3i; +PFNGLTEXGENDVPROC glad_glTexGendv; +PFNGLFOGCOORDFPROC glad_glFogCoordf; +PFNGLFOGCOORDDPROC glad_glFogCoordd; +PFNGLRASTERPOS4IPROC glad_glRasterPos4i; +PFNGLGETERRORPROC glad_glGetError; +PFNGLPROGRAMUNIFORM2UIPROC glad_glProgramUniform2ui; +PFNGLDEPTHRANGEINDEXEDPROC glad_glDepthRangeIndexed; +PFNGLTEXTURESUBIMAGE2DPROC glad_glTextureSubImage2D; +PFNGLGETMAPDVPROC glad_glGetMapdv; +PFNGLTEXENVFVPROC glad_glTexEnvfv; +PFNGLVALIDATEPROGRAMPIPELINEPROC glad_glValidateProgramPipeline; +PFNGLPRIORITIZETEXTURESPROC glad_glPrioritizeTextures; +PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; +PFNGLRECTDVPROC glad_glRectdv; +PFNGLCLEARSTENCILPROC glad_glClearStencil; +PFNGLDEPTHRANGEARRAYVPROC glad_glDepthRangeArrayv; +PFNGLTEXTUREPARAMETERIUIVPROC glad_glTextureParameterIuiv; +PFNGLGETTEXENVFVPROC glad_glGetTexEnvfv; +PFNGLROTATEFPROC glad_glRotatef; +PFNGLCLEARNAMEDBUFFERSUBDATAPROC glad_glClearNamedBufferSubData; +PFNGLGETCLIPPLANEPROC glad_glGetClipPlane; +PFNGLMAPGRID1DPROC glad_glMapGrid1d; +PFNGLMULTITEXCOORD2IVPROC glad_glMultiTexCoord2iv; +PFNGLISLISTPROC glad_glIsList; +PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv; +PFNGLVIEWPORTINDEXEDFPROC glad_glViewportIndexedf; +PFNGLBINDIMAGETEXTURESPROC glad_glBindImageTextures; +PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; +PFNGLVERTEX2IPROC glad_glVertex2i; +PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v; +PFNGLCOLORP3UIVPROC glad_glColorP3uiv; +PFNGLLOADTRANSPOSEMATRIXDPROC glad_glLoadTransposeMatrixd; +PFNGLDEBUGMESSAGECALLBACKPROC glad_glDebugMessageCallback; +PFNGLPROGRAMUNIFORM1IVPROC glad_glProgramUniform1iv; +PFNGLTEXCOORD4FVPROC glad_glTexCoord4fv; +PFNGLCOLORP4UIPROC glad_glColorP4ui; +PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; +PFNGLCOLORPOINTERPROC glad_glColorPointer; +PFNGLISSHADERPROC glad_glIsShader; +PFNGLWINDOWPOS3DVPROC glad_glWindowPos3dv; +PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv; +PFNGLVIEWPORTINDEXEDFVPROC glad_glViewportIndexedfv; +PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv; +PFNGLMEMORYBARRIERBYREGIONPROC glad_glMemoryBarrierByRegion; +PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D; +PFNGLGETTEXTUREPARAMETERIIVPROC glad_glGetTextureParameterIiv; +PFNGLCOLOR4SPROC glad_glColor4s; +PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv; +PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; +PFNGLLISTBASEPROC glad_glListBase; +PFNGLCOLOR3DPROC glad_glColor3d; +PFNGLTEXTUREBUFFERRANGEPROC glad_glTextureBufferRange; +PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glad_glGetCompressedTextureImage; +PFNGLINVALIDATESUBFRAMEBUFFERPROC glad_glInvalidateSubFramebuffer; +PFNGLUNIFORM1DPROC glad_glUniform1d; +PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; +PFNGLUNIFORM3IVPROC glad_glUniform3iv; +PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv; +PFNGLPOLYGONOFFSETCLAMPPROC glad_glPolygonOffsetClamp; +PFNGLCOPYPIXELSPROC glad_glCopyPixels; +PFNGLINVALIDATEBUFFERDATAPROC glad_glInvalidateBufferData; +PFNGLVERTEX2SVPROC glad_glVertex2sv; +PFNGLSECONDARYCOLOR3IVPROC glad_glSecondaryColor3iv; +PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding; +PFNGLCLIENTACTIVETEXTUREPROC glad_glClientActiveTexture; +PFNGLENABLEVERTEXARRAYATTRIBPROC glad_glEnableVertexArrayAttrib; +PFNGLPROGRAMUNIFORM4DPROC glad_glProgramUniform4d; +PFNGLCOPYTEXTURESUBIMAGE3DPROC glad_glCopyTextureSubImage3D; +PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName; +PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv; +PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender; +PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s; +PFNGLACTIVETEXTUREPROC glad_glActiveTexture; +PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; +PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv; +PFNGLBINDVERTEXBUFFERSPROC glad_glBindVertexBuffers; +PFNGLDRAWELEMENTSINDIRECTPROC glad_glDrawElementsIndirect; +PFNGLINVALIDATETEXIMAGEPROC glad_glInvalidateTexImage; +PFNGLCOLOR4UBPROC glad_glColor4ub; +PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex; +PFNGLNORMAL3BVPROC glad_glNormal3bv; +PFNGLATTACHSHADERPROC glad_glAttachShader; +PFNGLPROGRAMUNIFORM2DVPROC glad_glProgramUniform2dv; +PFNGLCALLLISTSPROC glad_glCallLists; +PFNGLTEXCOORD4IVPROC glad_glTexCoord4iv; +PFNGLGENTRANSFORMFEEDBACKSPROC glad_glGenTransformFeedbacks; +PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D; +PFNGLGETNUNIFORMDVPROC glad_glGetnUniformdv; +PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glad_glDrawElementsInstancedBaseInstance; +PFNGLGETPROGRAMINTERFACEIVPROC glad_glGetProgramInterfaceiv; +PFNGLDELETESYNCPROC glad_glDeleteSync; +PFNGLGETSTRINGPROC glad_glGetString; +PFNGLTEXCOORDPOINTERPROC glad_glTexCoordPointer; +PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glad_glDrawTransformFeedbackStream; +PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glad_glProgramUniformMatrix2x3dv; +PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; +PFNGLVERTEXATTRIBL3DVPROC glad_glVertexAttribL3dv; +PFNGLRASTERPOS2IVPROC glad_glRasterPos2iv; +PFNGLDEPTHRANGEFPROC glad_glDepthRangef; +PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC glad_glNamedFramebufferRenderbuffer; +PFNGLCREATERENDERBUFFERSPROC glad_glCreateRenderbuffers; +PFNGLLOADMATRIXFPROC glad_glLoadMatrixf; +PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; +PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; +PFNGLUNIFORM2UIPROC glad_glUniform2ui; +PFNGLARETEXTURESRESIDENTPROC glad_glAreTexturesResident; +PFNGLUNIFORM3FPROC glad_glUniform3f; +PFNGLGENSAMPLERSPROC glad_glGenSamplers; +PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv; +PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; +PFNGLPUSHDEBUGGROUPPROC glad_glPushDebugGroup; +PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv; +PFNGLMATERIALIPROC glad_glMateriali; +PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; +PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC glad_glDrawTransformFeedbackInstanced; +PFNGLPASSTHROUGHPROC glad_glPassThrough; +PFNGLGETPROGRAMBINARYPROC glad_glGetProgramBinary; +PFNGLPOINTSIZEPROC glad_glPointSize; +PFNGLUNIFORMMATRIX2DVPROC glad_glUniformMatrix2dv; +PFNGLCREATETEXTURESPROC glad_glCreateTextures; +PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; +PFNGLMULTITEXCOORD4DPROC glad_glMultiTexCoord4d; +PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData; +PFNGLCREATETRANSFORMFEEDBACKSPROC glad_glCreateTransformFeedbacks; +PFNGLCOPYTEXTURESUBIMAGE2DPROC glad_glCopyTextureSubImage2D; +PFNGLMULTITEXCOORD1IVPROC glad_glMultiTexCoord1iv; +PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; +PFNGLPUSHCLIENTATTRIBPROC glad_glPushClientAttrib; +PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex; +PFNGLNEWLISTPROC glad_glNewList; +PFNGLSHADERBINARYPROC glad_glShaderBinary; +PFNGLTEXCOORD2DPROC glad_glTexCoord2d; +PFNGLWINDOWPOS2SVPROC glad_glWindowPos2sv; +PFNGLTEXTUREVIEWPROC glad_glTextureView; +PFNGLUNIFORMMATRIX3DVPROC glad_glUniformMatrix3dv; +PFNGLTEXSTORAGE2DPROC glad_glTexStorage2D; +PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC glad_glCheckNamedFramebufferStatus; +PFNGLBINDBUFFERSRANGEPROC glad_glBindBuffersRange; +PFNGLPIXELSTOREFPROC glad_glPixelStoref; +PFNGLTEXTUREPARAMETERFVPROC glad_glTextureParameterfv; +PFNGLDRAWELEMENTSPROC glad_glDrawElements; +PFNGLSECONDARYCOLOR3IPROC glad_glSecondaryColor3i; +PFNGLENDPROC glad_glEnd; +PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; +PFNGLCLEARTEXSUBIMAGEPROC glad_glClearTexSubImage; +PFNGLBLENDEQUATIONPROC glad_glBlendEquation; +PFNGLSCISSORINDEXEDPROC glad_glScissorIndexed; +PFNGLCOLOR3SPROC glad_glColor3s; +PFNGLSELECTBUFFERPROC glad_glSelectBuffer; +PFNGLRASTERPOS4FPROC glad_glRasterPos4f; +PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv; +PFNGLPROGRAMUNIFORM2FPROC glad_glProgramUniform2f; +PFNGLPROGRAMUNIFORM4IPROC glad_glProgramUniform4i; +PFNGLMATRIXMODEPROC glad_glMatrixMode; +PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync; +PFNGLTEXBUFFERRANGEPROC glad_glTexBufferRange; +PFNGLDRAWPIXELSPROC glad_glDrawPixels; +PFNGLMULTITEXCOORD1IPROC glad_glMultiTexCoord1i; +PFNGLMULTITEXCOORD4SVPROC glad_glMultiTexCoord4sv; +PFNGLVERTEX3DVPROC glad_glVertex3dv; +PFNGLLOADNAMEPROC glad_glLoadName; +PFNGLGETINTEGER64VPROC glad_glGetInteger64v; +PFNGLSTENCILMASKPROC glad_glStencilMask; +PFNGLVERTEX3SVPROC glad_glVertex3sv; +PFNGLTEXCOORD1DPROC glad_glTexCoord1d; +PFNGLTEXCOORD2DVPROC glad_glTexCoord2dv; +PFNGLSECONDARYCOLORPOINTERPROC glad_glSecondaryColorPointer; +PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; +PFNGLDEPTHMASKPROC glad_glDepthMask; +PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv; +PFNGLGETPROGRAMRESOURCELOCATIONPROC glad_glGetProgramResourceLocation; +PFNGLPIXELSTOREIPROC glad_glPixelStorei; +PFNGLGETNCOLORTABLEPROC glad_glGetnColorTable; +PFNGLWINDOWPOS2SPROC glad_glWindowPos2s; +PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; +PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv; +PFNGLFOGCOORDPOINTERPROC glad_glFogCoordPointer; +PFNGLSECONDARYCOLOR3DPROC glad_glSecondaryColor3d; +PFNGLNORMAL3SVPROC glad_glNormal3sv; +PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv; +PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName; +PFNGLPROGRAMUNIFORM4UIVPROC glad_glProgramUniform4uiv; +PFNGLMULTITEXCOORD4IVPROC glad_glMultiTexCoord4iv; +PFNGLWINDOWPOS2FVPROC glad_glWindowPos2fv; +PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv; +PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC glad_glInvalidateNamedFramebufferData; +PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv; +PFNGLTEXCOORD1FPROC glad_glTexCoord1f; +PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; +PFNGLDISABLEPROC glad_glDisable; +PFNGLDRAWTRANSFORMFEEDBACKPROC glad_glDrawTransformFeedback; +PFNGLCOLOR4UBVPROC glad_glColor4ubv; +PFNGLVERTEXATTRIBBINDINGPROC glad_glVertexAttribBinding; +PFNGLVERTEX4IVPROC glad_glVertex4iv; +PFNGLMAPBUFFERPROC glad_glMapBuffer; +PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat; +PFNGLENABLEPROC glad_glEnable; +PFNGLVERTEXATTRIBL1DPROC glad_glVertexAttribL1d; +PFNGLTEXSTORAGE1DPROC glad_glTexStorage1D; +PFNGLCLAMPCOLORPROC glad_glClampColor; +PFNGLRASTERPOS2SPROC glad_glRasterPos2s; +PFNGLUNIFORM3DPROC glad_glUniform3d; +PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex; +PFNGLRECTDPROC glad_glRectd; +PFNGLBINDTEXTURESPROC glad_glBindTextures; +PFNGLPOPCLIENTATTRIBPROC glad_glPopClientAttrib; +PFNGLENDLISTPROC glad_glEndList; +PFNGLEDGEFLAGVPROC glad_glEdgeFlagv; +PFNGLVERTEXATTRIBLPOINTERPROC glad_glVertexAttribLPointer; +PFNGLVERTEXATTRIBL4DPROC glad_glVertexAttribL4d; +PFNGLDELETELISTSPROC glad_glDeleteLists; +PFNGLMULTITEXCOORD1SPROC glad_glMultiTexCoord1s; +PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv; +PFNGLTEXTUREBARRIERPROC glad_glTextureBarrier; +PFNGLFOGCOORDDVPROC glad_glFogCoorddv; +PFNGLPROGRAMUNIFORM4FVPROC glad_glProgramUniform4fv; +PFNGLWINDOWPOS2DVPROC glad_glWindowPos2dv; +PFNGLGETSTRINGIPROC glad_glGetStringi; +PFNGLPOLYGONSTIPPLEPROC glad_glPolygonStipple; +PFNGLFRAMEBUFFERPARAMETERIPROC glad_glFramebufferParameteri; +PFNGLRECTSVPROC glad_glRectsv; +PFNGLSECONDARYCOLOR3DVPROC glad_glSecondaryColor3dv; +PFNGLTEXSTORAGE3DMULTISAMPLEPROC glad_glTexStorage3DMultisample; +PFNGLWINDOWPOS3DPROC glad_glWindowPos3d; +PFNGLCOLOR3FPROC glad_glColor3f; +PFNGLISSYNCPROC glad_glIsSync; +PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC glad_glDrawTransformFeedbackStreamInstanced; +PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui; +PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d; +PFNGLVERTEX2FPROC glad_glVertex2f; +PFNGLGETNUNIFORMIVPROC glad_glGetnUniformiv; +PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; +PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex; +PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i; +PFNGLDRAWBUFFERPROC glad_glDrawBuffer; +PFNGLCOPYNAMEDBUFFERSUBDATAPROC glad_glCopyNamedBufferSubData; +PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; +PFNGLPROGRAMUNIFORM1DPROC glad_glProgramUniform1d; +PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv; +PFNGLGETPROGRAMRESOURCEINDEXPROC glad_glGetProgramResourceIndex; +PFNGLUNIFORM1IPROC glad_glUniform1i; +PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v; +PFNGLPROGRAMBINARYPROC glad_glProgramBinary; +PFNGLNORMAL3FPROC glad_glNormal3f; +PFNGLPOPMATRIXPROC glad_glPopMatrix; +PFNGLGENLISTSPROC glad_glGenLists; +PFNGLCLIPPLANEPROC glad_glClipPlane; +PFNGLTEXTURESUBIMAGE3DPROC glad_glTextureSubImage3D; +PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv; +PFNGLFOGIPROC glad_glFogi; +PFNGLGENPROGRAMPIPELINESPROC glad_glGenProgramPipelines; +PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; +PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; +PFNGLCOLOR3UBVPROC glad_glColor3ubv; +PFNGLPROGRAMUNIFORMMATRIX3DVPROC glad_glProgramUniformMatrix3dv; +PFNGLDISPATCHCOMPUTEINDIRECTPROC glad_glDispatchComputeIndirect; +PFNGLRASTERPOS2SVPROC glad_glRasterPos2sv; +PFNGLBINDIMAGETEXTUREPROC glad_glBindImageTexture; +PFNGLMULTITEXCOORD3FVPROC glad_glMultiTexCoord3fv; +PFNGLEDGEFLAGPOINTERPROC glad_glEdgeFlagPointer; +PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s; +PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv; +PFNGLUNIFORM2DPROC glad_glUniform2d; +PFNGLTEXPARAMETERIPROC glad_glTexParameteri; +PFNGLGETVERTEXARRAYIVPROC glad_glGetVertexArrayiv; +PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC glad_glTransformFeedbackBufferBase; +PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; +PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; +PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv; +PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; +PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; +PFNGLRASTERPOS4DVPROC glad_glRasterPos4dv; +PFNGLSHADERSTORAGEBLOCKBINDINGPROC glad_glShaderStorageBlockBinding; +PFNGLUSEPROGRAMPROC glad_glUseProgram; +PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv; +PFNGLMATERIALFVPROC glad_glMaterialfv; +PFNGLGETLIGHTIVPROC glad_glGetLightiv; +PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; +PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv; +PFNGLNORMAL3IVPROC glad_glNormal3iv; +PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui; +PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; +PFNGLBEGINPROC glad_glBegin; +PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; +PFNGLINVALIDATETEXSUBIMAGEPROC glad_glInvalidateTexSubImage; +PFNGLUNIFORM1UIPROC glad_glUniform1ui; +PFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback; +PFNGLDELETESHADERPROC glad_glDeleteShader; +PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; +PFNGLMULTITEXCOORD3FPROC glad_glMultiTexCoord3f; +PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui; +PFNGLGETNTEXIMAGEPROC glad_glGetnTexImage; +PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glad_glGetActiveSubroutineUniformiv; +PFNGLSECONDARYCOLOR3SVPROC glad_glSecondaryColor3sv; +PFNGLCREATEPROGRAMPIPELINESPROC glad_glCreateProgramPipelines; +PFNGLTEXCOORD3DVPROC glad_glTexCoord3dv; +PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glad_glProgramUniformMatrix2x4dv; +PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; +PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v; +PFNGLINDEXFVPROC glad_glIndexfv; +PFNGLGETTEXTURELEVELPARAMETERFVPROC glad_glGetTextureLevelParameterfv; +PFNGLCREATEBUFFERSPROC glad_glCreateBuffers; +PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; +PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC glad_glCompressedTextureSubImage1D; +PFNGLCLEARPROC glad_glClear; +PFNGLBINDTEXTUREPROC glad_glBindTexture; +PFNGLUNIFORM4UIPROC glad_glUniform4ui; +PFNGLPROGRAMUNIFORM2UIVPROC glad_glProgramUniform2uiv; +PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv; +PFNGLINDEXIPROC glad_glIndexi; +PFNGLEVALCOORD1FVPROC glad_glEvalCoord1fv; +PFNGLCREATESHADERPROC glad_glCreateShader; +PFNGLCOLOR4UIPROC glad_glColor4ui; +PFNGLLINEWIDTHPROC glad_glLineWidth; +PFNGLSAMPLEMASKIPROC glad_glSampleMaski; +PFNGLBLENDEQUATIONIPROC glad_glBlendEquationi; +PFNGLMULTMATRIXFPROC glad_glMultMatrixf; +PFNGLUNIFORM3FVPROC glad_glUniform3fv; +PFNGLENDQUERYPROC glad_glEndQuery; +PFNGLCOLOR3UIVPROC glad_glColor3uiv; +PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced; +PFNGLINVALIDATEFRAMEBUFFERPROC glad_glInvalidateFramebuffer; +PFNGLDISABLEVERTEXARRAYATTRIBPROC glad_glDisableVertexArrayAttrib; +PFNGLTEXCOORD1IVPROC glad_glTexCoord1iv; +PFNGLFINISHPROC glad_glFinish; +PFNGLTEXCOORD3IPROC glad_glTexCoord3i; +PFNGLTEXCOORD1FVPROC glad_glTexCoord1fv; +PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; +PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; +PFNGLWINDOWPOS3SPROC glad_glWindowPos3s; +PFNGLTEXGENIVPROC glad_glTexGeniv; +PFNGLMULTITEXCOORD4DVPROC glad_glMultiTexCoord4dv; +PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv; +PFNGLPROGRAMUNIFORM1UIVPROC glad_glProgramUniform1uiv; +PFNGLWINDOWPOS3FVPROC glad_glWindowPos3fv; +PFNGLVERTEXARRAYATTRIBLFORMATPROC glad_glVertexArrayAttribLFormat; +PFNGLPROGRAMUNIFORM1DVPROC glad_glProgramUniform1dv; +PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; +PFNGLCOLOR4DVPROC glad_glColor4dv; +PFNGLNAMEDBUFFERDATAPROC glad_glNamedBufferData; +PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv; +PFNGLTEXCOORD1DVPROC glad_glTexCoord1dv; +PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui; +PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv; +PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetNamedFramebufferAttachmentParameteriv; +PFNGLRECTIVPROC glad_glRectiv; +PFNGLTEXCOORD3FPROC glad_glTexCoord3f; +PFNGLRECTFPROC glad_glRectf; +PFNGLMAP2FPROC glad_glMap2f; +PFNGLMAPGRID2FPROC glad_glMapGrid2f; +PFNGLSECONDARYCOLOR3FVPROC glad_glSecondaryColor3fv; +PFNGLTEXTUREPARAMETERFPROC glad_glTextureParameterf; +PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub; +PFNGLCLEARTEXIMAGEPROC glad_glClearTexImage; +PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample; +PFNGLVERTEXARRAYELEMENTBUFFERPROC glad_glVertexArrayElementBuffer; +PFNGLGETNMAPIVPROC glad_glGetnMapiv; +PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i; +PFNGLGENERATETEXTUREMIPMAPPROC glad_glGenerateTextureMipmap; +PFNGLVERTEX2DPROC glad_glVertex2d; +PFNGLNORMALPOINTERPROC glad_glNormalPointer; +PFNGLTEXENVIPROC glad_glTexEnvi; +PFNGLUNIFORM2FVPROC glad_glUniform2fv; +PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; +PFNGLGETPROGRAMPIPELINEIVPROC glad_glGetProgramPipelineiv; +PFNGLNORMAL3FVPROC glad_glNormal3fv; +PFNGLVERTEX3IPROC glad_glVertex3i; +PFNGLNORMAL3IPROC glad_glNormal3i; +PFNGLENABLECLIENTSTATEPROC glad_glEnableClientState; +PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; +PFNGLOBJECTPTRLABELPROC glad_glObjectPtrLabel; +PFNGLTEXIMAGE1DPROC glad_glTexImage1D; +PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; +PFNGLTRANSLATEDPROC glad_glTranslated; +PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ; +PFNGLMULTITEXCOORD2FVPROC glad_glMultiTexCoord2fv; +PFNGLNAMEDBUFFERSTORAGEPROC glad_glNamedBufferStorage; +PFNGLRASTERPOS3SVPROC glad_glRasterPos3sv; +PFNGLPUSHNAMEPROC glad_glPushName; +PFNGLSECONDARYCOLOR3UBPROC glad_glSecondaryColor3ub; +PFNGLTEXCOORD2FPROC glad_glTexCoord2f; +PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv; +PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv; +PFNGLGETTEXTUREPARAMETERFVPROC glad_glGetTextureParameterfv; +PFNGLGETPROGRAMRESOURCEIVPROC glad_glGetProgramResourceiv; +PFNGLPROGRAMUNIFORMMATRIX2DVPROC glad_glProgramUniformMatrix2dv; +PFNGLSCISSORPROC glad_glScissor; +PFNGLDISPATCHCOMPUTEPROC glad_glDispatchCompute; +PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glad_glProgramUniformMatrix4x2fv; +PFNGLEVALCOORD1FPROC glad_glEvalCoord1f; +PFNGLRECTSPROC glad_glRects; +PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; +PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; +PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv; +PFNGLCREATEVERTEXARRAYSPROC glad_glCreateVertexArrays; +PFNGLGETTEXGENIVPROC glad_glGetTexGeniv; +PFNGLSECONDARYCOLOR3BVPROC glad_glSecondaryColor3bv; +PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glad_glGetCompressedTextureSubImage; +PFNGLGETNCONVOLUTIONFILTERPROC glad_glGetnConvolutionFilter; +PFNGLCREATESAMPLERSPROC glad_glCreateSamplers; +PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC glad_glCompressedTextureSubImage2D; +PFNGLGENBUFFERSPROC glad_glGenBuffers; +PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; +PFNGLTEXTURESUBIMAGE1DPROC glad_glTextureSubImage1D; +PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv; +PFNGLVERTEX2IVPROC glad_glVertex2iv; +PFNGLGETOBJECTLABELPROC glad_glGetObjectLabel; +PFNGLMAP1DPROC glad_glMap1d; +PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; +PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; +PFNGLUNIFORM2DVPROC glad_glUniform2dv; +PFNGLTEXTUREBUFFERPROC glad_glTextureBuffer; +PFNGLPIXELTRANSFERFPROC glad_glPixelTransferf; +PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glad_glProgramUniformMatrix3x4fv; +PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; +PFNGLGETMATERIALIVPROC glad_glGetMaterialiv; +PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; +PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; +PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; +PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; +PFNGLRASTERPOS4FVPROC glad_glRasterPos4fv; +PFNGLISTRANSFORMFEEDBACKPROC glad_glIsTransformFeedback; +PFNGLEVALCOORD2FVPROC glad_glEvalCoord2fv; +PFNGLTEXCOORD2SPROC glad_glTexCoord2s; +PFNGLTEXCOORD2IPROC glad_glTexCoord2i; +PFNGLVERTEX3IVPROC glad_glVertex3iv; +PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; +PFNGLNAMEDBUFFERSUBDATAPROC glad_glNamedBufferSubData; +PFNGLVERTEXARRAYBINDINGDIVISORPROC glad_glVertexArrayBindingDivisor; +PFNGLPUSHATTRIBPROC glad_glPushAttrib; +PFNGLNORMALP3UIPROC glad_glNormalP3ui; +PFNGLLIGHTMODELFVPROC glad_glLightModelfv; +PFNGLSCALEFPROC glad_glScalef; +PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv; +PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv; +PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv; +PFNGLGETQUERYIVPROC glad_glGetQueryiv; +PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d; +PFNGLNORMALP3UIVPROC glad_glNormalP3uiv; +PFNGLRASTERPOS2FPROC glad_glRasterPos2f; +PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glad_glFlushMappedNamedBufferRange; +PFNGLRASTERPOS4SVPROC glad_glRasterPos4sv; +PFNGLDELETETRANSFORMFEEDBACKSPROC glad_glDeleteTransformFeedbacks; +PFNGLVERTEXATTRIBL4DVPROC glad_glVertexAttribL4dv; +PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; +PFNGLTEXGENFVPROC glad_glTexGenfv; +PFNGLUNIFORM1FPROC glad_glUniform1f; +PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; +PFNGLGETTEXGENDVPROC glad_glGetTexGendv; +PFNGLCLEARNAMEDBUFFERDATAPROC glad_glClearNamedBufferData; +PFNGLPROGRAMUNIFORMMATRIX4DVPROC glad_glProgramUniformMatrix4dv; +PFNGLLIGHTMODELIVPROC glad_glLightModeliv; +PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; +PFNGLINDEXSVPROC glad_glIndexsv; +PFNGLVERTEXATTRIBL1DVPROC glad_glVertexAttribL1dv; +PFNGLGETTRANSFORMFEEDBACKI64_VPROC glad_glGetTransformFeedbacki64_v; +PFNGLWINDOWPOS3IVPROC glad_glWindowPos3iv; +PFNGLPUSHMATRIXPROC glad_glPushMatrix; +PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements; +PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv; +PFNGLVERTEX3FPROC glad_glVertex3f; +PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d; +PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui; +PFNGLTEXTURESTORAGE3DPROC glad_glTextureStorage3D; +PFNGLRASTERPOS3FPROC glad_glRasterPos3f; +PFNGLDEBUGMESSAGEINSERTPROC glad_glDebugMessageInsert; +PFNGLPROGRAMUNIFORM1FPROC glad_glProgramUniform1f; +PFNGLPROGRAMUNIFORM3UIVPROC glad_glProgramUniform3uiv; +PFNGLGETPROGRAMSTAGEIVPROC glad_glGetProgramStageiv; +PFNGLCOLORMATERIALPROC glad_glColorMaterial; +PFNGLDRAWARRAYSINDIRECTPROC glad_glDrawArraysIndirect; +PFNGLWINDOWPOS2IPROC glad_glWindowPos2i; +PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC glad_glNamedFramebufferDrawBuffers; +PFNGLVERTEX2DVPROC glad_glVertex2dv; +PFNGLCOLORMASKIPROC glad_glColorMaski; +PFNGLTEXCOORD4FPROC glad_glTexCoord4f; +PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv; +PFNGLUNIFORM2IVPROC glad_glUniform2iv; +PFNGLUNIFORM4IPROC glad_glUniform4i; +PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC glad_glNamedFramebufferTextureLayer; +PFNGLMULTITEXCOORD1SVPROC glad_glMultiTexCoord1sv; +PFNGLWINDOWPOS3IPROC glad_glWindowPos3i; +PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glNamedRenderbufferStorageMultisample; +PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; +PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv; +PFNGLUNIFORM4IVPROC glad_glUniform4iv; +PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler; +PFNGLBINDPROGRAMPIPELINEPROC glad_glBindProgramPipeline; +PFNGLBINDVERTEXBUFFERPROC glad_glBindVertexBuffer; +PFNGLTEXGENDPROC glad_glTexGend; +PFNGLPROGRAMUNIFORM1FVPROC glad_glProgramUniform1fv; +PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D; +PFNGLMAPGRID2DPROC glad_glMapGrid2d; +PFNGLGETNUNIFORMFVPROC glad_glGetnUniformfv; +PFNGLTEXTURESTORAGE2DPROC glad_glTextureStorage2D; +PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC glad_glNamedFramebufferDrawBuffer; +PFNGLCLEARDEPTHPROC glad_glClearDepth; +PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glad_glProgramUniformMatrix2x3fv; +PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; +PFNGLTEXTUREPARAMETERIVPROC glad_glTextureParameteriv; +PFNGLEVALMESH2PROC glad_glEvalMesh2; int GLAD_GL_EXT_texture_filter_anisotropic; int GLAD_GL_EXT_framebuffer_multisample; +int GLAD_GL_NV_texture_barrier; PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glad_glRenderbufferStorageMultisampleEXT; +PFNGLTEXTUREBARRIERNVPROC glad_glTextureBarrierNV; static void load_GL_VERSION_1_0(GLADloadproc load) { if(!GLAD_GL_VERSION_1_0) return; glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); @@ -2439,10 +2442,15 @@ static void load_GL_EXT_framebuffer_multisample(GLADloadproc load) { if(!GLAD_GL_EXT_framebuffer_multisample) return; glad_glRenderbufferStorageMultisampleEXT = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)load("glRenderbufferStorageMultisampleEXT"); } +static void load_GL_NV_texture_barrier(GLADloadproc load) { + if(!GLAD_GL_NV_texture_barrier) return; + glad_glTextureBarrierNV = (PFNGLTEXTUREBARRIERNVPROC)load("glTextureBarrierNV"); +} static int find_extensionsGL(void) { if (!get_exts()) return 0; GLAD_GL_EXT_framebuffer_multisample = has_ext("GL_EXT_framebuffer_multisample"); GLAD_GL_EXT_texture_filter_anisotropic = has_ext("GL_EXT_texture_filter_anisotropic"); + GLAD_GL_NV_texture_barrier = has_ext("GL_NV_texture_barrier"); free_exts(); return 1; } @@ -2536,6 +2544,7 @@ int gladLoadGLLoader(GLADloadproc load) { if (!find_extensionsGL()) return 0; load_GL_EXT_framebuffer_multisample(load); + load_GL_NV_texture_barrier(load); return GLVersion.major != 0 || GLVersion.minor != 0; } diff --git a/glava/glad.h b/glava/glad.h index 35488c7..4768704 100644 --- a/glava/glad.h +++ b/glava/glad.h @@ -1,6 +1,6 @@ /* - OpenGL loader generated by glad 0.1.24a0 on Mon Aug 26 20:23:32 2019. + OpenGL loader generated by glad 0.1.24a0 on Tue Sep 10 15:02:41 2019. Language/Generator: C/C++ Specification: gl @@ -8,15 +8,16 @@ Profile: compatibility Extensions: GL_EXT_framebuffer_multisample, - GL_EXT_texture_filter_anisotropic + GL_EXT_texture_filter_anisotropic, + GL_NV_texture_barrier Loader: True Local files: True Omit khrplatform: False Commandline: - --profile="compatibility" --api="gl=4.6" --generator="c" --spec="gl" --local-files --extensions="GL_EXT_framebuffer_multisample,GL_EXT_texture_filter_anisotropic" + --profile="compatibility" --api="gl=4.6" --generator="c" --spec="gl" --local-files --extensions="GL_EXT_framebuffer_multisample,GL_EXT_texture_filter_anisotropic,GL_NV_texture_barrier" Online: - http://glad.dav1d.de/#profile=compatibility&language=c&specification=gl&loader=on&api=gl%3D4.6&extensions=GL_EXT_framebuffer_multisample&extensions=GL_EXT_texture_filter_anisotropic + http://glad.dav1d.de/#profile=compatibility&language=c&specification=gl&loader=on&api=gl%3D4.6&extensions=GL_EXT_framebuffer_multisample&extensions=GL_EXT_texture_filter_anisotropic&extensions=GL_NV_texture_barrier */ @@ -5167,6 +5168,13 @@ GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glad_glRenderbufferStorageMulti #define GL_EXT_texture_filter_anisotropic 1 GLAPI int GLAD_GL_EXT_texture_filter_anisotropic; #endif +#ifndef GL_NV_texture_barrier +#define GL_NV_texture_barrier 1 +GLAPI int GLAD_GL_NV_texture_barrier; +typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC)(void); +GLAPI PFNGLTEXTUREBARRIERNVPROC glad_glTextureBarrierNV; +#define glTextureBarrierNV glad_glTextureBarrierNV +#endif #ifdef __cplusplus } diff --git a/glava/glava.c b/glava/glava.c index d34d4fd..c779153 100644 --- a/glava/glava.c +++ b/glava/glava.c @@ -200,9 +200,6 @@ static const char* help_str = "The REQUEST argument is evaluated identically to the \'#request\' preprocessor directive\n" "in GLSL files.\n" "\n" - "The DEFINE argument is appended to the associated file before it is processed. It is\n" - "evaluated identically to the \'#define' preprocessor directive.\n" - "\n" "The FILE argument may be any file path. All specified file paths are relative to the\n" "active configuration root (usually ~/.config/glava if present).\n" "\n" @@ -243,7 +240,8 @@ static struct option p_opts[] = { }) /* Wait for glava_renderer target texture to be initialized and valid */ -__attribute__((visibility("default"))) void glava_wait(glava_handle* ref) { +__attribute__((visibility("default"))) +void glava_wait(glava_handle* ref) { while(__atomic_load_n(ref, __ATOMIC_SEQ_CST) == NULL) { /* Edge case: handle has not been assigned */ struct timespec tv = { @@ -257,25 +255,29 @@ __attribute__((visibility("default"))) void glava_wait(glava_handle* ref) { pthread_mutex_unlock(&(*ref)->lock); } -__attribute__((visibility("default"))) unsigned int glava_tex(glava_handle r) { +__attribute__((visibility("default"))) +unsigned int glava_tex(glava_handle r) { return r->off_tex; } /* Atomic size request */ -__attribute__((visibility("default"))) void glava_sizereq(glava_handle r, int x, int y, int w, int h) { +__attribute__((visibility("default"))) +void glava_sizereq(glava_handle r, int x, int y, int w, int h) { r->sizereq = (typeof(r->sizereq)) { .x = x, .y = y, .w = w, .h = h }; __atomic_store_n(&r->sizereq_flag, GLAVA_REQ_RESIZE, __ATOMIC_SEQ_CST); } /* Atomic terminate request */ -__attribute__((visibility("default"))) void glava_terminate(glava_handle* ref) { +__attribute__((visibility("default"))) +void glava_terminate(glava_handle* ref) { glava_handle store = __atomic_exchange_n(ref, NULL, __ATOMIC_SEQ_CST); if (store) __atomic_store_n(&store->alive, false, __ATOMIC_SEQ_CST); } /* Atomic reload request */ -__attribute__((visibility("default"))) void glava_reload(glava_handle* ref) { +__attribute__((visibility("default"))) +void glava_reload(glava_handle* ref) { glava_handle store = __atomic_exchange_n(ref, NULL, __ATOMIC_SEQ_CST); if (store) { __atomic_store_n(&reload, true, __ATOMIC_SEQ_CST); @@ -285,7 +287,8 @@ __attribute__((visibility("default"))) void glava_reload(glava_handle* ref) { /* Main entry */ -__attribute__((visibility("default"))) void glava_entry(int argc, char** argv, glava_handle* ret) { +__attribute__((visibility("default"))) +void glava_entry(int argc, char** argv, glava_handle* ret) { /* Evaluate these macros only once, since they allocate */ const char diff --git a/glava/glsl_ext.c b/glava/glsl_ext.c index 2e0c7ce..8f53d25 100644 --- a/glava/glsl_ext.c +++ b/glava/glsl_ext.c @@ -13,6 +13,7 @@ #include #include +#include "glava.h" #include "render.h" #include "glsl_ext.h" @@ -24,6 +25,7 @@ #define COLOR 5 #define DEFINE 6 #define BIND 7 +#define EXPAND 8 struct sbuf { char* buf; @@ -61,7 +63,7 @@ static void se_append(struct sbuf* sbuf, size_t elen, const char* fmt, ...) { va_start(args, fmt); int written; if ((written = vsnprintf(sbuf->buf + sbuf->at, space, fmt, args)) < 0) - abort(); + glava_abort(); sbuf->at += written; va_end(args); } @@ -69,13 +71,13 @@ static void se_append(struct sbuf* sbuf, size_t elen, const char* fmt, ...) { #define parse_error(line, f, fmt, ...) \ do { \ fprintf(stderr, "[%s:%d] " fmt "\n", f, (int) line, __VA_ARGS__); \ - abort(); \ + glava_abort(); \ } while (0) #define parse_error_s(line, f, s) \ do { \ fprintf(stderr, "[%s:%d] " s "\n", f, (int) line); \ - abort(); \ + glava_abort(); \ } while (0) struct schar { @@ -146,10 +148,11 @@ static struct schar directive(struct glsl_ext* ext, char** args, if (args_sz == 0) { parse_error_s(line, f, "No arguments provided to #define directive!"); } - size_t bsz = (strlen(args[0]) * 3) + 64; + size_t bsz = (strlen(args[0]) * 3) + 64; struct schar ret = { .buf = malloc(bsz) }; - int r = snprintf(ret.buf, bsz, "#ifdef %1$s\n#undef %1$s\n#endif\n", args[0]); - if (r < 0) abort(); + int r = snprintf(ret.buf, bsz, "#ifdef %1$s\n#undef %1$s\n#endif\n", args[0]); + if (r < 0) + glava_abort(); ret.sz = r; free_after(ext, ret.buf); return ret; @@ -180,21 +183,19 @@ static struct schar directive(struct glsl_ext* ext, char** args, snprintf(path, sizeof(path) / sizeof(char), "%s/%s", ext->cd, target); int fd = open(path, O_RDONLY); - if (fd == -1) { + if (fd == -1) parse_error(line, f, "failed to load GLSL shader source " "specified by #include directive '%s': %s\n", path, strerror(errno)); - } struct stat st; fstat(fd, &st); char* map = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0); - if (!map) { + if (!map) parse_error(line, f, "failed to map GLSL shader source " "specified by #include directive '%s': %s\n", path, strerror(errno)); - } struct glsl_ext next = { .source = map, @@ -205,7 +206,8 @@ static struct schar directive(struct glsl_ext* ext, char** args, .handlers = ext->handlers, .binds = ext->binds, .ss_lookup = ext->ss_lookup, - .ss_len = ext->ss_len + .ss_len = ext->ss_len, + .efuncs = ext->efuncs }; /* recursively process */ @@ -238,11 +240,10 @@ static struct schar directive(struct glsl_ext* ext, char** args, char c; size_t i; for (i = 0; (c = handler->fmt[i]) != '\0'; ++i) { - if (args_sz <= 1 + i) { + if (args_sz <= 1 + i) parse_error(line, f, "failed to execute request '%s': expected format '%s'\n", request, handler->fmt); - } char* raw = args[1 + i]; switch (c) { case 'i': { @@ -271,13 +272,12 @@ static struct schar directive(struct glsl_ext* ext, char** args, case '1': { v = true; break; } case '0': { v = false; break; } default: - parse_error_s(line, f, - "tried to parse invalid raw string into a boolean"); + parse_error_s(line, f, "tried to parse invalid " + "raw string into a boolean"); } - } else { - parse_error_s(line, f, - "tried to parse invalid raw string into a boolean"); - } + } else + parse_error_s(line, f, "tried to parse invalid " + "raw string into a boolean"); processed_args[i] = malloc(sizeof(bool)); *(bool*) processed_args[i] = v; break; @@ -293,11 +293,51 @@ static struct schar directive(struct glsl_ext* ext, char** args, free(processed_args); } } - if (!found) { + if (!found) parse_error(line, f, "unknown request type '%s'", request); - } } + goto return_empty; } + case EXPAND: { + if (args_sz >= 2) { + char* fmacro = args[0]; + size_t fmacro_sz = strlen(fmacro); + char* arg = args[1]; + size_t expand_n = 0; + bool match = false; + if (ext->efuncs) { + for (size_t t = 0; ext->efuncs[t].name != NULL; ++t) { + if (!strcmp(arg, ext->efuncs[t].name)) { + expand_n = ext->efuncs[t].call(); + match = true; + break; + } + } + } + + if (!match) + parse_error(line, f, "#expand directive specified invalid input \"%s\"", arg); + + /* (2 {paren} + 1 {semicolon} + 1 {newline} + 4 {input buf} + macro) * expand + 1 */ + size_t bsz = ((8 + fmacro_sz) * expand_n) + 1; + struct schar ret = { .buf = malloc(bsz) }; + int r = 0; + for (size_t t = 0; t < expand_n; ++t) { + int sr = snprintf(ret.buf + r, bsz - r, "%s(%d);\n", args[0], (int) t); + if (sr >= 0) + r += sr; + else + parse_error(line, f, "internal formatting error (snprintf returned %d)", sr); + } + ret.sz = r; + free_after(ext, ret.buf); + return ret; + } else + parse_error(line, f, "#expand directive missing arguments, " + "requires 2 identifiers (got %d)\n", (int) args_sz); + goto return_empty; + } + return_empty: default: return (struct schar) { .buf = NULL, .sz = 0 }; } } @@ -339,7 +379,7 @@ void ext_process(struct glsl_ext* ext, const char* f) { size_t args_sz = 0; bool prev_slash = false, comment = false, comment_line = false, prev_asterix = false, - prev_escape = false, string = false; + prev_escape = false, string = false, skip_color_start = false; se_append(&sbuf, 32, "#line 1 %d\n", ss_cur); @@ -406,11 +446,18 @@ void ext_process(struct glsl_ext* ext, const char* f) { goto copy; case '#': { /* handle hex color syntax */ - if (!comment && !string) { + if (!comment && !string && !skip_color_start) { + if (ext->source[t + 1] == '#') { + skip_color_start = true; + goto normal_char; + } state = COLOR; cbuf_idx = 0; continue; - } else goto normal_char; + } else { + skip_color_start = false; + goto normal_char; + } } case '@': { /* handle bind syntax */ @@ -534,7 +581,8 @@ void ext_process(struct glsl_ext* ext, const char* f) { /* To emit the default, we push back the cursor to where it starts and simply resume parsing from a normal context. */ t = b_restart; - } else parse_error(line, f, "Unexpected `--pipe` binding name '@%s' while parsing GLSL." + } else parse_error(line, f, + "Unexpected `--pipe` binding name '@%s' while parsing GLSL." " Try assigning a default or binding the value.", parsed_name); } state = GLSL; @@ -566,7 +614,8 @@ void ext_process(struct glsl_ext* ext, const char* f) { DIRECTIVE_CASE(request, REQUEST); DIRECTIVE_CASE(include, INCLUDE); DIRECTIVE_CASE(define, DEFINE); - + DIRECTIVE_CASE(expand, EXPAND); + /* no match */ if (state == MACRO) skip_macro(); #undef DIRECTIVE_CMP @@ -579,10 +628,15 @@ void ext_process(struct glsl_ext* ext, const char* f) { *args = NULL; } } + case '0' ... '9': + /* digits at the start of an identifier are not legal */ + if (macro_start_idx == t - 1) + goto macro_parse_error; case 'a' ... 'z': case 'A' ... 'Z': continue; default: + macro_parse_error: /* invalid char, malformed! */ parse_error(line, f, "Unexpected character '%c' while parsing GLSL directive", at); } @@ -598,7 +652,8 @@ void ext_process(struct glsl_ext* ext, const char* f) { } } while (0) case REQUEST: case INCLUDE: - case DEFINE: { + case DEFINE: + case EXPAND: { switch (at) { case ' ': case '\t': diff --git a/glava/glsl_ext.h b/glava/glsl_ext.h index 7ff8dd1..4f05904 100644 --- a/glava/glsl_ext.h +++ b/glava/glsl_ext.h @@ -28,18 +28,30 @@ struct request_handler { #endif }; +struct glsl_ext_efunc { + char* name; + #if defined(__clang__) + size_t (^call)(void); + #elif defined(__GNUC__) || defined(__GNUG__) + size_t (*call)(void); + #else + #error "no nested function/block syntax available" + #endif +}; + struct glsl_ext { - char* processed; /* OUT: null terminated processed source */ - size_t p_len; /* OUT: length of processed buffer, excluding null char */ - const char* source; /* IN: raw data passed via ext_process */ - size_t source_len; /* IN: raw source len */ - const char* cd; /* IN: current directory */ - const char* cfd; /* IN: config directory, if NULL it is assumed to cd */ - const char* dd; /* IN: default directory */ - struct rd_bind* binds; /* OPT IN: --pipe binds */ - void** destruct; /* internal */ - size_t destruct_sz; /* internal */ - char** ss_lookup; /* source-string lookup table */ + char* processed; /* OUT: null terminated processed source */ + size_t p_len; /* OUT: length of processed buffer, excluding null char */ + const char* source; /* IN: raw data passed via ext_process */ + size_t source_len; /* IN: raw source len */ + const char* cd; /* IN: current directory */ + const char* cfd; /* IN: config directory, if NULL it is assumed to cd */ + const char* dd; /* IN: default directory */ + struct rd_bind* binds; /* OPT IN: --pipe binds */ + struct glsl_ext_efunc* efuncs; /* OPT IN: `#expand` binds */ + void** destruct; /* internal */ + size_t destruct_sz; /* internal */ + char** ss_lookup; /* source-string lookup table */ size_t* ss_len; size_t ss_len_s; bool ss_own; diff --git a/glava/render.c b/glava/render.c index c7c7320..f589c43 100644 --- a/glava/render.c +++ b/glava/render.c @@ -32,6 +32,34 @@ typeof(bind_types) bind_types = { {} }; +/* The following macros are some black magic that allow the use of + by-reference C closures in both Clang and GCC. Their behaviour + differs slightly so please read up on both nested GCC functions + and Clang blocks if you are going to use these. */ + +#if defined(__clang__) +#define MUTABLE __block +#define INLINE(t, x) MUTABLE __auto_type x = ^t +#else +#define MUTABLE +#define INLINE(t, x) t x +#endif + +#if defined(__clang__) +static void* block_storage; +#define RHANDLER(name, args, ...) \ + ({ block_storage = ^(const char* name, void** args) __VA_ARGS__; \ + (typeof(^(const char* name, void** args) __VA_ARGS__)) block_storage; }) +#define CLOSURE(ret, ...) ({ block_storage = ^ret __VA_ARGS__; \ + (typeof(^ret __VA_ARGS__)) block_storage; }) +#elif defined(__GNUC__) || defined(__GNUG__) +#define RHANDLER(name, args, ...) \ + ({ void _handler(const char* name, void** args) __VA_ARGS__ _handler; }) +#define CLOSURE(ret, ...) ({ ret _handler __VA_ARGS__; _handler; }) +#else +#error "no nested function/block syntax available" +#endif + #define TWOPI 6.28318530718 #define PI 3.14159265359 #define swap(a, b) do { __auto_type tmp = a; a = b; b = tmp; } while (0) @@ -43,11 +71,16 @@ typeof(bind_types) bind_types = { #define IB_WORK_LEFT 4 #define IB_WORK_RIGHT 5 -/* Only a single vertex shader is needed for GLava, since all rendering is done in the fragment shader - over a fullscreen quad */ +/* Only a single vertex shader is needed, since all rendering + is done in the fragment shader over a fullscreen quad */ #define VERTEX_SHADER_SRC \ "layout(location = 0) in vec3 pos; void main() { gl_Position = vec4(pos.x, pos.y, 0.0F, 1.0F); }" +/* Should be defined from meson */ +#ifndef GLAVA_RESOURCE_PATH +#define GLAVA_RESOURCE_PATH "../resources/" +#endif + bool glad_instantiated = false; struct gl_wcb* wcbs[2] = {}; static size_t wcbs_idx = 0; @@ -68,27 +101,37 @@ struct gl_bind_src { int src_type; }; -/* function that can be applied to uniform binds */ +/* Function that can be applied to uniform binds */ struct gl_transform { const char* name; int type; void (*apply)(struct gl_data*, void**, void* data); + bool opt; /* true if the transform is a post-FFT transformation */ }; -/* data for sampler1D */ +/* Data for sampler1D */ struct gl_sampler_data { float* buf; size_t sz; }; -/* per-bind data containing the framebuffer and 1D texture to render for smoothing. */ +/* Per-bind data containing the framebuffer and 1D texture to render + for smoothing or averaging output */ struct sm_fb { GLuint fbo, tex; }; +/* Per-bind data containing the framebuffer and textures gravity output. + There are multiple output framebuffers for GLSL frame averaging */ +struct gr_fb { + struct sm_fb* out; + size_t out_sz; + size_t out_idx; +}; + /* GLSL uniform bind */ struct gl_bind { @@ -98,7 +141,9 @@ struct gl_bind { int src_type; void (**transformations)(struct gl_data*, void**, void* data); size_t t_sz; - struct sm_fb sm; + struct sm_fb sm, av, gr_store; + struct gr_fb gr; + bool optimize_fft; }; /* GL screen framebuffer object */ @@ -121,18 +166,18 @@ struct overlay_data { struct gl_data { struct gl_sfbo* stages; struct overlay_data overlay; - GLuint audio_tex_r, audio_tex_l, bg_tex, sm_prog; + GLuint audio_tex_r, audio_tex_l, bg_tex, sm_prog, av_prog, gr_prog, p_prog; size_t stages_sz, bufscale, avg_frames; void* w; struct gl_wcb* wcb; int lww, lwh, lwx, lwy; /* last window dimensions */ - int rate; /* framerate */ + int rate; /* framerate */ double tcounter; float time, timecycle; int fcounter, ucounter, kcounter; - bool print_fps, avg_window, interpolate, force_geometry, force_raised, - copy_desktop, smooth_pass, premultiply_alpha, check_fullscreen, - clickthrough, mirror_input; + bool print_fps, avg_window, interpolate, interpolate_glsl, force_geometry, + force_raised, copy_desktop, smooth_pass, premultiply_alpha, check_fullscreen, + clickthrough, mirror_input, accel_fft; void** t_data; size_t t_count; float gravity_step, target_spu, fr, ur, smooth_distance, smooth_ratio, @@ -146,8 +191,10 @@ struct gl_data { struct rd_bind* binds; GLuint bg_prog, bg_utex, bg_screen; bool bg_setup; - GLuint sm_utex, sm_usz, sm_uw; - bool sm_setup; + GLuint sm_utex, sm_usz, sm_uw, + gr_utex, gr_udiff, + p_utex; + GLuint* av_utex; bool test_mode; struct gl_sfbo off_sfbo; #ifdef GLAVA_DEBUG @@ -178,7 +225,7 @@ static GLuint shaderload(const char* rpath, size_t s_len = strlen(shader); - /* Path buffer, used for output and */ + /* Path buffer for error message mapping */ char path[raw ? 2 : strlen(rpath) + s_len + 2]; if (raw) { path[0] = '*'; @@ -186,10 +233,8 @@ static GLuint shaderload(const char* rpath, } struct stat st; int fd = -1; - if (!raw) { snprintf(path, sizeof(path) / sizeof(char), "%s/%s", shader, rpath); - fd = open(path, O_RDONLY); if (fd == -1) { fprintf(stderr, "failed to load shader '%s': %s\n", path, strerror(errno)); @@ -197,8 +242,7 @@ static GLuint shaderload(const char* rpath, } fstat(fd, &st); } - - /* open and create a copy with prepended header */ + GLint max_uniforms; glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, &max_uniforms); @@ -210,6 +254,7 @@ static GLuint shaderload(const char* rpath, const char* fmt = "uniform %s _IN_%s;\n"; + /* Construct pipe binding header (containing uniforms) */ for (struct rd_bind* bd = gl->binds; bd->name != NULL; ++bd) { size_t inc = snprintf(NULL, 0, fmt, bd->stype, bd->name); bind_header = realloc(bind_header, bh_idx + inc + 1); @@ -217,19 +262,38 @@ static GLuint shaderload(const char* rpath, bh_idx += inc; } - static const GLchar* header_fmt = - "#version %d\n" - "#define _UNIFORM_LIMIT %d\n" - "#define _PRE_SMOOTHED_AUDIO %d\n" - "#define _SMOOTH_FACTOR %.6f\n" - "#define _USE_ALPHA %d\n" - "#define _PREMULTIPLY_ALPHA %d\n" - "#define _CHANNELS %d\n" - "#define USE_STDIN %d\n" - "#if USE_STDIN == 1\n" - "uniform %s STDIN;\n" - "#endif\n" - "%s"; + /* Append to header entries with a #define for each `#expand` control */ + MUTABLE char* efmt_header = malloc(1); + MUTABLE size_t efmt_idx = 0; + INLINE(void, append_efmt)(const char* n, size_t v) { + size_t inc = snprintf(NULL, 0, "#define %s %d\n", n, (int) v); + efmt_header = realloc(efmt_header, efmt_idx + inc + 1); + snprintf(efmt_header + efmt_idx, inc + 1, "#define %s %d\n", n, (int) v); + efmt_idx += inc; + }; + + /* Create `#expand` header entry, using the above closure */ + #define EBIND(n, v) \ + ({ \ + struct glsl_ext_efunc ret = \ + { .name = n, .call = CLOSURE(size_t, (void) { return v; })}; \ + append_efmt(n, v); \ + ret; \ + }) + + struct glsl_ext_efunc efuncs[] = { + EBIND("_AVG_FRAMES", gl->avg_frames ), + EBIND("_AVG_WINDOW", (int) gl->avg_window ), + EBIND("_USE_ALPHA", 1 ), + EBIND("_PREMULTIPLY_ALPHA", gl->premultiply_alpha ? 1 : 0), + EBIND("_CHANNELS", gl->mirror_input ? 1 : 2 ), + EBIND("_UNIFORM_LIMIT", (int) max_uniforms ), + EBIND("_PRE_SMOOTHED_AUDIO", gl->smooth_pass ? 1 : 0 ), + { .name = NULL } + }; + #undef EBIND + + size_t pad = bh_idx + efmt_idx; struct glsl_ext ext = { .source = raw ? NULL : map, @@ -240,19 +304,27 @@ static GLuint shaderload(const char* rpath, .handlers = handlers, .processed = (char*) (raw ? shader : NULL), .p_len = raw ? s_len : 0, - .binds = gl->binds + .binds = gl->binds, + .efuncs = efuncs }; /* If this is raw input, skip processing */ if (!raw) ext_process(&ext, rpath); + + /* Format GLSL header with defines, pipe bindings, and expand constants. */ + static const GLchar* header_fmt = + "#version %d\n" + "#define _SMOOTH_FACTOR %.6f\n" + "#define USE_STDIN %d\n" + "#if USE_STDIN == 1\n" + "uniform %s STDIN;\n" + "#endif\n" "%s\n" "%s"; - size_t blen = strlen(header_fmt) + 64; + size_t blen = strlen(header_fmt) + 32 + pad; GLchar* buf = malloc((blen * sizeof(GLchar*)) + ext.p_len); - int written = snprintf(buf, blen, header_fmt, (int) shader_version, (int) max_uniforms, - gl->smooth_pass ? 1 : 0, (double) gl->smooth_factor, - 1, gl->premultiply_alpha ? 1 : 0, gl->mirror_input ? 1 : 2, - gl->stdin_type != STDIN_TYPE_NONE, bind_types[gl->stdin_type].n, - bind_header); + int written = snprintf(buf, blen, header_fmt, (int) shader_version, + (double) gl->smooth_factor, gl->stdin_type != STDIN_TYPE_NONE, + bind_types[gl->stdin_type].n, bind_header, efmt_header); if (written < 0) { fprintf(stderr, "snprintf() encoding error while prepending header to shader '%s'\n", path); return 0; @@ -266,11 +338,11 @@ static GLuint shaderload(const char* rpath, switch (glGetError()) { case GL_INVALID_VALUE: fprintf(stderr, "invalid value while loading shader source\n"); - abort(); //todo: remove + glava_abort(); return 0; case GL_INVALID_OPERATION: fprintf(stderr, "invalid operation while loading shader source\n"); - abort(); //todo: remove + glava_abort(); return 0; default: {} } @@ -418,11 +490,6 @@ static GLuint shaderbuild_f(struct gl_data* gl, return 0; } } else if (!strcmp(path + t + 1, "vert")) { - /* - if (!(shaders[i] = shaderload(path, GL_VERTEX_SHADER, shader_path))) { - return 0; - } - */ fprintf(stderr, "shaderbuild(): vertex shaders not allowed: %s\n", path); abort(); } else { @@ -434,7 +501,8 @@ static GLuint shaderbuild_f(struct gl_data* gl, } } /* load builtin vertex shader */ - shaders[sz] = shaderload(NULL, GL_VERTEX_SHADER, VERTEX_SHADER_SRC, NULL, NULL, handlers, shader_version, true, NULL, gl); + shaders[sz] = shaderload(NULL, GL_VERTEX_SHADER, VERTEX_SHADER_SRC, + NULL, NULL, handlers, shader_version, true, NULL, gl); fflush(stdout); return shaderlink_f(shaders); } @@ -538,12 +606,12 @@ struct err_msg { #define CODE(c) .code = c, .cname = #c static const struct err_msg err_lookup[] = { - { CODE(GL_INVALID_ENUM), .msg = "Invalid enum parameter" }, - { CODE(GL_INVALID_VALUE), .msg = "Invalid value parameter" }, - { CODE(GL_INVALID_OPERATION), .msg = "Invalid operation" }, - { CODE(GL_STACK_OVERFLOW), .msg = "Stack overflow" }, - { CODE(GL_STACK_UNDERFLOW), .msg = "Stack underflow" }, - { CODE(GL_OUT_OF_MEMORY), .msg = "Out of memory" }, + { CODE(GL_INVALID_ENUM), .msg = "Invalid enum parameter" }, + { CODE(GL_INVALID_VALUE), .msg = "Invalid value parameter" }, + { CODE(GL_INVALID_OPERATION), .msg = "Invalid operation" }, + { CODE(GL_STACK_OVERFLOW), .msg = "Stack overflow" }, + { CODE(GL_STACK_UNDERFLOW), .msg = "Stack underflow" }, + { CODE(GL_OUT_OF_MEMORY), .msg = "Out of memory" }, { CODE(GL_INVALID_FRAMEBUFFER_OPERATION), .msg = "Out of memory" }, #ifdef GL_CONTEXT_LOSS { CODE(GL_CONTEXT_LOSS), .msg = "Context loss (graphics device or driver reset?)" } @@ -557,8 +625,7 @@ static void glad_debugcb(const char* name, void *funcptr, int len_args, ...) { if (err != GL_NO_ERROR) { const char* cname = "?", * msg = "Unknown error code"; - size_t t; - for (t = 0; t < sizeof(err_lookup) / sizeof(struct err_msg); ++t) { + for (size_t t = 0; t < sizeof(err_lookup) / sizeof(struct err_msg); ++t) { if (err_lookup[t].code == err) { cname = err_lookup[t].cname; msg = err_lookup[t].msg; @@ -590,7 +657,7 @@ static struct gl_bind_src bind_sources[] = { { .name = "time", .type = BIND_FLOAT, .src_type = SRC_SCREEN } }; -#define window(t, sz) (0.53836 - (0.46164 * cos(TWOPI * (double) t / (double)(sz - 1)))) +#define window(t, sz) (0.53836 - (0.46164 * cos(TWOPI * (double) t / (double)sz))) #define ALLOC_ONCE(u, udata, sz) \ if (*udata == NULL) { \ u = calloc(sz, sizeof(typeof(*u))); \ @@ -636,7 +703,7 @@ void transform_smooth(struct gl_data* d, void** _, void* data) { /* Calculate real indexes for sampling at this position, since the distance is specified in scalar values */ int smin = (int) floor(powf(E, max(db - d->smooth_distance, 0))); - int smax = min((int) ceil(powf(E, db + d->smooth_distance)), sz - 1); + int smax = min((int) ceil(powf(E, db + d->smooth_distance)), (int) sz - 1); int count = 0; for (int s = smin; s <= smax; ++s) { if (b[s]) { @@ -656,7 +723,7 @@ void transform_gravity(struct gl_data* d, void** udata, void* data) { float* applied; ALLOC_ONCE(applied, udata, sz); - + float g = d->gravity_step * (1.0F / d->ur); for (t = 0; t < sz; ++t) { @@ -678,7 +745,8 @@ void transform_average(struct gl_data* d, void** udata, void* data) { float* bufs; ALLOC_ONCE(bufs, udata, tsz); - + + /* TODO: optimize into circle buffer */ memmove(bufs, &bufs[sz], (tsz - sz) * sizeof(float)); memcpy(&bufs[tsz - sz], b, sz * sizeof(float)); @@ -694,7 +762,7 @@ void transform_average(struct gl_data* d, void** udata, void* data) { } while (0) if (use_window) - DO_AVG(window(f, d->avg_frames)); + DO_AVG(window(f, d->avg_frames - 1)); else DO_AVG(1); @@ -711,16 +779,6 @@ void transform_wrange(struct gl_data* d, void** _, void* data) { } } -void transform_window(struct gl_data* d, void** _, void* data) { - struct gl_sampler_data* s = (struct gl_sampler_data*) data; - float* b = s->buf; - size_t sz = s->sz, t; - - for (t = 0; t < sz; ++t) { - b[t] *= window(t, sz); - } -} - void transform_fft(struct gl_data* d, void** _, void* in) { struct gl_sampler_data* s = (struct gl_sampler_data*) in; float* data = s->buf; @@ -729,7 +787,12 @@ void transform_fft(struct gl_data* d, void** _, void* in) { unsigned long n, mmax, m, j, istep, i; float wtemp, wr, wpr, wpi, wi, theta; float tempr, tempi; - + + /* apply window */ + for (i = 0; i < s->sz; ++i) { + data[i] *= window(i, s->sz - 1); + } + /* reverse-binary reindexing */ n = nn << 1; j = 1; @@ -745,7 +808,7 @@ void transform_fft(struct gl_data* d, void** _, void* in) { } j += m; }; - + /* here begins the Danielson-Lanczos section */ mmax = 2; while (n > mmax) { @@ -783,17 +846,16 @@ void transform_fft(struct gl_data* d, void** _, void* in) { } static struct gl_transform transform_functions[] = { - { .name = "window", .type = BIND_SAMPLER1D, .apply = transform_window }, - { .name = "fft", .type = BIND_SAMPLER1D, .apply = transform_fft }, - { .name = "wrange", .type = BIND_SAMPLER1D, .apply = transform_wrange }, - { .name = "avg", .type = BIND_SAMPLER1D, .apply = transform_average }, - { .name = "gravity", .type = BIND_SAMPLER1D, .apply = transform_gravity }, - { .name = "smooth", .type = BIND_SAMPLER1D, .apply = transform_smooth } + { .name = "window", .type = BIND_SAMPLER1D, .apply = NULL }, + { .name = "fft", .type = BIND_SAMPLER1D, .apply = transform_fft }, + { .name = "wrange", .type = BIND_SAMPLER1D, .apply = transform_wrange }, + { .name = "avg", .type = BIND_SAMPLER1D, .apply = NULL }, + { .name = "gravity", .type = BIND_SAMPLER1D, .apply = NULL }, + { .name = "smooth", .type = BIND_SAMPLER1D, .apply = transform_smooth } }; static struct gl_bind_src* lookup_bind_src(const char* str) { - size_t t; - for (t = 0; t < sizeof(bind_sources) / sizeof(struct gl_bind_src); ++t) { + for (size_t t = 0; t < sizeof(bind_sources) / sizeof(struct gl_bind_src); ++t) { if (!strcmp(bind_sources[t].name, str)) { return &bind_sources[t]; } @@ -801,25 +863,6 @@ static struct gl_bind_src* lookup_bind_src(const char* str) { return NULL; } -#if defined(__clang__) -#define MUTABLE __block -#define INLINE(t, x) MUTABLE __auto_type x = ^t -#else -#define MUTABLE -#define INLINE(t, x) t x -#endif - -#if defined(__clang__) -static void (^block_storage)(const char*, void**); -#define RHANDLER(name, args, ...) \ - ({ block_storage = ^(const char* name, void** args) __VA_ARGS__; block_storage; }) -#elif defined(__GNUC__) || defined(__GNUG__) -#define RHANDLER(name, args, ...) \ - ({ void _handler(const char* name, void** args) __VA_ARGS__ _handler; }) -#else -#error "no nested function/block syntax available" -#endif - struct glava_renderer* rd_new(const char** paths, const char* entry, const char** requests, const char* force_backend, struct rd_bind* bindings, int stdin_type, @@ -866,6 +909,7 @@ struct glava_renderer* rd_new(const char** paths, const char* entry, .avg_window = true, .gravity_step = 4.2, .interpolate = true, + .interpolate_glsl = false, .force_geometry = false, .force_raised = false, .smooth_factor = 0.025, @@ -873,20 +917,24 @@ struct glava_renderer* rd_new(const char** paths, const char* entry, .smooth_ratio = 4, .bg_tex = 0, .sm_prog = 0, + .av_prog = 0, + .gr_prog = 0, + .p_prog = 0, .copy_desktop = true, .premultiply_alpha = true, .mirror_input = false, + .accel_fft = true, .check_fullscreen = false, .smooth_pass = true, .fft_scale = 10.2F, .fft_cutoff = 0.3F, .geometry = { 0, 0, 500, 400 }, .clear_color = { 0.0F, 0.0F, 0.0F, 0.0F }, + .interpolate_buf = { [0] = NULL }, .clickthrough = false, .stdin_type = stdin_type, .binds = bindings, .bg_setup = false, - .sm_setup = false, .test_mode = test_mode, .off_sfbo = { .name = "test", @@ -951,7 +999,7 @@ struct glava_renderer* rd_new(const char** paths, const char* entry, if (!gl->wcb) { fprintf(stderr, "Invalid window creation backend selected: '%s'\n", backend); - abort(); + glava_abort(); } #ifdef GLAD_DEBUG @@ -1132,6 +1180,8 @@ struct glava_renderer* rd_new(const char** paths, const char* entry, .handler = RHANDLER(name, args, { r->rate_request = *(int*) args[0]; }) }, { .name = "setsamplesize", .fmt = "i", .handler = RHANDLER(name, args, { r->samplesize_request = *(int*) args[0]; }) }, + { .name = "setaccelfft", .fmt = "b", + .handler = RHANDLER(name, args, { gl->accel_fft = *(bool*) args[0]; }) }, { .name = "setavgframes", .fmt = "i", .handler = RHANDLER(name, args, { if (!loading_smooth_pass) gl->avg_frames = *(int*) args[0]; }) }, @@ -1203,6 +1253,27 @@ struct glava_renderer* rd_new(const char** paths, const char* entry, realloc(bind->transformations, bind->t_sz * sizeof(void (*)(void*))); bind->transformations[bind->t_sz - 1] = tran->apply; ++t_count; + /* Edge case (for backwards compatibility): gravity and average is implied + by fft, reserve storage pointers for these operations */ + if (!strcmp(transform_functions[t].name, "fft")) { + t_count += 2; + } + static const char* fmt = "WARNING: using \"%s\" transform explicitly " + "is deprecated; implied from \"fft\" transform.\n"; + if (!strcmp(transform_functions[t].name, "gravity")) { + static bool gravity_warn = false; + if (!gravity_warn) { + fprintf(stderr, fmt, transform_functions[t].name); + gravity_warn = true; + } + } + if (!strcmp(transform_functions[t].name, "avg")) { + static bool avg_warn = false; + if (!avg_warn) { + fprintf(stderr, fmt, transform_functions[t].name); + avg_warn = true; + } + } }) }, { .name = "uniform", .fmt = "ss", @@ -1226,7 +1297,8 @@ struct glava_renderer* rd_new(const char** paths, const char* entry, .src_type = src->src_type, .transformations = malloc(1), .t_sz = 0, - .sm = {} + .gr = { .out = NULL }, + .optimize_fft = false }; }) }, @@ -1464,7 +1536,8 @@ struct glava_renderer* rd_new(const char** paths, const char* entry, current = s; bool skip; - GLuint id = shaderbuild(gl, shaders, data, dd, handlers, shader_version, &skip, d->d_name); + GLuint id = shaderbuild(gl, shaders, data, dd, + handlers, shader_version, &skip, d->d_name); if (skip && verbose) printf("disabled: '%s'\n", d->d_name); /* check for compilation failure */ if (!id && !skip) @@ -1539,8 +1612,8 @@ struct glava_renderer* rd_new(const char** paths, const char* entry, /* Use dirct rendering on final pass */ if (final) final->indirect = false; } - - /* Compile smooth pass shader */ + + /* Compile various audio processing shaders */ { const char* util_folder = "util"; @@ -1548,11 +1621,46 @@ struct glava_renderer* rd_new(const char** paths, const char* entry, size_t usz = d_len + u_len + 2; char util[usz]; /* module pack path to use */ snprintf(util, usz, "%s/%s", data, util_folder); + + /* Compile smooth pass shader */ loading_smooth_pass = true; - if (!(gl->sm_prog = shaderbuild(gl, util, data, dd, handlers, shader_version, NULL, "smooth_pass.frag"))) - abort(); + if (!(gl->sm_prog = shaderbuild(gl, util, data, dd, handlers, shader_version, + NULL, "smooth_pass.frag"))) + glava_abort(); + gl->sm_utex = glGetUniformLocation(gl->sm_prog, "tex"); + gl->sm_usz = glGetUniformLocation(gl->sm_prog, "sz"); + gl->sm_uw = glGetUniformLocation(gl->sm_prog, "w"); + glBindFragDataLocation(gl->sm_prog, 1, "fragment"); loading_smooth_pass = false; + + if (gl->accel_fft) { + /* Compile gravity pass shader */ + if (!(gl->gr_prog = shaderbuild(gl, util, data, dd, handlers, shader_version, + NULL, "gravity_pass.frag"))) + glava_abort(); + gl->gr_utex = glGetUniformLocation(gl->gr_prog, "tex"); + gl->gr_udiff = glGetUniformLocation(gl->gr_prog, "diff"); + + /* Compile averaging shader */ + if (!(gl->av_prog = shaderbuild(gl, util, data, dd, handlers, shader_version, + NULL, "average_pass.frag"))) + glava_abort(); + char buf[6]; + gl->av_utex = malloc(sizeof(GLuint) * gl->avg_frames); + for (size_t t = 0; t < gl->avg_frames; ++t) { + snprintf(buf, sizeof(buf), "t%d", (int) t); + gl->av_utex[t] = glGetUniformLocation(gl->av_prog, buf); + } + + /* Compile pass shader (straight 1D texture map) */ + if (!(gl->p_prog = shaderbuild(gl, util, data, dd, handlers, shader_version, + NULL, "pass.frag"))) + glava_abort(); + gl->p_utex = glGetUniformLocation(gl->p_prog, "tex"); + } } + + /* Compile averaging shader */ /* target seconds per update */ gl->target_spu = (float) (r->samplesize_request / 4) / (float) r->rate_request; @@ -1572,14 +1680,11 @@ struct glava_renderer* rd_new(const char** paths, const char* entry, gl->interpolate_buf[IB_WORK_LEFT ] = &ibuf[isz * IB_WORK_LEFT ]; /* left interpolation results */ gl->interpolate_buf[IB_WORK_RIGHT ] = &ibuf[isz * IB_WORK_RIGHT ]; /* right interpolation results */ } - - { - gl->t_data = malloc(sizeof(void*) * t_count); - gl->t_count = t_count; - size_t t; - for (t = 0; t < t_count; ++t) { - gl->t_data[t] = NULL; - } + + gl->t_data = malloc(sizeof(void*) * t_count); + gl->t_count = t_count; + for (size_t t = 0; t < t_count; ++t) { + gl->t_data[t] = NULL; } overlay(&gl->overlay); @@ -1591,6 +1696,37 @@ struct glava_renderer* rd_new(const char** paths, const char* entry, return r; } +static void bind_1d_fbo(struct sm_fb* sm, size_t sz) { + if (sm->tex == 0) { + glGenTextures(1, &sm->tex); + glGenFramebuffers(1, &sm->fbo); + + /* 1D texture parameters */ + glBindTexture(GL_TEXTURE_1D, sm->tex); + glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glTexImage1D(GL_TEXTURE_1D, 0, GL_R16, sz, 0, GL_RED, GL_FLOAT, NULL); + + /* setup and bind framebuffer to texture */ + glBindFramebuffer(GL_FRAMEBUFFER, sm->fbo); + glFramebufferTexture1D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,\ + GL_TEXTURE_1D, sm->tex, 0); + + switch (glCheckFramebufferStatus(GL_FRAMEBUFFER)) { + case GL_FRAMEBUFFER_COMPLETE: break; + default: + fprintf(stderr, "error in frambuffer state\n"); + glava_abort(); + } + } else { + /* Just bind our data if it was already allocated and setup */ + glBindFramebuffer(GL_FRAMEBUFFER, sm->fbo); + glBindTexture(GL_TEXTURE_1D, sm->tex); + } +} + void rd_time(struct glava_renderer* r) { struct gl_data* gl = r->gl; @@ -1616,7 +1752,7 @@ bool rd_update(struct glava_renderer* r, float* lb, float* rb, size_t bsz, bool /* Force disable interpolation if the update rate is close to or higher than the frame rate */ float uratio = (gl->ur / gl->fr); /* update : framerate ratio */ - bool old_interpolate = gl->interpolate; + MUTABLE bool old_interpolate = gl->interpolate; gl->interpolate = uratio <= 0.9F ? old_interpolate : false; /* Perform buffer scaling */ @@ -1647,10 +1783,10 @@ bool rd_update(struct glava_renderer* r, float* lb, float* rb, size_t bsz, bool } /* Linear interpolation */ - float - * ilb = gl->interpolate_buf[IB_WORK_LEFT ], - * irb = gl->interpolate_buf[IB_WORK_RIGHT]; + float * ilb = NULL, * irb = NULL; if (gl->interpolate) { + ilb = gl->interpolate_buf[IB_WORK_LEFT ]; + irb = gl->interpolate_buf[IB_WORK_RIGHT]; for (t = 0; t < bsz; ++t) { /* Obtain start/end values at this index for left & right buffers */ float @@ -1687,7 +1823,9 @@ bool rd_update(struct glava_renderer* r, float* lb, float* rb, size_t bsz, bool } /* Resize and grab new background data if needed */ - if (gl->copy_desktop && (gl->wcb->bg_changed(gl->w) || ww != gl->lww || wh != gl->lwh || wx != gl->lwx || wy != gl->lwy)) { + if (gl->copy_desktop && (gl->wcb->bg_changed(gl->w) + || ww != gl->lww || wh != gl->lwh + || wx != gl->lwx || wy != gl->lwy)) { gl->bg_tex = xwin_copyglbg(r, gl->bg_tex); } @@ -1883,7 +2021,8 @@ bool rd_update(struct glava_renderer* r, float* lb, float* rb, size_t bsz, bool glClear(GL_COLOR_BUFFER_BIT); if (!current->indirect && gl->copy_desktop) { - /* Shader to flip texture and override alpha channel */ + /* Shader to flip texture and override alpha channel. + This is embedded since we don't need any GLSL preprocessing here */ static const char* frag_shader = "uniform sampler2D tex;" "\n" "uniform ivec2 screen;" "\n" @@ -1962,76 +2101,175 @@ bool rd_update(struct glava_renderer* r, float* lb, float* rb, size_t bsz, bool MUTABLE size_t b, c = 0; for (b = 0; b < current->binds_sz; ++b) { struct gl_bind* bind = ¤t->binds[b]; - + /* Handle transformations and bindings for 1D samplers */ - INLINE(void, handle_1d_tex)(GLuint tex, float* buf, float* ubuf, + INLINE(void, handle_audio)(GLuint tex, float* buf, float* ubuf, size_t sz, int offset, bool audio) { if (load_flags[offset]) goto bind_uniform; load_flags[offset] = true; - - /* Only apply transformations if the buffers we - were given are newly copied from PA */ + + /* Only apply transformations if the buffers we were given are newly copied */ if (modified) { - size_t t; + size_t t, tm = 0; struct gl_sampler_data d = { .buf = buf, .sz = sz }; + bool set_opt = false; /* if gl->optimize_fft was set this frame */ for (t = 0; t < bind->t_sz; ++t) { - bind->transformations[t](gl, &gl->t_data[c], &d); + void (*apply)(struct gl_data*, void**, void*) = bind->transformations[t]; + if (apply != NULL) { + if (gl->accel_fft) { + if (apply == transform_fft && !bind->optimize_fft) { + bind->optimize_fft = true; + set_opt = true; + tm = t; + } else { + /* Valid transformation after fft, no longer worth + pushing to the GPU. */ + if (bind->optimize_fft) { + transform_fft(gl, &gl->t_data[c - 1], &d); + transform_gravity(gl, &gl->t_data[c + 1], &d); + transform_average(gl, &gl->t_data[c + 2], &d); + c += 2; + bind->optimize_fft = false; + set_opt = false; + } + apply(gl, &gl->t_data[c], &d); + } + } else { + apply(gl, &gl->t_data[c], &d); + if (apply == transform_fft) { + transform_gravity(gl, &gl->t_data[c + 1], &d); + transform_average(gl, &gl->t_data[c + 2], &d); + c += 2; + } + } + } ++c; /* Index for transformation data (note: change if new transform types are added) */ } + if (set_opt) { + /* Force CPU interpolation off if we are pushing fft to the GPU, + as it requires the buffer data on system memory is updated with + transformation data (and is quite slow) */ + if (old_interpolate) + gl->interpolate_glsl = true; + old_interpolate = false; + gl->interpolate = false; + /* Minor microptimization: truncate transforms if we're optimizing + the tailing FFT transform type, since we don't actually apply + them at this point. */ + bind->t_sz = tm; + } } + + /* TODO: remove and replace with GLSL FFT */ + if (bind->optimize_fft) { + transform_fft(gl, &gl->t_data[c], + &((struct gl_sampler_data) { .buf = buf, .sz = sz } )); + } + glActiveTexture(GL_TEXTURE0 + offset); - + /* Update texture with our data */ update_1d_tex(tex, sz, gl->interpolate ? (ubuf ? ubuf : buf) : buf); - + + /* Apply audio-specific transformations in GLSL, if enabled */ + if (bind->optimize_fft) { + struct sm_fb* av = &bind->av; + struct sm_fb* gr_store = &bind->gr_store; + struct gr_fb* gr = &bind->gr; + if (modified) { + if (gr->out == NULL) { + gr->out = calloc(gl->avg_frames, sizeof(struct sm_fb)); + gr->out_sz = gl->avg_frames; + } + bind_1d_fbo(gr_store, sz); + + /* Do the gravity storage computation with GL_MAX */ + glUseProgram(gl->p_prog); + glActiveTexture(GL_TEXTURE0 + offset); + glBindTexture(GL_TEXTURE_1D, tex); + glUniform1i(gl->p_utex, offset); + if (gl->premultiply_alpha) glEnable(GL_BLEND); + glBlendEquation(GL_MAX); + glViewport(0, 0, sz, 1); + drawoverlay(&gl->overlay); + glViewport(0, 0, ww, wh); + glBlendEquation(GL_FUNC_ADD); + if (gl->premultiply_alpha) glDisable(GL_BLEND); + tex = gr_store->tex; + + /* We are using this barrier extension so we can apply + transformations in-place using a single texture buffer. + Without this, we would need to double-buffer our textures + and perform pointless copies. */ + glTextureBarrierNV(); + + /* Apply gravity */ + glUseProgram(gl->gr_prog); + glActiveTexture(GL_TEXTURE0 + offset); + glBindTexture(GL_TEXTURE_1D, tex); + glUniform1i(gl->gr_utex, offset); + glUniform1f(gl->gr_udiff, gl->gravity_step * (1.0F / gl->ur)); + if (!gl->premultiply_alpha) glDisable(GL_BLEND); + glViewport(0, 0, sz, 1); + drawoverlay(&gl->overlay); + glViewport(0, 0, ww, wh); + + if (gl->avg_frames > 1) { + + /* Write gravity buffer to output frames as if they are a + circular buffer. This prevents needless texture shifts */ + struct sm_fb* out_frame = &gr->out[gr->out_idx]; + bind_1d_fbo(out_frame, sz); + glUseProgram(gl->p_prog); + glActiveTexture(GL_TEXTURE0 + offset); + glBindTexture(GL_TEXTURE_1D, tex); + glUniform1i(gl->p_utex, offset); + glViewport(0, 0, sz, 1); + drawoverlay(&gl->overlay); + glViewport(0, 0, ww, wh); + + /* Read circular buffer into averaging shader */ + bind_1d_fbo(av, sz); + glUseProgram(gl->av_prog); + for (int t = 0; t < (int) gr->out_sz; ++t) { + GLuint c_off = offset + 1 + t; + glActiveTexture(GL_TEXTURE0 + c_off); + /* Textures are bound in descending order, such that + t0 is the most recent, and t[max - 1] is the last. */ + int fr = gr->out_idx - t; + if (fr < 0) + fr = gr->out_sz + fr; + glBindTexture(GL_TEXTURE_1D, gr->out[fr].tex); + glUniform1i(gl->av_utex[t], c_off); + } + glViewport(0, 0, sz, 1); + drawoverlay(&gl->overlay); + glViewport(0, 0, ww, wh); + ++gr->out_idx; + if (gr->out_idx >= gr->out_sz) + gr->out_idx = 0; + tex = av->tex; + } + if (!gl->premultiply_alpha) glEnable(GL_BLEND); + + } else { + /* No audio buffer update; use last average result */ + if (gl->avg_frames > 1) + tex = av->tex; + } + } + /* Apply pre-smoothing shader pass if configured */ if (audio && gl->smooth_pass) { - /* Compile preprocess shader and handle uniform locations */ - if (!gl->sm_setup) { - gl->sm_utex = glGetUniformLocation(gl->sm_prog, "tex"); - gl->sm_usz = glGetUniformLocation(gl->sm_prog, "sz"); - gl->sm_uw = glGetUniformLocation(gl->sm_prog, "w"); - glBindFragDataLocation(gl->sm_prog, 1, "fragment"); - gl->sm_setup = true; - } - /* Allocate and setup our per-bind data, if needed */ - struct sm_fb* sm = &bind->sm; - if (sm->tex == 0) { - glGenTextures(1, &sm->tex); - glGenFramebuffers(1, &sm->fbo); - - /* 1D texture parameters */ - glBindTexture(GL_TEXTURE_1D, sm->tex); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexImage1D(GL_TEXTURE_1D, 0, GL_R16, sz, 0, GL_RED, GL_FLOAT, NULL); - - /* setup and bind framebuffer to texture */ - glBindFramebuffer(GL_FRAMEBUFFER, sm->fbo); - glFramebufferTexture1D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,\ - GL_TEXTURE_1D, sm->tex, 0); - - switch (glCheckFramebufferStatus(GL_FRAMEBUFFER)) { - case GL_FRAMEBUFFER_COMPLETE: break; - default: - fprintf(stderr, "error in frambuffer state\n"); - abort(); - } - } else { - /* Just bind our data if it was already allocated and setup */ - glBindFramebuffer(GL_FRAMEBUFFER, sm->fbo); - glBindTexture(GL_TEXTURE_1D, sm->tex); - } + bind_1d_fbo(sm, sz); glUseProgram(gl->sm_prog); glActiveTexture(GL_TEXTURE0 + offset); @@ -2076,8 +2314,8 @@ bool rd_update(struct glava_renderer* r, float* lb, float* rb, size_t bsz, bool } glUniform1i(bind->uniform, 0); break; - case SRC_AUDIO_L: handle_1d_tex(gl->audio_tex_l, lb, ilb, bsz, 1, true); break; - case SRC_AUDIO_R: handle_1d_tex(gl->audio_tex_r, rb, irb, bsz, 2, true); break; + case SRC_AUDIO_L: handle_audio(gl->audio_tex_l, lb, ilb, bsz, 1, true); break; + case SRC_AUDIO_R: handle_audio(gl->audio_tex_r, rb, irb, bsz, 2, true); break; case SRC_AUDIO_SZ: glUniform1i(bind->uniform, bsz); break; case SRC_SCREEN: glUniform2i(bind->uniform, (GLint) ww, (GLint) wh); break; case SRC_TIME: glUniform1f(bind->uniform, (GLfloat) gl->time); break; @@ -2212,7 +2450,7 @@ struct gl_wcb* rd_get_wcb (struct glava_renderer* r) { return r->gl->wc void rd_destroy(struct glava_renderer* r) { r->gl->wcb->destroy(r->gl->w); - if (r->gl->interpolate) free(r->gl->interpolate_buf[0]); + if (r->gl->interpolate_buf[0]) free(r->gl->interpolate_buf[0]); size_t t, b; if (r->gl->t_data) { for (t = 0; t < r->gl->t_count; ++t) { @@ -2226,11 +2464,15 @@ void rd_destroy(struct glava_renderer* r) { for (b = 0; b < stage->binds_sz; ++b) { struct gl_bind* bind = &stage->binds[b]; free(bind->transformations); + if (bind->gr.out != NULL) + free(bind->gr.out); free((char*) bind->name); /* strdup */ } free(stage->binds); free((char*) stage->name); /* strdup */ } + if (r->gl->av_utex) + free(r->gl->av_utex); free(r->gl->stages); r->gl->wcb->terminate(); free(r->gl); diff --git a/meson.build b/meson.build index 566d58a..0a39754 100644 --- a/meson.build +++ b/meson.build @@ -14,6 +14,10 @@ if get_option('glad') endif endif +if get_option('buildtype').startswith('debug') + add_project_arguments('-DGLAVA_DEBUG', language: 'c') +endif + glava_dependencies = [ dependency('threads'), cc.find_library('pulse'), diff --git a/shaders/glava/rc.glsl b/shaders/glava/rc.glsl index 4c9ce42..a0d43ca 100644 --- a/shaders/glava/rc.glsl +++ b/shaders/glava/rc.glsl @@ -128,7 +128,7 @@ This will delay data output by one update frame, so it can desync audio with visual effects on low UPS configs. */ -#request setinterpolate true +#request setinterpolate false /* Frame limiter, set to the frames per second (FPS) desired or simply set to zero (or lower) to disable the frame limiter. */ @@ -202,6 +202,14 @@ in the application generating the output. */ #request setsamplerate 22050 +/* Enable GPU acceleration of the audio buffer's fourier transform. + This drastically reduces CPU usage, but should be avoided on + old integrated graphics hardware. + + Enabling this also enables acceleration for post-FFT processing + effects, such as gravity, averaging, windowing, and interpolation. */ +#request setaccelfft true + /* ** DEPRECATED ** Force window geometry (locking the window in place), useful for some pesky WMs that try to reposition the window when diff --git a/shaders/glava/util/average_pass.frag b/shaders/glava/util/average_pass.frag new file mode 100644 index 0000000..7bcfcec --- /dev/null +++ b/shaders/glava/util/average_pass.frag @@ -0,0 +1,37 @@ +out vec4 fragment; +in vec4 gl_FragCoord; + +#include ":util/common.glsl" + +/* + This averaging shader uses compile-time loop generation to ensure two things: + + - We can avoid requiring GL 4.3 features to dynamically index texture arrays + - We ensure no branching occurs in this shader for optimial performance. + + The alternative is requiring the GLSL compiler to determine that a loop for + texture array indexes (which must be determined at compile-time in 3.3) can be + expanded if the bounds are constant. This is somewhat vendor-specific so GLava + provides a special `#expand` macro to solve this problem in the preprocessing + stage. +*/ + +#define SAMPLER(I) uniform sampler1D t##I; +#expand SAMPLER _AVG_FRAMES + +void main() { + float r = 0; + #define _AVG_WINDOW 0 + #if _AVG_WINDOW == 0 + #define F(I) r += texelFetch(t##I, int(gl_FragCoord.x), 0).r + #else + #define F(I) r += window(I, _AVG_FRAMES - 1) * texelFetch(t##I, int(gl_FragCoord.x), 0).r + #endif + #expand F _AVG_FRAMES + /* For some reason the CPU implementation of gravity/average produces the same output but + with half the amplitude. I can't figure it out right now, so I'm just halfing the results + here to ensure they are uniform. + + TODO: fix this */ + fragment.r = (r / _AVG_FRAMES) / 2; +} diff --git a/shaders/glava/util/common.glsl b/shaders/glava/util/common.glsl new file mode 100644 index 0000000..1d01f77 --- /dev/null +++ b/shaders/glava/util/common.glsl @@ -0,0 +1,21 @@ +#ifndef _COMMON_GLSL +#define _COMMON_GLSL + +#ifndef TWOPI +#define TWOPI 6.28318530718 +#endif + +#ifndef PI +#define PI 3.14159265359 +#endif + +/* Window value t that resides in range [0, sz] */ +#define window(t, sz) (0.53836 - (0.46164 * cos(TWOPI * t / sz))) +/* Do nothing (used as an option for configuration) */ +#define linear(x) (x) +/* Take value x that scales linearly between [0, 1) and return its sinusoidal curve */ +#define sinusoidal(x) ((0.5 * sin((PI * (x)) - (PI / 2))) + 0.5) +/* Take value x that scales linearly between [0, 1) and return its circlar curve */ +#define circular(x) sqrt(1 - (((x) - 1) * ((x) - 1))) + +#endif diff --git a/shaders/glava/util/gravity_pass.frag b/shaders/glava/util/gravity_pass.frag new file mode 100644 index 0000000..177e127 --- /dev/null +++ b/shaders/glava/util/gravity_pass.frag @@ -0,0 +1,9 @@ +uniform sampler1D tex; +uniform float diff; + +out vec4 fragment; +in vec4 gl_FragCoord; + +void main() { + fragment.r = texelFetch(tex, int(gl_FragCoord.x), 0).r - diff; +} diff --git a/shaders/glava/util/smooth.glsl b/shaders/glava/util/smooth.glsl index 8029d59..1df26e5 100644 --- a/shaders/glava/util/smooth.glsl +++ b/shaders/glava/util/smooth.glsl @@ -1,27 +1,11 @@ - -#ifndef _SMOOTH_GLSL /* include gaurd */ + #ifndef _SMOOTH_GLSL #define _SMOOTH_GLSL -#ifndef TWOPI -#define TWOPI 6.28318530718 -#endif - -#ifndef PI -#define PI 3.14159265359 -#endif +#include ":util/common.glsl" #include "@smooth_parameters.glsl" #include ":smooth_parameters.glsl" -/* window value t that resides in range [0, sz)*/ -#define window(t, sz) (0.53836 - (0.46164 * cos(TWOPI * t / (sz - 1)))) -/* this does nothing, but we keep it as an option for config */ -#define linear(x) (x) -/* take value x that scales linearly between [0, 1) and return its sinusoidal curve */ -#define sinusoidal(x) ((0.5 * sin((PI * (x)) - (PI / 2))) + 0.5) -/* take value x that scales linearly between [0, 1) and return its circlar curve */ -#define circular(x) sqrt(1 - (((x) - 1) * ((x) - 1))) - #define average 0 #define maximum 1 #define hybrid 2