summaryrefslogtreecommitdiff
path: root/src/opengl
diff options
context:
space:
mode:
Diffstat (limited to 'src/opengl')
-rw-r--r--src/opengl/CMakeLists.txt21
-rw-r--r--src/opengl/bind.h1818
-rw-r--r--src/opengl/bind/a3
-rw-r--r--src/opengl/bind/a.bind26
-rw-r--r--src/opengl/bind/b35
-rw-r--r--src/opengl/bind/b.bind350
-rw-r--r--src/opengl/bind/c31
-rw-r--r--src/opengl/bind/c.bind354
-rw-r--r--src/opengl/bind/d36
-rw-r--r--src/opengl/bind/d.bind331
-rw-r--r--src/opengl/bind/e7
-rw-r--r--src/opengl/bind/e.bind57
-rw-r--r--src/opengl/bind/f11
-rw-r--r--src/opengl/bind/f.bind115
-rw-r--r--src/opengl/bind/g88
-rw-r--r--src/opengl/bind/g.bind910
-rw-r--r--src/opengl/bind/h1
-rw-r--r--src/opengl/bind/h.bind9
-rw-r--r--src/opengl/bind/i14
-rw-r--r--src/opengl/bind/i.bind127
-rw-r--r--src/opengl/bind/l4
-rw-r--r--src/opengl/bind/l.bind24
-rw-r--r--src/opengl/bind/m7
-rw-r--r--src/opengl/bind/m.bind66
-rw-r--r--src/opengl/bind/p50
-rw-r--r--src/opengl/bind/p.bind521
-rw-r--r--src/opengl/bind/q1
-rw-r--r--src/opengl/bind/q.bind9
-rw-r--r--src/opengl/bind/r6
-rw-r--r--src/opengl/bind/r.bind61
-rw-r--r--src/opengl/bind/s21
-rw-r--r--src/opengl/bind/s.bind202
-rw-r--r--src/opengl/bind/sigs445
-rw-r--r--src/opengl/bind/t16
-rw-r--r--src/opengl/bind/t.bind204
-rw-r--r--src/opengl/bind/u37
-rw-r--r--src/opengl/bind/u.bind382
-rw-r--r--src/opengl/bind/v76
-rw-r--r--src/opengl/bind/v.bind742
-rw-r--r--src/opengl/bind/w1
-rw-r--r--src/opengl/bind/w.bind10
-rw-r--r--src/opengl/data.c164
-rw-r--r--src/opengl/data.test.c216
-rw-r--r--src/opengl/drawing.c127
-rw-r--r--src/opengl/gl.c112
-rw-r--r--src/opengl/gl.h14
-rw-r--r--src/opengl/gl.test.c237
-rw-r--r--src/opengl/glad/CMakeLists.txt9
-rw-r--r--src/opengl/glad/include/KHR/khrplatform.h311
-rw-r--r--src/opengl/glad/include/glad/glad.h4133
-rw-r--r--src/opengl/glad/src/glad.c2121
-rw-r--r--src/opengl/notes.md10
-rw-r--r--src/opengl/setup.c23
-rw-r--r--src/opengl/shader.c201
-rw-r--r--src/opengl/texture.c131
-rw-r--r--src/opengl/window.c369
-rw-r--r--src/opengl/window.test.c24
57 files changed, 15431 insertions, 0 deletions
diff --git a/src/opengl/CMakeLists.txt b/src/opengl/CMakeLists.txt
new file mode 100644
index 0000000..4328596
--- /dev/null
+++ b/src/opengl/CMakeLists.txt
@@ -0,0 +1,21 @@
+project(honey_engine)
+
+set (GL ${CMAKE_CURRENT_LIST_DIR})
+
+target_sources(honey PUBLIC
+ ${GL}/data.c
+ ${GL}/drawing.c
+ ${GL}/shader.c
+ ${GL}/window.c
+ ${GL}/texture.c
+ ${GL}/gl.c
+)
+
+
+target_sources(test PUBLIC
+ ${GL}/gl.test.c
+ ${GL}/window.test.c
+)
+
+
+add_subdirectory(glad)
diff --git a/src/opengl/bind.h b/src/opengl/bind.h
new file mode 100644
index 0000000..7b0f265
--- /dev/null
+++ b/src/opengl/bind.h
@@ -0,0 +1,1818 @@
+#ifndef HONEY_GL_H
+#define HONEY_GL_H
+
+#include <lua.h>
+
+#define GL_FUNCTIONS \
+ X("ActiveShaderProgram", glActiveShaderProgram_bind) \
+ X("ActiveTexture", glActiveTexture_bind) \
+ X("AttachShader", glAttachShader_bind) \
+ X("BeginConditionalRender", glBeginConditionalRender_bind) \
+ X("BeginQuery", glBeginQuery_bind) \
+ X("BeginQuery", glBeginQuery_bind) \
+ X("BeginTransformFeedback", glBeginTransformFeedback_bind) \
+ X("BindAttribLocation", glBindAttribLocation_bind) \
+ X("BindBuffer", glBindBuffer_bind) \
+ X("BindBufferBase", glBindBufferBase_bind) \
+ X("BindBufferRange", glBindBufferRange_bind) \
+ X("BindFragDataLocation", glBindFragDataLocation_bind) \
+ X("BindFragDataLocationIndexed", glBindFragDataLocationIndexed_bind) \
+ X("BindFramebuffer", glBindFramebuffer_bind) \
+ X("BindImageTexture", glBindImageTexture_bind) \
+ X("BindProgramPipeline", glBindProgramPipeline_bind) \
+ X("BindRenderbuffer", glBindRenderbuffer_bind) \
+ X("BindSampler", glBindSampler_bind) \
+ X("BindTexture", glBindTexture_bind) \
+ X("BindTextureUnit", glBindTextureUnit_bind) \
+ X("BindTransformFeedback", glBindTransformFeedback_bind) \
+ X("BindVertexArray", glBindVertexArray_bind) \
+ X("BindVertexBuffer", glBindVertexBuffer_bind) \
+ X("BlendColor", glBlendColor_bind) \
+ X("BlendEquation", glBlendEquation_bind) \
+ X("BlendEquationi", glBlendEquationi_bind) \
+ X("BlendEquationSeparate", glBlendEquationSeparate_bind) \
+ X("BlendEquationSeparatei", glBlendEquationSeparatei_bind) \
+ X("BlendFunc", glBlendFunc_bind) \
+ X("BlendFunci", glBlendFunci_bind) \
+ X("BlendFuncSeparate", glBlendFuncSeparate_bind) \
+ X("BlendFuncSeparatei", glBlendFuncSeparatei_bind) \
+ X("BlitFramebuffer", glBlitFramebuffer_bind) \
+ X("BlitNamedFramebuffer", glBlitNamedFramebuffer_bind) \
+ X("BufferData", glBufferData_bind) \
+ X("BufferStorage", glBufferStorage_bind) \
+ X("BufferSubData", glBufferSubData_bind) \
+ X("CheckFramebufferStatus", glCheckFramebufferStatus_bind) \
+ X("CheckNamedFramebufferStatus", glCheckNamedFramebufferStatus_bind) \
+ X("ClampColor", glClampColor_bind) \
+ X("Clear", glClear_bind) \
+ X("ClearBufferiv", glClearBufferiv_bind) \
+ X("ClearBufferuiv", glClearBufferuiv_bind) \
+ X("ClearBufferfv", glClearBufferfv_bind) \
+ X("ClearBufferfi", glClearBufferfi_bind) \
+ X("ClearStencil", glClearStencil_bind) \
+ X("ClientWaitSync", glClientWaitSync_bind) \
+ X("ColorMask", glColorMask_bind) \
+ X("ColorMaski", glColorMaski_bind) \
+ X("CompileShader", glCompileShader_bind) \
+ X("CompressedTexImage1D", glCompressedTexImage1D_bind) \
+ X("CompressedTexImage2D", glCompressedTexImage2D_bind) \
+ X("CompressedTexImage3D", glCompressedTexImage3D_bind) \
+ X("CompressedTexSubImage1D", glCompressedTexSubImage1D_bind) \
+ X("CompressedTexSubImage2D", glCompressedTexSubImage2D_bind) \
+ X("CompressedTexSubImage3D", glCompressedTexSubImage3D_bind) \
+ X("CopyBufferSubData", glCopyBufferSubData_bind) \
+ X("CopyBufferSubData", glCopyBufferSubData_bind) \
+ X("CopyTexImage1D", glCopyTexImage1D_bind) \
+ X("CopyTexImage2D", glCopyTexImage2D_bind) \
+ X("CopyTexSubImage1D", glCopyTexSubImage1D_bind) \
+ X("CopyTexSubImage2D", glCopyTexSubImage2D_bind) \
+ X("CopyTexSubImage3D", glCopyTexSubImage3D_bind) \
+ X("CreateProgram", glCreateProgram_bind) \
+ X("CreateShader", glCreateShader_bind) \
+ X("CreateShaderProgramv", glCreateShaderProgramv_bind) \
+ X("CullFace", glCullFace_bind) \
+ X("DeleteBuffers", glDeleteBuffers_bind) \
+ X("DeleteFramebuffers", glDeleteFramebuffers_bind) \
+ X("DeleteProgram", glDeleteProgram_bind) \
+ X("DeleteProgramPipelines", glDeleteProgramPipelines_bind) \
+ X("DeleteQueries", glDeleteQueries_bind) \
+ X("DeleteRenderbuffers", glDeleteRenderbuffers_bind) \
+ X("DeleteSamplers", glDeleteSamplers_bind) \
+ X("DeleteShader", glDeleteShader_bind) \
+ X("DeleteSync", glDeleteSync_bind) \
+ X("DeleteTextures", glDeleteTextures_bind) \
+ X("DeleteTransformFeedbacks", glDeleteTransformFeedbacks_bind) \
+ X("DeleteVertexArrays", glDeleteVertexArrays_bind) \
+ X("DepthFunc", glDepthFunc_bind) \
+ X("DepthMask", glDepthMask_bind) \
+ X("DepthRange", glDepthRange_bind) \
+ X("DepthRangef", glDepthRangef_bind) \
+ X("DepthRangeArrayv", glDepthRangeArrayv_bind) \
+ X("DepthRangeIndexed", glDepthRangeIndexed_bind) \
+ X("DetachShader", glDetachShader_bind) \
+ X("Disable", glDisable_bind) \
+ X("Disablei", glDisablei_bind) \
+ X("DisableVertexAttribArray", glDisableVertexAttribArray_bind) \
+ X("DrawArrays", glDrawArrays_bind) \
+ X("DrawArraysIndirect", glDrawArraysIndirect_bind) \
+ X("DrawArraysInstanced", glDrawArraysInstanced_bind) \
+ X("DrawBuffer", glDrawBuffer_bind) \
+ X("DrawBuffers", glDrawBuffers_bind) \
+ X("DrawElements", glDrawElements_bind) \
+ X("DrawElementsBaseVertex", glDrawElementsBaseVertex_bind) \
+ X("DrawElementsIndirect", glDrawElementsIndirect_bind) \
+ X("DrawElementsInstanced", glDrawElementsInstanced_bind) \
+ X("DrawRangeElements", glDrawRangeElements_bind) \
+ X("DrawRangeElementsBaseVertex", glDrawRangeElementsBaseVertex_bind) \
+ X("DrawTransformFeedback", glDrawTransformFeedback_bind) \
+ X("DrawTransformFeedbackStream", glDrawTransformFeedbackStream_bind) \
+ X("Enable", glEnable_bind) \
+ X("Enablei", glEnablei_bind) \
+ X("EnableVertexAttribArray", glEnableVertexAttribArray_bind) \
+ X("EndConditionalRender", glEndConditionalRender_bind) \
+ X("EndQuery", glEndQuery_bind) \
+ X("EndQueryIndexed", glEndQueryIndexed_bind) \
+ X("EndTransformFeedback", glEndTransformFeedback_bind) \
+ X("FenceSync", glFenceSync_bind) \
+ X("Finish", glFinish_bind) \
+ X("Flush", glFlush_bind) \
+ X("FlushMappedBufferRange", glFlushMappedBufferRange_bind) \
+ X("FramebufferRenderbuffer", glFramebufferRenderbuffer_bind) \
+ X("FramebufferTexture", glFramebufferTexture_bind) \
+ X("FramebufferTexture1D", glFramebufferTexture1D_bind) \
+ X("FramebufferTexture2D", glFramebufferTexture2D_bind) \
+ X("FramebufferTexture3D", glFramebufferTexture3D_bind) \
+ X("FramebufferTextureLayer", glFramebufferTextureLayer_bind) \
+ X("FrontFace", glFrontFace_bind) \
+ X("GenBuffers", glGenBuffers_bind) \
+ X("GenerateMipmap", glGenerateMipmap_bind) \
+ X("GenFramebuffers", glGenFramebuffers_bind) \
+ X("GenProgramPipelines", glGenProgramPipelines_bind) \
+ X("GenQueries", glGenQueries_bind) \
+ X("GenRenderbuffers", glGenRenderbuffers_bind) \
+ X("GenSamplers", glGenSamplers_bind) \
+ X("GenTextures", glGenTextures_bind) \
+ X("GenTransformFeedbacks", glGenTransformFeedbacks_bind) \
+ X("GenVertexArrays", glGenVertexArrays_bind) \
+ X("GetBooleanv", glGetBooleanv_bind) \
+ X("GetDoublev", glGetDoublev_bind) \
+ X("GetFloatv", glGetFloatv_bind) \
+ X("GetIntegerv", glGetIntegerv_bind) \
+ X("GetInteger64v", glGetInteger64v_bind) \
+ X("GetBooleani_v", glGetBooleani_v_bind) \
+ X("GetIntegeri_v", glGetIntegeri_v_bind) \
+ X("GetFloati_v", glGetFloati_v_bind) \
+ X("GetDoublei_v", glGetDoublei_v_bind) \
+ X("GetInteger64i_v", glGetInteger64i_v_bind) \
+ X("GetActiveAttrib", glGetActiveAttrib_bind) \
+ X("GetActiveSubroutineName", glGetActiveSubroutineName_bind) \
+ X("GetActiveSubroutineUniformiv", glGetActiveSubroutineUniformiv_bind) \
+ X("GetActiveSubroutineUniformName", glGetActiveSubroutineUniformName_bind) \
+ X("GetActiveUniform", glGetActiveUniform_bind) \
+ X("GetActiveUniformBlockiv", glGetActiveUniformBlockiv_bind) \
+ X("GetActiveUniformBlockName", glGetActiveUniformBlockName_bind) \
+ X("GetActiveUniformName", glGetActiveUniformName_bind) \
+ X("GetActiveUniformsiv", glGetActiveUniformsiv_bind) \
+ X("GetAttachedShaders", glGetAttachedShaders_bind) \
+ X("GetAttribLocation", glGetAttribLocation_bind) \
+ X("GetBufferParameteriv", glGetBufferParameteriv_bind) \
+ X("GetBufferParameteri64v", glGetBufferParameteri64v_bind) \
+ X("GetBufferPointerv", glGetBufferPointerv_bind) \
+ X("GetBufferSubData", glGetBufferSubData_bind) \
+ X("GetCompressedTexImage", glGetCompressedTexImage_bind) \
+ X("GetError", glGetError_bind) \
+ X("GetFragDataIndex", glGetFragDataIndex_bind) \
+ X("GetFragDataLocation", glGetFragDataLocation_bind) \
+ X("GetFramebufferAttachmentParameteriv", glGetFramebufferAttachmentParameteriv_bind) \
+ X("GetMultisamplefv", glGetMultisamplefv_bind) \
+ X("GetUniformfv", glGetUniformfv_bind) \
+ X("GetUniformiv", glGetUniformiv_bind) \
+ X("GetUniformuiv", glGetUniformuiv_bind) \
+ X("GetUniformdv", glGetUniformdv_bind) \
+ X("GetProgramiv", glGetProgramiv_bind) \
+ X("GetProgramBinary", glGetProgramBinary_bind) \
+ X("GetProgramInfoLog", glGetProgramInfoLog_bind) \
+ X("GetProgramPipelineiv", glGetProgramPipelineiv_bind) \
+ X("GetProgramPipelineInfoLog", glGetProgramPipelineInfoLog_bind) \
+ X("GetProgramPipelineiv", glGetProgramPipelineiv_bind) \
+ X("GetProgramStageiv", glGetProgramStageiv_bind) \
+ X("GetQueryIndexediv", glGetQueryIndexediv_bind) \
+ X("GetQueryiv", glGetQueryiv_bind) \
+ X("GetRenderbufferParameteriv", glGetRenderbufferParameteriv_bind) \
+ X("GetSamplerParameterfv", glGetSamplerParameterfv_bind) \
+ X("GetSamplerParameteriv", glGetSamplerParameteriv_bind) \
+ X("GetSamplerParameterIiv", glGetSamplerParameterIiv_bind) \
+ X("GetSamplerParameterIuiv", glGetSamplerParameterIuiv_bind) \
+ X("GetShaderiv", glGetShaderiv_bind) \
+ X("GetShaderInfoLog", glGetShaderInfoLog_bind) \
+ X("GetShaderiv", glGetShaderiv_bind) \
+ X("GetShaderPrecisionFormat", glGetShaderPrecisionFormat_bind) \
+ X("GetShaderSource", glGetShaderSource_bind) \
+ X("GetString", glGetString_bind) \
+ X("GetStringi", glGetStringi_bind) \
+ X("GetSubroutineIndex", glGetSubroutineIndex_bind) \
+ X("GetSubroutineUniformLocation", glGetSubroutineUniformLocation_bind) \
+ X("GetSynciv", glGetSynciv_bind) \
+ X("GetTexImage", glGetTexImage_bind) \
+ X("GetTexLevelParameterfv", glGetTexLevelParameterfv_bind) \
+ X("GetTexLevelParameteriv", glGetTexLevelParameteriv_bind) \
+ X("GetTexParameterfv", glGetTexParameterfv_bind) \
+ X("GetTexParameteriv", glGetTexParameteriv_bind) \
+ X("GetTexParameterIiv", glGetTexParameterIiv_bind) \
+ X("GetTexParameterIuiv", glGetTexParameterIuiv_bind) \
+ X("GetTransformFeedbackVarying", glGetTransformFeedbackVarying_bind) \
+ X("GetUniformBlockIndex", glGetUniformBlockIndex_bind) \
+ X("GetUniformIndices", glGetUniformIndices_bind) \
+ X("GetUniformLocation", glGetUniformLocation_bind) \
+ X("GetUniformSubroutineuiv", glGetUniformSubroutineuiv_bind) \
+ X("GetVertexAttribdv", glGetVertexAttribdv_bind) \
+ X("GetVertexAttribfv", glGetVertexAttribfv_bind) \
+ X("GetVertexAttribiv", glGetVertexAttribiv_bind) \
+ X("GetVertexAttribIiv", glGetVertexAttribIiv_bind) \
+ X("GetVertexAttribIuiv", glGetVertexAttribIuiv_bind) \
+ X("GetVertexAttribLdv", glGetVertexAttribLdv_bind) \
+ X("GetVertexAttribPointerv", glGetVertexAttribPointerv_bind) \
+ X("Hint", glHint_bind) \
+ X("IsBuffer", glIsBuffer_bind) \
+ X("IsEnabled", glIsEnabled_bind) \
+ X("IsEnabledi", glIsEnabledi_bind) \
+ X("IsFramebuffer", glIsFramebuffer_bind) \
+ X("IsProgram", glIsProgram_bind) \
+ X("IsProgramPipeline", glIsProgramPipeline_bind) \
+ X("IsQuery", glIsQuery_bind) \
+ X("IsRenderbuffer", glIsRenderbuffer_bind) \
+ X("IsSampler", glIsSampler_bind) \
+ X("IsShader", glIsShader_bind) \
+ X("IsSync", glIsSync_bind) \
+ X("IsTexture", glIsTexture_bind) \
+ X("IsTransformFeedback", glIsTransformFeedback_bind) \
+ X("IsVertexArray", glIsVertexArray_bind) \
+ X("LineWidth", glLineWidth_bind) \
+ X("LinkProgram", glLinkProgram_bind) \
+ X("LogicOp", glLogicOp_bind) \
+ X("MapBuffer", glMapBuffer_bind) \
+ X("MapBufferRange", glMapBufferRange_bind) \
+ X("MinSampleShading", glMinSampleShading_bind) \
+ X("MultiDrawArrays", glMultiDrawArrays_bind) \
+ X("MultiDrawElements", glMultiDrawElements_bind) \
+ X("MultiDrawElementsBaseVertex", glMultiDrawElementsBaseVertex_bind) \
+ X("PatchParameteri", glPatchParameteri_bind) \
+ X("PatchParameterfv", glPatchParameterfv_bind) \
+ X("PauseTransformFeedback", glPauseTransformFeedback_bind) \
+ X("PixelStoref", glPixelStoref_bind) \
+ X("PixelStorei", glPixelStorei_bind) \
+ X("PointParameterf", glPointParameterf_bind) \
+ X("PointParameteri", glPointParameteri_bind) \
+ X("PointParameterfv", glPointParameterfv_bind) \
+ X("PointParameteriv", glPointParameteriv_bind) \
+ X("PointSize", glPointSize_bind) \
+ X("PolygonMode", glPolygonMode_bind) \
+ X("PolygonOffset", glPolygonOffset_bind) \
+ X("PrimitiveRestartIndex", glPrimitiveRestartIndex_bind) \
+ X("ProgramBinary", glProgramBinary_bind) \
+ X("ProgramParameteri", glProgramParameteri_bind) \
+ X("ProgramUniform1f", glProgramUniform1f_bind) \
+ X("ProgramUniform2f", glProgramUniform2f_bind) \
+ X("ProgramUniform3f", glProgramUniform3f_bind) \
+ X("ProgramUniform4f", glProgramUniform4f_bind) \
+ X("ProgramUniform1i", glProgramUniform1i_bind) \
+ X("ProgramUniform2i", glProgramUniform2i_bind) \
+ X("ProgramUniform3i", glProgramUniform3i_bind) \
+ X("ProgramUniform4i", glProgramUniform4i_bind) \
+ X("ProgramUniform1ui", glProgramUniform1ui_bind) \
+ X("ProgramUniform2ui", glProgramUniform2ui_bind) \
+ X("ProgramUniform3ui", glProgramUniform3ui_bind) \
+ X("ProgramUniform4ui", glProgramUniform4ui_bind) \
+ X("ProgramUniform1fv", glProgramUniform1fv_bind) \
+ X("ProgramUniform2fv", glProgramUniform2fv_bind) \
+ X("ProgramUniform3fv", glProgramUniform3fv_bind) \
+ X("ProgramUniform4fv", glProgramUniform4fv_bind) \
+ X("ProgramUniform1iv", glProgramUniform1iv_bind) \
+ X("ProgramUniform2iv", glProgramUniform2iv_bind) \
+ X("ProgramUniform3iv", glProgramUniform3iv_bind) \
+ X("ProgramUniform4iv", glProgramUniform4iv_bind) \
+ X("ProgramUniform1uiv", glProgramUniform1uiv_bind) \
+ X("ProgramUniform2uiv", glProgramUniform2uiv_bind) \
+ X("ProgramUniform3uiv", glProgramUniform3uiv_bind) \
+ X("ProgramUniform4uiv", glProgramUniform4uiv_bind) \
+ X("ProgramUniformMatrix2fv", glProgramUniformMatrix2fv_bind) \
+ X("ProgramUniformMatrix3fv", glProgramUniformMatrix3fv_bind) \
+ X("ProgramUniformMatrix4fv", glProgramUniformMatrix4fv_bind) \
+ X("ProgramUniformMatrix2x3fv", glProgramUniformMatrix2x3fv_bind) \
+ X("ProgramUniformMatrix3x2fv", glProgramUniformMatrix3x2fv_bind) \
+ X("ProgramUniformMatrix2x4fv", glProgramUniformMatrix2x4fv_bind) \
+ X("ProgramUniformMatrix4x2fv", glProgramUniformMatrix4x2fv_bind) \
+ X("ProgramUniformMatrix3x4fv", glProgramUniformMatrix3x4fv_bind) \
+ X("ProgramUniformMatrix4x3fv", glProgramUniformMatrix4x3fv_bind) \
+ X("ProvokingVertex", glProvokingVertex_bind) \
+ X("QueryCounter", glQueryCounter_bind) \
+ X("ReadBuffer", glReadBuffer_bind) \
+ X("ReadPixels", glReadPixels_bind) \
+ X("ReleaseShaderCompiler", glReleaseShaderCompiler_bind) \
+ X("RenderbufferStorage", glRenderbufferStorage_bind) \
+ X("RenderbufferStorageMultisample", glRenderbufferStorageMultisample_bind) \
+ X("ResumeTransformFeedback", glResumeTransformFeedback_bind) \
+ X("SampleCoverage", glSampleCoverage_bind) \
+ X("SampleMaski", glSampleMaski_bind) \
+ X("SamplerParameterf", glSamplerParameterf_bind) \
+ X("SamplerParameteri", glSamplerParameteri_bind) \
+ X("SamplerParameterfv", glSamplerParameterfv_bind) \
+ X("SamplerParameteriv", glSamplerParameteriv_bind) \
+ X("SamplerParameterIiv", glSamplerParameterIiv_bind) \
+ X("SamplerParameterIuiv", glSamplerParameterIuiv_bind) \
+ X("Scissor", glScissor_bind) \
+ X("ScissorArrayv", glScissorArrayv_bind) \
+ X("ScissorIndexed", glScissorIndexed_bind) \
+ X("ScissorIndexedv", glScissorIndexedv_bind) \
+ X("ShaderBinary", glShaderBinary_bind) \
+ X("ShaderSource", glShaderSource_bind) \
+ X("StencilFunc", glStencilFunc_bind) \
+ X("StencilFuncSeparate", glStencilFuncSeparate_bind) \
+ X("StencilMask", glStencilMask_bind) \
+ X("StencilMaskSeparate", glStencilMaskSeparate_bind) \
+ X("StencilOp", glStencilOp_bind) \
+ X("StencilOpSeparate", glStencilOpSeparate_bind) \
+ X("TexBuffer", glTexBuffer_bind) \
+ X("TexImage1D", glTexImage1D_bind) \
+ X("TexImage2D", glTexImage2D_bind) \
+ X("TexImage2DMultisample", glTexImage2DMultisample_bind) \
+ X("TexImage3D", glTexImage3D_bind) \
+ X("TexImage3DMultisample", glTexImage3DMultisample_bind) \
+ X("TexParameterf", glTexParameterf_bind) \
+ X("TexParameteri", glTexParameteri_bind) \
+ X("TexParameterfv", glTexParameterfv_bind) \
+ X("TexParameteriv", glTexParameteriv_bind) \
+ X("TexParameterIiv", glTexParameterIiv_bind) \
+ X("TexParameterIuiv", glTexParameterIuiv_bind) \
+ X("TexSubImage1D", glTexSubImage1D_bind) \
+ X("TexSubImage2D", glTexSubImage2D_bind) \
+ X("TexSubImage3D", glTexSubImage3D_bind) \
+ X("TransformFeedbackVaryings", glTransformFeedbackVaryings_bind) \
+ X("Uniform1f", glUniform1f_bind) \
+ X("Uniform2f", glUniform2f_bind) \
+ X("Uniform3f", glUniform3f_bind) \
+ X("Uniform4f", glUniform4f_bind) \
+ X("Uniform1i", glUniform1i_bind) \
+ X("Uniform2i", glUniform2i_bind) \
+ X("Uniform3i", glUniform3i_bind) \
+ X("Uniform4i", glUniform4i_bind) \
+ X("Uniform1ui", glUniform1ui_bind) \
+ X("Uniform2ui", glUniform2ui_bind) \
+ X("Uniform3ui", glUniform3ui_bind) \
+ X("Uniform4ui", glUniform4ui_bind) \
+ X("Uniform1fv", glUniform1fv_bind) \
+ X("Uniform2fv", glUniform2fv_bind) \
+ X("Uniform3fv", glUniform3fv_bind) \
+ X("Uniform4fv", glUniform4fv_bind) \
+ X("Uniform1iv", glUniform1iv_bind) \
+ X("Uniform2iv", glUniform2iv_bind) \
+ X("Uniform3iv", glUniform3iv_bind) \
+ X("Uniform4iv", glUniform4iv_bind) \
+ X("Uniform1uiv", glUniform1uiv_bind) \
+ X("Uniform2uiv", glUniform2uiv_bind) \
+ X("Uniform3uiv", glUniform3uiv_bind) \
+ X("Uniform4uiv", glUniform4uiv_bind) \
+ X("UniformMatrix2fv", glUniformMatrix2fv_bind) \
+ X("UniformMatrix3fv", glUniformMatrix3fv_bind) \
+ X("UniformMatrix4fv", glUniformMatrix4fv_bind) \
+ X("UniformMatrix2x3fv", glUniformMatrix2x3fv_bind) \
+ X("UniformMatrix3x2fv", glUniformMatrix3x2fv_bind) \
+ X("UniformMatrix2x4fv", glUniformMatrix2x4fv_bind) \
+ X("UniformMatrix4x2fv", glUniformMatrix4x2fv_bind) \
+ X("UniformMatrix3x4fv", glUniformMatrix3x4fv_bind) \
+ X("UniformMatrix4x3fv", glUniformMatrix4x3fv_bind) \
+ X("UniformSubroutinesuiv", glUniformSubroutinesuiv_bind) \
+ X("UnmapBuffer", glUnmapBuffer_bind) \
+ X("UseProgram", glUseProgram_bind) \
+ X("UseProgramStages", glUseProgramStages_bind) \
+ X("ValidateProgram", glValidateProgram_bind) \
+ X("ValidateProgramPipeline", glValidateProgramPipeline_bind) \
+ X("VertexAttrib1f", glVertexAttrib1f_bind) \
+ X("VertexAttrib1s", glVertexAttrib1s_bind) \
+ X("VertexAttrib1d", glVertexAttrib1d_bind) \
+ X("VertexAttribI1i", glVertexAttribI1i_bind) \
+ X("VertexAttribI1ui", glVertexAttribI1ui_bind) \
+ X("VertexAttrib2f", glVertexAttrib2f_bind) \
+ X("VertexAttrib2s", glVertexAttrib2s_bind) \
+ X("VertexAttrib2d", glVertexAttrib2d_bind) \
+ X("VertexAttribI2i", glVertexAttribI2i_bind) \
+ X("VertexAttribI2ui", glVertexAttribI2ui_bind) \
+ X("VertexAttrib3f", glVertexAttrib3f_bind) \
+ X("VertexAttrib3s", glVertexAttrib3s_bind) \
+ X("VertexAttrib3d", glVertexAttrib3d_bind) \
+ X("VertexAttribI3i", glVertexAttribI3i_bind) \
+ X("VertexAttribI3ui", glVertexAttribI3ui_bind) \
+ X("VertexAttrib4f", glVertexAttrib4f_bind) \
+ X("VertexAttrib4s", glVertexAttrib4s_bind) \
+ X("VertexAttrib4d", glVertexAttrib4d_bind) \
+ X("VertexAttrib4Nub", glVertexAttrib4Nub_bind) \
+ X("VertexAttribI4i", glVertexAttribI4i_bind) \
+ X("VertexAttribI4ui", glVertexAttribI4ui_bind) \
+ X("VertexAttribL1d", glVertexAttribL1d_bind) \
+ X("VertexAttribL2d", glVertexAttribL2d_bind) \
+ X("VertexAttribL3d", glVertexAttribL3d_bind) \
+ X("VertexAttribL4d", glVertexAttribL4d_bind) \
+ X("VertexAttrib1fv", glVertexAttrib1fv_bind) \
+ X("VertexAttrib1sv", glVertexAttrib1sv_bind) \
+ X("VertexAttrib1dv", glVertexAttrib1dv_bind) \
+ X("VertexAttribI1iv", glVertexAttribI1iv_bind) \
+ X("VertexAttribI1uiv", glVertexAttribI1uiv_bind) \
+ X("VertexAttrib2fv", glVertexAttrib2fv_bind) \
+ X("VertexAttrib2sv", glVertexAttrib2sv_bind) \
+ X("VertexAttrib2dv", glVertexAttrib2dv_bind) \
+ X("VertexAttribI2iv", glVertexAttribI2iv_bind) \
+ X("VertexAttribI2uiv", glVertexAttribI2uiv_bind) \
+ X("VertexAttrib3fv", glVertexAttrib3fv_bind) \
+ X("VertexAttrib3sv", glVertexAttrib3sv_bind) \
+ X("VertexAttrib3dv", glVertexAttrib3dv_bind) \
+ X("VertexAttribI3iv", glVertexAttribI3iv_bind) \
+ X("VertexAttribI3uiv", glVertexAttribI3uiv_bind) \
+ X("VertexAttrib4fv", glVertexAttrib4fv_bind) \
+ X("VertexAttrib4sv", glVertexAttrib4sv_bind) \
+ X("VertexAttrib4dv", glVertexAttrib4dv_bind) \
+ X("VertexAttrib4iv", glVertexAttrib4iv_bind) \
+ X("VertexAttrib4bv", glVertexAttrib4bv_bind) \
+ X("VertexAttrib4ubv", glVertexAttrib4ubv_bind) \
+ X("VertexAttrib4usv", glVertexAttrib4usv_bind) \
+ X("VertexAttrib4uiv", glVertexAttrib4uiv_bind) \
+ X("VertexAttrib4Nbv", glVertexAttrib4Nbv_bind) \
+ X("VertexAttrib4Nsv", glVertexAttrib4Nsv_bind) \
+ X("VertexAttrib4Niv", glVertexAttrib4Niv_bind) \
+ X("VertexAttrib4Nubv", glVertexAttrib4Nubv_bind) \
+ X("VertexAttrib4Nusv", glVertexAttrib4Nusv_bind) \
+ X("VertexAttrib4Nuiv", glVertexAttrib4Nuiv_bind) \
+ X("VertexAttribI4bv", glVertexAttribI4bv_bind) \
+ X("VertexAttribI4ubv", glVertexAttribI4ubv_bind) \
+ X("VertexAttribI4sv", glVertexAttribI4sv_bind) \
+ X("VertexAttribI4usv", glVertexAttribI4usv_bind) \
+ X("VertexAttribI4iv", glVertexAttribI4iv_bind) \
+ X("VertexAttribI4uiv", glVertexAttribI4uiv_bind) \
+ X("VertexAttribL1dv", glVertexAttribL1dv_bind) \
+ X("VertexAttribL2dv", glVertexAttribL2dv_bind) \
+ X("VertexAttribL3dv", glVertexAttribL3dv_bind) \
+ X("VertexAttribL4dv", glVertexAttribL4dv_bind) \
+ X("VertexAttribP1ui", glVertexAttribP1ui_bind) \
+ X("VertexAttribP2ui", glVertexAttribP2ui_bind) \
+ X("VertexAttribP3ui", glVertexAttribP3ui_bind) \
+ X("VertexAttribP4ui", glVertexAttribP4ui_bind) \
+ X("VertexAttribPointer", glVertexAttribPointer_bind) \
+ X("VertexAttribIPointer", glVertexAttribIPointer_bind) \
+ X("Viewport", glViewport_bind) \
+ X("ViewportArrayv", glViewportArrayv_bind) \
+ X("ViewportIndexedf", glViewportIndexedf_bind) \
+ X("ViewportIndexedfv", glViewportIndexedfv_bind) \
+ X("WaitSync", glWaitSync_bind) \
+
+
+#define GL_ENUM \
+ X("DEPTH_BUFFER_BIT", GL_DEPTH_BUFFER_BIT) \
+ X("STENCIL_BUFFER_BIT", GL_STENCIL_BUFFER_BIT) \
+ X("COLOR_BUFFER_BIT", GL_COLOR_BUFFER_BIT) \
+ X("FALSE", GL_FALSE) \
+ X("TRUE", GL_TRUE) \
+ X("POINTS", GL_POINTS) \
+ X("LINES", GL_LINES) \
+ X("LINE_LOOP", GL_LINE_LOOP) \
+ X("LINE_STRIP", GL_LINE_STRIP) \
+ X("TRIANGLES", GL_TRIANGLES) \
+ X("TRIANGLE_STRIP", GL_TRIANGLE_STRIP) \
+ X("TRIANGLE_FAN", GL_TRIANGLE_FAN) \
+ X("QUADS", GL_QUADS) \
+ X("NEVER", GL_NEVER) \
+ X("LESS", GL_LESS) \
+ X("EQUAL", GL_EQUAL) \
+ X("LEQUAL", GL_LEQUAL) \
+ X("GREATER", GL_GREATER) \
+ X("NOTEQUAL", GL_NOTEQUAL) \
+ X("GEQUAL", GL_GEQUAL) \
+ X("ALWAYS", GL_ALWAYS) \
+ X("ZERO", GL_ZERO) \
+ X("ONE", GL_ONE) \
+ X("SRC_COLOR", GL_SRC_COLOR) \
+ X("ONE_MINUS_SRC_COLOR", GL_ONE_MINUS_SRC_COLOR) \
+ X("SRC_ALPHA", GL_SRC_ALPHA) \
+ X("ONE_MINUS_SRC_ALPHA", GL_ONE_MINUS_SRC_ALPHA) \
+ X("DST_ALPHA", GL_DST_ALPHA) \
+ X("ONE_MINUS_DST_ALPHA", GL_ONE_MINUS_DST_ALPHA) \
+ X("DST_COLOR", GL_DST_COLOR) \
+ X("ONE_MINUS_DST_COLOR", GL_ONE_MINUS_DST_COLOR) \
+ X("SRC_ALPHA_SATURATE", GL_SRC_ALPHA_SATURATE) \
+ X("NONE", GL_NONE) \
+ X("FRONT_LEFT", GL_FRONT_LEFT) \
+ X("FRONT_RIGHT", GL_FRONT_RIGHT) \
+ X("BACK_LEFT", GL_BACK_LEFT) \
+ X("BACK_RIGHT", GL_BACK_RIGHT) \
+ X("FRONT", GL_FRONT) \
+ X("BACK", GL_BACK) \
+ X("LEFT", GL_LEFT) \
+ X("RIGHT", GL_RIGHT) \
+ X("FRONT_AND_BACK", GL_FRONT_AND_BACK) \
+ X("NO_ERROR", GL_NO_ERROR) \
+ X("INVALID_ENUM", GL_INVALID_ENUM) \
+ X("INVALID_VALUE", GL_INVALID_VALUE) \
+ X("INVALID_OPERATION", GL_INVALID_OPERATION) \
+ X("OUT_OF_MEMORY", GL_OUT_OF_MEMORY) \
+ X("CW", GL_CW) \
+ X("CCW", GL_CCW) \
+ X("POINT_SIZE", GL_POINT_SIZE) \
+ X("POINT_SIZE_RANGE", GL_POINT_SIZE_RANGE) \
+ X("POINT_SIZE_GRANULARITY", GL_POINT_SIZE_GRANULARITY) \
+ X("LINE_SMOOTH", GL_LINE_SMOOTH) \
+ X("LINE_WIDTH", GL_LINE_WIDTH) \
+ X("LINE_WIDTH_RANGE", GL_LINE_WIDTH_RANGE) \
+ X("LINE_WIDTH_GRANULARITY", GL_LINE_WIDTH_GRANULARITY) \
+ X("POLYGON_MODE", GL_POLYGON_MODE) \
+ X("POLYGON_SMOOTH", GL_POLYGON_SMOOTH) \
+ X("CULL_FACE", GL_CULL_FACE) \
+ X("CULL_FACE_MODE", GL_CULL_FACE_MODE) \
+ X("FRONT_FACE", GL_FRONT_FACE) \
+ X("DEPTH_RANGE", GL_DEPTH_RANGE) \
+ X("DEPTH_TEST", GL_DEPTH_TEST) \
+ X("DEPTH_WRITEMASK", GL_DEPTH_WRITEMASK) \
+ X("DEPTH_CLEAR_VALUE", GL_DEPTH_CLEAR_VALUE) \
+ X("DEPTH_FUNC", GL_DEPTH_FUNC) \
+ X("STENCIL_TEST", GL_STENCIL_TEST) \
+ X("STENCIL_CLEAR_VALUE", GL_STENCIL_CLEAR_VALUE) \
+ X("STENCIL_FUNC", GL_STENCIL_FUNC) \
+ X("STENCIL_VALUE_MASK", GL_STENCIL_VALUE_MASK) \
+ X("STENCIL_FAIL", GL_STENCIL_FAIL) \
+ X("STENCIL_PASS_DEPTH_FAIL", GL_STENCIL_PASS_DEPTH_FAIL) \
+ X("STENCIL_PASS_DEPTH_PASS", GL_STENCIL_PASS_DEPTH_PASS) \
+ X("STENCIL_REF", GL_STENCIL_REF) \
+ X("STENCIL_WRITEMASK", GL_STENCIL_WRITEMASK) \
+ X("VIEWPORT", GL_VIEWPORT) \
+ X("DITHER", GL_DITHER) \
+ X("BLEND_DST", GL_BLEND_DST) \
+ X("BLEND_SRC", GL_BLEND_SRC) \
+ X("BLEND", GL_BLEND) \
+ X("LOGIC_OP_MODE", GL_LOGIC_OP_MODE) \
+ X("DRAW_BUFFER", GL_DRAW_BUFFER) \
+ X("READ_BUFFER", GL_READ_BUFFER) \
+ X("SCISSOR_BOX", GL_SCISSOR_BOX) \
+ X("SCISSOR_TEST", GL_SCISSOR_TEST) \
+ X("COLOR_CLEAR_VALUE", GL_COLOR_CLEAR_VALUE) \
+ X("COLOR_WRITEMASK", GL_COLOR_WRITEMASK) \
+ X("DOUBLEBUFFER", GL_DOUBLEBUFFER) \
+ X("STEREO", GL_STEREO) \
+ X("LINE_SMOOTH_HINT", GL_LINE_SMOOTH_HINT) \
+ X("POLYGON_SMOOTH_HINT", GL_POLYGON_SMOOTH_HINT) \
+ X("UNPACK_SWAP_BYTES", GL_UNPACK_SWAP_BYTES) \
+ X("UNPACK_LSB_FIRST", GL_UNPACK_LSB_FIRST) \
+ X("UNPACK_ROW_LENGTH", GL_UNPACK_ROW_LENGTH) \
+ X("UNPACK_SKIP_ROWS", GL_UNPACK_SKIP_ROWS) \
+ X("UNPACK_SKIP_PIXELS", GL_UNPACK_SKIP_PIXELS) \
+ X("UNPACK_ALIGNMENT", GL_UNPACK_ALIGNMENT) \
+ X("PACK_SWAP_BYTES", GL_PACK_SWAP_BYTES) \
+ X("PACK_LSB_FIRST", GL_PACK_LSB_FIRST) \
+ X("PACK_ROW_LENGTH", GL_PACK_ROW_LENGTH) \
+ X("PACK_SKIP_ROWS", GL_PACK_SKIP_ROWS) \
+ X("PACK_SKIP_PIXELS", GL_PACK_SKIP_PIXELS) \
+ X("PACK_ALIGNMENT", GL_PACK_ALIGNMENT) \
+ X("MAX_TEXTURE_SIZE", GL_MAX_TEXTURE_SIZE) \
+ X("MAX_VIEWPORT_DIMS", GL_MAX_VIEWPORT_DIMS) \
+ X("SUBPIXEL_BITS", GL_SUBPIXEL_BITS) \
+ X("TEXTURE_1D", GL_TEXTURE_1D) \
+ X("TEXTURE_2D", GL_TEXTURE_2D) \
+ X("TEXTURE_WIDTH", GL_TEXTURE_WIDTH) \
+ X("TEXTURE_HEIGHT", GL_TEXTURE_HEIGHT) \
+ X("TEXTURE_BORDER_COLOR", GL_TEXTURE_BORDER_COLOR) \
+ X("DONT_CARE", GL_DONT_CARE) \
+ X("FASTEST", GL_FASTEST) \
+ X("NICEST", GL_NICEST) \
+ X("BYTE", GL_BYTE) \
+ X("UNSIGNED_BYTE", GL_UNSIGNED_BYTE) \
+ X("SHORT", GL_SHORT) \
+ X("UNSIGNED_SHORT", GL_UNSIGNED_SHORT) \
+ X("INT", GL_INT) \
+ X("UNSIGNED_INT", GL_UNSIGNED_INT) \
+ X("FLOAT", GL_FLOAT) \
+ X("STACK_OVERFLOW", GL_STACK_OVERFLOW) \
+ X("STACK_UNDERFLOW", GL_STACK_UNDERFLOW) \
+ X("CLEAR", GL_CLEAR) \
+ X("AND", GL_AND) \
+ X("AND_REVERSE", GL_AND_REVERSE) \
+ X("COPY", GL_COPY) \
+ X("AND_INVERTED", GL_AND_INVERTED) \
+ X("NOOP", GL_NOOP) \
+ X("XOR", GL_XOR) \
+ X("OR", GL_OR) \
+ X("NOR", GL_NOR) \
+ X("EQUIV", GL_EQUIV) \
+ X("INVERT", GL_INVERT) \
+ X("OR_REVERSE", GL_OR_REVERSE) \
+ X("COPY_INVERTED", GL_COPY_INVERTED) \
+ X("OR_INVERTED", GL_OR_INVERTED) \
+ X("NAND", GL_NAND) \
+ X("SET", GL_SET) \
+ X("TEXTURE", GL_TEXTURE) \
+ X("COLOR", GL_COLOR) \
+ X("DEPTH", GL_DEPTH) \
+ X("STENCIL", GL_STENCIL) \
+ X("STENCIL_INDEX", GL_STENCIL_INDEX) \
+ X("DEPTH_COMPONENT", GL_DEPTH_COMPONENT) \
+ X("RED", GL_RED) \
+ X("GREEN", GL_GREEN) \
+ X("BLUE", GL_BLUE) \
+ X("ALPHA", GL_ALPHA) \
+ X("RGB", GL_RGB) \
+ X("RGBA", GL_RGBA) \
+ X("POINT", GL_POINT) \
+ X("LINE", GL_LINE) \
+ X("FILL", GL_FILL) \
+ X("KEEP", GL_KEEP) \
+ X("REPLACE", GL_REPLACE) \
+ X("INCR", GL_INCR) \
+ X("DECR", GL_DECR) \
+ X("VENDOR", GL_VENDOR) \
+ X("RENDERER", GL_RENDERER) \
+ X("VERSION", GL_VERSION) \
+ X("EXTENSIONS", GL_EXTENSIONS) \
+ X("NEAREST", GL_NEAREST) \
+ X("LINEAR", GL_LINEAR) \
+ X("NEAREST_MIPMAP_NEAREST", GL_NEAREST_MIPMAP_NEAREST) \
+ X("LINEAR_MIPMAP_NEAREST", GL_LINEAR_MIPMAP_NEAREST) \
+ X("NEAREST_MIPMAP_LINEAR", GL_NEAREST_MIPMAP_LINEAR) \
+ X("LINEAR_MIPMAP_LINEAR", GL_LINEAR_MIPMAP_LINEAR) \
+ X("TEXTURE_MAG_FILTER", GL_TEXTURE_MAG_FILTER) \
+ X("TEXTURE_MIN_FILTER", GL_TEXTURE_MIN_FILTER) \
+ X("TEXTURE_WRAP_S", GL_TEXTURE_WRAP_S) \
+ X("TEXTURE_WRAP_T", GL_TEXTURE_WRAP_T) \
+ X("REPEAT", GL_REPEAT) \
+ X("CURRENT_BIT", GL_CURRENT_BIT) \
+ X("POINT_BIT", GL_POINT_BIT) \
+ X("LINE_BIT", GL_LINE_BIT) \
+ X("POLYGON_BIT", GL_POLYGON_BIT) \
+ X("POLYGON_STIPPLE_BIT", GL_POLYGON_STIPPLE_BIT) \
+ X("PIXEL_MODE_BIT", GL_PIXEL_MODE_BIT) \
+ X("LIGHTING_BIT", GL_LIGHTING_BIT) \
+ X("FOG_BIT", GL_FOG_BIT) \
+ X("ACCUM_BUFFER_BIT", GL_ACCUM_BUFFER_BIT) \
+ X("VIEWPORT_BIT", GL_VIEWPORT_BIT) \
+ X("TRANSFORM_BIT", GL_TRANSFORM_BIT) \
+ X("ENABLE_BIT", GL_ENABLE_BIT) \
+ X("HINT_BIT", GL_HINT_BIT) \
+ X("EVAL_BIT", GL_EVAL_BIT) \
+ X("LIST_BIT", GL_LIST_BIT) \
+ X("TEXTURE_BIT", GL_TEXTURE_BIT) \
+ X("SCISSOR_BIT", GL_SCISSOR_BIT) \
+ X("ALL_ATTRIB_BITS", GL_ALL_ATTRIB_BITS) \
+ X("QUAD_STRIP", GL_QUAD_STRIP) \
+ X("POLYGON", GL_POLYGON) \
+ X("ACCUM", GL_ACCUM) \
+ X("LOAD", GL_LOAD) \
+ X("RETURN", GL_RETURN) \
+ X("MULT", GL_MULT) \
+ X("ADD", GL_ADD) \
+ X("AUX0", GL_AUX0) \
+ X("AUX1", GL_AUX1) \
+ X("AUX2", GL_AUX2) \
+ X("AUX3", GL_AUX3) \
+ X("2D", GL_2D) \
+ X("3D", GL_3D) \
+ X("3D_COLOR", GL_3D_COLOR) \
+ X("3D_COLOR_TEXTURE", GL_3D_COLOR_TEXTURE) \
+ X("4D_COLOR_TEXTURE", GL_4D_COLOR_TEXTURE) \
+ X("PASS_THROUGH_TOKEN", GL_PASS_THROUGH_TOKEN) \
+ X("POINT_TOKEN", GL_POINT_TOKEN) \
+ X("LINE_TOKEN", GL_LINE_TOKEN) \
+ X("POLYGON_TOKEN", GL_POLYGON_TOKEN) \
+ X("BITMAP_TOKEN", GL_BITMAP_TOKEN) \
+ X("DRAW_PIXEL_TOKEN", GL_DRAW_PIXEL_TOKEN) \
+ X("COPY_PIXEL_TOKEN", GL_COPY_PIXEL_TOKEN) \
+ X("LINE_RESET_TOKEN", GL_LINE_RESET_TOKEN) \
+ X("EXP", GL_EXP) \
+ X("EXP2", GL_EXP2) \
+ X("COEFF", GL_COEFF) \
+ X("ORDER", GL_ORDER) \
+ X("DOMAIN", GL_DOMAIN) \
+ X("PIXEL_MAP_I_TO_I", GL_PIXEL_MAP_I_TO_I) \
+ X("PIXEL_MAP_S_TO_S", GL_PIXEL_MAP_S_TO_S) \
+ X("PIXEL_MAP_I_TO_R", GL_PIXEL_MAP_I_TO_R) \
+ X("PIXEL_MAP_I_TO_G", GL_PIXEL_MAP_I_TO_G) \
+ X("PIXEL_MAP_I_TO_B", GL_PIXEL_MAP_I_TO_B) \
+ X("PIXEL_MAP_I_TO_A", GL_PIXEL_MAP_I_TO_A) \
+ X("PIXEL_MAP_R_TO_R", GL_PIXEL_MAP_R_TO_R) \
+ X("PIXEL_MAP_G_TO_G", GL_PIXEL_MAP_G_TO_G) \
+ X("PIXEL_MAP_B_TO_B", GL_PIXEL_MAP_B_TO_B) \
+ X("PIXEL_MAP_A_TO_A", GL_PIXEL_MAP_A_TO_A) \
+ X("CURRENT_COLOR", GL_CURRENT_COLOR) \
+ X("CURRENT_INDEX", GL_CURRENT_INDEX) \
+ X("CURRENT_NORMAL", GL_CURRENT_NORMAL) \
+ X("CURRENT_TEXTURE_COORDS", GL_CURRENT_TEXTURE_COORDS) \
+ X("CURRENT_RASTER_COLOR", GL_CURRENT_RASTER_COLOR) \
+ X("CURRENT_RASTER_INDEX", GL_CURRENT_RASTER_INDEX) \
+ X("CURRENT_RASTER_TEXTURE_COORDS", GL_CURRENT_RASTER_TEXTURE_COORDS) \
+ X("CURRENT_RASTER_POSITION", GL_CURRENT_RASTER_POSITION) \
+ X("CURRENT_RASTER_POSITION_VALID", GL_CURRENT_RASTER_POSITION_VALID) \
+ X("CURRENT_RASTER_DISTANCE", GL_CURRENT_RASTER_DISTANCE) \
+ X("POINT_SMOOTH", GL_POINT_SMOOTH) \
+ X("LINE_STIPPLE", GL_LINE_STIPPLE) \
+ X("LINE_STIPPLE_PATTERN", GL_LINE_STIPPLE_PATTERN) \
+ X("LINE_STIPPLE_REPEAT", GL_LINE_STIPPLE_REPEAT) \
+ X("LIST_MODE", GL_LIST_MODE) \
+ X("MAX_LIST_NESTING", GL_MAX_LIST_NESTING) \
+ X("LIST_BASE", GL_LIST_BASE) \
+ X("LIST_INDEX", GL_LIST_INDEX) \
+ X("POLYGON_STIPPLE", GL_POLYGON_STIPPLE) \
+ X("EDGE_FLAG", GL_EDGE_FLAG) \
+ X("LIGHTING", GL_LIGHTING) \
+ X("LIGHT_MODEL_LOCAL_VIEWER", GL_LIGHT_MODEL_LOCAL_VIEWER) \
+ X("LIGHT_MODEL_TWO_SIDE", GL_LIGHT_MODEL_TWO_SIDE) \
+ X("LIGHT_MODEL_AMBIENT", GL_LIGHT_MODEL_AMBIENT) \
+ X("SHADE_MODEL", GL_SHADE_MODEL) \
+ X("COLOR_MATERIAL_FACE", GL_COLOR_MATERIAL_FACE) \
+ X("COLOR_MATERIAL_PARAMETER", GL_COLOR_MATERIAL_PARAMETER) \
+ X("COLOR_MATERIAL", GL_COLOR_MATERIAL) \
+ X("FOG", GL_FOG) \
+ X("FOG_INDEX", GL_FOG_INDEX) \
+ X("FOG_DENSITY", GL_FOG_DENSITY) \
+ X("FOG_START", GL_FOG_START) \
+ X("FOG_END", GL_FOG_END) \
+ X("FOG_MODE", GL_FOG_MODE) \
+ X("FOG_COLOR", GL_FOG_COLOR) \
+ X("ACCUM_CLEAR_VALUE", GL_ACCUM_CLEAR_VALUE) \
+ X("MATRIX_MODE", GL_MATRIX_MODE) \
+ X("NORMALIZE", GL_NORMALIZE) \
+ X("MODELVIEW_STACK_DEPTH", GL_MODELVIEW_STACK_DEPTH) \
+ X("PROJECTION_STACK_DEPTH", GL_PROJECTION_STACK_DEPTH) \
+ X("TEXTURE_STACK_DEPTH", GL_TEXTURE_STACK_DEPTH) \
+ X("MODELVIEW_MATRIX", GL_MODELVIEW_MATRIX) \
+ X("PROJECTION_MATRIX", GL_PROJECTION_MATRIX) \
+ X("TEXTURE_MATRIX", GL_TEXTURE_MATRIX) \
+ X("ATTRIB_STACK_DEPTH", GL_ATTRIB_STACK_DEPTH) \
+ X("ALPHA_TEST", GL_ALPHA_TEST) \
+ X("ALPHA_TEST_FUNC", GL_ALPHA_TEST_FUNC) \
+ X("ALPHA_TEST_REF", GL_ALPHA_TEST_REF) \
+ X("LOGIC_OP", GL_LOGIC_OP) \
+ X("AUX_BUFFERS", GL_AUX_BUFFERS) \
+ X("INDEX_CLEAR_VALUE", GL_INDEX_CLEAR_VALUE) \
+ X("INDEX_WRITEMASK", GL_INDEX_WRITEMASK) \
+ X("INDEX_MODE", GL_INDEX_MODE) \
+ X("RGBA_MODE", GL_RGBA_MODE) \
+ X("RENDER_MODE", GL_RENDER_MODE) \
+ X("PERSPECTIVE_CORRECTION_HINT", GL_PERSPECTIVE_CORRECTION_HINT) \
+ X("POINT_SMOOTH_HINT", GL_POINT_SMOOTH_HINT) \
+ X("FOG_HINT", GL_FOG_HINT) \
+ X("TEXTURE_GEN_S", GL_TEXTURE_GEN_S) \
+ X("TEXTURE_GEN_T", GL_TEXTURE_GEN_T) \
+ X("TEXTURE_GEN_R", GL_TEXTURE_GEN_R) \
+ X("TEXTURE_GEN_Q", GL_TEXTURE_GEN_Q) \
+ X("PIXEL_MAP_I_TO_I_SIZE", GL_PIXEL_MAP_I_TO_I_SIZE) \
+ X("PIXEL_MAP_S_TO_S_SIZE", GL_PIXEL_MAP_S_TO_S_SIZE) \
+ X("PIXEL_MAP_I_TO_R_SIZE", GL_PIXEL_MAP_I_TO_R_SIZE) \
+ X("PIXEL_MAP_I_TO_G_SIZE", GL_PIXEL_MAP_I_TO_G_SIZE) \
+ X("PIXEL_MAP_I_TO_B_SIZE", GL_PIXEL_MAP_I_TO_B_SIZE) \
+ X("PIXEL_MAP_I_TO_A_SIZE", GL_PIXEL_MAP_I_TO_A_SIZE) \
+ X("PIXEL_MAP_R_TO_R_SIZE", GL_PIXEL_MAP_R_TO_R_SIZE) \
+ X("PIXEL_MAP_G_TO_G_SIZE", GL_PIXEL_MAP_G_TO_G_SIZE) \
+ X("PIXEL_MAP_B_TO_B_SIZE", GL_PIXEL_MAP_B_TO_B_SIZE) \
+ X("PIXEL_MAP_A_TO_A_SIZE", GL_PIXEL_MAP_A_TO_A_SIZE) \
+ X("MAP_COLOR", GL_MAP_COLOR) \
+ X("MAP_STENCIL", GL_MAP_STENCIL) \
+ X("INDEX_SHIFT", GL_INDEX_SHIFT) \
+ X("INDEX_OFFSET", GL_INDEX_OFFSET) \
+ X("RED_SCALE", GL_RED_SCALE) \
+ X("RED_BIAS", GL_RED_BIAS) \
+ X("ZOOM_X", GL_ZOOM_X) \
+ X("ZOOM_Y", GL_ZOOM_Y) \
+ X("GREEN_SCALE", GL_GREEN_SCALE) \
+ X("GREEN_BIAS", GL_GREEN_BIAS) \
+ X("BLUE_SCALE", GL_BLUE_SCALE) \
+ X("BLUE_BIAS", GL_BLUE_BIAS) \
+ X("ALPHA_SCALE", GL_ALPHA_SCALE) \
+ X("ALPHA_BIAS", GL_ALPHA_BIAS) \
+ X("DEPTH_SCALE", GL_DEPTH_SCALE) \
+ X("DEPTH_BIAS", GL_DEPTH_BIAS) \
+ X("MAX_EVAL_ORDER", GL_MAX_EVAL_ORDER) \
+ X("MAX_LIGHTS", GL_MAX_LIGHTS) \
+ X("MAX_CLIP_PLANES", GL_MAX_CLIP_PLANES) \
+ X("MAX_PIXEL_MAP_TABLE", GL_MAX_PIXEL_MAP_TABLE) \
+ X("MAX_ATTRIB_STACK_DEPTH", GL_MAX_ATTRIB_STACK_DEPTH) \
+ X("MAX_MODELVIEW_STACK_DEPTH", GL_MAX_MODELVIEW_STACK_DEPTH) \
+ X("MAX_NAME_STACK_DEPTH", GL_MAX_NAME_STACK_DEPTH) \
+ X("MAX_PROJECTION_STACK_DEPTH", GL_MAX_PROJECTION_STACK_DEPTH) \
+ X("MAX_TEXTURE_STACK_DEPTH", GL_MAX_TEXTURE_STACK_DEPTH) \
+ X("INDEX_BITS", GL_INDEX_BITS) \
+ X("RED_BITS", GL_RED_BITS) \
+ X("GREEN_BITS", GL_GREEN_BITS) \
+ X("BLUE_BITS", GL_BLUE_BITS) \
+ X("ALPHA_BITS", GL_ALPHA_BITS) \
+ X("DEPTH_BITS", GL_DEPTH_BITS) \
+ X("STENCIL_BITS", GL_STENCIL_BITS) \
+ X("ACCUM_RED_BITS", GL_ACCUM_RED_BITS) \
+ X("ACCUM_GREEN_BITS", GL_ACCUM_GREEN_BITS) \
+ X("ACCUM_BLUE_BITS", GL_ACCUM_BLUE_BITS) \
+ X("ACCUM_ALPHA_BITS", GL_ACCUM_ALPHA_BITS) \
+ X("NAME_STACK_DEPTH", GL_NAME_STACK_DEPTH) \
+ X("AUTO_NORMAL", GL_AUTO_NORMAL) \
+ X("MAP1_COLOR_4", GL_MAP1_COLOR_4) \
+ X("MAP1_INDEX", GL_MAP1_INDEX) \
+ X("MAP1_NORMAL", GL_MAP1_NORMAL) \
+ X("MAP1_TEXTURE_COORD_1", GL_MAP1_TEXTURE_COORD_1) \
+ X("MAP1_TEXTURE_COORD_2", GL_MAP1_TEXTURE_COORD_2) \
+ X("MAP1_TEXTURE_COORD_3", GL_MAP1_TEXTURE_COORD_3) \
+ X("MAP1_TEXTURE_COORD_4", GL_MAP1_TEXTURE_COORD_4) \
+ X("MAP1_VERTEX_3", GL_MAP1_VERTEX_3) \
+ X("MAP1_VERTEX_4", GL_MAP1_VERTEX_4) \
+ X("MAP2_COLOR_4", GL_MAP2_COLOR_4) \
+ X("MAP2_INDEX", GL_MAP2_INDEX) \
+ X("MAP2_NORMAL", GL_MAP2_NORMAL) \
+ X("MAP2_TEXTURE_COORD_1", GL_MAP2_TEXTURE_COORD_1) \
+ X("MAP2_TEXTURE_COORD_2", GL_MAP2_TEXTURE_COORD_2) \
+ X("MAP2_TEXTURE_COORD_3", GL_MAP2_TEXTURE_COORD_3) \
+ X("MAP2_TEXTURE_COORD_4", GL_MAP2_TEXTURE_COORD_4) \
+ X("MAP2_VERTEX_3", GL_MAP2_VERTEX_3) \
+ X("MAP2_VERTEX_4", GL_MAP2_VERTEX_4) \
+ X("MAP1_GRID_DOMAIN", GL_MAP1_GRID_DOMAIN) \
+ X("MAP1_GRID_SEGMENTS", GL_MAP1_GRID_SEGMENTS) \
+ X("MAP2_GRID_DOMAIN", GL_MAP2_GRID_DOMAIN) \
+ X("MAP2_GRID_SEGMENTS", GL_MAP2_GRID_SEGMENTS) \
+ X("TEXTURE_COMPONENTS", GL_TEXTURE_COMPONENTS) \
+ X("TEXTURE_BORDER", GL_TEXTURE_BORDER) \
+ X("AMBIENT", GL_AMBIENT) \
+ X("DIFFUSE", GL_DIFFUSE) \
+ X("SPECULAR", GL_SPECULAR) \
+ X("POSITION", GL_POSITION) \
+ X("SPOT_DIRECTION", GL_SPOT_DIRECTION) \
+ X("SPOT_EXPONENT", GL_SPOT_EXPONENT) \
+ X("SPOT_CUTOFF", GL_SPOT_CUTOFF) \
+ X("CONSTANT_ATTENUATION", GL_CONSTANT_ATTENUATION) \
+ X("LINEAR_ATTENUATION", GL_LINEAR_ATTENUATION) \
+ X("QUADRATIC_ATTENUATION", GL_QUADRATIC_ATTENUATION) \
+ X("COMPILE", GL_COMPILE) \
+ X("COMPILE_AND_EXECUTE", GL_COMPILE_AND_EXECUTE) \
+ X("2_BYTES", GL_2_BYTES) \
+ X("3_BYTES", GL_3_BYTES) \
+ X("4_BYTES", GL_4_BYTES) \
+ X("EMISSION", GL_EMISSION) \
+ X("SHININESS", GL_SHININESS) \
+ X("AMBIENT_AND_DIFFUSE", GL_AMBIENT_AND_DIFFUSE) \
+ X("COLOR_INDEXES", GL_COLOR_INDEXES) \
+ X("MODELVIEW", GL_MODELVIEW) \
+ X("PROJECTION", GL_PROJECTION) \
+ X("COLOR_INDEX", GL_COLOR_INDEX) \
+ X("LUMINANCE", GL_LUMINANCE) \
+ X("LUMINANCE_ALPHA", GL_LUMINANCE_ALPHA) \
+ X("BITMAP", GL_BITMAP) \
+ X("RENDER", GL_RENDER) \
+ X("FEEDBACK", GL_FEEDBACK) \
+ X("SELECT", GL_SELECT) \
+ X("FLAT", GL_FLAT) \
+ X("SMOOTH", GL_SMOOTH) \
+ X("S", GL_S) \
+ X("T", GL_T) \
+ X("R", GL_R) \
+ X("Q", GL_Q) \
+ X("MODULATE", GL_MODULATE) \
+ X("DECAL", GL_DECAL) \
+ X("TEXTURE_ENV_MODE", GL_TEXTURE_ENV_MODE) \
+ X("TEXTURE_ENV_COLOR", GL_TEXTURE_ENV_COLOR) \
+ X("TEXTURE_ENV", GL_TEXTURE_ENV) \
+ X("EYE_LINEAR", GL_EYE_LINEAR) \
+ X("OBJECT_LINEAR", GL_OBJECT_LINEAR) \
+ X("SPHERE_MAP", GL_SPHERE_MAP) \
+ X("TEXTURE_GEN_MODE", GL_TEXTURE_GEN_MODE) \
+ X("OBJECT_PLANE", GL_OBJECT_PLANE) \
+ X("EYE_PLANE", GL_EYE_PLANE) \
+ X("CLAMP", GL_CLAMP) \
+ X("CLIP_PLANE0", GL_CLIP_PLANE0) \
+ X("CLIP_PLANE1", GL_CLIP_PLANE1) \
+ X("CLIP_PLANE2", GL_CLIP_PLANE2) \
+ X("CLIP_PLANE3", GL_CLIP_PLANE3) \
+ X("CLIP_PLANE4", GL_CLIP_PLANE4) \
+ X("CLIP_PLANE5", GL_CLIP_PLANE5) \
+ X("LIGHT0", GL_LIGHT0) \
+ X("LIGHT1", GL_LIGHT1) \
+ X("LIGHT2", GL_LIGHT2) \
+ X("LIGHT3", GL_LIGHT3) \
+ X("LIGHT4", GL_LIGHT4) \
+ X("LIGHT5", GL_LIGHT5) \
+ X("LIGHT6", GL_LIGHT6) \
+ X("LIGHT7", GL_LIGHT7) \
+ X("COLOR_LOGIC_OP", GL_COLOR_LOGIC_OP) \
+ X("POLYGON_OFFSET_UNITS", GL_POLYGON_OFFSET_UNITS) \
+ X("POLYGON_OFFSET_POINT", GL_POLYGON_OFFSET_POINT) \
+ X("POLYGON_OFFSET_LINE", GL_POLYGON_OFFSET_LINE) \
+ X("POLYGON_OFFSET_FILL", GL_POLYGON_OFFSET_FILL) \
+ X("POLYGON_OFFSET_FACTOR", GL_POLYGON_OFFSET_FACTOR) \
+ X("TEXTURE_BINDING_1D", GL_TEXTURE_BINDING_1D) \
+ X("TEXTURE_BINDING_2D", GL_TEXTURE_BINDING_2D) \
+ X("TEXTURE_INTERNAL_FORMAT", GL_TEXTURE_INTERNAL_FORMAT) \
+ X("TEXTURE_RED_SIZE", GL_TEXTURE_RED_SIZE) \
+ X("TEXTURE_GREEN_SIZE", GL_TEXTURE_GREEN_SIZE) \
+ X("TEXTURE_BLUE_SIZE", GL_TEXTURE_BLUE_SIZE) \
+ X("TEXTURE_ALPHA_SIZE", GL_TEXTURE_ALPHA_SIZE) \
+ X("DOUBLE", GL_DOUBLE) \
+ X("PROXY_TEXTURE_1D", GL_PROXY_TEXTURE_1D) \
+ X("PROXY_TEXTURE_2D", GL_PROXY_TEXTURE_2D) \
+ X("R3_G3_B2", GL_R3_G3_B2) \
+ X("RGB4", GL_RGB4) \
+ X("RGB5", GL_RGB5) \
+ X("RGB8", GL_RGB8) \
+ X("RGB10", GL_RGB10) \
+ X("RGB12", GL_RGB12) \
+ X("RGB16", GL_RGB16) \
+ X("RGBA2", GL_RGBA2) \
+ X("RGBA4", GL_RGBA4) \
+ X("RGB5_A1", GL_RGB5_A1) \
+ X("RGBA8", GL_RGBA8) \
+ X("RGB10_A2", GL_RGB10_A2) \
+ X("RGBA12", GL_RGBA12) \
+ X("RGBA16", GL_RGBA16) \
+ X("CLIENT_PIXEL_STORE_BIT", GL_CLIENT_PIXEL_STORE_BIT) \
+ X("CLIENT_VERTEX_ARRAY_BIT", GL_CLIENT_VERTEX_ARRAY_BIT) \
+ X("CLIENT_ALL_ATTRIB_BITS", GL_CLIENT_ALL_ATTRIB_BITS) \
+ X("VERTEX_ARRAY_POINTER", GL_VERTEX_ARRAY_POINTER) \
+ X("NORMAL_ARRAY_POINTER", GL_NORMAL_ARRAY_POINTER) \
+ X("COLOR_ARRAY_POINTER", GL_COLOR_ARRAY_POINTER) \
+ X("INDEX_ARRAY_POINTER", GL_INDEX_ARRAY_POINTER) \
+ X("TEXTURE_COORD_ARRAY_POINTER", GL_TEXTURE_COORD_ARRAY_POINTER) \
+ X("EDGE_FLAG_ARRAY_POINTER", GL_EDGE_FLAG_ARRAY_POINTER) \
+ X("FEEDBACK_BUFFER_POINTER", GL_FEEDBACK_BUFFER_POINTER) \
+ X("SELECTION_BUFFER_POINTER", GL_SELECTION_BUFFER_POINTER) \
+ X("CLIENT_ATTRIB_STACK_DEPTH", GL_CLIENT_ATTRIB_STACK_DEPTH) \
+ X("INDEX_LOGIC_OP", GL_INDEX_LOGIC_OP) \
+ X("MAX_CLIENT_ATTRIB_STACK_DEPTH", GL_MAX_CLIENT_ATTRIB_STACK_DEPTH) \
+ X("FEEDBACK_BUFFER_SIZE", GL_FEEDBACK_BUFFER_SIZE) \
+ X("FEEDBACK_BUFFER_TYPE", GL_FEEDBACK_BUFFER_TYPE) \
+ X("SELECTION_BUFFER_SIZE", GL_SELECTION_BUFFER_SIZE) \
+ X("VERTEX_ARRAY", GL_VERTEX_ARRAY) \
+ X("NORMAL_ARRAY", GL_NORMAL_ARRAY) \
+ X("COLOR_ARRAY", GL_COLOR_ARRAY) \
+ X("INDEX_ARRAY", GL_INDEX_ARRAY) \
+ X("TEXTURE_COORD_ARRAY", GL_TEXTURE_COORD_ARRAY) \
+ X("EDGE_FLAG_ARRAY", GL_EDGE_FLAG_ARRAY) \
+ X("VERTEX_ARRAY_SIZE", GL_VERTEX_ARRAY_SIZE) \
+ X("VERTEX_ARRAY_TYPE", GL_VERTEX_ARRAY_TYPE) \
+ X("VERTEX_ARRAY_STRIDE", GL_VERTEX_ARRAY_STRIDE) \
+ X("NORMAL_ARRAY_TYPE", GL_NORMAL_ARRAY_TYPE) \
+ X("NORMAL_ARRAY_STRIDE", GL_NORMAL_ARRAY_STRIDE) \
+ X("COLOR_ARRAY_SIZE", GL_COLOR_ARRAY_SIZE) \
+ X("COLOR_ARRAY_TYPE", GL_COLOR_ARRAY_TYPE) \
+ X("COLOR_ARRAY_STRIDE", GL_COLOR_ARRAY_STRIDE) \
+ X("INDEX_ARRAY_TYPE", GL_INDEX_ARRAY_TYPE) \
+ X("INDEX_ARRAY_STRIDE", GL_INDEX_ARRAY_STRIDE) \
+ X("TEXTURE_COORD_ARRAY_SIZE", GL_TEXTURE_COORD_ARRAY_SIZE) \
+ X("TEXTURE_COORD_ARRAY_TYPE", GL_TEXTURE_COORD_ARRAY_TYPE) \
+ X("TEXTURE_COORD_ARRAY_STRIDE", GL_TEXTURE_COORD_ARRAY_STRIDE) \
+ X("EDGE_FLAG_ARRAY_STRIDE", GL_EDGE_FLAG_ARRAY_STRIDE) \
+ X("TEXTURE_LUMINANCE_SIZE", GL_TEXTURE_LUMINANCE_SIZE) \
+ X("TEXTURE_INTENSITY_SIZE", GL_TEXTURE_INTENSITY_SIZE) \
+ X("TEXTURE_PRIORITY", GL_TEXTURE_PRIORITY) \
+ X("TEXTURE_RESIDENT", GL_TEXTURE_RESIDENT) \
+ X("ALPHA4", GL_ALPHA4) \
+ X("ALPHA8", GL_ALPHA8) \
+ X("ALPHA12", GL_ALPHA12) \
+ X("ALPHA16", GL_ALPHA16) \
+ X("LUMINANCE4", GL_LUMINANCE4) \
+ X("LUMINANCE8", GL_LUMINANCE8) \
+ X("LUMINANCE12", GL_LUMINANCE12) \
+ X("LUMINANCE16", GL_LUMINANCE16) \
+ X("LUMINANCE4_ALPHA4", GL_LUMINANCE4_ALPHA4) \
+ X("LUMINANCE6_ALPHA2", GL_LUMINANCE6_ALPHA2) \
+ X("LUMINANCE8_ALPHA8", GL_LUMINANCE8_ALPHA8) \
+ X("LUMINANCE12_ALPHA4", GL_LUMINANCE12_ALPHA4) \
+ X("LUMINANCE12_ALPHA12", GL_LUMINANCE12_ALPHA12) \
+ X("LUMINANCE16_ALPHA16", GL_LUMINANCE16_ALPHA16) \
+ X("INTENSITY", GL_INTENSITY) \
+ X("INTENSITY4", GL_INTENSITY4) \
+ X("INTENSITY8", GL_INTENSITY8) \
+ X("INTENSITY12", GL_INTENSITY12) \
+ X("INTENSITY16", GL_INTENSITY16) \
+ X("V2F", GL_V2F) \
+ X("V3F", GL_V3F) \
+ X("C4UB_V2F", GL_C4UB_V2F) \
+ X("C4UB_V3F", GL_C4UB_V3F) \
+ X("C3F_V3F", GL_C3F_V3F) \
+ X("N3F_V3F", GL_N3F_V3F) \
+ X("C4F_N3F_V3F", GL_C4F_N3F_V3F) \
+ X("T2F_V3F", GL_T2F_V3F) \
+ X("T4F_V4F", GL_T4F_V4F) \
+ X("T2F_C4UB_V3F", GL_T2F_C4UB_V3F) \
+ X("T2F_C3F_V3F", GL_T2F_C3F_V3F) \
+ X("T2F_N3F_V3F", GL_T2F_N3F_V3F) \
+ X("T2F_C4F_N3F_V3F", GL_T2F_C4F_N3F_V3F) \
+ X("T4F_C4F_N3F_V4F", GL_T4F_C4F_N3F_V4F) \
+ X("UNSIGNED_BYTE_3_3_2", GL_UNSIGNED_BYTE_3_3_2) \
+ X("UNSIGNED_SHORT_4_4_4_4", GL_UNSIGNED_SHORT_4_4_4_4) \
+ X("UNSIGNED_SHORT_5_5_5_1", GL_UNSIGNED_SHORT_5_5_5_1) \
+ X("UNSIGNED_INT_8_8_8_8", GL_UNSIGNED_INT_8_8_8_8) \
+ X("UNSIGNED_INT_10_10_10_2", GL_UNSIGNED_INT_10_10_10_2) \
+ X("TEXTURE_BINDING_3D", GL_TEXTURE_BINDING_3D) \
+ X("PACK_SKIP_IMAGES", GL_PACK_SKIP_IMAGES) \
+ X("PACK_IMAGE_HEIGHT", GL_PACK_IMAGE_HEIGHT) \
+ X("UNPACK_SKIP_IMAGES", GL_UNPACK_SKIP_IMAGES) \
+ X("UNPACK_IMAGE_HEIGHT", GL_UNPACK_IMAGE_HEIGHT) \
+ X("TEXTURE_3D", GL_TEXTURE_3D) \
+ X("PROXY_TEXTURE_3D", GL_PROXY_TEXTURE_3D) \
+ X("TEXTURE_DEPTH", GL_TEXTURE_DEPTH) \
+ X("TEXTURE_WRAP_R", GL_TEXTURE_WRAP_R) \
+ X("MAX_3D_TEXTURE_SIZE", GL_MAX_3D_TEXTURE_SIZE) \
+ X("UNSIGNED_BYTE_2_3_3_REV", GL_UNSIGNED_BYTE_2_3_3_REV) \
+ X("UNSIGNED_SHORT_5_6_5", GL_UNSIGNED_SHORT_5_6_5) \
+ X("UNSIGNED_SHORT_5_6_5_REV", GL_UNSIGNED_SHORT_5_6_5_REV) \
+ X("UNSIGNED_SHORT_4_4_4_4_REV", GL_UNSIGNED_SHORT_4_4_4_4_REV) \
+ X("UNSIGNED_SHORT_1_5_5_5_REV", GL_UNSIGNED_SHORT_1_5_5_5_REV) \
+ X("UNSIGNED_INT_8_8_8_8_REV", GL_UNSIGNED_INT_8_8_8_8_REV) \
+ X("UNSIGNED_INT_2_10_10_10_REV", GL_UNSIGNED_INT_2_10_10_10_REV) \
+ X("BGR", GL_BGR) \
+ X("BGRA", GL_BGRA) \
+ X("MAX_ELEMENTS_VERTICES", GL_MAX_ELEMENTS_VERTICES) \
+ X("MAX_ELEMENTS_INDICES", GL_MAX_ELEMENTS_INDICES) \
+ X("CLAMP_TO_EDGE", GL_CLAMP_TO_EDGE) \
+ X("TEXTURE_MIN_LOD", GL_TEXTURE_MIN_LOD) \
+ X("TEXTURE_MAX_LOD", GL_TEXTURE_MAX_LOD) \
+ X("TEXTURE_BASE_LEVEL", GL_TEXTURE_BASE_LEVEL) \
+ X("TEXTURE_MAX_LEVEL", GL_TEXTURE_MAX_LEVEL) \
+ X("SMOOTH_POINT_SIZE_RANGE", GL_SMOOTH_POINT_SIZE_RANGE) \
+ X("SMOOTH_POINT_SIZE_GRANULARITY", GL_SMOOTH_POINT_SIZE_GRANULARITY) \
+ X("SMOOTH_LINE_WIDTH_RANGE", GL_SMOOTH_LINE_WIDTH_RANGE) \
+ X("SMOOTH_LINE_WIDTH_GRANULARITY", GL_SMOOTH_LINE_WIDTH_GRANULARITY) \
+ X("ALIASED_LINE_WIDTH_RANGE", GL_ALIASED_LINE_WIDTH_RANGE) \
+ X("RESCALE_NORMAL", GL_RESCALE_NORMAL) \
+ X("LIGHT_MODEL_COLOR_CONTROL", GL_LIGHT_MODEL_COLOR_CONTROL) \
+ X("SINGLE_COLOR", GL_SINGLE_COLOR) \
+ X("SEPARATE_SPECULAR_COLOR", GL_SEPARATE_SPECULAR_COLOR) \
+ X("ALIASED_POINT_SIZE_RANGE", GL_ALIASED_POINT_SIZE_RANGE) \
+ X("TEXTURE0", GL_TEXTURE0) \
+ X("TEXTURE1", GL_TEXTURE1) \
+ X("TEXTURE2", GL_TEXTURE2) \
+ X("TEXTURE3", GL_TEXTURE3) \
+ X("TEXTURE4", GL_TEXTURE4) \
+ X("TEXTURE5", GL_TEXTURE5) \
+ X("TEXTURE6", GL_TEXTURE6) \
+ X("TEXTURE7", GL_TEXTURE7) \
+ X("TEXTURE8", GL_TEXTURE8) \
+ X("TEXTURE9", GL_TEXTURE9) \
+ X("TEXTURE10", GL_TEXTURE10) \
+ X("TEXTURE11", GL_TEXTURE11) \
+ X("TEXTURE12", GL_TEXTURE12) \
+ X("TEXTURE13", GL_TEXTURE13) \
+ X("TEXTURE14", GL_TEXTURE14) \
+ X("TEXTURE15", GL_TEXTURE15) \
+ X("TEXTURE16", GL_TEXTURE16) \
+ X("TEXTURE17", GL_TEXTURE17) \
+ X("TEXTURE18", GL_TEXTURE18) \
+ X("TEXTURE19", GL_TEXTURE19) \
+ X("TEXTURE20", GL_TEXTURE20) \
+ X("TEXTURE21", GL_TEXTURE21) \
+ X("TEXTURE22", GL_TEXTURE22) \
+ X("TEXTURE23", GL_TEXTURE23) \
+ X("TEXTURE24", GL_TEXTURE24) \
+ X("TEXTURE25", GL_TEXTURE25) \
+ X("TEXTURE26", GL_TEXTURE26) \
+ X("TEXTURE27", GL_TEXTURE27) \
+ X("TEXTURE28", GL_TEXTURE28) \
+ X("TEXTURE29", GL_TEXTURE29) \
+ X("TEXTURE30", GL_TEXTURE30) \
+ X("TEXTURE31", GL_TEXTURE31) \
+ X("ACTIVE_TEXTURE", GL_ACTIVE_TEXTURE) \
+ X("MULTISAMPLE", GL_MULTISAMPLE) \
+ X("SAMPLE_ALPHA_TO_COVERAGE", GL_SAMPLE_ALPHA_TO_COVERAGE) \
+ X("SAMPLE_ALPHA_TO_ONE", GL_SAMPLE_ALPHA_TO_ONE) \
+ X("SAMPLE_COVERAGE", GL_SAMPLE_COVERAGE) \
+ X("SAMPLE_BUFFERS", GL_SAMPLE_BUFFERS) \
+ X("SAMPLES", GL_SAMPLES) \
+ X("SAMPLE_COVERAGE_VALUE", GL_SAMPLE_COVERAGE_VALUE) \
+ X("SAMPLE_COVERAGE_INVERT", GL_SAMPLE_COVERAGE_INVERT) \
+ X("TEXTURE_CUBE_MAP", GL_TEXTURE_CUBE_MAP) \
+ X("TEXTURE_BINDING_CUBE_MAP", GL_TEXTURE_BINDING_CUBE_MAP) \
+ X("TEXTURE_CUBE_MAP_POSITIVE_X", GL_TEXTURE_CUBE_MAP_POSITIVE_X) \
+ X("TEXTURE_CUBE_MAP_NEGATIVE_X", GL_TEXTURE_CUBE_MAP_NEGATIVE_X) \
+ X("TEXTURE_CUBE_MAP_POSITIVE_Y", GL_TEXTURE_CUBE_MAP_POSITIVE_Y) \
+ X("TEXTURE_CUBE_MAP_NEGATIVE_Y", GL_TEXTURE_CUBE_MAP_NEGATIVE_Y) \
+ X("TEXTURE_CUBE_MAP_POSITIVE_Z", GL_TEXTURE_CUBE_MAP_POSITIVE_Z) \
+ X("TEXTURE_CUBE_MAP_NEGATIVE_Z", GL_TEXTURE_CUBE_MAP_NEGATIVE_Z) \
+ X("PROXY_TEXTURE_CUBE_MAP", GL_PROXY_TEXTURE_CUBE_MAP) \
+ X("MAX_CUBE_MAP_TEXTURE_SIZE", GL_MAX_CUBE_MAP_TEXTURE_SIZE) \
+ X("COMPRESSED_RGB", GL_COMPRESSED_RGB) \
+ X("COMPRESSED_RGBA", GL_COMPRESSED_RGBA) \
+ X("TEXTURE_COMPRESSION_HINT", GL_TEXTURE_COMPRESSION_HINT) \
+ X("TEXTURE_COMPRESSED_IMAGE_SIZE", GL_TEXTURE_COMPRESSED_IMAGE_SIZE) \
+ X("TEXTURE_COMPRESSED", GL_TEXTURE_COMPRESSED) \
+ X("NUM_COMPRESSED_TEXTURE_FORMATS", GL_NUM_COMPRESSED_TEXTURE_FORMATS) \
+ X("COMPRESSED_TEXTURE_FORMATS", GL_COMPRESSED_TEXTURE_FORMATS) \
+ X("CLAMP_TO_BORDER", GL_CLAMP_TO_BORDER) \
+ X("CLIENT_ACTIVE_TEXTURE", GL_CLIENT_ACTIVE_TEXTURE) \
+ X("MAX_TEXTURE_UNITS", GL_MAX_TEXTURE_UNITS) \
+ X("TRANSPOSE_MODELVIEW_MATRIX", GL_TRANSPOSE_MODELVIEW_MATRIX) \
+ X("TRANSPOSE_PROJECTION_MATRIX", GL_TRANSPOSE_PROJECTION_MATRIX) \
+ X("TRANSPOSE_TEXTURE_MATRIX", GL_TRANSPOSE_TEXTURE_MATRIX) \
+ X("TRANSPOSE_COLOR_MATRIX", GL_TRANSPOSE_COLOR_MATRIX) \
+ X("MULTISAMPLE_BIT", GL_MULTISAMPLE_BIT) \
+ X("NORMAL_MAP", GL_NORMAL_MAP) \
+ X("REFLECTION_MAP", GL_REFLECTION_MAP) \
+ X("COMPRESSED_ALPHA", GL_COMPRESSED_ALPHA) \
+ X("COMPRESSED_LUMINANCE", GL_COMPRESSED_LUMINANCE) \
+ X("COMPRESSED_LUMINANCE_ALPHA", GL_COMPRESSED_LUMINANCE_ALPHA) \
+ X("COMPRESSED_INTENSITY", GL_COMPRESSED_INTENSITY) \
+ X("COMBINE", GL_COMBINE) \
+ X("COMBINE_RGB", GL_COMBINE_RGB) \
+ X("COMBINE_ALPHA", GL_COMBINE_ALPHA) \
+ X("SOURCE0_RGB", GL_SOURCE0_RGB) \
+ X("SOURCE1_RGB", GL_SOURCE1_RGB) \
+ X("SOURCE2_RGB", GL_SOURCE2_RGB) \
+ X("SOURCE0_ALPHA", GL_SOURCE0_ALPHA) \
+ X("SOURCE1_ALPHA", GL_SOURCE1_ALPHA) \
+ X("SOURCE2_ALPHA", GL_SOURCE2_ALPHA) \
+ X("OPERAND0_RGB", GL_OPERAND0_RGB) \
+ X("OPERAND1_RGB", GL_OPERAND1_RGB) \
+ X("OPERAND2_RGB", GL_OPERAND2_RGB) \
+ X("OPERAND0_ALPHA", GL_OPERAND0_ALPHA) \
+ X("OPERAND1_ALPHA", GL_OPERAND1_ALPHA) \
+ X("OPERAND2_ALPHA", GL_OPERAND2_ALPHA) \
+ X("RGB_SCALE", GL_RGB_SCALE) \
+ X("ADD_SIGNED", GL_ADD_SIGNED) \
+ X("INTERPOLATE", GL_INTERPOLATE) \
+ X("SUBTRACT", GL_SUBTRACT) \
+ X("CONSTANT", GL_CONSTANT) \
+ X("PRIMARY_COLOR", GL_PRIMARY_COLOR) \
+ X("PREVIOUS", GL_PREVIOUS) \
+ X("DOT3_RGB", GL_DOT3_RGB) \
+ X("DOT3_RGBA", GL_DOT3_RGBA) \
+ X("BLEND_DST_RGB", GL_BLEND_DST_RGB) \
+ X("BLEND_SRC_RGB", GL_BLEND_SRC_RGB) \
+ X("BLEND_DST_ALPHA", GL_BLEND_DST_ALPHA) \
+ X("BLEND_SRC_ALPHA", GL_BLEND_SRC_ALPHA) \
+ X("POINT_FADE_THRESHOLD_SIZE", GL_POINT_FADE_THRESHOLD_SIZE) \
+ X("DEPTH_COMPONENT16", GL_DEPTH_COMPONENT16) \
+ X("DEPTH_COMPONENT24", GL_DEPTH_COMPONENT24) \
+ X("DEPTH_COMPONENT32", GL_DEPTH_COMPONENT32) \
+ X("MIRRORED_REPEAT", GL_MIRRORED_REPEAT) \
+ X("MAX_TEXTURE_LOD_BIAS", GL_MAX_TEXTURE_LOD_BIAS) \
+ X("TEXTURE_LOD_BIAS", GL_TEXTURE_LOD_BIAS) \
+ X("INCR_WRAP", GL_INCR_WRAP) \
+ X("DECR_WRAP", GL_DECR_WRAP) \
+ X("TEXTURE_DEPTH_SIZE", GL_TEXTURE_DEPTH_SIZE) \
+ X("TEXTURE_COMPARE_MODE", GL_TEXTURE_COMPARE_MODE) \
+ X("TEXTURE_COMPARE_FUNC", GL_TEXTURE_COMPARE_FUNC) \
+ X("POINT_SIZE_MIN", GL_POINT_SIZE_MIN) \
+ X("POINT_SIZE_MAX", GL_POINT_SIZE_MAX) \
+ X("POINT_DISTANCE_ATTENUATION", GL_POINT_DISTANCE_ATTENUATION) \
+ X("GENERATE_MIPMAP", GL_GENERATE_MIPMAP) \
+ X("GENERATE_MIPMAP_HINT", GL_GENERATE_MIPMAP_HINT) \
+ X("FOG_COORDINATE_SOURCE", GL_FOG_COORDINATE_SOURCE) \
+ X("FOG_COORDINATE", GL_FOG_COORDINATE) \
+ X("FRAGMENT_DEPTH", GL_FRAGMENT_DEPTH) \
+ X("CURRENT_FOG_COORDINATE", GL_CURRENT_FOG_COORDINATE) \
+ X("FOG_COORDINATE_ARRAY_TYPE", GL_FOG_COORDINATE_ARRAY_TYPE) \
+ X("FOG_COORDINATE_ARRAY_STRIDE", GL_FOG_COORDINATE_ARRAY_STRIDE) \
+ X("FOG_COORDINATE_ARRAY_POINTER", GL_FOG_COORDINATE_ARRAY_POINTER) \
+ X("FOG_COORDINATE_ARRAY", GL_FOG_COORDINATE_ARRAY) \
+ X("COLOR_SUM", GL_COLOR_SUM) \
+ X("CURRENT_SECONDARY_COLOR", GL_CURRENT_SECONDARY_COLOR) \
+ X("SECONDARY_COLOR_ARRAY_SIZE", GL_SECONDARY_COLOR_ARRAY_SIZE) \
+ X("SECONDARY_COLOR_ARRAY_TYPE", GL_SECONDARY_COLOR_ARRAY_TYPE) \
+ X("SECONDARY_COLOR_ARRAY_STRIDE", GL_SECONDARY_COLOR_ARRAY_STRIDE) \
+ X("SECONDARY_COLOR_ARRAY_POINTER", GL_SECONDARY_COLOR_ARRAY_POINTER) \
+ X("SECONDARY_COLOR_ARRAY", GL_SECONDARY_COLOR_ARRAY) \
+ X("TEXTURE_FILTER_CONTROL", GL_TEXTURE_FILTER_CONTROL) \
+ X("DEPTH_TEXTURE_MODE", GL_DEPTH_TEXTURE_MODE) \
+ X("COMPARE_R_TO_TEXTURE", GL_COMPARE_R_TO_TEXTURE) \
+ X("BLEND_COLOR", GL_BLEND_COLOR) \
+ X("BLEND_EQUATION", GL_BLEND_EQUATION) \
+ X("CONSTANT_COLOR", GL_CONSTANT_COLOR) \
+ X("ONE_MINUS_CONSTANT_COLOR", GL_ONE_MINUS_CONSTANT_COLOR) \
+ X("CONSTANT_ALPHA", GL_CONSTANT_ALPHA) \
+ X("ONE_MINUS_CONSTANT_ALPHA", GL_ONE_MINUS_CONSTANT_ALPHA) \
+ X("FUNC_ADD", GL_FUNC_ADD) \
+ X("FUNC_REVERSE_SUBTRACT", GL_FUNC_REVERSE_SUBTRACT) \
+ X("FUNC_SUBTRACT", GL_FUNC_SUBTRACT) \
+ X("MIN", GL_MIN) \
+ X("MAX", GL_MAX) \
+ X("BUFFER_SIZE", GL_BUFFER_SIZE) \
+ X("BUFFER_USAGE", GL_BUFFER_USAGE) \
+ X("QUERY_COUNTER_BITS", GL_QUERY_COUNTER_BITS) \
+ X("CURRENT_QUERY", GL_CURRENT_QUERY) \
+ X("QUERY_RESULT", GL_QUERY_RESULT) \
+ X("QUERY_RESULT_AVAILABLE", GL_QUERY_RESULT_AVAILABLE) \
+ X("ARRAY_BUFFER", GL_ARRAY_BUFFER) \
+ X("ELEMENT_ARRAY_BUFFER", GL_ELEMENT_ARRAY_BUFFER) \
+ X("ARRAY_BUFFER_BINDING", GL_ARRAY_BUFFER_BINDING) \
+ X("ELEMENT_ARRAY_BUFFER_BINDING", GL_ELEMENT_ARRAY_BUFFER_BINDING) \
+ X("VERTEX_ATTRIB_ARRAY_BUFFER_BINDING", GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) \
+ X("READ_ONLY", GL_READ_ONLY) \
+ X("WRITE_ONLY", GL_WRITE_ONLY) \
+ X("READ_WRITE", GL_READ_WRITE) \
+ X("BUFFER_ACCESS", GL_BUFFER_ACCESS) \
+ X("BUFFER_MAPPED", GL_BUFFER_MAPPED) \
+ X("BUFFER_MAP_POINTER", GL_BUFFER_MAP_POINTER) \
+ X("STREAM_DRAW", GL_STREAM_DRAW) \
+ X("STREAM_READ", GL_STREAM_READ) \
+ X("STREAM_COPY", GL_STREAM_COPY) \
+ X("STATIC_DRAW", GL_STATIC_DRAW) \
+ X("STATIC_READ", GL_STATIC_READ) \
+ X("STATIC_COPY", GL_STATIC_COPY) \
+ X("DYNAMIC_DRAW", GL_DYNAMIC_DRAW) \
+ X("DYNAMIC_READ", GL_DYNAMIC_READ) \
+ X("DYNAMIC_COPY", GL_DYNAMIC_COPY) \
+ X("SAMPLES_PASSED", GL_SAMPLES_PASSED) \
+ X("SRC1_ALPHA", GL_SRC1_ALPHA) \
+ X("VERTEX_ARRAY_BUFFER_BINDING", GL_VERTEX_ARRAY_BUFFER_BINDING) \
+ X("NORMAL_ARRAY_BUFFER_BINDING", GL_NORMAL_ARRAY_BUFFER_BINDING) \
+ X("COLOR_ARRAY_BUFFER_BINDING", GL_COLOR_ARRAY_BUFFER_BINDING) \
+ X("INDEX_ARRAY_BUFFER_BINDING", GL_INDEX_ARRAY_BUFFER_BINDING) \
+ X("TEXTURE_COORD_ARRAY_BUFFER_BINDING", GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING) \
+ X("EDGE_FLAG_ARRAY_BUFFER_BINDING", GL_EDGE_FLAG_ARRAY_BUFFER_BINDING) \
+ X("SECONDARY_COLOR_ARRAY_BUFFER_BINDING", GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING) \
+ X("FOG_COORDINATE_ARRAY_BUFFER_BINDING", GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING) \
+ X("WEIGHT_ARRAY_BUFFER_BINDING", GL_WEIGHT_ARRAY_BUFFER_BINDING) \
+ X("FOG_COORD_SRC", GL_FOG_COORD_SRC) \
+ X("FOG_COORD", GL_FOG_COORD) \
+ X("CURRENT_FOG_COORD", GL_CURRENT_FOG_COORD) \
+ X("FOG_COORD_ARRAY_TYPE", GL_FOG_COORD_ARRAY_TYPE) \
+ X("FOG_COORD_ARRAY_STRIDE", GL_FOG_COORD_ARRAY_STRIDE) \
+ X("FOG_COORD_ARRAY_POINTER", GL_FOG_COORD_ARRAY_POINTER) \
+ X("FOG_COORD_ARRAY", GL_FOG_COORD_ARRAY) \
+ X("FOG_COORD_ARRAY_BUFFER_BINDING", GL_FOG_COORD_ARRAY_BUFFER_BINDING) \
+ X("SRC0_RGB", GL_SRC0_RGB) \
+ X("SRC1_RGB", GL_SRC1_RGB) \
+ X("SRC2_RGB", GL_SRC2_RGB) \
+ X("SRC0_ALPHA", GL_SRC0_ALPHA) \
+ X("SRC2_ALPHA", GL_SRC2_ALPHA) \
+ X("BLEND_EQUATION_RGB", GL_BLEND_EQUATION_RGB) \
+ X("VERTEX_ATTRIB_ARRAY_ENABLED", GL_VERTEX_ATTRIB_ARRAY_ENABLED) \
+ X("VERTEX_ATTRIB_ARRAY_SIZE", GL_VERTEX_ATTRIB_ARRAY_SIZE) \
+ X("VERTEX_ATTRIB_ARRAY_STRIDE", GL_VERTEX_ATTRIB_ARRAY_STRIDE) \
+ X("VERTEX_ATTRIB_ARRAY_TYPE", GL_VERTEX_ATTRIB_ARRAY_TYPE) \
+ X("CURRENT_VERTEX_ATTRIB", GL_CURRENT_VERTEX_ATTRIB) \
+ X("VERTEX_PROGRAM_POINT_SIZE", GL_VERTEX_PROGRAM_POINT_SIZE) \
+ X("VERTEX_ATTRIB_ARRAY_POINTER", GL_VERTEX_ATTRIB_ARRAY_POINTER) \
+ X("STENCIL_BACK_FUNC", GL_STENCIL_BACK_FUNC) \
+ X("STENCIL_BACK_FAIL", GL_STENCIL_BACK_FAIL) \
+ X("STENCIL_BACK_PASS_DEPTH_FAIL", GL_STENCIL_BACK_PASS_DEPTH_FAIL) \
+ X("STENCIL_BACK_PASS_DEPTH_PASS", GL_STENCIL_BACK_PASS_DEPTH_PASS) \
+ X("MAX_DRAW_BUFFERS", GL_MAX_DRAW_BUFFERS) \
+ X("DRAW_BUFFER0", GL_DRAW_BUFFER0) \
+ X("DRAW_BUFFER1", GL_DRAW_BUFFER1) \
+ X("DRAW_BUFFER2", GL_DRAW_BUFFER2) \
+ X("DRAW_BUFFER3", GL_DRAW_BUFFER3) \
+ X("DRAW_BUFFER4", GL_DRAW_BUFFER4) \
+ X("DRAW_BUFFER5", GL_DRAW_BUFFER5) \
+ X("DRAW_BUFFER6", GL_DRAW_BUFFER6) \
+ X("DRAW_BUFFER7", GL_DRAW_BUFFER7) \
+ X("DRAW_BUFFER8", GL_DRAW_BUFFER8) \
+ X("DRAW_BUFFER9", GL_DRAW_BUFFER9) \
+ X("DRAW_BUFFER10", GL_DRAW_BUFFER10) \
+ X("DRAW_BUFFER11", GL_DRAW_BUFFER11) \
+ X("DRAW_BUFFER12", GL_DRAW_BUFFER12) \
+ X("DRAW_BUFFER13", GL_DRAW_BUFFER13) \
+ X("DRAW_BUFFER14", GL_DRAW_BUFFER14) \
+ X("DRAW_BUFFER15", GL_DRAW_BUFFER15) \
+ X("BLEND_EQUATION_ALPHA", GL_BLEND_EQUATION_ALPHA) \
+ X("MAX_VERTEX_ATTRIBS", GL_MAX_VERTEX_ATTRIBS) \
+ X("VERTEX_ATTRIB_ARRAY_NORMALIZED", GL_VERTEX_ATTRIB_ARRAY_NORMALIZED) \
+ X("MAX_TEXTURE_IMAGE_UNITS", GL_MAX_TEXTURE_IMAGE_UNITS) \
+ X("FRAGMENT_SHADER", GL_FRAGMENT_SHADER) \
+ X("VERTEX_SHADER", GL_VERTEX_SHADER) \
+ X("MAX_FRAGMENT_UNIFORM_COMPONENTS", GL_MAX_FRAGMENT_UNIFORM_COMPONENTS) \
+ X("MAX_VERTEX_UNIFORM_COMPONENTS", GL_MAX_VERTEX_UNIFORM_COMPONENTS) \
+ X("MAX_VARYING_FLOATS", GL_MAX_VARYING_FLOATS) \
+ X("MAX_VERTEX_TEXTURE_IMAGE_UNITS", GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS) \
+ X("MAX_COMBINED_TEXTURE_IMAGE_UNITS", GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS) \
+ X("SHADER_TYPE", GL_SHADER_TYPE) \
+ X("FLOAT_VEC2", GL_FLOAT_VEC2) \
+ X("FLOAT_VEC3", GL_FLOAT_VEC3) \
+ X("FLOAT_VEC4", GL_FLOAT_VEC4) \
+ X("INT_VEC2", GL_INT_VEC2) \
+ X("INT_VEC3", GL_INT_VEC3) \
+ X("INT_VEC4", GL_INT_VEC4) \
+ X("BOOL", GL_BOOL) \
+ X("BOOL_VEC2", GL_BOOL_VEC2) \
+ X("BOOL_VEC3", GL_BOOL_VEC3) \
+ X("BOOL_VEC4", GL_BOOL_VEC4) \
+ X("FLOAT_MAT2", GL_FLOAT_MAT2) \
+ X("FLOAT_MAT3", GL_FLOAT_MAT3) \
+ X("FLOAT_MAT4", GL_FLOAT_MAT4) \
+ X("SAMPLER_1D", GL_SAMPLER_1D) \
+ X("SAMPLER_2D", GL_SAMPLER_2D) \
+ X("SAMPLER_3D", GL_SAMPLER_3D) \
+ X("SAMPLER_CUBE", GL_SAMPLER_CUBE) \
+ X("SAMPLER_1D_SHADOW", GL_SAMPLER_1D_SHADOW) \
+ X("SAMPLER_2D_SHADOW", GL_SAMPLER_2D_SHADOW) \
+ X("DELETE_STATUS", GL_DELETE_STATUS) \
+ X("COMPILE_STATUS", GL_COMPILE_STATUS) \
+ X("LINK_STATUS", GL_LINK_STATUS) \
+ X("VALIDATE_STATUS", GL_VALIDATE_STATUS) \
+ X("INFO_LOG_LENGTH", GL_INFO_LOG_LENGTH) \
+ X("ATTACHED_SHADERS", GL_ATTACHED_SHADERS) \
+ X("ACTIVE_UNIFORMS", GL_ACTIVE_UNIFORMS) \
+ X("ACTIVE_UNIFORM_MAX_LENGTH", GL_ACTIVE_UNIFORM_MAX_LENGTH) \
+ X("SHADER_SOURCE_LENGTH", GL_SHADER_SOURCE_LENGTH) \
+ X("ACTIVE_ATTRIBUTES", GL_ACTIVE_ATTRIBUTES) \
+ X("ACTIVE_ATTRIBUTE_MAX_LENGTH", GL_ACTIVE_ATTRIBUTE_MAX_LENGTH) \
+ X("FRAGMENT_SHADER_DERIVATIVE_HINT", GL_FRAGMENT_SHADER_DERIVATIVE_HINT) \
+ X("SHADING_LANGUAGE_VERSION", GL_SHADING_LANGUAGE_VERSION) \
+ X("CURRENT_PROGRAM", GL_CURRENT_PROGRAM) \
+ X("POINT_SPRITE_COORD_ORIGIN", GL_POINT_SPRITE_COORD_ORIGIN) \
+ X("LOWER_LEFT", GL_LOWER_LEFT) \
+ X("UPPER_LEFT", GL_UPPER_LEFT) \
+ X("STENCIL_BACK_REF", GL_STENCIL_BACK_REF) \
+ X("STENCIL_BACK_VALUE_MASK", GL_STENCIL_BACK_VALUE_MASK) \
+ X("STENCIL_BACK_WRITEMASK", GL_STENCIL_BACK_WRITEMASK) \
+ X("VERTEX_PROGRAM_TWO_SIDE", GL_VERTEX_PROGRAM_TWO_SIDE) \
+ X("POINT_SPRITE", GL_POINT_SPRITE) \
+ X("COORD_REPLACE", GL_COORD_REPLACE) \
+ X("MAX_TEXTURE_COORDS", GL_MAX_TEXTURE_COORDS) \
+ X("PIXEL_PACK_BUFFER", GL_PIXEL_PACK_BUFFER) \
+ X("PIXEL_UNPACK_BUFFER", GL_PIXEL_UNPACK_BUFFER) \
+ X("PIXEL_PACK_BUFFER_BINDING", GL_PIXEL_PACK_BUFFER_BINDING) \
+ X("PIXEL_UNPACK_BUFFER_BINDING", GL_PIXEL_UNPACK_BUFFER_BINDING) \
+ X("FLOAT_MAT2x3", GL_FLOAT_MAT2x3) \
+ X("FLOAT_MAT2x4", GL_FLOAT_MAT2x4) \
+ X("FLOAT_MAT3x2", GL_FLOAT_MAT3x2) \
+ X("FLOAT_MAT3x4", GL_FLOAT_MAT3x4) \
+ X("FLOAT_MAT4x2", GL_FLOAT_MAT4x2) \
+ X("FLOAT_MAT4x3", GL_FLOAT_MAT4x3) \
+ X("SRGB", GL_SRGB) \
+ X("SRGB8", GL_SRGB8) \
+ X("SRGB_ALPHA", GL_SRGB_ALPHA) \
+ X("SRGB8_ALPHA8", GL_SRGB8_ALPHA8) \
+ X("COMPRESSED_SRGB", GL_COMPRESSED_SRGB) \
+ X("COMPRESSED_SRGB_ALPHA", GL_COMPRESSED_SRGB_ALPHA) \
+ X("CURRENT_RASTER_SECONDARY_COLOR", GL_CURRENT_RASTER_SECONDARY_COLOR) \
+ X("SLUMINANCE_ALPHA", GL_SLUMINANCE_ALPHA) \
+ X("SLUMINANCE8_ALPHA8", GL_SLUMINANCE8_ALPHA8) \
+ X("SLUMINANCE", GL_SLUMINANCE) \
+ X("SLUMINANCE8", GL_SLUMINANCE8) \
+ X("COMPRESSED_SLUMINANCE", GL_COMPRESSED_SLUMINANCE) \
+ X("COMPRESSED_SLUMINANCE_ALPHA", GL_COMPRESSED_SLUMINANCE_ALPHA) \
+ X("COMPARE_REF_TO_TEXTURE", GL_COMPARE_REF_TO_TEXTURE) \
+ X("CLIP_DISTANCE0", GL_CLIP_DISTANCE0) \
+ X("CLIP_DISTANCE1", GL_CLIP_DISTANCE1) \
+ X("CLIP_DISTANCE2", GL_CLIP_DISTANCE2) \
+ X("CLIP_DISTANCE3", GL_CLIP_DISTANCE3) \
+ X("CLIP_DISTANCE4", GL_CLIP_DISTANCE4) \
+ X("CLIP_DISTANCE5", GL_CLIP_DISTANCE5) \
+ X("CLIP_DISTANCE6", GL_CLIP_DISTANCE6) \
+ X("CLIP_DISTANCE7", GL_CLIP_DISTANCE7) \
+ X("MAX_CLIP_DISTANCES", GL_MAX_CLIP_DISTANCES) \
+ X("MAJOR_VERSION", GL_MAJOR_VERSION) \
+ X("MINOR_VERSION", GL_MINOR_VERSION) \
+ X("NUM_EXTENSIONS", GL_NUM_EXTENSIONS) \
+ X("CONTEXT_FLAGS", GL_CONTEXT_FLAGS) \
+ X("COMPRESSED_RED", GL_COMPRESSED_RED) \
+ X("COMPRESSED_RG", GL_COMPRESSED_RG) \
+ X("CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT", GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT) \
+ X("RGBA32F", GL_RGBA32F) \
+ X("RGB32F", GL_RGB32F) \
+ X("RGBA16F", GL_RGBA16F) \
+ X("RGB16F", GL_RGB16F) \
+ X("VERTEX_ATTRIB_ARRAY_INTEGER", GL_VERTEX_ATTRIB_ARRAY_INTEGER) \
+ X("MAX_ARRAY_TEXTURE_LAYERS", GL_MAX_ARRAY_TEXTURE_LAYERS) \
+ X("MIN_PROGRAM_TEXEL_OFFSET", GL_MIN_PROGRAM_TEXEL_OFFSET) \
+ X("MAX_PROGRAM_TEXEL_OFFSET", GL_MAX_PROGRAM_TEXEL_OFFSET) \
+ X("CLAMP_READ_COLOR", GL_CLAMP_READ_COLOR) \
+ X("FIXED_ONLY", GL_FIXED_ONLY) \
+ X("MAX_VARYING_COMPONENTS", GL_MAX_VARYING_COMPONENTS) \
+ X("TEXTURE_1D_ARRAY", GL_TEXTURE_1D_ARRAY) \
+ X("PROXY_TEXTURE_1D_ARRAY", GL_PROXY_TEXTURE_1D_ARRAY) \
+ X("TEXTURE_2D_ARRAY", GL_TEXTURE_2D_ARRAY) \
+ X("PROXY_TEXTURE_2D_ARRAY", GL_PROXY_TEXTURE_2D_ARRAY) \
+ X("TEXTURE_BINDING_1D_ARRAY", GL_TEXTURE_BINDING_1D_ARRAY) \
+ X("TEXTURE_BINDING_2D_ARRAY", GL_TEXTURE_BINDING_2D_ARRAY) \
+ X("R11F_G11F_B10F", GL_R11F_G11F_B10F) \
+ X("UNSIGNED_INT_10F_11F_11F_REV", GL_UNSIGNED_INT_10F_11F_11F_REV) \
+ X("RGB9_E5", GL_RGB9_E5) \
+ X("UNSIGNED_INT_5_9_9_9_REV", GL_UNSIGNED_INT_5_9_9_9_REV) \
+ X("TEXTURE_SHARED_SIZE", GL_TEXTURE_SHARED_SIZE) \
+ X("TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH", GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH) \
+ X("TRANSFORM_FEEDBACK_BUFFER_MODE", GL_TRANSFORM_FEEDBACK_BUFFER_MODE) \
+ X("MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS", GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS) \
+ X("TRANSFORM_FEEDBACK_VARYINGS", GL_TRANSFORM_FEEDBACK_VARYINGS) \
+ X("TRANSFORM_FEEDBACK_BUFFER_START", GL_TRANSFORM_FEEDBACK_BUFFER_START) \
+ X("TRANSFORM_FEEDBACK_BUFFER_SIZE", GL_TRANSFORM_FEEDBACK_BUFFER_SIZE) \
+ X("PRIMITIVES_GENERATED", GL_PRIMITIVES_GENERATED) \
+ X("TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN", GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN) \
+ X("RASTERIZER_DISCARD", GL_RASTERIZER_DISCARD) \
+ X("MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS", GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS) \
+ X("MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS", GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS) \
+ X("INTERLEAVED_ATTRIBS", GL_INTERLEAVED_ATTRIBS) \
+ X("SEPARATE_ATTRIBS", GL_SEPARATE_ATTRIBS) \
+ X("TRANSFORM_FEEDBACK_BUFFER", GL_TRANSFORM_FEEDBACK_BUFFER) \
+ X("TRANSFORM_FEEDBACK_BUFFER_BINDING", GL_TRANSFORM_FEEDBACK_BUFFER_BINDING) \
+ X("RGBA32UI", GL_RGBA32UI) \
+ X("RGB32UI", GL_RGB32UI) \
+ X("RGBA16UI", GL_RGBA16UI) \
+ X("RGB16UI", GL_RGB16UI) \
+ X("RGBA8UI", GL_RGBA8UI) \
+ X("RGB8UI", GL_RGB8UI) \
+ X("RGBA32I", GL_RGBA32I) \
+ X("RGB32I", GL_RGB32I) \
+ X("RGBA16I", GL_RGBA16I) \
+ X("RGB16I", GL_RGB16I) \
+ X("RGBA8I", GL_RGBA8I) \
+ X("RGB8I", GL_RGB8I) \
+ X("RED_INTEGER", GL_RED_INTEGER) \
+ X("GREEN_INTEGER", GL_GREEN_INTEGER) \
+ X("BLUE_INTEGER", GL_BLUE_INTEGER) \
+ X("RGB_INTEGER", GL_RGB_INTEGER) \
+ X("RGBA_INTEGER", GL_RGBA_INTEGER) \
+ X("BGR_INTEGER", GL_BGR_INTEGER) \
+ X("BGRA_INTEGER", GL_BGRA_INTEGER) \
+ X("SAMPLER_1D_ARRAY", GL_SAMPLER_1D_ARRAY) \
+ X("SAMPLER_2D_ARRAY", GL_SAMPLER_2D_ARRAY) \
+ X("SAMPLER_1D_ARRAY_SHADOW", GL_SAMPLER_1D_ARRAY_SHADOW) \
+ X("SAMPLER_2D_ARRAY_SHADOW", GL_SAMPLER_2D_ARRAY_SHADOW) \
+ X("SAMPLER_CUBE_SHADOW", GL_SAMPLER_CUBE_SHADOW) \
+ X("UNSIGNED_INT_VEC2", GL_UNSIGNED_INT_VEC2) \
+ X("UNSIGNED_INT_VEC3", GL_UNSIGNED_INT_VEC3) \
+ X("UNSIGNED_INT_VEC4", GL_UNSIGNED_INT_VEC4) \
+ X("INT_SAMPLER_1D", GL_INT_SAMPLER_1D) \
+ X("INT_SAMPLER_2D", GL_INT_SAMPLER_2D) \
+ X("INT_SAMPLER_3D", GL_INT_SAMPLER_3D) \
+ X("INT_SAMPLER_CUBE", GL_INT_SAMPLER_CUBE) \
+ X("INT_SAMPLER_1D_ARRAY", GL_INT_SAMPLER_1D_ARRAY) \
+ X("INT_SAMPLER_2D_ARRAY", GL_INT_SAMPLER_2D_ARRAY) \
+ X("UNSIGNED_INT_SAMPLER_1D", GL_UNSIGNED_INT_SAMPLER_1D) \
+ X("UNSIGNED_INT_SAMPLER_2D", GL_UNSIGNED_INT_SAMPLER_2D) \
+ X("UNSIGNED_INT_SAMPLER_3D", GL_UNSIGNED_INT_SAMPLER_3D) \
+ X("UNSIGNED_INT_SAMPLER_CUBE", GL_UNSIGNED_INT_SAMPLER_CUBE) \
+ X("UNSIGNED_INT_SAMPLER_1D_ARRAY", GL_UNSIGNED_INT_SAMPLER_1D_ARRAY) \
+ X("UNSIGNED_INT_SAMPLER_2D_ARRAY", GL_UNSIGNED_INT_SAMPLER_2D_ARRAY) \
+ X("QUERY_WAIT", GL_QUERY_WAIT) \
+ X("QUERY_NO_WAIT", GL_QUERY_NO_WAIT) \
+ X("QUERY_BY_REGION_WAIT", GL_QUERY_BY_REGION_WAIT) \
+ X("QUERY_BY_REGION_NO_WAIT", GL_QUERY_BY_REGION_NO_WAIT) \
+ X("BUFFER_ACCESS_FLAGS", GL_BUFFER_ACCESS_FLAGS) \
+ X("BUFFER_MAP_LENGTH", GL_BUFFER_MAP_LENGTH) \
+ X("BUFFER_MAP_OFFSET", GL_BUFFER_MAP_OFFSET) \
+ X("DEPTH_COMPONENT32F", GL_DEPTH_COMPONENT32F) \
+ X("DEPTH32F_STENCIL8", GL_DEPTH32F_STENCIL8) \
+ X("FLOAT_32_UNSIGNED_INT_24_8_REV", GL_FLOAT_32_UNSIGNED_INT_24_8_REV) \
+ X("INVALID_FRAMEBUFFER_OPERATION", GL_INVALID_FRAMEBUFFER_OPERATION) \
+ X("FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING", GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING) \
+ X("FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE", GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE) \
+ X("FRAMEBUFFER_ATTACHMENT_RED_SIZE", GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE) \
+ X("FRAMEBUFFER_ATTACHMENT_GREEN_SIZE", GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE) \
+ X("FRAMEBUFFER_ATTACHMENT_BLUE_SIZE", GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE) \
+ X("FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE", GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE) \
+ X("FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE", GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE) \
+ X("FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE", GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE) \
+ X("FRAMEBUFFER_DEFAULT", GL_FRAMEBUFFER_DEFAULT) \
+ X("FRAMEBUFFER_UNDEFINED", GL_FRAMEBUFFER_UNDEFINED) \
+ X("DEPTH_STENCIL_ATTACHMENT", GL_DEPTH_STENCIL_ATTACHMENT) \
+ X("MAX_RENDERBUFFER_SIZE", GL_MAX_RENDERBUFFER_SIZE) \
+ X("DEPTH_STENCIL", GL_DEPTH_STENCIL) \
+ X("UNSIGNED_INT_24_8", GL_UNSIGNED_INT_24_8) \
+ X("DEPTH24_STENCIL8", GL_DEPTH24_STENCIL8) \
+ X("TEXTURE_STENCIL_SIZE", GL_TEXTURE_STENCIL_SIZE) \
+ X("TEXTURE_RED_TYPE", GL_TEXTURE_RED_TYPE) \
+ X("TEXTURE_GREEN_TYPE", GL_TEXTURE_GREEN_TYPE) \
+ X("TEXTURE_BLUE_TYPE", GL_TEXTURE_BLUE_TYPE) \
+ X("TEXTURE_ALPHA_TYPE", GL_TEXTURE_ALPHA_TYPE) \
+ X("TEXTURE_DEPTH_TYPE", GL_TEXTURE_DEPTH_TYPE) \
+ X("UNSIGNED_NORMALIZED", GL_UNSIGNED_NORMALIZED) \
+ X("FRAMEBUFFER_BINDING", GL_FRAMEBUFFER_BINDING) \
+ X("DRAW_FRAMEBUFFER_BINDING", GL_DRAW_FRAMEBUFFER_BINDING) \
+ X("RENDERBUFFER_BINDING", GL_RENDERBUFFER_BINDING) \
+ X("READ_FRAMEBUFFER", GL_READ_FRAMEBUFFER) \
+ X("DRAW_FRAMEBUFFER", GL_DRAW_FRAMEBUFFER) \
+ X("READ_FRAMEBUFFER_BINDING", GL_READ_FRAMEBUFFER_BINDING) \
+ X("RENDERBUFFER_SAMPLES", GL_RENDERBUFFER_SAMPLES) \
+ X("FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE", GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE) \
+ X("FRAMEBUFFER_ATTACHMENT_OBJECT_NAME", GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) \
+ X("FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL", GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL) \
+ X("FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE", GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE) \
+ X("FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER", GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER) \
+ X("FRAMEBUFFER_COMPLETE", GL_FRAMEBUFFER_COMPLETE) \
+ X("FRAMEBUFFER_INCOMPLETE_ATTACHMENT", GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT) \
+ X("FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT", GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT) \
+ X("FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER", GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER) \
+ X("FRAMEBUFFER_INCOMPLETE_READ_BUFFER", GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER) \
+ X("FRAMEBUFFER_UNSUPPORTED", GL_FRAMEBUFFER_UNSUPPORTED) \
+ X("MAX_COLOR_ATTACHMENTS", GL_MAX_COLOR_ATTACHMENTS) \
+ X("COLOR_ATTACHMENT0", GL_COLOR_ATTACHMENT0) \
+ X("COLOR_ATTACHMENT1", GL_COLOR_ATTACHMENT1) \
+ X("COLOR_ATTACHMENT2", GL_COLOR_ATTACHMENT2) \
+ X("COLOR_ATTACHMENT3", GL_COLOR_ATTACHMENT3) \
+ X("COLOR_ATTACHMENT4", GL_COLOR_ATTACHMENT4) \
+ X("COLOR_ATTACHMENT5", GL_COLOR_ATTACHMENT5) \
+ X("COLOR_ATTACHMENT6", GL_COLOR_ATTACHMENT6) \
+ X("COLOR_ATTACHMENT7", GL_COLOR_ATTACHMENT7) \
+ X("COLOR_ATTACHMENT8", GL_COLOR_ATTACHMENT8) \
+ X("COLOR_ATTACHMENT9", GL_COLOR_ATTACHMENT9) \
+ X("COLOR_ATTACHMENT10", GL_COLOR_ATTACHMENT10) \
+ X("COLOR_ATTACHMENT11", GL_COLOR_ATTACHMENT11) \
+ X("COLOR_ATTACHMENT12", GL_COLOR_ATTACHMENT12) \
+ X("COLOR_ATTACHMENT13", GL_COLOR_ATTACHMENT13) \
+ X("COLOR_ATTACHMENT14", GL_COLOR_ATTACHMENT14) \
+ X("COLOR_ATTACHMENT15", GL_COLOR_ATTACHMENT15) \
+ X("COLOR_ATTACHMENT16", GL_COLOR_ATTACHMENT16) \
+ X("COLOR_ATTACHMENT17", GL_COLOR_ATTACHMENT17) \
+ X("COLOR_ATTACHMENT18", GL_COLOR_ATTACHMENT18) \
+ X("COLOR_ATTACHMENT19", GL_COLOR_ATTACHMENT19) \
+ X("COLOR_ATTACHMENT20", GL_COLOR_ATTACHMENT20) \
+ X("COLOR_ATTACHMENT21", GL_COLOR_ATTACHMENT21) \
+ X("COLOR_ATTACHMENT22", GL_COLOR_ATTACHMENT22) \
+ X("COLOR_ATTACHMENT23", GL_COLOR_ATTACHMENT23) \
+ X("COLOR_ATTACHMENT24", GL_COLOR_ATTACHMENT24) \
+ X("COLOR_ATTACHMENT25", GL_COLOR_ATTACHMENT25) \
+ X("COLOR_ATTACHMENT26", GL_COLOR_ATTACHMENT26) \
+ X("COLOR_ATTACHMENT27", GL_COLOR_ATTACHMENT27) \
+ X("COLOR_ATTACHMENT28", GL_COLOR_ATTACHMENT28) \
+ X("COLOR_ATTACHMENT29", GL_COLOR_ATTACHMENT29) \
+ X("COLOR_ATTACHMENT30", GL_COLOR_ATTACHMENT30) \
+ X("COLOR_ATTACHMENT31", GL_COLOR_ATTACHMENT31) \
+ X("DEPTH_ATTACHMENT", GL_DEPTH_ATTACHMENT) \
+ X("STENCIL_ATTACHMENT", GL_STENCIL_ATTACHMENT) \
+ X("FRAMEBUFFER", GL_FRAMEBUFFER) \
+ X("RENDERBUFFER", GL_RENDERBUFFER) \
+ X("RENDERBUFFER_WIDTH", GL_RENDERBUFFER_WIDTH) \
+ X("RENDERBUFFER_HEIGHT", GL_RENDERBUFFER_HEIGHT) \
+ X("RENDERBUFFER_INTERNAL_FORMAT", GL_RENDERBUFFER_INTERNAL_FORMAT) \
+ X("STENCIL_INDEX1", GL_STENCIL_INDEX1) \
+ X("STENCIL_INDEX4", GL_STENCIL_INDEX4) \
+ X("STENCIL_INDEX8", GL_STENCIL_INDEX8) \
+ X("STENCIL_INDEX16", GL_STENCIL_INDEX16) \
+ X("RENDERBUFFER_RED_SIZE", GL_RENDERBUFFER_RED_SIZE) \
+ X("RENDERBUFFER_GREEN_SIZE", GL_RENDERBUFFER_GREEN_SIZE) \
+ X("RENDERBUFFER_BLUE_SIZE", GL_RENDERBUFFER_BLUE_SIZE) \
+ X("RENDERBUFFER_ALPHA_SIZE", GL_RENDERBUFFER_ALPHA_SIZE) \
+ X("RENDERBUFFER_DEPTH_SIZE", GL_RENDERBUFFER_DEPTH_SIZE) \
+ X("RENDERBUFFER_STENCIL_SIZE", GL_RENDERBUFFER_STENCIL_SIZE) \
+ X("FRAMEBUFFER_INCOMPLETE_MULTISAMPLE", GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE) \
+ X("MAX_SAMPLES", GL_MAX_SAMPLES) \
+ X("INDEX", GL_INDEX) \
+ X("TEXTURE_LUMINANCE_TYPE", GL_TEXTURE_LUMINANCE_TYPE) \
+ X("TEXTURE_INTENSITY_TYPE", GL_TEXTURE_INTENSITY_TYPE) \
+ X("FRAMEBUFFER_SRGB", GL_FRAMEBUFFER_SRGB) \
+ X("HALF_FLOAT", GL_HALF_FLOAT) \
+ X("MAP_READ_BIT", GL_MAP_READ_BIT) \
+ X("MAP_WRITE_BIT", GL_MAP_WRITE_BIT) \
+ X("MAP_INVALIDATE_RANGE_BIT", GL_MAP_INVALIDATE_RANGE_BIT) \
+ X("MAP_INVALIDATE_BUFFER_BIT", GL_MAP_INVALIDATE_BUFFER_BIT) \
+ X("MAP_FLUSH_EXPLICIT_BIT", GL_MAP_FLUSH_EXPLICIT_BIT) \
+ X("MAP_UNSYNCHRONIZED_BIT", GL_MAP_UNSYNCHRONIZED_BIT) \
+ X("COMPRESSED_RED_RGTC1", GL_COMPRESSED_RED_RGTC1) \
+ X("COMPRESSED_SIGNED_RED_RGTC1", GL_COMPRESSED_SIGNED_RED_RGTC1) \
+ X("COMPRESSED_RG_RGTC2", GL_COMPRESSED_RG_RGTC2) \
+ X("COMPRESSED_SIGNED_RG_RGTC2", GL_COMPRESSED_SIGNED_RG_RGTC2) \
+ X("RG", GL_RG) \
+ X("RG_INTEGER", GL_RG_INTEGER) \
+ X("R8", GL_R8) \
+ X("R16", GL_R16) \
+ X("RG8", GL_RG8) \
+ X("RG16", GL_RG16) \
+ X("R16F", GL_R16F) \
+ X("R32F", GL_R32F) \
+ X("RG16F", GL_RG16F) \
+ X("RG32F", GL_RG32F) \
+ X("R8I", GL_R8I) \
+ X("R8UI", GL_R8UI) \
+ X("R16I", GL_R16I) \
+ X("R16UI", GL_R16UI) \
+ X("R32I", GL_R32I) \
+ X("R32UI", GL_R32UI) \
+ X("RG8I", GL_RG8I) \
+ X("RG8UI", GL_RG8UI) \
+ X("RG16I", GL_RG16I) \
+ X("RG16UI", GL_RG16UI) \
+ X("RG32I", GL_RG32I) \
+ X("RG32UI", GL_RG32UI) \
+ X("VERTEX_ARRAY_BINDING", GL_VERTEX_ARRAY_BINDING) \
+ X("CLAMP_VERTEX_COLOR", GL_CLAMP_VERTEX_COLOR) \
+ X("CLAMP_FRAGMENT_COLOR", GL_CLAMP_FRAGMENT_COLOR) \
+ X("ALPHA_INTEGER", GL_ALPHA_INTEGER) \
+ X("SAMPLER_2D_RECT", GL_SAMPLER_2D_RECT) \
+ X("SAMPLER_2D_RECT_SHADOW", GL_SAMPLER_2D_RECT_SHADOW) \
+ X("SAMPLER_BUFFER", GL_SAMPLER_BUFFER) \
+ X("INT_SAMPLER_2D_RECT", GL_INT_SAMPLER_2D_RECT) \
+ X("INT_SAMPLER_BUFFER", GL_INT_SAMPLER_BUFFER) \
+ X("UNSIGNED_INT_SAMPLER_2D_RECT", GL_UNSIGNED_INT_SAMPLER_2D_RECT) \
+ X("UNSIGNED_INT_SAMPLER_BUFFER", GL_UNSIGNED_INT_SAMPLER_BUFFER) \
+ X("TEXTURE_BUFFER", GL_TEXTURE_BUFFER) \
+ X("MAX_TEXTURE_BUFFER_SIZE", GL_MAX_TEXTURE_BUFFER_SIZE) \
+ X("TEXTURE_BINDING_BUFFER", GL_TEXTURE_BINDING_BUFFER) \
+ X("TEXTURE_BUFFER_DATA_STORE_BINDING", GL_TEXTURE_BUFFER_DATA_STORE_BINDING) \
+ X("TEXTURE_RECTANGLE", GL_TEXTURE_RECTANGLE) \
+ X("TEXTURE_BINDING_RECTANGLE", GL_TEXTURE_BINDING_RECTANGLE) \
+ X("PROXY_TEXTURE_RECTANGLE", GL_PROXY_TEXTURE_RECTANGLE) \
+ X("MAX_RECTANGLE_TEXTURE_SIZE", GL_MAX_RECTANGLE_TEXTURE_SIZE) \
+ X("R8_SNORM", GL_R8_SNORM) \
+ X("RG8_SNORM", GL_RG8_SNORM) \
+ X("RGB8_SNORM", GL_RGB8_SNORM) \
+ X("RGBA8_SNORM", GL_RGBA8_SNORM) \
+ X("R16_SNORM", GL_R16_SNORM) \
+ X("RG16_SNORM", GL_RG16_SNORM) \
+ X("RGB16_SNORM", GL_RGB16_SNORM) \
+ X("RGBA16_SNORM", GL_RGBA16_SNORM) \
+ X("SIGNED_NORMALIZED", GL_SIGNED_NORMALIZED) \
+ X("PRIMITIVE_RESTART", GL_PRIMITIVE_RESTART) \
+ X("PRIMITIVE_RESTART_INDEX", GL_PRIMITIVE_RESTART_INDEX) \
+ X("COPY_READ_BUFFER", GL_COPY_READ_BUFFER) \
+ X("COPY_WRITE_BUFFER", GL_COPY_WRITE_BUFFER) \
+ X("UNIFORM_BUFFER", GL_UNIFORM_BUFFER) \
+ X("UNIFORM_BUFFER_BINDING", GL_UNIFORM_BUFFER_BINDING) \
+ X("UNIFORM_BUFFER_START", GL_UNIFORM_BUFFER_START) \
+ X("UNIFORM_BUFFER_SIZE", GL_UNIFORM_BUFFER_SIZE) \
+ X("MAX_VERTEX_UNIFORM_BLOCKS", GL_MAX_VERTEX_UNIFORM_BLOCKS) \
+ X("MAX_GEOMETRY_UNIFORM_BLOCKS", GL_MAX_GEOMETRY_UNIFORM_BLOCKS) \
+ X("MAX_FRAGMENT_UNIFORM_BLOCKS", GL_MAX_FRAGMENT_UNIFORM_BLOCKS) \
+ X("MAX_COMBINED_UNIFORM_BLOCKS", GL_MAX_COMBINED_UNIFORM_BLOCKS) \
+ X("MAX_UNIFORM_BUFFER_BINDINGS", GL_MAX_UNIFORM_BUFFER_BINDINGS) \
+ X("MAX_UNIFORM_BLOCK_SIZE", GL_MAX_UNIFORM_BLOCK_SIZE) \
+ X("MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS", GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS) \
+ X("MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS", GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS) \
+ X("MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS", GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS) \
+ X("UNIFORM_BUFFER_OFFSET_ALIGNMENT", GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT) \
+ X("ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH", GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH) \
+ X("ACTIVE_UNIFORM_BLOCKS", GL_ACTIVE_UNIFORM_BLOCKS) \
+ X("UNIFORM_TYPE", GL_UNIFORM_TYPE) \
+ X("UNIFORM_SIZE", GL_UNIFORM_SIZE) \
+ X("UNIFORM_NAME_LENGTH", GL_UNIFORM_NAME_LENGTH) \
+ X("UNIFORM_BLOCK_INDEX", GL_UNIFORM_BLOCK_INDEX) \
+ X("UNIFORM_OFFSET", GL_UNIFORM_OFFSET) \
+ X("UNIFORM_ARRAY_STRIDE", GL_UNIFORM_ARRAY_STRIDE) \
+ X("UNIFORM_MATRIX_STRIDE", GL_UNIFORM_MATRIX_STRIDE) \
+ X("UNIFORM_IS_ROW_MAJOR", GL_UNIFORM_IS_ROW_MAJOR) \
+ X("UNIFORM_BLOCK_BINDING", GL_UNIFORM_BLOCK_BINDING) \
+ X("UNIFORM_BLOCK_DATA_SIZE", GL_UNIFORM_BLOCK_DATA_SIZE) \
+ X("UNIFORM_BLOCK_NAME_LENGTH", GL_UNIFORM_BLOCK_NAME_LENGTH) \
+ X("UNIFORM_BLOCK_ACTIVE_UNIFORMS", GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS) \
+ X("UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES", GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES) \
+ X("UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER", GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER) \
+ X("UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER", GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER) \
+ X("UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER", GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER) \
+ X("INVALID_INDEX", GL_INVALID_INDEX) \
+ X("CONTEXT_CORE_PROFILE_BIT", GL_CONTEXT_CORE_PROFILE_BIT) \
+ X("CONTEXT_COMPATIBILITY_PROFILE_BIT", GL_CONTEXT_COMPATIBILITY_PROFILE_BIT) \
+ X("LINES_ADJACENCY", GL_LINES_ADJACENCY) \
+ X("LINE_STRIP_ADJACENCY", GL_LINE_STRIP_ADJACENCY) \
+ X("TRIANGLES_ADJACENCY", GL_TRIANGLES_ADJACENCY) \
+ X("TRIANGLE_STRIP_ADJACENCY", GL_TRIANGLE_STRIP_ADJACENCY) \
+ X("PROGRAM_POINT_SIZE", GL_PROGRAM_POINT_SIZE) \
+ X("MAX_GEOMETRY_TEXTURE_IMAGE_UNITS", GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS) \
+ X("FRAMEBUFFER_ATTACHMENT_LAYERED", GL_FRAMEBUFFER_ATTACHMENT_LAYERED) \
+ X("FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS", GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS) \
+ X("GEOMETRY_SHADER", GL_GEOMETRY_SHADER) \
+ X("GEOMETRY_VERTICES_OUT", GL_GEOMETRY_VERTICES_OUT) \
+ X("GEOMETRY_INPUT_TYPE", GL_GEOMETRY_INPUT_TYPE) \
+ X("GEOMETRY_OUTPUT_TYPE", GL_GEOMETRY_OUTPUT_TYPE) \
+ X("MAX_GEOMETRY_UNIFORM_COMPONENTS", GL_MAX_GEOMETRY_UNIFORM_COMPONENTS) \
+ X("MAX_GEOMETRY_OUTPUT_VERTICES", GL_MAX_GEOMETRY_OUTPUT_VERTICES) \
+ X("MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS", GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS) \
+ X("MAX_VERTEX_OUTPUT_COMPONENTS", GL_MAX_VERTEX_OUTPUT_COMPONENTS) \
+ X("MAX_GEOMETRY_INPUT_COMPONENTS", GL_MAX_GEOMETRY_INPUT_COMPONENTS) \
+ X("MAX_GEOMETRY_OUTPUT_COMPONENTS", GL_MAX_GEOMETRY_OUTPUT_COMPONENTS) \
+ X("MAX_FRAGMENT_INPUT_COMPONENTS", GL_MAX_FRAGMENT_INPUT_COMPONENTS) \
+ X("CONTEXT_PROFILE_MASK", GL_CONTEXT_PROFILE_MASK) \
+ X("DEPTH_CLAMP", GL_DEPTH_CLAMP) \
+ X("QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION", GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION) \
+ X("FIRST_VERTEX_CONVENTION", GL_FIRST_VERTEX_CONVENTION) \
+ X("LAST_VERTEX_CONVENTION", GL_LAST_VERTEX_CONVENTION) \
+ X("PROVOKING_VERTEX", GL_PROVOKING_VERTEX) \
+ X("TEXTURE_CUBE_MAP_SEAMLESS", GL_TEXTURE_CUBE_MAP_SEAMLESS) \
+ X("MAX_SERVER_WAIT_TIMEOUT", GL_MAX_SERVER_WAIT_TIMEOUT) \
+ X("OBJECT_TYPE", GL_OBJECT_TYPE) \
+ X("SYNC_CONDITION", GL_SYNC_CONDITION) \
+ X("SYNC_STATUS", GL_SYNC_STATUS) \
+ X("SYNC_FLAGS", GL_SYNC_FLAGS) \
+ X("SYNC_FENCE", GL_SYNC_FENCE) \
+ X("SYNC_GPU_COMMANDS_COMPLETE", GL_SYNC_GPU_COMMANDS_COMPLETE) \
+ X("UNSIGNALED", GL_UNSIGNALED) \
+ X("SIGNALED", GL_SIGNALED) \
+ X("ALREADY_SIGNALED", GL_ALREADY_SIGNALED) \
+ X("TIMEOUT_EXPIRED", GL_TIMEOUT_EXPIRED) \
+ X("CONDITION_SATISFIED", GL_CONDITION_SATISFIED) \
+ X("WAIT_FAILED", GL_WAIT_FAILED) \
+ X("TIMEOUT_IGNORED", GL_TIMEOUT_IGNORED) \
+ X("SYNC_FLUSH_COMMANDS_BIT", GL_SYNC_FLUSH_COMMANDS_BIT) \
+ X("SAMPLE_POSITION", GL_SAMPLE_POSITION) \
+ X("SAMPLE_MASK", GL_SAMPLE_MASK) \
+ X("SAMPLE_MASK_VALUE", GL_SAMPLE_MASK_VALUE) \
+ X("MAX_SAMPLE_MASK_WORDS", GL_MAX_SAMPLE_MASK_WORDS) \
+ X("TEXTURE_2D_MULTISAMPLE", GL_TEXTURE_2D_MULTISAMPLE) \
+ X("PROXY_TEXTURE_2D_MULTISAMPLE", GL_PROXY_TEXTURE_2D_MULTISAMPLE) \
+ X("TEXTURE_2D_MULTISAMPLE_ARRAY", GL_TEXTURE_2D_MULTISAMPLE_ARRAY) \
+ X("PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY", GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY) \
+ X("TEXTURE_BINDING_2D_MULTISAMPLE", GL_TEXTURE_BINDING_2D_MULTISAMPLE) \
+ X("TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY", GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY) \
+ X("TEXTURE_SAMPLES", GL_TEXTURE_SAMPLES) \
+ X("TEXTURE_FIXED_SAMPLE_LOCATIONS", GL_TEXTURE_FIXED_SAMPLE_LOCATIONS) \
+ X("SAMPLER_2D_MULTISAMPLE", GL_SAMPLER_2D_MULTISAMPLE) \
+ X("INT_SAMPLER_2D_MULTISAMPLE", GL_INT_SAMPLER_2D_MULTISAMPLE) \
+ X("UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE", GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE) \
+ X("SAMPLER_2D_MULTISAMPLE_ARRAY", GL_SAMPLER_2D_MULTISAMPLE_ARRAY) \
+ X("INT_SAMPLER_2D_MULTISAMPLE_ARRAY", GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY) \
+ X("UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY", GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY) \
+ X("MAX_COLOR_TEXTURE_SAMPLES", GL_MAX_COLOR_TEXTURE_SAMPLES) \
+ X("MAX_DEPTH_TEXTURE_SAMPLES", GL_MAX_DEPTH_TEXTURE_SAMPLES) \
+ X("MAX_INTEGER_SAMPLES", GL_MAX_INTEGER_SAMPLES) \
+ X("VERTEX_ATTRIB_ARRAY_DIVISOR", GL_VERTEX_ATTRIB_ARRAY_DIVISOR) \
+ X("SRC1_COLOR", GL_SRC1_COLOR) \
+ X("ONE_MINUS_SRC1_COLOR", GL_ONE_MINUS_SRC1_COLOR) \
+ X("ONE_MINUS_SRC1_ALPHA", GL_ONE_MINUS_SRC1_ALPHA) \
+ X("MAX_DUAL_SOURCE_DRAW_BUFFERS", GL_MAX_DUAL_SOURCE_DRAW_BUFFERS) \
+ X("ANY_SAMPLES_PASSED", GL_ANY_SAMPLES_PASSED) \
+ X("SAMPLER_BINDING", GL_SAMPLER_BINDING) \
+ X("RGB10_A2UI", GL_RGB10_A2UI) \
+ X("TEXTURE_SWIZZLE_R", GL_TEXTURE_SWIZZLE_R) \
+ X("TEXTURE_SWIZZLE_G", GL_TEXTURE_SWIZZLE_G) \
+ X("TEXTURE_SWIZZLE_B", GL_TEXTURE_SWIZZLE_B) \
+ X("TEXTURE_SWIZZLE_A", GL_TEXTURE_SWIZZLE_A) \
+ X("TEXTURE_SWIZZLE_RGBA", GL_TEXTURE_SWIZZLE_RGBA) \
+ X("TIME_ELAPSED", GL_TIME_ELAPSED) \
+ X("TIMESTAMP", GL_TIMESTAMP) \
+ X("INT_2_10_10_10_REV", GL_INT_2_10_10_10_REV) \
+ X("SAMPLE_SHADING", GL_SAMPLE_SHADING) \
+ X("MIN_SAMPLE_SHADING_VALUE", GL_MIN_SAMPLE_SHADING_VALUE) \
+ X("MIN_PROGRAM_TEXTURE_GATHER_OFFSET", GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET) \
+ X("MAX_PROGRAM_TEXTURE_GATHER_OFFSET", GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET) \
+ X("TEXTURE_CUBE_MAP_ARRAY", GL_TEXTURE_CUBE_MAP_ARRAY) \
+ X("TEXTURE_BINDING_CUBE_MAP_ARRAY", GL_TEXTURE_BINDING_CUBE_MAP_ARRAY) \
+ X("PROXY_TEXTURE_CUBE_MAP_ARRAY", GL_PROXY_TEXTURE_CUBE_MAP_ARRAY) \
+ X("SAMPLER_CUBE_MAP_ARRAY", GL_SAMPLER_CUBE_MAP_ARRAY) \
+ X("SAMPLER_CUBE_MAP_ARRAY_SHADOW", GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW) \
+ X("INT_SAMPLER_CUBE_MAP_ARRAY", GL_INT_SAMPLER_CUBE_MAP_ARRAY) \
+ X("UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY", GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY) \
+ X("DRAW_INDIRECT_BUFFER", GL_DRAW_INDIRECT_BUFFER) \
+ X("DRAW_INDIRECT_BUFFER_BINDING", GL_DRAW_INDIRECT_BUFFER_BINDING) \
+ X("GEOMETRY_SHADER_INVOCATIONS", GL_GEOMETRY_SHADER_INVOCATIONS) \
+ X("MAX_GEOMETRY_SHADER_INVOCATIONS", GL_MAX_GEOMETRY_SHADER_INVOCATIONS) \
+ X("MIN_FRAGMENT_INTERPOLATION_OFFSET", GL_MIN_FRAGMENT_INTERPOLATION_OFFSET) \
+ X("MAX_FRAGMENT_INTERPOLATION_OFFSET", GL_MAX_FRAGMENT_INTERPOLATION_OFFSET) \
+ X("FRAGMENT_INTERPOLATION_OFFSET_BITS", GL_FRAGMENT_INTERPOLATION_OFFSET_BITS) \
+ X("MAX_VERTEX_STREAMS", GL_MAX_VERTEX_STREAMS) \
+ X("DOUBLE_VEC2", GL_DOUBLE_VEC2) \
+ X("DOUBLE_VEC3", GL_DOUBLE_VEC3) \
+ X("DOUBLE_VEC4", GL_DOUBLE_VEC4) \
+ X("DOUBLE_MAT2", GL_DOUBLE_MAT2) \
+ X("DOUBLE_MAT3", GL_DOUBLE_MAT3) \
+ X("DOUBLE_MAT4", GL_DOUBLE_MAT4) \
+ X("DOUBLE_MAT2x3", GL_DOUBLE_MAT2x3) \
+ X("DOUBLE_MAT2x4", GL_DOUBLE_MAT2x4) \
+ X("DOUBLE_MAT3x2", GL_DOUBLE_MAT3x2) \
+ X("DOUBLE_MAT3x4", GL_DOUBLE_MAT3x4) \
+ X("DOUBLE_MAT4x2", GL_DOUBLE_MAT4x2) \
+ X("DOUBLE_MAT4x3", GL_DOUBLE_MAT4x3) \
+ X("ACTIVE_SUBROUTINES", GL_ACTIVE_SUBROUTINES) \
+ X("ACTIVE_SUBROUTINE_UNIFORMS", GL_ACTIVE_SUBROUTINE_UNIFORMS) \
+ X("ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS", GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS) \
+ X("ACTIVE_SUBROUTINE_MAX_LENGTH", GL_ACTIVE_SUBROUTINE_MAX_LENGTH) \
+ X("ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH", GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH) \
+ X("MAX_SUBROUTINES", GL_MAX_SUBROUTINES) \
+ X("MAX_SUBROUTINE_UNIFORM_LOCATIONS", GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS) \
+ X("NUM_COMPATIBLE_SUBROUTINES", GL_NUM_COMPATIBLE_SUBROUTINES) \
+ X("COMPATIBLE_SUBROUTINES", GL_COMPATIBLE_SUBROUTINES) \
+ X("PATCHES", GL_PATCHES) \
+ X("PATCH_VERTICES", GL_PATCH_VERTICES) \
+ X("PATCH_DEFAULT_INNER_LEVEL", GL_PATCH_DEFAULT_INNER_LEVEL) \
+ X("PATCH_DEFAULT_OUTER_LEVEL", GL_PATCH_DEFAULT_OUTER_LEVEL) \
+ X("TESS_CONTROL_OUTPUT_VERTICES", GL_TESS_CONTROL_OUTPUT_VERTICES) \
+ X("TESS_GEN_MODE", GL_TESS_GEN_MODE) \
+ X("TESS_GEN_SPACING", GL_TESS_GEN_SPACING) \
+ X("TESS_GEN_VERTEX_ORDER", GL_TESS_GEN_VERTEX_ORDER) \
+ X("TESS_GEN_POINT_MODE", GL_TESS_GEN_POINT_MODE) \
+ X("ISOLINES", GL_ISOLINES) \
+ X("FRACTIONAL_ODD", GL_FRACTIONAL_ODD) \
+ X("FRACTIONAL_EVEN", GL_FRACTIONAL_EVEN) \
+ X("MAX_PATCH_VERTICES", GL_MAX_PATCH_VERTICES) \
+ X("MAX_TESS_GEN_LEVEL", GL_MAX_TESS_GEN_LEVEL) \
+ X("MAX_TESS_CONTROL_UNIFORM_COMPONENTS", GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS) \
+ X("MAX_TESS_EVALUATION_UNIFORM_COMPONENTS", GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS) \
+ X("MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS", GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS) \
+ X("MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS", GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS) \
+ X("MAX_TESS_CONTROL_OUTPUT_COMPONENTS", GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS) \
+ X("MAX_TESS_PATCH_COMPONENTS", GL_MAX_TESS_PATCH_COMPONENTS) \
+ X("MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS", GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS) \
+ X("MAX_TESS_EVALUATION_OUTPUT_COMPONENTS", GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS) \
+ X("MAX_TESS_CONTROL_UNIFORM_BLOCKS", GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS) \
+ X("MAX_TESS_EVALUATION_UNIFORM_BLOCKS", GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS) \
+ X("MAX_TESS_CONTROL_INPUT_COMPONENTS", GL_MAX_TESS_CONTROL_INPUT_COMPONENTS) \
+ X("MAX_TESS_EVALUATION_INPUT_COMPONENTS", GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS) \
+ X("MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS", GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS) \
+ X("MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS", GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS) \
+ X("UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER", GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER) \
+ X("UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER", GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER) \
+ X("TESS_EVALUATION_SHADER", GL_TESS_EVALUATION_SHADER) \
+ X("TESS_CONTROL_SHADER", GL_TESS_CONTROL_SHADER) \
+ X("TRANSFORM_FEEDBACK", GL_TRANSFORM_FEEDBACK) \
+ X("TRANSFORM_FEEDBACK_BUFFER_PAUSED", GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED) \
+ X("TRANSFORM_FEEDBACK_BUFFER_ACTIVE", GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE) \
+ X("TRANSFORM_FEEDBACK_BINDING", GL_TRANSFORM_FEEDBACK_BINDING) \
+ X("MAX_TRANSFORM_FEEDBACK_BUFFERS", GL_MAX_TRANSFORM_FEEDBACK_BUFFERS) \
+ X("FIXED", GL_FIXED) \
+ X("IMPLEMENTATION_COLOR_READ_TYPE", GL_IMPLEMENTATION_COLOR_READ_TYPE) \
+ X("IMPLEMENTATION_COLOR_READ_FORMAT", GL_IMPLEMENTATION_COLOR_READ_FORMAT) \
+ X("LOW_FLOAT", GL_LOW_FLOAT) \
+ X("MEDIUM_FLOAT", GL_MEDIUM_FLOAT) \
+ X("HIGH_FLOAT", GL_HIGH_FLOAT) \
+ X("LOW_INT", GL_LOW_INT) \
+ X("MEDIUM_INT", GL_MEDIUM_INT) \
+ X("HIGH_INT", GL_HIGH_INT) \
+ X("SHADER_COMPILER", GL_SHADER_COMPILER) \
+ X("SHADER_BINARY_FORMATS", GL_SHADER_BINARY_FORMATS) \
+ X("NUM_SHADER_BINARY_FORMATS", GL_NUM_SHADER_BINARY_FORMATS) \
+ X("MAX_VERTEX_UNIFORM_VECTORS", GL_MAX_VERTEX_UNIFORM_VECTORS) \
+ X("MAX_VARYING_VECTORS", GL_MAX_VARYING_VECTORS) \
+ X("MAX_FRAGMENT_UNIFORM_VECTORS", GL_MAX_FRAGMENT_UNIFORM_VECTORS) \
+ X("RGB565", GL_RGB565) \
+ X("PROGRAM_BINARY_RETRIEVABLE_HINT", GL_PROGRAM_BINARY_RETRIEVABLE_HINT) \
+ X("PROGRAM_BINARY_LENGTH", GL_PROGRAM_BINARY_LENGTH) \
+ X("NUM_PROGRAM_BINARY_FORMATS", GL_NUM_PROGRAM_BINARY_FORMATS) \
+ X("PROGRAM_BINARY_FORMATS", GL_PROGRAM_BINARY_FORMATS) \
+ X("VERTEX_SHADER_BIT", GL_VERTEX_SHADER_BIT) \
+ X("FRAGMENT_SHADER_BIT", GL_FRAGMENT_SHADER_BIT) \
+ X("GEOMETRY_SHADER_BIT", GL_GEOMETRY_SHADER_BIT) \
+ X("TESS_CONTROL_SHADER_BIT", GL_TESS_CONTROL_SHADER_BIT) \
+ X("TESS_EVALUATION_SHADER_BIT", GL_TESS_EVALUATION_SHADER_BIT) \
+ X("ALL_SHADER_BITS", GL_ALL_SHADER_BITS) \
+ X("PROGRAM_SEPARABLE", GL_PROGRAM_SEPARABLE) \
+ X("ACTIVE_PROGRAM", GL_ACTIVE_PROGRAM) \
+ X("PROGRAM_PIPELINE_BINDING", GL_PROGRAM_PIPELINE_BINDING) \
+ X("MAX_VIEWPORTS", GL_MAX_VIEWPORTS) \
+ X("VIEWPORT_SUBPIXEL_BITS", GL_VIEWPORT_SUBPIXEL_BITS) \
+ X("VIEWPORT_BOUNDS_RANGE", GL_VIEWPORT_BOUNDS_RANGE) \
+ X("LAYER_PROVOKING_VERTEX", GL_LAYER_PROVOKING_VERTEX) \
+ X("VIEWPORT_INDEX_PROVOKING_VERTEX", GL_VIEWPORT_INDEX_PROVOKING_VERTEX) \
+ X("UNDEFINED_VERTEX", GL_UNDEFINED_VERTEX) \
+ X("VERSION_1_0", GL_VERSION_1_0) \
+
+
+
+#define X(name, func) int func(lua_State *L);
+GL_FUNCTIONS
+#undef X
+
+#endif
diff --git a/src/opengl/bind/a b/src/opengl/bind/a
new file mode 100644
index 0000000..b414962
--- /dev/null
+++ b/src/opengl/bind/a
@@ -0,0 +1,3 @@
+void glActiveShaderProgram( GLuint pipeline, GLuint program);
+void glActiveTexture( GLenum texture);
+void glAttachShader( GLuint program, GLuint shader);
diff --git a/src/opengl/bind/a.bind b/src/opengl/bind/a.bind
new file mode 100644
index 0000000..41eef56
--- /dev/null
+++ b/src/opengl/bind/a.bind
@@ -0,0 +1,26 @@
+int glActiveShaderProgram_bind(lua_State *L)
+{
+ GLuint pipeline = luaL_checkinteger(L, 1);
+ GLuint program = luaL_checkinteger(L, 2);
+ glActiveShaderProgram(pipeline, program);
+ return 0;
+}
+
+
+int glActiveTexture_bind(lua_State *L)
+{
+ GLenum texture = luaL_checkinteger(L, 1);
+ glActiveTexture(texture);
+ return 0;
+}
+
+
+int glAttachShader_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint shader = luaL_checkinteger(L, 2);
+ glAttachShader(program, shader);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/b b/src/opengl/bind/b
new file mode 100644
index 0000000..e95cea1
--- /dev/null
+++ b/src/opengl/bind/b
@@ -0,0 +1,35 @@
+void glBeginConditionalRender( GLuint id, GLenum mode);
+void glBeginQuery( GLenum target, GLuint id);
+void glBeginQuery( GLenum target, GLuint id);
+void glBeginTransformFeedback( GLenum primitiveMode);
+void glBindAttribLocation( GLuint program, GLuint index, const GLchar *name);
+void glBindBuffer( GLenum target, GLuint buffer);
+void glBindBufferBase( GLenum target, GLuint index, GLuint buffer);
+void glBindBufferRange( GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+void glBindFragDataLocation( GLuint program, GLuint colorNumber, const char * name);
+void glBindFragDataLocationIndexed( GLuint program, GLuint colorNumber, GLuint index, const char *name);
+void glBindFramebuffer( GLenum target, GLuint framebuffer);
+void glBindImageTexture( GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+void glBindProgramPipeline( GLuint pipeline);
+void glBindRenderbuffer( GLenum target, GLuint renderbuffer);
+void glBindSampler( GLuint unit, GLuint sampler);
+void glBindTexture( GLenum target, GLuint texture);
+void glBindTextureUnit( GLuint unit, GLuint texture);
+void glBindTransformFeedback( GLenum target, GLuint id);
+void glBindVertexArray( GLuint array);
+void glBindVertexBuffer( GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+void glBlendColor( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+void glBlendEquation( GLenum mode);
+
+void glBlendEquationi( GLuint buf, GLenum mode);
+void glBlendEquationSeparate( GLenum modeRGB, GLenum modeAlpha);
+void glBlendEquationSeparatei( GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+void glBlendFunc( GLenum sfactor, GLenum dfactor);
+void glBlendFunci( GLuint buf, GLenum sfactor, GLenum dfactor);
+void glBlendFuncSeparate( GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+void glBlendFuncSeparatei( GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+void glBlitFramebuffer( GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+void glBlitNamedFramebuffer( GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+void glBufferData( GLenum target, GLsizeiptr size, const void * data, GLenum usage);
+void glBufferStorage( GLenum target, GLsizeiptr size, const void * data, GLbitfield flags);
+void glBufferSubData( GLenum target, GLintptr offset, GLsizeiptr size, const void * data);
diff --git a/src/opengl/bind/b.bind b/src/opengl/bind/b.bind
new file mode 100644
index 0000000..ee2cfa0
--- /dev/null
+++ b/src/opengl/bind/b.bind
@@ -0,0 +1,350 @@
+int glBeginConditionalRender_bind(lua_State *L)
+{
+ GLuint id = luaL_checkinteger(L, 1);
+ GLenum mode = luaL_checkinteger(L, 2);
+ glBeginConditionalRender(id, mode);
+ return 0;
+}
+
+
+int glBeginQuery_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint id = luaL_checkinteger(L, 2);
+ glBeginQuery(target, id);
+ return 0;
+}
+
+
+int glBeginQuery_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint id = luaL_checkinteger(L, 2);
+ glBeginQuery(target, id);
+ return 0;
+}
+
+
+int glBeginTransformFeedback_bind(lua_State *L)
+{
+ GLenum primitiveMode = luaL_checkinteger(L, 1);
+ glBeginTransformFeedback(primitiveMode);
+ return 0;
+}
+
+
+int glBindAttribLocation_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ const GLchar * name = luaL_checkstring(L, 3);
+ glBindAttribLocation(program, index, name);
+ return 0;
+}
+
+
+int glBindBuffer_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint buffer = luaL_checkinteger(L, 2);
+ glBindBuffer(target, buffer);
+ return 0;
+}
+
+
+int glBindBufferBase_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLuint buffer = luaL_checkinteger(L, 3);
+ glBindBufferBase(target, index, buffer);
+ return 0;
+}
+
+
+int glBindBufferRange_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLuint buffer = luaL_checkinteger(L, 3);
+ GLintptr offset = luaL_checkinteger(L, 4);
+ GLsizeiptr size = luaL_checkinteger(L, 5);
+ glBindBufferRange(target, index, buffer, offset, size);
+ return 0;
+}
+
+
+int glBindFragDataLocation_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint colorNumber = luaL_checkinteger(L, 2);
+ const char * name = luaL_checkstring(L, 3);
+ glBindFragDataLocation(program, colorNumber, name);
+ return 0;
+}
+
+
+int glBindFragDataLocationIndexed_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint colorNumber = luaL_checkinteger(L, 2);
+ GLuint index = luaL_checkinteger(L, 3);
+ const char * name = luaL_checkstring(L, 4);
+ glBindFragDataLocationIndexed(program, colorNumber, index, name);
+ return 0;
+}
+
+
+int glBindFramebuffer_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint framebuffer = luaL_checkinteger(L, 2);
+ glBindFramebuffer(target, framebuffer);
+ return 0;
+}
+
+
+int glBindImageTexture_bind(lua_State *L)
+{
+ GLuint unit = luaL_checkinteger(L, 1);
+ GLuint texture = luaL_checkinteger(L, 2);
+ GLint level = luaL_checkinteger(L, 3);
+ GLboolean layered = get: GLboolean
+ GLint layer = luaL_checkinteger(L, 5);
+ GLenum access = luaL_checkinteger(L, 6);
+ GLenum format = luaL_checkinteger(L, 7);
+ glBindImageTexture(unit, texture, level, layered, layer, access, format);
+ return 0;
+}
+
+
+int glBindProgramPipeline_bind(lua_State *L)
+{
+ GLuint pipeline = luaL_checkinteger(L, 1);
+ glBindProgramPipeline(pipeline);
+ return 0;
+}
+
+
+int glBindRenderbuffer_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint renderbuffer = luaL_checkinteger(L, 2);
+ glBindRenderbuffer(target, renderbuffer);
+ return 0;
+}
+
+
+int glBindSampler_bind(lua_State *L)
+{
+ GLuint unit = luaL_checkinteger(L, 1);
+ GLuint sampler = luaL_checkinteger(L, 2);
+ glBindSampler(unit, sampler);
+ return 0;
+}
+
+
+int glBindTexture_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint texture = luaL_checkinteger(L, 2);
+ glBindTexture(target, texture);
+ return 0;
+}
+
+
+int glBindTextureUnit_bind(lua_State *L)
+{
+ GLuint unit = luaL_checkinteger(L, 1);
+ GLuint texture = luaL_checkinteger(L, 2);
+ glBindTextureUnit(unit, texture);
+ return 0;
+}
+
+
+int glBindTransformFeedback_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint id = luaL_checkinteger(L, 2);
+ glBindTransformFeedback(target, id);
+ return 0;
+}
+
+
+int glBindVertexArray_bind(lua_State *L)
+{
+ GLuint array = luaL_checkinteger(L, 1);
+ glBindVertexArray(array);
+ return 0;
+}
+
+
+int glBindVertexBuffer_bind(lua_State *L)
+{
+ GLuint bindingindex = luaL_checkinteger(L, 1);
+ GLuint buffer = luaL_checkinteger(L, 2);
+ GLintptr offset = luaL_checkinteger(L, 3);
+ GLsizei stride = luaL_checkinteger(L, 4);
+ glBindVertexBuffer(bindingindex, buffer, offset, stride);
+ return 0;
+}
+
+
+int glBlendColor_bind(lua_State *L)
+{
+ GLfloat red = luaL_checknumber(L, 1);
+ GLfloat green = luaL_checknumber(L, 2);
+ GLfloat blue = luaL_checknumber(L, 3);
+ GLfloat alpha = luaL_checknumber(L, 4);
+ glBlendColor(red, green, blue, alpha);
+ return 0;
+}
+
+
+int glBlendEquation_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ glBlendEquation(mode);
+ return 0;
+}
+
+
+int glBlendEquationi_bind(lua_State *L)
+{
+ GLuint buf = luaL_checkinteger(L, 1);
+ GLenum mode = luaL_checkinteger(L, 2);
+ glBlendEquationi(buf, mode);
+ return 0;
+}
+
+
+int glBlendEquationSeparate_bind(lua_State *L)
+{
+ GLenum modeRGB = luaL_checkinteger(L, 1);
+ GLenum modeAlpha = luaL_checkinteger(L, 2);
+ glBlendEquationSeparate(modeRGB, modeAlpha);
+ return 0;
+}
+
+
+int glBlendEquationSeparatei_bind(lua_State *L)
+{
+ GLuint buf = luaL_checkinteger(L, 1);
+ GLenum modeRGB = luaL_checkinteger(L, 2);
+ GLenum modeAlpha = luaL_checkinteger(L, 3);
+ glBlendEquationSeparatei(buf, modeRGB, modeAlpha);
+ return 0;
+}
+
+
+int glBlendFunc_bind(lua_State *L)
+{
+ GLenum sfactor = luaL_checkinteger(L, 1);
+ GLenum dfactor = luaL_checkinteger(L, 2);
+ glBlendFunc(sfactor, dfactor);
+ return 0;
+}
+
+
+int glBlendFunci_bind(lua_State *L)
+{
+ GLuint buf = luaL_checkinteger(L, 1);
+ GLenum sfactor = luaL_checkinteger(L, 2);
+ GLenum dfactor = luaL_checkinteger(L, 3);
+ glBlendFunci(buf, sfactor, dfactor);
+ return 0;
+}
+
+
+int glBlendFuncSeparate_bind(lua_State *L)
+{
+ GLenum srcRGB = luaL_checkinteger(L, 1);
+ GLenum dstRGB = luaL_checkinteger(L, 2);
+ GLenum srcAlpha = luaL_checkinteger(L, 3);
+ GLenum dstAlpha = luaL_checkinteger(L, 4);
+ glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
+ return 0;
+}
+
+
+int glBlendFuncSeparatei_bind(lua_State *L)
+{
+ GLuint buf = luaL_checkinteger(L, 1);
+ GLenum srcRGB = luaL_checkinteger(L, 2);
+ GLenum dstRGB = luaL_checkinteger(L, 3);
+ GLenum srcAlpha = luaL_checkinteger(L, 4);
+ GLenum dstAlpha = luaL_checkinteger(L, 5);
+ glBlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);
+ return 0;
+}
+
+
+int glBlitFramebuffer_bind(lua_State *L)
+{
+ GLint srcX0 = luaL_checkinteger(L, 1);
+ GLint srcY0 = luaL_checkinteger(L, 2);
+ GLint srcX1 = luaL_checkinteger(L, 3);
+ GLint srcY1 = luaL_checkinteger(L, 4);
+ GLint dstX0 = luaL_checkinteger(L, 5);
+ GLint dstY0 = luaL_checkinteger(L, 6);
+ GLint dstX1 = luaL_checkinteger(L, 7);
+ GLint dstY1 = luaL_checkinteger(L, 8);
+ GLbitfield mask = luaL_checkinteger(L, 9);
+ GLenum filter = luaL_checkinteger(L, 10);
+ glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+ return 0;
+}
+
+
+int glBlitNamedFramebuffer_bind(lua_State *L)
+{
+ GLuint readFramebuffer = luaL_checkinteger(L, 1);
+ GLuint drawFramebuffer = luaL_checkinteger(L, 2);
+ GLint srcX0 = luaL_checkinteger(L, 3);
+ GLint srcY0 = luaL_checkinteger(L, 4);
+ GLint srcX1 = luaL_checkinteger(L, 5);
+ GLint srcY1 = luaL_checkinteger(L, 6);
+ GLint dstX0 = luaL_checkinteger(L, 7);
+ GLint dstY0 = luaL_checkinteger(L, 8);
+ GLint dstX1 = luaL_checkinteger(L, 9);
+ GLint dstY1 = luaL_checkinteger(L, 10);
+ GLbitfield mask = luaL_checkinteger(L, 11);
+ GLenum filter = luaL_checkinteger(L, 12);
+ glBlitNamedFramebuffer(readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+ return 0;
+}
+
+
+int glBufferData_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLsizeiptr size = luaL_checkinteger(L, 2);
+ const void * data = get: const void *
+ GLenum usage = luaL_checkinteger(L, 4);
+ glBufferData(target, size, data, usage);
+ return 0;
+}
+
+
+int glBufferStorage_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLsizeiptr size = luaL_checkinteger(L, 2);
+ const void * data = get: const void *
+ GLbitfield flags = luaL_checkinteger(L, 4);
+ glBufferStorage(target, size, data, flags);
+ return 0;
+}
+
+
+int glBufferSubData_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLintptr offset = luaL_checkinteger(L, 2);
+ GLsizeiptr size = luaL_checkinteger(L, 3);
+ const void * data = get: const void *
+ glBufferSubData(target, offset, size, data);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/c b/src/opengl/bind/c
new file mode 100644
index 0000000..a53aa8f
--- /dev/null
+++ b/src/opengl/bind/c
@@ -0,0 +1,31 @@
+GLenum glCheckFramebufferStatus( GLenum target);
+GLenum glCheckNamedFramebufferStatus( GLuint framebuffer, GLenum target);
+void glClampColor( GLenum target, GLenum clamp);
+void glClear( GLbitfield mask);
+void glClearBufferiv( GLenum buffer, GLint drawbuffer, const GLint * value);
+void glClearBufferuiv( GLenum buffer, GLint drawbuffer, const GLuint * value);
+void glClearBufferfv( GLenum buffer, GLint drawbuffer, const GLfloat * value);
+void glClearBufferfi( GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+void glClearStencil( GLint s);
+GLenum glClientWaitSync( GLsync sync, GLbitfield flags, GLuint64 timeout);
+void glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+void glColorMaski( GLuint buf, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+void glCompileShader( GLuint shader);
+void glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data);
+void glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data);
+void glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data);
+void glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data);
+void glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data);
+void glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data);
+void glCopyBufferSubData( GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+void glCopyBufferSubData( GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+void glCopyTexImage1D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+void glCopyTexImage2D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+void glCopyTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+void glCopyTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+void glCopyTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLuint glCreateProgram( void);
+GLuint glCreateShader( GLenum shaderType);
+GLuint glCreateShaderProgramv( GLenum type, GLsizei count, const char **strings);
+void glCullFace( GLenum mode);
+
diff --git a/src/opengl/bind/c.bind b/src/opengl/bind/c.bind
new file mode 100644
index 0000000..1cf6e80
--- /dev/null
+++ b/src/opengl/bind/c.bind
@@ -0,0 +1,354 @@
+int glCheckFramebufferStatus_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum bind_result = glCheckFramebufferStatus(target);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glCheckNamedFramebufferStatus_bind(lua_State *L)
+{
+ GLuint framebuffer = luaL_checkinteger(L, 1);
+ GLenum target = luaL_checkinteger(L, 2);
+ GLenum bind_result = glCheckNamedFramebufferStatus(framebuffer, target);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glClampColor_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum clamp = luaL_checkinteger(L, 2);
+ glClampColor(target, clamp);
+ return 0;
+}
+
+
+int glClear_bind(lua_State *L)
+{
+ GLbitfield mask = luaL_checkinteger(L, 1);
+ glClear(mask);
+ return 0;
+}
+
+
+int glClearBufferiv_bind(lua_State *L)
+{
+ GLenum buffer = luaL_checkinteger(L, 1);
+ GLint drawbuffer = luaL_checkinteger(L, 2);
+ const GLint * value = get: const GLint *
+ glClearBufferiv(buffer, drawbuffer, value);
+ return 0;
+}
+
+
+int glClearBufferuiv_bind(lua_State *L)
+{
+ GLenum buffer = luaL_checkinteger(L, 1);
+ GLint drawbuffer = luaL_checkinteger(L, 2);
+ const GLuint * value = get: const GLuint *
+ glClearBufferuiv(buffer, drawbuffer, value);
+ return 0;
+}
+
+
+int glClearBufferfv_bind(lua_State *L)
+{
+ GLenum buffer = luaL_checkinteger(L, 1);
+ GLint drawbuffer = luaL_checkinteger(L, 2);
+ const GLfloat * value = get: const GLfloat *
+ glClearBufferfv(buffer, drawbuffer, value);
+ return 0;
+}
+
+
+int glClearBufferfi_bind(lua_State *L)
+{
+ GLenum buffer = luaL_checkinteger(L, 1);
+ GLint drawbuffer = luaL_checkinteger(L, 2);
+ GLfloat depth = luaL_checknumber(L, 3);
+ GLint stencil = luaL_checkinteger(L, 4);
+ glClearBufferfi(buffer, drawbuffer, depth, stencil);
+ return 0;
+}
+
+
+int glClearStencil_bind(lua_State *L)
+{
+ GLint s = luaL_checkinteger(L, 1);
+ glClearStencil(s);
+ return 0;
+}
+
+
+int glClientWaitSync_bind(lua_State *L)
+{
+ GLsync sync = luaL_checkinteger(L, 1);
+ GLbitfield flags = luaL_checkinteger(L, 2);
+ GLuint64 timeout = luaL_checkinteger(L, 3);
+ GLenum bind_result = glClientWaitSync(sync, flags, timeout);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glColorMask_bind(lua_State *L)
+{
+ GLboolean red = get: GLboolean
+ GLboolean green = get: GLboolean
+ GLboolean blue = get: GLboolean
+ GLboolean alpha = get: GLboolean
+ glColorMask(red, green, blue, alpha);
+ return 0;
+}
+
+
+int glColorMaski_bind(lua_State *L)
+{
+ GLuint buf = luaL_checkinteger(L, 1);
+ GLboolean red = get: GLboolean
+ GLboolean green = get: GLboolean
+ GLboolean blue = get: GLboolean
+ GLboolean alpha = get: GLboolean
+ glColorMaski(buf, red, green, blue, alpha);
+ return 0;
+}
+
+
+int glCompileShader_bind(lua_State *L)
+{
+ GLuint shader = luaL_checkinteger(L, 1);
+ glCompileShader(shader);
+ return 0;
+}
+
+
+int glCompressedTexImage1D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLenum internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLint border = luaL_checkinteger(L, 5);
+ GLsizei imageSize = luaL_checkinteger(L, 6);
+ const void * data = get: const void *
+ glCompressedTexImage1D(target, level, internalformat, width, border, imageSize, data);
+ return 0;
+}
+
+
+int glCompressedTexImage2D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLenum internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLsizei height = luaL_checkinteger(L, 5);
+ GLint border = luaL_checkinteger(L, 6);
+ GLsizei imageSize = luaL_checkinteger(L, 7);
+ const void * data = get: const void *
+ glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
+ return 0;
+}
+
+
+int glCompressedTexImage3D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLenum internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLsizei height = luaL_checkinteger(L, 5);
+ GLsizei depth = luaL_checkinteger(L, 6);
+ GLint border = luaL_checkinteger(L, 7);
+ GLsizei imageSize = luaL_checkinteger(L, 8);
+ const void * data = get: const void *
+ glCompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data);
+ return 0;
+}
+
+
+int glCompressedTexSubImage1D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLenum format = luaL_checkinteger(L, 5);
+ GLsizei imageSize = luaL_checkinteger(L, 6);
+ const void * data = get: const void *
+ glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data);
+ return 0;
+}
+
+
+int glCompressedTexSubImage2D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLint yoffset = luaL_checkinteger(L, 4);
+ GLsizei width = luaL_checkinteger(L, 5);
+ GLsizei height = luaL_checkinteger(L, 6);
+ GLenum format = luaL_checkinteger(L, 7);
+ GLsizei imageSize = luaL_checkinteger(L, 8);
+ const void * data = get: const void *
+ glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
+ return 0;
+}
+
+
+int glCompressedTexSubImage3D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLint yoffset = luaL_checkinteger(L, 4);
+ GLint zoffset = luaL_checkinteger(L, 5);
+ GLsizei width = luaL_checkinteger(L, 6);
+ GLsizei height = luaL_checkinteger(L, 7);
+ GLsizei depth = luaL_checkinteger(L, 8);
+ GLenum format = luaL_checkinteger(L, 9);
+ GLsizei imageSize = luaL_checkinteger(L, 10);
+ const void * data = get: const void *
+ glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
+ return 0;
+}
+
+
+int glCopyBufferSubData_bind(lua_State *L)
+{
+ GLenum readTarget = luaL_checkinteger(L, 1);
+ GLenum writeTarget = luaL_checkinteger(L, 2);
+ GLintptr readOffset = luaL_checkinteger(L, 3);
+ GLintptr writeOffset = luaL_checkinteger(L, 4);
+ GLsizeiptr size = luaL_checkinteger(L, 5);
+ glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
+ return 0;
+}
+
+
+int glCopyBufferSubData_bind(lua_State *L)
+{
+ GLenum readTarget = luaL_checkinteger(L, 1);
+ GLenum writeTarget = luaL_checkinteger(L, 2);
+ GLintptr readOffset = luaL_checkinteger(L, 3);
+ GLintptr writeOffset = luaL_checkinteger(L, 4);
+ GLsizeiptr size = luaL_checkinteger(L, 5);
+ glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
+ return 0;
+}
+
+
+int glCopyTexImage1D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLenum internalformat = luaL_checkinteger(L, 3);
+ GLint x = luaL_checkinteger(L, 4);
+ GLint y = luaL_checkinteger(L, 5);
+ GLsizei width = luaL_checkinteger(L, 6);
+ GLint border = luaL_checkinteger(L, 7);
+ glCopyTexImage1D(target, level, internalformat, x, y, width, border);
+ return 0;
+}
+
+
+int glCopyTexImage2D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLenum internalformat = luaL_checkinteger(L, 3);
+ GLint x = luaL_checkinteger(L, 4);
+ GLint y = luaL_checkinteger(L, 5);
+ GLsizei width = luaL_checkinteger(L, 6);
+ GLsizei height = luaL_checkinteger(L, 7);
+ GLint border = luaL_checkinteger(L, 8);
+ glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
+ return 0;
+}
+
+
+int glCopyTexSubImage1D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLint x = luaL_checkinteger(L, 4);
+ GLint y = luaL_checkinteger(L, 5);
+ GLsizei width = luaL_checkinteger(L, 6);
+ glCopyTexSubImage1D(target, level, xoffset, x, y, width);
+ return 0;
+}
+
+
+int glCopyTexSubImage2D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLint yoffset = luaL_checkinteger(L, 4);
+ GLint x = luaL_checkinteger(L, 5);
+ GLint y = luaL_checkinteger(L, 6);
+ GLsizei width = luaL_checkinteger(L, 7);
+ GLsizei height = luaL_checkinteger(L, 8);
+ glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
+ return 0;
+}
+
+
+int glCopyTexSubImage3D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLint yoffset = luaL_checkinteger(L, 4);
+ GLint zoffset = luaL_checkinteger(L, 5);
+ GLint x = luaL_checkinteger(L, 6);
+ GLint y = luaL_checkinteger(L, 7);
+ GLsizei width = luaL_checkinteger(L, 8);
+ GLsizei height = luaL_checkinteger(L, 9);
+ glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
+ return 0;
+}
+
+
+int glCreateProgram_bind(lua_State *L)
+{
+ void = get:
+ GLuint bind_result = glCreateProgram(void);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glCreateShader_bind(lua_State *L)
+{
+ GLenum shaderType = luaL_checkinteger(L, 1);
+ GLuint bind_result = glCreateShader(shaderType);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glCreateShaderProgramv_bind(lua_State *L)
+{
+ GLenum type = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const char ** strings = get: const char **
+ GLuint bind_result = glCreateShaderProgramv(type, count, strings);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glCullFace_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ glCullFace(mode);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/d b/src/opengl/bind/d
new file mode 100644
index 0000000..1437c2e
--- /dev/null
+++ b/src/opengl/bind/d
@@ -0,0 +1,36 @@
+void glDeleteBuffers( GLsizei n, const GLuint * buffers);
+void glDeleteFramebuffers( GLsizei n, GLuint *framebuffers);
+void glDeleteProgram( GLuint program);
+void glDeleteProgramPipelines( GLsizei n, const GLuint *pipelines);
+void glDeleteQueries( GLsizei n, const GLuint * ids);
+void glDeleteRenderbuffers( GLsizei n, GLuint *renderbuffers);
+void glDeleteSamplers( GLsizei n, const GLuint * samplers);
+void glDeleteShader( GLuint shader);
+void glDeleteSync( GLsync sync);
+void glDeleteTextures( GLsizei n, const GLuint * textures);
+void glDeleteTransformFeedbacks( GLsizei n, const GLuint *ids);
+void glDeleteVertexArrays( GLsizei n, const GLuint *arrays);
+void glDepthFunc( GLenum func);
+void glDepthMask( GLboolean flag);
+void glDepthRange( GLdouble nearVal, GLdouble farVal);
+void glDepthRangef( GLfloat nearVal, GLfloat farVal);
+void glDepthRangeArrayv( GLuint first, GLsizei count, const GLdouble *v);
+void glDepthRangeIndexed( GLuint index, GLdouble nearVal, GLdouble farVal);
+void glDetachShader( GLuint program, GLuint shader);
+void glDisable( GLenum cap);
+void glDisablei( GLenum cap, GLuint index);
+void glDisableVertexAttribArray( GLuint index);
+void glDrawArrays( GLenum mode, GLint first, GLsizei count);
+void glDrawArraysIndirect( GLenum mode, const void *indirect);
+void glDrawArraysInstanced( GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+void glDrawBuffer( GLenum buf);
+void glDrawBuffers( GLsizei n, const GLenum *bufs);
+void glDrawElements( GLenum mode, GLsizei count, GLenum type, const void * indices);
+void glDrawElementsBaseVertex( GLenum mode, GLsizei count, GLenum type, void *indices, GLint basevertex);
+void glDrawElementsIndirect( GLenum mode, GLenum type, const void *indirect);
+void glDrawElementsInstanced( GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount);
+void glDrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices);
+void glDrawRangeElementsBaseVertex( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, void *indices, GLint basevertex);
+void glDrawTransformFeedback( GLenum mode, GLuint id);
+void glDrawTransformFeedbackStream( GLenum mode, GLuint id, GLuint stream);
+
diff --git a/src/opengl/bind/d.bind b/src/opengl/bind/d.bind
new file mode 100644
index 0000000..b307029
--- /dev/null
+++ b/src/opengl/bind/d.bind
@@ -0,0 +1,331 @@
+int glDeleteBuffers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ const GLuint * buffers = get: const GLuint *
+ glDeleteBuffers(n, buffers);
+ return 0;
+}
+
+
+int glDeleteFramebuffers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * framebuffers = get: GLuint *
+ glDeleteFramebuffers(n, framebuffers);
+ return 0;
+}
+
+
+int glDeleteProgram_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ glDeleteProgram(program);
+ return 0;
+}
+
+
+int glDeleteProgramPipelines_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ const GLuint * pipelines = get: const GLuint *
+ glDeleteProgramPipelines(n, pipelines);
+ return 0;
+}
+
+
+int glDeleteQueries_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ const GLuint * ids = get: const GLuint *
+ glDeleteQueries(n, ids);
+ return 0;
+}
+
+
+int glDeleteRenderbuffers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * renderbuffers = get: GLuint *
+ glDeleteRenderbuffers(n, renderbuffers);
+ return 0;
+}
+
+
+int glDeleteSamplers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ const GLuint * samplers = get: const GLuint *
+ glDeleteSamplers(n, samplers);
+ return 0;
+}
+
+
+int glDeleteShader_bind(lua_State *L)
+{
+ GLuint shader = luaL_checkinteger(L, 1);
+ glDeleteShader(shader);
+ return 0;
+}
+
+
+int glDeleteSync_bind(lua_State *L)
+{
+ GLsync sync = luaL_checkinteger(L, 1);
+ glDeleteSync(sync);
+ return 0;
+}
+
+
+int glDeleteTextures_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ const GLuint * textures = get: const GLuint *
+ glDeleteTextures(n, textures);
+ return 0;
+}
+
+
+int glDeleteTransformFeedbacks_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ const GLuint * ids = get: const GLuint *
+ glDeleteTransformFeedbacks(n, ids);
+ return 0;
+}
+
+
+int glDeleteVertexArrays_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ const GLuint * arrays = get: const GLuint *
+ glDeleteVertexArrays(n, arrays);
+ return 0;
+}
+
+
+int glDepthFunc_bind(lua_State *L)
+{
+ GLenum func = luaL_checkinteger(L, 1);
+ glDepthFunc(func);
+ return 0;
+}
+
+
+int glDepthMask_bind(lua_State *L)
+{
+ GLboolean flag = get: GLboolean
+ glDepthMask(flag);
+ return 0;
+}
+
+
+int glDepthRange_bind(lua_State *L)
+{
+ GLdouble nearVal = luaL_checknumber(L, 1);
+ GLdouble farVal = luaL_checknumber(L, 2);
+ glDepthRange(nearVal, farVal);
+ return 0;
+}
+
+
+int glDepthRangef_bind(lua_State *L)
+{
+ GLfloat nearVal = luaL_checknumber(L, 1);
+ GLfloat farVal = luaL_checknumber(L, 2);
+ glDepthRangef(nearVal, farVal);
+ return 0;
+}
+
+
+int glDepthRangeArrayv_bind(lua_State *L)
+{
+ GLuint first = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLdouble * v = get: const GLdouble *
+ glDepthRangeArrayv(first, count, v);
+ return 0;
+}
+
+
+int glDepthRangeIndexed_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble nearVal = luaL_checknumber(L, 2);
+ GLdouble farVal = luaL_checknumber(L, 3);
+ glDepthRangeIndexed(index, nearVal, farVal);
+ return 0;
+}
+
+
+int glDetachShader_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint shader = luaL_checkinteger(L, 2);
+ glDetachShader(program, shader);
+ return 0;
+}
+
+
+int glDisable_bind(lua_State *L)
+{
+ GLenum cap = luaL_checkinteger(L, 1);
+ glDisable(cap);
+ return 0;
+}
+
+
+int glDisablei_bind(lua_State *L)
+{
+ GLenum cap = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ glDisablei(cap, index);
+ return 0;
+}
+
+
+int glDisableVertexAttribArray_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ glDisableVertexAttribArray(index);
+ return 0;
+}
+
+
+int glDrawArrays_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLint first = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ glDrawArrays(mode, first, count);
+ return 0;
+}
+
+
+int glDrawArraysIndirect_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ const void * indirect = get: const void *
+ glDrawArraysIndirect(mode, indirect);
+ return 0;
+}
+
+
+int glDrawArraysInstanced_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLint first = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLsizei instancecount = luaL_checkinteger(L, 4);
+ glDrawArraysInstanced(mode, first, count, instancecount);
+ return 0;
+}
+
+
+int glDrawBuffer_bind(lua_State *L)
+{
+ GLenum buf = luaL_checkinteger(L, 1);
+ glDrawBuffer(buf);
+ return 0;
+}
+
+
+int glDrawBuffers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ const GLenum * bufs = get: const GLenum *
+ glDrawBuffers(n, bufs);
+ return 0;
+}
+
+
+int glDrawElements_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLenum type = luaL_checkinteger(L, 3);
+ const void * indices = get: const void *
+ glDrawElements(mode, count, type, indices);
+ return 0;
+}
+
+
+int glDrawElementsBaseVertex_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLenum type = luaL_checkinteger(L, 3);
+ void * indices = get: void *
+ GLint basevertex = luaL_checkinteger(L, 5);
+ glDrawElementsBaseVertex(mode, count, type, indices, basevertex);
+ return 0;
+}
+
+
+int glDrawElementsIndirect_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLenum type = luaL_checkinteger(L, 2);
+ const void * indirect = get: const void *
+ glDrawElementsIndirect(mode, type, indirect);
+ return 0;
+}
+
+
+int glDrawElementsInstanced_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLenum type = luaL_checkinteger(L, 3);
+ const void * indices = get: const void *
+ GLsizei instancecount = luaL_checkinteger(L, 5);
+ glDrawElementsInstanced(mode, count, type, indices, instancecount);
+ return 0;
+}
+
+
+int glDrawRangeElements_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLuint start = luaL_checkinteger(L, 2);
+ GLuint end = luaL_checkinteger(L, 3);
+ GLsizei count = luaL_checkinteger(L, 4);
+ GLenum type = luaL_checkinteger(L, 5);
+ const void * indices = get: const void *
+ glDrawRangeElements(mode, start, end, count, type, indices);
+ return 0;
+}
+
+
+int glDrawRangeElementsBaseVertex_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLuint start = luaL_checkinteger(L, 2);
+ GLuint end = luaL_checkinteger(L, 3);
+ GLsizei count = luaL_checkinteger(L, 4);
+ GLenum type = luaL_checkinteger(L, 5);
+ void * indices = get: void *
+ GLint basevertex = luaL_checkinteger(L, 7);
+ glDrawRangeElementsBaseVertex(mode, start, end, count, type, indices, basevertex);
+ return 0;
+}
+
+
+int glDrawTransformFeedback_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLuint id = luaL_checkinteger(L, 2);
+ glDrawTransformFeedback(mode, id);
+ return 0;
+}
+
+
+int glDrawTransformFeedbackStream_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLuint id = luaL_checkinteger(L, 2);
+ GLuint stream = luaL_checkinteger(L, 3);
+ glDrawTransformFeedbackStream(mode, id, stream);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/e b/src/opengl/bind/e
new file mode 100644
index 0000000..4502836
--- /dev/null
+++ b/src/opengl/bind/e
@@ -0,0 +1,7 @@
+void glEnable( GLenum cap);
+void glEnablei( GLenum cap, GLuint index);
+void glEnableVertexAttribArray( GLuint index);
+void glEndConditionalRender( void);
+void glEndQuery( GLenum target);
+void glEndQueryIndexed( GLenum target, GLuint index);
+void glEndTransformFeedback();
diff --git a/src/opengl/bind/e.bind b/src/opengl/bind/e.bind
new file mode 100644
index 0000000..50332d5
--- /dev/null
+++ b/src/opengl/bind/e.bind
@@ -0,0 +1,57 @@
+int glEnable_bind(lua_State *L)
+{
+ GLenum cap = luaL_checkinteger(L, 1);
+ glEnable(cap);
+ return 0;
+}
+
+
+int glEnablei_bind(lua_State *L)
+{
+ GLenum cap = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ glEnablei(cap, index);
+ return 0;
+}
+
+
+int glEnableVertexAttribArray_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ glEnableVertexAttribArray(index);
+ return 0;
+}
+
+
+int glEndConditionalRender_bind(lua_State *L)
+{
+ void = get:
+ glEndConditionalRender(void);
+ return 0;
+}
+
+
+int glEndQuery_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ glEndQuery(target);
+ return 0;
+}
+
+
+int glEndQueryIndexed_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ glEndQueryIndexed(target, index);
+ return 0;
+}
+
+
+int glEndTransformFeedback_bind(lua_State *L)
+{
+ glEndTransformFeedback();
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/f b/src/opengl/bind/f
new file mode 100644
index 0000000..63b8140
--- /dev/null
+++ b/src/opengl/bind/f
@@ -0,0 +1,11 @@
+GLsync glFenceSync( GLenum condition, GLbitfield flags);
+void glFinish( void);
+void glFlush( void);
+void glFlushMappedBufferRange( GLenum target, GLintptr offset, GLsizeiptr length);
+void glFramebufferRenderbuffer( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+void glFramebufferTexture( GLenum target, GLenum attachment, GLuint texture, GLint level);
+void glFramebufferTexture1D( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+void glFramebufferTexture2D( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+void glFramebufferTexture3D( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint layer);
+void glFramebufferTextureLayer( GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+void glFrontFace( GLenum mode);
diff --git a/src/opengl/bind/f.bind b/src/opengl/bind/f.bind
new file mode 100644
index 0000000..de6a297
--- /dev/null
+++ b/src/opengl/bind/f.bind
@@ -0,0 +1,115 @@
+int glFenceSync_bind(lua_State *L)
+{
+ GLenum condition = luaL_checkinteger(L, 1);
+ GLbitfield flags = luaL_checkinteger(L, 2);
+ GLsync bind_result = glFenceSync(condition, flags);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glFinish_bind(lua_State *L)
+{
+ void = get:
+ glFinish(void);
+ return 0;
+}
+
+
+int glFlush_bind(lua_State *L)
+{
+ void = get:
+ glFlush(void);
+ return 0;
+}
+
+
+int glFlushMappedBufferRange_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLintptr offset = luaL_checkinteger(L, 2);
+ GLsizeiptr length = luaL_checkinteger(L, 3);
+ glFlushMappedBufferRange(target, offset, length);
+ return 0;
+}
+
+
+int glFramebufferRenderbuffer_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum attachment = luaL_checkinteger(L, 2);
+ GLenum renderbuffertarget = luaL_checkinteger(L, 3);
+ GLuint renderbuffer = luaL_checkinteger(L, 4);
+ glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
+ return 0;
+}
+
+
+int glFramebufferTexture_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum attachment = luaL_checkinteger(L, 2);
+ GLuint texture = luaL_checkinteger(L, 3);
+ GLint level = luaL_checkinteger(L, 4);
+ glFramebufferTexture(target, attachment, texture, level);
+ return 0;
+}
+
+
+int glFramebufferTexture1D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum attachment = luaL_checkinteger(L, 2);
+ GLenum textarget = luaL_checkinteger(L, 3);
+ GLuint texture = luaL_checkinteger(L, 4);
+ GLint level = luaL_checkinteger(L, 5);
+ glFramebufferTexture1D(target, attachment, textarget, texture, level);
+ return 0;
+}
+
+
+int glFramebufferTexture2D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum attachment = luaL_checkinteger(L, 2);
+ GLenum textarget = luaL_checkinteger(L, 3);
+ GLuint texture = luaL_checkinteger(L, 4);
+ GLint level = luaL_checkinteger(L, 5);
+ glFramebufferTexture2D(target, attachment, textarget, texture, level);
+ return 0;
+}
+
+
+int glFramebufferTexture3D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum attachment = luaL_checkinteger(L, 2);
+ GLenum textarget = luaL_checkinteger(L, 3);
+ GLuint texture = luaL_checkinteger(L, 4);
+ GLint level = luaL_checkinteger(L, 5);
+ GLint layer = luaL_checkinteger(L, 6);
+ glFramebufferTexture3D(target, attachment, textarget, texture, level, layer);
+ return 0;
+}
+
+
+int glFramebufferTextureLayer_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum attachment = luaL_checkinteger(L, 2);
+ GLuint texture = luaL_checkinteger(L, 3);
+ GLint level = luaL_checkinteger(L, 4);
+ GLint layer = luaL_checkinteger(L, 5);
+ glFramebufferTextureLayer(target, attachment, texture, level, layer);
+ return 0;
+}
+
+
+int glFrontFace_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ glFrontFace(mode);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/g b/src/opengl/bind/g
new file mode 100644
index 0000000..bc61f25
--- /dev/null
+++ b/src/opengl/bind/g
@@ -0,0 +1,88 @@
+void glGenBuffers( GLsizei n, GLuint * buffers);
+void glGenerateMipmap( GLenum target);
+void glGenFramebuffers( GLsizei n, GLuint *ids);
+void glGenProgramPipelines( GLsizei n, GLuint *pipelines);
+void glGenQueries( GLsizei n, GLuint * ids);
+void glGenRenderbuffers( GLsizei n, GLuint *renderbuffers);
+void glGenSamplers( GLsizei n, GLuint *samplers);
+void glGenTextures( GLsizei n, GLuint * textures);
+void glGenTransformFeedbacks( GLsizei n, GLuint *ids);
+void glGenVertexArrays( GLsizei n, GLuint *arrays);
+void glGetBooleanv( GLenum pname, GLboolean * data);
+void glGetDoublev( GLenum pname, GLdouble * data);
+void glGetFloatv( GLenum pname, GLfloat * data);
+void glGetIntegerv( GLenum pname, GLint * data);
+void glGetInteger64v( GLenum pname, GLint64 * data);
+void glGetBooleani_v( GLenum target, GLuint index, GLboolean * data);
+void glGetIntegeri_v( GLenum target, GLuint index, GLint * data);
+void glGetFloati_v( GLenum target, GLuint index, GLfloat * data);
+void glGetDoublei_v( GLenum target, GLuint index, GLdouble * data);
+void glGetInteger64i_v( GLenum target, GLuint index, GLint64 * data);
+void glGetActiveAttrib( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+void glGetActiveSubroutineName( GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+void glGetActiveSubroutineUniformiv( GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);
+void glGetActiveSubroutineUniformName( GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+void glGetActiveUniform( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+void glGetActiveUniformBlockiv( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+void glGetActiveUniformBlockName( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+void glGetActiveUniformName( GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);
+void glGetActiveUniformsiv( GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+void glGetAttachedShaders( GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+GLint glGetAttribLocation( GLuint program, const GLchar *name);
+void glGetBufferParameteriv( GLenum target, GLenum value, GLint * data);
+void glGetBufferParameteri64v( GLenum target, GLenum value, GLint64 * data);
+void glGetBufferPointerv( GLenum target, GLenum pname, void ** params);
+void glGetBufferSubData( GLenum target, GLintptr offset, GLsizeiptr size, void * data);
+void glGetCompressedTexImage( GLenum target, GLint level, void * pixels);
+GLenum glGetError( void);
+GLint glGetFragDataIndex( GLuint program, const char * name);
+GLint glGetFragDataLocation( GLuint program, const char * name);
+void glGetFramebufferAttachmentParameteriv( GLenum target, GLenum attachment, GLenum pname, GLint *params);
+void glGetMultisamplefv( GLenum pname, GLuint index, GLfloat *val);
+void glGetUniformfv( GLuint program, GLint location, GLfloat *params);
+void glGetUniformiv( GLuint program, GLint location, GLint *params);
+void glGetUniformuiv( GLuint program, GLint location, GLuint *params);
+void glGetUniformdv( GLuint program, GLint location, GLdouble *params);
+void glGetProgramiv( GLuint program, GLenum pname, GLint *params);
+void glGetProgramBinary( GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+void glGetProgramInfoLog( GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
+void glGetProgramPipelineiv( GLuint pipeline, GLenum pname, GLint *params);
+void glGetProgramPipelineInfoLog( GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+void glGetProgramPipelineiv( GLuint pipeline, GLenum pname, GLint *params);
+void glGetProgramStageiv( GLuint program, GLenum shadertype, GLenum pname, GLint *values);
+void glGetQueryIndexediv( GLenum target, GLuint index, GLenum pname, GLint * params);
+void glGetQueryiv( GLenum target, GLenum pname, GLint * params);
+void glGetRenderbufferParameteriv( GLenum target, GLenum pname, GLint *params);
+void glGetSamplerParameterfv( GLuint sampler, GLenum pname, GLfloat * params);
+void glGetSamplerParameteriv( GLuint sampler, GLenum pname, GLint * params);
+void glGetSamplerParameterIiv( GLuint sampler, GLenum pname, GLint * params);
+void glGetSamplerParameterIuiv( GLuint sampler, GLenum pname, GLuint * params);
+void glGetShaderiv( GLuint shader, GLenum pname, GLint *params);
+void glGetShaderInfoLog( GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
+void glGetShaderiv( GLuint shader, GLenum pname, GLint *params);
+void glGetShaderPrecisionFormat( GLenum shaderType, GLenum precisionType, GLint *range, GLint *precision);
+void glGetShaderSource( GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+const GLubyte * glGetString(GLenum name);
+const GLubyte * glGetStringi(GLenum name, GLuint index);
+GLuint glGetSubroutineIndex( GLuint program, GLenum shadertype, const GLchar *name);
+GLint glGetSubroutineUniformLocation( GLuint program, GLenum shadertype, const GLchar *name);
+void glGetSynciv( GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+void glGetTexImage( GLenum target, GLint level, GLenum format, GLenum type, void * pixels);
+void glGetTexLevelParameterfv( GLenum target, GLint level, GLenum pname, GLfloat * params);
+void glGetTexLevelParameteriv( GLenum target, GLint level, GLenum pname, GLint * params);
+void glGetTexParameterfv( GLenum target, GLenum pname, GLfloat * params);
+void glGetTexParameteriv( GLenum target, GLenum pname, GLint * params);
+void glGetTexParameterIiv( GLenum target, GLenum pname, GLint * params);
+void glGetTexParameterIuiv( GLenum target, GLenum pname, GLuint * params);
+void glGetTransformFeedbackVarying( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, char *name);
+GLuint glGetUniformBlockIndex( GLuint program, const GLchar *uniformBlockName);
+void glGetUniformIndices( GLuint program, GLsizei uniformCount, const GLchar **uniformNames, GLuint *uniformIndices);
+GLint glGetUniformLocation( GLuint program, const GLchar *name);
+void glGetUniformSubroutineuiv( GLenum shadertype, GLint location, GLuint *values);
+void glGetVertexAttribdv( GLuint index, GLenum pname, GLdouble *params);
+void glGetVertexAttribfv( GLuint index, GLenum pname, GLfloat *params);
+void glGetVertexAttribiv( GLuint index, GLenum pname, GLint *params);
+void glGetVertexAttribIiv( GLuint index, GLenum pname, GLint *params);
+void glGetVertexAttribIuiv( GLuint index, GLenum pname, GLuint *params);
+void glGetVertexAttribLdv( GLuint index, GLenum pname, GLdouble *params);
+void glGetVertexAttribPointerv( GLuint index, GLenum pname, void **pointer);
diff --git a/src/opengl/bind/g.bind b/src/opengl/bind/g.bind
new file mode 100644
index 0000000..2c608b8
--- /dev/null
+++ b/src/opengl/bind/g.bind
@@ -0,0 +1,910 @@
+int glGenBuffers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * buffers = get: GLuint *
+ glGenBuffers(n, buffers);
+ return 0;
+}
+
+
+int glGenerateMipmap_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ glGenerateMipmap(target);
+ return 0;
+}
+
+
+int glGenFramebuffers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * ids = get: GLuint *
+ glGenFramebuffers(n, ids);
+ return 0;
+}
+
+
+int glGenProgramPipelines_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * pipelines = get: GLuint *
+ glGenProgramPipelines(n, pipelines);
+ return 0;
+}
+
+
+int glGenQueries_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * ids = get: GLuint *
+ glGenQueries(n, ids);
+ return 0;
+}
+
+
+int glGenRenderbuffers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * renderbuffers = get: GLuint *
+ glGenRenderbuffers(n, renderbuffers);
+ return 0;
+}
+
+
+int glGenSamplers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * samplers = get: GLuint *
+ glGenSamplers(n, samplers);
+ return 0;
+}
+
+
+int glGenTextures_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * textures = get: GLuint *
+ glGenTextures(n, textures);
+ return 0;
+}
+
+
+int glGenTransformFeedbacks_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * ids = get: GLuint *
+ glGenTransformFeedbacks(n, ids);
+ return 0;
+}
+
+
+int glGenVertexArrays_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * arrays = get: GLuint *
+ glGenVertexArrays(n, arrays);
+ return 0;
+}
+
+
+int glGetBooleanv_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLboolean * data = get: GLboolean *
+ glGetBooleanv(pname, data);
+ return 0;
+}
+
+
+int glGetDoublev_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLdouble * data = get: GLdouble *
+ glGetDoublev(pname, data);
+ return 0;
+}
+
+
+int glGetFloatv_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLfloat * data = get: GLfloat *
+ glGetFloatv(pname, data);
+ return 0;
+}
+
+
+int glGetIntegerv_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLint * data = get: GLint *
+ glGetIntegerv(pname, data);
+ return 0;
+}
+
+
+int glGetInteger64v_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLint64 * data = get: GLint64 *
+ glGetInteger64v(pname, data);
+ return 0;
+}
+
+
+int glGetBooleani_v_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLboolean * data = get: GLboolean *
+ glGetBooleani_v(target, index, data);
+ return 0;
+}
+
+
+int glGetIntegeri_v_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLint * data = get: GLint *
+ glGetIntegeri_v(target, index, data);
+ return 0;
+}
+
+
+int glGetFloati_v_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLfloat * data = get: GLfloat *
+ glGetFloati_v(target, index, data);
+ return 0;
+}
+
+
+int glGetDoublei_v_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLdouble * data = get: GLdouble *
+ glGetDoublei_v(target, index, data);
+ return 0;
+}
+
+
+int glGetInteger64i_v_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLint64 * data = get: GLint64 *
+ glGetInteger64i_v(target, index, data);
+ return 0;
+}
+
+
+int glGetActiveAttrib_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLsizei bufSize = luaL_checkinteger(L, 3);
+ GLsizei * length = get: GLsizei *
+ GLint * size = get: GLint *
+ GLenum * type = get: GLenum *
+ GLchar * name = luaL_checkstring(L, 7);
+ glGetActiveAttrib(program, index, bufSize, length, size, type, name);
+ return 0;
+}
+
+
+int glGetActiveSubroutineName_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum shadertype = luaL_checkinteger(L, 2);
+ GLuint index = luaL_checkinteger(L, 3);
+ GLsizei bufSize = luaL_checkinteger(L, 4);
+ GLsizei * length = get: GLsizei *
+ GLchar * name = luaL_checkstring(L, 6);
+ glGetActiveSubroutineName(program, shadertype, index, bufSize, length, name);
+ return 0;
+}
+
+
+int glGetActiveSubroutineUniformiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum shadertype = luaL_checkinteger(L, 2);
+ GLuint index = luaL_checkinteger(L, 3);
+ GLenum pname = luaL_checkinteger(L, 4);
+ GLint * values = get: GLint *
+ glGetActiveSubroutineUniformiv(program, shadertype, index, pname, values);
+ return 0;
+}
+
+
+int glGetActiveSubroutineUniformName_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum shadertype = luaL_checkinteger(L, 2);
+ GLuint index = luaL_checkinteger(L, 3);
+ GLsizei bufSize = luaL_checkinteger(L, 4);
+ GLsizei * length = get: GLsizei *
+ GLchar * name = luaL_checkstring(L, 6);
+ glGetActiveSubroutineUniformName(program, shadertype, index, bufSize, length, name);
+ return 0;
+}
+
+
+int glGetActiveUniform_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLsizei bufSize = luaL_checkinteger(L, 3);
+ GLsizei * length = get: GLsizei *
+ GLint * size = get: GLint *
+ GLenum * type = get: GLenum *
+ GLchar * name = luaL_checkstring(L, 7);
+ glGetActiveUniform(program, index, bufSize, length, size, type, name);
+ return 0;
+}
+
+
+int glGetActiveUniformBlockiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint uniformBlockIndex = luaL_checkinteger(L, 2);
+ GLenum pname = luaL_checkinteger(L, 3);
+ GLint * params = get: GLint *
+ glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
+ return 0;
+}
+
+
+int glGetActiveUniformBlockName_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint uniformBlockIndex = luaL_checkinteger(L, 2);
+ GLsizei bufSize = luaL_checkinteger(L, 3);
+ GLsizei * length = get: GLsizei *
+ GLchar * uniformBlockName = luaL_checkstring(L, 5);
+ glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName);
+ return 0;
+}
+
+
+int glGetActiveUniformName_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint uniformIndex = luaL_checkinteger(L, 2);
+ GLsizei bufSize = luaL_checkinteger(L, 3);
+ GLsizei * length = get: GLsizei *
+ GLchar * uniformName = luaL_checkstring(L, 5);
+ glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName);
+ return 0;
+}
+
+
+int glGetActiveUniformsiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLsizei uniformCount = luaL_checkinteger(L, 2);
+ const GLuint * uniformIndices = get: const GLuint *
+ GLenum pname = luaL_checkinteger(L, 4);
+ GLint * params = get: GLint *
+ glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
+ return 0;
+}
+
+
+int glGetAttachedShaders_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLsizei maxCount = luaL_checkinteger(L, 2);
+ GLsizei * count = get: GLsizei *
+ GLuint * shaders = get: GLuint *
+ glGetAttachedShaders(program, maxCount, count, shaders);
+ return 0;
+}
+
+
+int glGetAttribLocation_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ const GLchar * name = luaL_checkstring(L, 2);
+ GLint bind_result = glGetAttribLocation(program, name);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glGetBufferParameteriv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum value = luaL_checkinteger(L, 2);
+ GLint * data = get: GLint *
+ glGetBufferParameteriv(target, value, data);
+ return 0;
+}
+
+
+int glGetBufferParameteri64v_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum value = luaL_checkinteger(L, 2);
+ GLint64 * data = get: GLint64 *
+ glGetBufferParameteri64v(target, value, data);
+ return 0;
+}
+
+
+int glGetBufferPointerv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ void ** params = get: void **
+ glGetBufferPointerv(target, pname, params);
+ return 0;
+}
+
+
+int glGetBufferSubData_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLintptr offset = luaL_checkinteger(L, 2);
+ GLsizeiptr size = luaL_checkinteger(L, 3);
+ void * data = get: void *
+ glGetBufferSubData(target, offset, size, data);
+ return 0;
+}
+
+
+int glGetCompressedTexImage_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ void * pixels = get: void *
+ glGetCompressedTexImage(target, level, pixels);
+ return 0;
+}
+
+
+int glGetError_bind(lua_State *L)
+{
+ void = get:
+ GLenum bind_result = glGetError(void);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glGetFragDataIndex_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ const char * name = luaL_checkstring(L, 2);
+ GLint bind_result = glGetFragDataIndex(program, name);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glGetFragDataLocation_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ const char * name = luaL_checkstring(L, 2);
+ GLint bind_result = glGetFragDataLocation(program, name);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glGetFramebufferAttachmentParameteriv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum attachment = luaL_checkinteger(L, 2);
+ GLenum pname = luaL_checkinteger(L, 3);
+ GLint * params = get: GLint *
+ glGetFramebufferAttachmentParameteriv(target, attachment, pname, params);
+ return 0;
+}
+
+
+int glGetMultisamplefv_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLfloat * val = get: GLfloat *
+ glGetMultisamplefv(pname, index, val);
+ return 0;
+}
+
+
+int glGetUniformfv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLfloat * params = get: GLfloat *
+ glGetUniformfv(program, location, params);
+ return 0;
+}
+
+
+int glGetUniformiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetUniformiv(program, location, params);
+ return 0;
+}
+
+
+int glGetUniformuiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLuint * params = get: GLuint *
+ glGetUniformuiv(program, location, params);
+ return 0;
+}
+
+
+int glGetUniformdv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLdouble * params = get: GLdouble *
+ glGetUniformdv(program, location, params);
+ return 0;
+}
+
+
+int glGetProgramiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetProgramiv(program, pname, params);
+ return 0;
+}
+
+
+int glGetProgramBinary_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLsizei bufSize = luaL_checkinteger(L, 2);
+ GLsizei * length = get: GLsizei *
+ GLenum * binaryFormat = get: GLenum *
+ void * binary = get: void *
+ glGetProgramBinary(program, bufSize, length, binaryFormat, binary);
+ return 0;
+}
+
+
+int glGetProgramInfoLog_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLsizei maxLength = luaL_checkinteger(L, 2);
+ GLsizei * length = get: GLsizei *
+ GLchar * infoLog = luaL_checkstring(L, 4);
+ glGetProgramInfoLog(program, maxLength, length, infoLog);
+ return 0;
+}
+
+
+int glGetProgramPipelineiv_bind(lua_State *L)
+{
+ GLuint pipeline = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetProgramPipelineiv(pipeline, pname, params);
+ return 0;
+}
+
+
+int glGetProgramPipelineInfoLog_bind(lua_State *L)
+{
+ GLuint pipeline = luaL_checkinteger(L, 1);
+ GLsizei bufSize = luaL_checkinteger(L, 2);
+ GLsizei * length = get: GLsizei *
+ GLchar * infoLog = luaL_checkstring(L, 4);
+ glGetProgramPipelineInfoLog(pipeline, bufSize, length, infoLog);
+ return 0;
+}
+
+
+int glGetProgramPipelineiv_bind(lua_State *L)
+{
+ GLuint pipeline = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetProgramPipelineiv(pipeline, pname, params);
+ return 0;
+}
+
+
+int glGetProgramStageiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum shadertype = luaL_checkinteger(L, 2);
+ GLenum pname = luaL_checkinteger(L, 3);
+ GLint * values = get: GLint *
+ glGetProgramStageiv(program, shadertype, pname, values);
+ return 0;
+}
+
+
+int glGetQueryIndexediv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLenum pname = luaL_checkinteger(L, 3);
+ GLint * params = get: GLint *
+ glGetQueryIndexediv(target, index, pname, params);
+ return 0;
+}
+
+
+int glGetQueryiv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetQueryiv(target, pname, params);
+ return 0;
+}
+
+
+int glGetRenderbufferParameteriv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetRenderbufferParameteriv(target, pname, params);
+ return 0;
+}
+
+
+int glGetSamplerParameterfv_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLfloat * params = get: GLfloat *
+ glGetSamplerParameterfv(sampler, pname, params);
+ return 0;
+}
+
+
+int glGetSamplerParameteriv_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetSamplerParameteriv(sampler, pname, params);
+ return 0;
+}
+
+
+int glGetSamplerParameterIiv_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetSamplerParameterIiv(sampler, pname, params);
+ return 0;
+}
+
+
+int glGetSamplerParameterIuiv_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLuint * params = get: GLuint *
+ glGetSamplerParameterIuiv(sampler, pname, params);
+ return 0;
+}
+
+
+int glGetShaderiv_bind(lua_State *L)
+{
+ GLuint shader = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetShaderiv(shader, pname, params);
+ return 0;
+}
+
+
+int glGetShaderInfoLog_bind(lua_State *L)
+{
+ GLuint shader = luaL_checkinteger(L, 1);
+ GLsizei maxLength = luaL_checkinteger(L, 2);
+ GLsizei * length = get: GLsizei *
+ GLchar * infoLog = luaL_checkstring(L, 4);
+ glGetShaderInfoLog(shader, maxLength, length, infoLog);
+ return 0;
+}
+
+
+int glGetShaderiv_bind(lua_State *L)
+{
+ GLuint shader = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetShaderiv(shader, pname, params);
+ return 0;
+}
+
+
+int glGetShaderPrecisionFormat_bind(lua_State *L)
+{
+ GLenum shaderType = luaL_checkinteger(L, 1);
+ GLenum precisionType = luaL_checkinteger(L, 2);
+ GLint * range = get: GLint *
+ GLint * precision = get: GLint *
+ glGetShaderPrecisionFormat(shaderType, precisionType, range, precision);
+ return 0;
+}
+
+
+int glGetShaderSource_bind(lua_State *L)
+{
+ GLuint shader = luaL_checkinteger(L, 1);
+ GLsizei bufSize = luaL_checkinteger(L, 2);
+ GLsizei * length = get: GLsizei *
+ GLchar * source = luaL_checkstring(L, 4);
+ glGetShaderSource(shader, bufSize, length, source);
+ return 0;
+}
+
+
+int glGetString_bind(lua_State *L)
+{
+ GLenum name = luaL_checkinteger(L, 1);
+ const GLubyte * bind_result = glGetString(name);
+ /* push result */
+ return /* count */;
+}
+
+
+int glGetStringi_bind(lua_State *L)
+{
+ GLenum name = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ const GLubyte * bind_result = glGetStringi(name, index);
+ /* push result */
+ return /* count */;
+}
+
+
+int glGetSubroutineIndex_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum shadertype = luaL_checkinteger(L, 2);
+ const GLchar * name = luaL_checkstring(L, 3);
+ GLuint bind_result = glGetSubroutineIndex(program, shadertype, name);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glGetSubroutineUniformLocation_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum shadertype = luaL_checkinteger(L, 2);
+ const GLchar * name = luaL_checkstring(L, 3);
+ GLint bind_result = glGetSubroutineUniformLocation(program, shadertype, name);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glGetSynciv_bind(lua_State *L)
+{
+ GLsync sync = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLsizei bufSize = luaL_checkinteger(L, 3);
+ GLsizei * length = get: GLsizei *
+ GLint * values = get: GLint *
+ glGetSynciv(sync, pname, bufSize, length, values);
+ return 0;
+}
+
+
+int glGetTexImage_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLenum format = luaL_checkinteger(L, 3);
+ GLenum type = luaL_checkinteger(L, 4);
+ void * pixels = get: void *
+ glGetTexImage(target, level, format, type, pixels);
+ return 0;
+}
+
+
+int glGetTexLevelParameterfv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLenum pname = luaL_checkinteger(L, 3);
+ GLfloat * params = get: GLfloat *
+ glGetTexLevelParameterfv(target, level, pname, params);
+ return 0;
+}
+
+
+int glGetTexLevelParameteriv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLenum pname = luaL_checkinteger(L, 3);
+ GLint * params = get: GLint *
+ glGetTexLevelParameteriv(target, level, pname, params);
+ return 0;
+}
+
+
+int glGetTexParameterfv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLfloat * params = get: GLfloat *
+ glGetTexParameterfv(target, pname, params);
+ return 0;
+}
+
+
+int glGetTexParameteriv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetTexParameteriv(target, pname, params);
+ return 0;
+}
+
+
+int glGetTexParameterIiv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetTexParameterIiv(target, pname, params);
+ return 0;
+}
+
+
+int glGetTexParameterIuiv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLuint * params = get: GLuint *
+ glGetTexParameterIuiv(target, pname, params);
+ return 0;
+}
+
+
+int glGetTransformFeedbackVarying_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLsizei bufSize = luaL_checkinteger(L, 3);
+ GLsizei * length = get: GLsizei *
+ GLsizei * size = get: GLsizei *
+ GLenum * type = get: GLenum *
+ char * name = luaL_checkstring(L, 7);
+ glGetTransformFeedbackVarying(program, index, bufSize, length, size, type, name);
+ return 0;
+}
+
+
+int glGetUniformBlockIndex_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ const GLchar * uniformBlockName = luaL_checkstring(L, 2);
+ GLuint bind_result = glGetUniformBlockIndex(program, uniformBlockName);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glGetUniformIndices_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLsizei uniformCount = luaL_checkinteger(L, 2);
+ const GLchar ** uniformNames = get: const GLchar **
+ GLuint * uniformIndices = get: GLuint *
+ glGetUniformIndices(program, uniformCount, uniformNames, uniformIndices);
+ return 0;
+}
+
+
+int glGetUniformLocation_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ const GLchar * name = luaL_checkstring(L, 2);
+ GLint bind_result = glGetUniformLocation(program, name);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glGetUniformSubroutineuiv_bind(lua_State *L)
+{
+ GLenum shadertype = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLuint * values = get: GLuint *
+ glGetUniformSubroutineuiv(shadertype, location, values);
+ return 0;
+}
+
+
+int glGetVertexAttribdv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLdouble * params = get: GLdouble *
+ glGetVertexAttribdv(index, pname, params);
+ return 0;
+}
+
+
+int glGetVertexAttribfv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLfloat * params = get: GLfloat *
+ glGetVertexAttribfv(index, pname, params);
+ return 0;
+}
+
+
+int glGetVertexAttribiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetVertexAttribiv(index, pname, params);
+ return 0;
+}
+
+
+int glGetVertexAttribIiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetVertexAttribIiv(index, pname, params);
+ return 0;
+}
+
+
+int glGetVertexAttribIuiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLuint * params = get: GLuint *
+ glGetVertexAttribIuiv(index, pname, params);
+ return 0;
+}
+
+
+int glGetVertexAttribLdv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLdouble * params = get: GLdouble *
+ glGetVertexAttribLdv(index, pname, params);
+ return 0;
+}
+
+
+int glGetVertexAttribPointerv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ void ** pointer = get: void **
+ glGetVertexAttribPointerv(index, pname, pointer);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/h b/src/opengl/bind/h
new file mode 100644
index 0000000..00590da
--- /dev/null
+++ b/src/opengl/bind/h
@@ -0,0 +1 @@
+void glHint( GLenum target, GLenum mode);
diff --git a/src/opengl/bind/h.bind b/src/opengl/bind/h.bind
new file mode 100644
index 0000000..7837656
--- /dev/null
+++ b/src/opengl/bind/h.bind
@@ -0,0 +1,9 @@
+int glHint_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum mode = luaL_checkinteger(L, 2);
+ glHint(target, mode);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/i b/src/opengl/bind/i
new file mode 100644
index 0000000..6cb0306
--- /dev/null
+++ b/src/opengl/bind/i
@@ -0,0 +1,14 @@
+GLboolean glIsBuffer( GLuint buffer);
+GLboolean glIsEnabled( GLenum cap);
+GLboolean glIsEnabledi( GLenum cap, GLuint index);
+GLboolean glIsFramebuffer( GLuint framebuffer);
+GLboolean glIsProgram( GLuint program);
+GLboolean glIsProgramPipeline( GLuint pipeline);
+GLboolean glIsQuery( GLuint id);
+GLboolean glIsRenderbuffer( GLuint renderbuffer);
+GLboolean glIsSampler( GLuint id);
+GLboolean glIsShader( GLuint shader);
+GLboolean glIsSync( GLsync sync);
+GLboolean glIsTexture( GLuint texture);
+GLboolean glIsTransformFeedback( GLuint id);
+GLboolean glIsVertexArray( GLuint array);
diff --git a/src/opengl/bind/i.bind b/src/opengl/bind/i.bind
new file mode 100644
index 0000000..044b72b
--- /dev/null
+++ b/src/opengl/bind/i.bind
@@ -0,0 +1,127 @@
+int glIsBuffer_bind(lua_State *L)
+{
+ GLuint buffer = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsBuffer(buffer);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsEnabled_bind(lua_State *L)
+{
+ GLenum cap = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsEnabled(cap);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsEnabledi_bind(lua_State *L)
+{
+ GLenum cap = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLboolean bind_result = glIsEnabledi(cap, index);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsFramebuffer_bind(lua_State *L)
+{
+ GLuint framebuffer = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsFramebuffer(framebuffer);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsProgram_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsProgram(program);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsProgramPipeline_bind(lua_State *L)
+{
+ GLuint pipeline = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsProgramPipeline(pipeline);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsQuery_bind(lua_State *L)
+{
+ GLuint id = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsQuery(id);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsRenderbuffer_bind(lua_State *L)
+{
+ GLuint renderbuffer = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsRenderbuffer(renderbuffer);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsSampler_bind(lua_State *L)
+{
+ GLuint id = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsSampler(id);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsShader_bind(lua_State *L)
+{
+ GLuint shader = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsShader(shader);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsSync_bind(lua_State *L)
+{
+ GLsync sync = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsSync(sync);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsTexture_bind(lua_State *L)
+{
+ GLuint texture = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsTexture(texture);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsTransformFeedback_bind(lua_State *L)
+{
+ GLuint id = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsTransformFeedback(id);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsVertexArray_bind(lua_State *L)
+{
+ GLuint array = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsVertexArray(array);
+ /* push result */
+ return /* count */;
+}
+
+
diff --git a/src/opengl/bind/l b/src/opengl/bind/l
new file mode 100644
index 0000000..eb6ec73
--- /dev/null
+++ b/src/opengl/bind/l
@@ -0,0 +1,4 @@
+void glLineWidth( GLfloat width);
+void glLinkProgram( GLuint program);
+void glLogicOp( GLenum opcode);
+
diff --git a/src/opengl/bind/l.bind b/src/opengl/bind/l.bind
new file mode 100644
index 0000000..1c8601b
--- /dev/null
+++ b/src/opengl/bind/l.bind
@@ -0,0 +1,24 @@
+int glLineWidth_bind(lua_State *L)
+{
+ GLfloat width = luaL_checknumber(L, 1);
+ glLineWidth(width);
+ return 0;
+}
+
+
+int glLinkProgram_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ glLinkProgram(program);
+ return 0;
+}
+
+
+int glLogicOp_bind(lua_State *L)
+{
+ GLenum opcode = luaL_checkinteger(L, 1);
+ glLogicOp(opcode);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/m b/src/opengl/bind/m
new file mode 100644
index 0000000..a346dd1
--- /dev/null
+++ b/src/opengl/bind/m
@@ -0,0 +1,7 @@
+void * glMapBuffer( GLenum target, GLenum access);
+void * glMapBufferRange( GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+void glMinSampleShading( GLfloat value);
+void glMultiDrawArrays( GLenum mode, const GLint * first, const GLsizei * count, GLsizei drawcount);
+void glMultiDrawElements( GLenum mode, const GLsizei * count, GLenum type, const void * const * indices, GLsizei drawcount);
+void glMultiDrawElementsBaseVertex( GLenum mode, const GLsizei *count, GLenum type, const void * const *indices, GLsizei drawcount, const GLint *basevertex);
+
diff --git a/src/opengl/bind/m.bind b/src/opengl/bind/m.bind
new file mode 100644
index 0000000..e76b3df
--- /dev/null
+++ b/src/opengl/bind/m.bind
@@ -0,0 +1,66 @@
+int glMapBuffer_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum access = luaL_checkinteger(L, 2);
+ void * bind_result = glMapBuffer(target, access);
+ /* push result */
+ return /* count */;
+}
+
+
+int glMapBufferRange_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLintptr offset = luaL_checkinteger(L, 2);
+ GLsizeiptr length = luaL_checkinteger(L, 3);
+ GLbitfield access = luaL_checkinteger(L, 4);
+ void * bind_result = glMapBufferRange(target, offset, length, access);
+ /* push result */
+ return /* count */;
+}
+
+
+int glMinSampleShading_bind(lua_State *L)
+{
+ GLfloat value = luaL_checknumber(L, 1);
+ glMinSampleShading(value);
+ return 0;
+}
+
+
+int glMultiDrawArrays_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ const GLint * first = get: const GLint *
+ const GLsizei * count = get: const GLsizei *
+ GLsizei drawcount = luaL_checkinteger(L, 4);
+ glMultiDrawArrays(mode, first, count, drawcount);
+ return 0;
+}
+
+
+int glMultiDrawElements_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ const GLsizei * count = get: const GLsizei *
+ GLenum type = luaL_checkinteger(L, 3);
+ const void * const * indices = get: const void * const *
+ GLsizei drawcount = luaL_checkinteger(L, 5);
+ glMultiDrawElements(mode, count, type, indices, drawcount);
+ return 0;
+}
+
+
+int glMultiDrawElementsBaseVertex_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ const GLsizei * count = get: const GLsizei *
+ GLenum type = luaL_checkinteger(L, 3);
+ const void * const * indices = get: const void * const *
+ GLsizei drawcount = luaL_checkinteger(L, 5);
+ const GLint * basevertex = get: const GLint *
+ glMultiDrawElementsBaseVertex(mode, count, type, indices, drawcount, basevertex);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/p b/src/opengl/bind/p
new file mode 100644
index 0000000..98ee850
--- /dev/null
+++ b/src/opengl/bind/p
@@ -0,0 +1,50 @@
+void glPatchParameteri( GLenum pname, GLint value);
+void glPatchParameterfv( GLenum pname, const GLfloat *values);
+void glPauseTransformFeedback( void);
+void glPixelStoref( GLenum pname, GLfloat param);
+void glPixelStorei( GLenum pname, GLint param);
+void glPointParameterf( GLenum pname, GLfloat param);
+void glPointParameteri( GLenum pname, GLint param);
+void glPointParameterfv( GLenum pname, const GLfloat * params);
+void glPointParameteriv( GLenum pname, const GLint * params);
+void glPointSize( GLfloat size);
+void glPolygonMode( GLenum face, GLenum mode);
+void glPolygonOffset( GLfloat factor, GLfloat units);
+void glPrimitiveRestartIndex( GLuint index);
+void glProgramBinary( GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+void glProgramParameteri( GLuint program, GLenum pname, GLint value);
+void glProgramUniform1f( GLuint program, GLint location, GLfloat v0);
+void glProgramUniform2f( GLuint program, GLint location, GLfloat v0, GLfloat v1);
+void glProgramUniform3f( GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+void glProgramUniform4f( GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+void glProgramUniform1i( GLuint program, GLint location, GLint v0);
+void glProgramUniform2i( GLuint program, GLint location, GLint v0, GLint v1);
+void glProgramUniform3i( GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+void glProgramUniform4i( GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+void glProgramUniform1ui( GLuint program, GLint location, GLuint v0);
+void glProgramUniform2ui( GLuint program, GLint location, GLuint v0, GLuint v1);
+void glProgramUniform3ui( GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+void glProgramUniform4ui( GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+void glProgramUniform1fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
+void glProgramUniform2fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
+void glProgramUniform3fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
+void glProgramUniform4fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
+void glProgramUniform1iv( GLuint program, GLint location, GLsizei count, const GLint *value);
+void glProgramUniform2iv( GLuint program, GLint location, GLsizei count, const GLint *value);
+void glProgramUniform3iv( GLuint program, GLint location, GLsizei count, const GLint *value);
+void glProgramUniform4iv( GLuint program, GLint location, GLsizei count, const GLint *value);
+void glProgramUniform1uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
+void glProgramUniform2uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
+void glProgramUniform3uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
+void glProgramUniform4uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
+void glProgramUniformMatrix2fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix3fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix4fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix2x3fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix3x2fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix2x4fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix4x2fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix3x4fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix4x3fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProvokingVertex( GLenum provokeMode);
+
diff --git a/src/opengl/bind/p.bind b/src/opengl/bind/p.bind
new file mode 100644
index 0000000..55411f4
--- /dev/null
+++ b/src/opengl/bind/p.bind
@@ -0,0 +1,521 @@
+int glPatchParameteri_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLint value = luaL_checkinteger(L, 2);
+ glPatchParameteri(pname, value);
+ return 0;
+}
+
+
+int glPatchParameterfv_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ const GLfloat * values = get: const GLfloat *
+ glPatchParameterfv(pname, values);
+ return 0;
+}
+
+
+int glPauseTransformFeedback_bind(lua_State *L)
+{
+ void = get:
+ glPauseTransformFeedback(void);
+ return 0;
+}
+
+
+int glPixelStoref_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLfloat param = luaL_checknumber(L, 2);
+ glPixelStoref(pname, param);
+ return 0;
+}
+
+
+int glPixelStorei_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLint param = luaL_checkinteger(L, 2);
+ glPixelStorei(pname, param);
+ return 0;
+}
+
+
+int glPointParameterf_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLfloat param = luaL_checknumber(L, 2);
+ glPointParameterf(pname, param);
+ return 0;
+}
+
+
+int glPointParameteri_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLint param = luaL_checkinteger(L, 2);
+ glPointParameteri(pname, param);
+ return 0;
+}
+
+
+int glPointParameterfv_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ const GLfloat * params = get: const GLfloat *
+ glPointParameterfv(pname, params);
+ return 0;
+}
+
+
+int glPointParameteriv_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ const GLint * params = get: const GLint *
+ glPointParameteriv(pname, params);
+ return 0;
+}
+
+
+int glPointSize_bind(lua_State *L)
+{
+ GLfloat size = luaL_checknumber(L, 1);
+ glPointSize(size);
+ return 0;
+}
+
+
+int glPolygonMode_bind(lua_State *L)
+{
+ GLenum face = luaL_checkinteger(L, 1);
+ GLenum mode = luaL_checkinteger(L, 2);
+ glPolygonMode(face, mode);
+ return 0;
+}
+
+
+int glPolygonOffset_bind(lua_State *L)
+{
+ GLfloat factor = luaL_checknumber(L, 1);
+ GLfloat units = luaL_checknumber(L, 2);
+ glPolygonOffset(factor, units);
+ return 0;
+}
+
+
+int glPrimitiveRestartIndex_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ glPrimitiveRestartIndex(index);
+ return 0;
+}
+
+
+int glProgramBinary_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum binaryFormat = luaL_checkinteger(L, 2);
+ const void * binary = get: const void *
+ GLsizei length = luaL_checkinteger(L, 4);
+ glProgramBinary(program, binaryFormat, binary, length);
+ return 0;
+}
+
+
+int glProgramParameteri_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint value = luaL_checkinteger(L, 3);
+ glProgramParameteri(program, pname, value);
+ return 0;
+}
+
+
+int glProgramUniform1f_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLfloat v0 = luaL_checknumber(L, 3);
+ glProgramUniform1f(program, location, v0);
+ return 0;
+}
+
+
+int glProgramUniform2f_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLfloat v0 = luaL_checknumber(L, 3);
+ GLfloat v1 = luaL_checknumber(L, 4);
+ glProgramUniform2f(program, location, v0, v1);
+ return 0;
+}
+
+
+int glProgramUniform3f_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLfloat v0 = luaL_checknumber(L, 3);
+ GLfloat v1 = luaL_checknumber(L, 4);
+ GLfloat v2 = luaL_checknumber(L, 5);
+ glProgramUniform3f(program, location, v0, v1, v2);
+ return 0;
+}
+
+
+int glProgramUniform4f_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLfloat v0 = luaL_checknumber(L, 3);
+ GLfloat v1 = luaL_checknumber(L, 4);
+ GLfloat v2 = luaL_checknumber(L, 5);
+ GLfloat v3 = luaL_checknumber(L, 6);
+ glProgramUniform4f(program, location, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glProgramUniform1i_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLint v0 = luaL_checkinteger(L, 3);
+ glProgramUniform1i(program, location, v0);
+ return 0;
+}
+
+
+int glProgramUniform2i_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLint v0 = luaL_checkinteger(L, 3);
+ GLint v1 = luaL_checkinteger(L, 4);
+ glProgramUniform2i(program, location, v0, v1);
+ return 0;
+}
+
+
+int glProgramUniform3i_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLint v0 = luaL_checkinteger(L, 3);
+ GLint v1 = luaL_checkinteger(L, 4);
+ GLint v2 = luaL_checkinteger(L, 5);
+ glProgramUniform3i(program, location, v0, v1, v2);
+ return 0;
+}
+
+
+int glProgramUniform4i_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLint v0 = luaL_checkinteger(L, 3);
+ GLint v1 = luaL_checkinteger(L, 4);
+ GLint v2 = luaL_checkinteger(L, 5);
+ GLint v3 = luaL_checkinteger(L, 6);
+ glProgramUniform4i(program, location, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glProgramUniform1ui_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLuint v0 = luaL_checkinteger(L, 3);
+ glProgramUniform1ui(program, location, v0);
+ return 0;
+}
+
+
+int glProgramUniform2ui_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLuint v0 = luaL_checkinteger(L, 3);
+ GLuint v1 = luaL_checkinteger(L, 4);
+ glProgramUniform2ui(program, location, v0, v1);
+ return 0;
+}
+
+
+int glProgramUniform3ui_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLuint v0 = luaL_checkinteger(L, 3);
+ GLuint v1 = luaL_checkinteger(L, 4);
+ GLuint v2 = luaL_checkinteger(L, 5);
+ glProgramUniform3ui(program, location, v0, v1, v2);
+ return 0;
+}
+
+
+int glProgramUniform4ui_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLuint v0 = luaL_checkinteger(L, 3);
+ GLuint v1 = luaL_checkinteger(L, 4);
+ GLuint v2 = luaL_checkinteger(L, 5);
+ GLuint v3 = luaL_checkinteger(L, 6);
+ glProgramUniform4ui(program, location, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glProgramUniform1fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniform1fv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform2fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniform2fv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform3fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniform3fv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform4fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniform4fv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform1iv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLint * value = get: const GLint *
+ glProgramUniform1iv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform2iv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLint * value = get: const GLint *
+ glProgramUniform2iv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform3iv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLint * value = get: const GLint *
+ glProgramUniform3iv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform4iv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLint * value = get: const GLint *
+ glProgramUniform4iv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform1uiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLuint * value = get: const GLuint *
+ glProgramUniform1uiv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform2uiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLuint * value = get: const GLuint *
+ glProgramUniform2uiv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform3uiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLuint * value = get: const GLuint *
+ glProgramUniform3uiv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform4uiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLuint * value = get: const GLuint *
+ glProgramUniform4uiv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix2fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix2fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix3fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix3fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix4fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix4fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix2x3fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix2x3fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix3x2fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix3x2fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix2x4fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix2x4fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix4x2fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix4x2fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix3x4fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix3x4fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix4x3fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix4x3fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProvokingVertex_bind(lua_State *L)
+{
+ GLenum provokeMode = luaL_checkinteger(L, 1);
+ glProvokingVertex(provokeMode);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/q b/src/opengl/bind/q
new file mode 100644
index 0000000..840f97b
--- /dev/null
+++ b/src/opengl/bind/q
@@ -0,0 +1 @@
+void glQueryCounter( GLuint id, GLenum target);
diff --git a/src/opengl/bind/q.bind b/src/opengl/bind/q.bind
new file mode 100644
index 0000000..7209f1f
--- /dev/null
+++ b/src/opengl/bind/q.bind
@@ -0,0 +1,9 @@
+int glQueryCounter_bind(lua_State *L)
+{
+ GLuint id = luaL_checkinteger(L, 1);
+ GLenum target = luaL_checkinteger(L, 2);
+ glQueryCounter(id, target);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/r b/src/opengl/bind/r
new file mode 100644
index 0000000..f4e581c
--- /dev/null
+++ b/src/opengl/bind/r
@@ -0,0 +1,6 @@
+void glReadBuffer( GLenum mode);
+void glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void * data);
+void glReleaseShaderCompiler( void);
+void glRenderbufferStorage( GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+void glRenderbufferStorageMultisample( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+void glResumeTransformFeedback( void);
diff --git a/src/opengl/bind/r.bind b/src/opengl/bind/r.bind
new file mode 100644
index 0000000..d070737
--- /dev/null
+++ b/src/opengl/bind/r.bind
@@ -0,0 +1,61 @@
+int glReadBuffer_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ glReadBuffer(mode);
+ return 0;
+}
+
+
+int glReadPixels_bind(lua_State *L)
+{
+ GLint x = luaL_checkinteger(L, 1);
+ GLint y = luaL_checkinteger(L, 2);
+ GLsizei width = luaL_checkinteger(L, 3);
+ GLsizei height = luaL_checkinteger(L, 4);
+ GLenum format = luaL_checkinteger(L, 5);
+ GLenum type = luaL_checkinteger(L, 6);
+ void * data = get: void *
+ glReadPixels(x, y, width, height, format, type, data);
+ return 0;
+}
+
+
+int glReleaseShaderCompiler_bind(lua_State *L)
+{
+ void = get:
+ glReleaseShaderCompiler(void);
+ return 0;
+}
+
+
+int glRenderbufferStorage_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum internalformat = luaL_checkinteger(L, 2);
+ GLsizei width = luaL_checkinteger(L, 3);
+ GLsizei height = luaL_checkinteger(L, 4);
+ glRenderbufferStorage(target, internalformat, width, height);
+ return 0;
+}
+
+
+int glRenderbufferStorageMultisample_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLsizei samples = luaL_checkinteger(L, 2);
+ GLenum internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLsizei height = luaL_checkinteger(L, 5);
+ glRenderbufferStorageMultisample(target, samples, internalformat, width, height);
+ return 0;
+}
+
+
+int glResumeTransformFeedback_bind(lua_State *L)
+{
+ void = get:
+ glResumeTransformFeedback(void);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/s b/src/opengl/bind/s
new file mode 100644
index 0000000..cdddf6b
--- /dev/null
+++ b/src/opengl/bind/s
@@ -0,0 +1,21 @@
+void glSampleCoverage( GLfloat value, GLboolean invert);
+void glSampleMaski( GLuint maskNumber, GLbitfield mask);
+void glSamplerParameterf( GLuint sampler, GLenum pname, GLfloat param);
+void glSamplerParameteri( GLuint sampler, GLenum pname, GLint param);
+void glSamplerParameterfv( GLuint sampler, GLenum pname, const GLfloat * params);
+void glSamplerParameteriv( GLuint sampler, GLenum pname, const GLint * params);
+void glSamplerParameterIiv( GLuint sampler, GLenum pname, const GLint *params);
+void glSamplerParameterIuiv( GLuint sampler, GLenum pname, const GLuint *params);
+void glScissor( GLint x, GLint y, GLsizei width, GLsizei height);
+void glScissorArrayv( GLuint first, GLsizei count, const GLint *v);
+void glScissorIndexed( GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+void glScissorIndexedv( GLuint index, const GLint *v);
+void glShaderBinary( GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length);
+void glShaderSource( GLuint shader, GLsizei count, const GLchar **string, const GLint *length);
+void glStencilFunc( GLenum func, GLint ref, GLuint mask);
+void glStencilFuncSeparate( GLenum face, GLenum func, GLint ref, GLuint mask);
+void glStencilMask( GLuint mask);
+void glStencilMaskSeparate( GLenum face, GLuint mask);
+void glStencilOp( GLenum sfail, GLenum dpfail, GLenum dppass);
+void glStencilOpSeparate( GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+
diff --git a/src/opengl/bind/s.bind b/src/opengl/bind/s.bind
new file mode 100644
index 0000000..256ebe2
--- /dev/null
+++ b/src/opengl/bind/s.bind
@@ -0,0 +1,202 @@
+int glSampleCoverage_bind(lua_State *L)
+{
+ GLfloat value = luaL_checknumber(L, 1);
+ GLboolean invert = get: GLboolean
+ glSampleCoverage(value, invert);
+ return 0;
+}
+
+
+int glSampleMaski_bind(lua_State *L)
+{
+ GLuint maskNumber = luaL_checkinteger(L, 1);
+ GLbitfield mask = luaL_checkinteger(L, 2);
+ glSampleMaski(maskNumber, mask);
+ return 0;
+}
+
+
+int glSamplerParameterf_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLfloat param = luaL_checknumber(L, 3);
+ glSamplerParameterf(sampler, pname, param);
+ return 0;
+}
+
+
+int glSamplerParameteri_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint param = luaL_checkinteger(L, 3);
+ glSamplerParameteri(sampler, pname, param);
+ return 0;
+}
+
+
+int glSamplerParameterfv_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ const GLfloat * params = get: const GLfloat *
+ glSamplerParameterfv(sampler, pname, params);
+ return 0;
+}
+
+
+int glSamplerParameteriv_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ const GLint * params = get: const GLint *
+ glSamplerParameteriv(sampler, pname, params);
+ return 0;
+}
+
+
+int glSamplerParameterIiv_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ const GLint * params = get: const GLint *
+ glSamplerParameterIiv(sampler, pname, params);
+ return 0;
+}
+
+
+int glSamplerParameterIuiv_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ const GLuint * params = get: const GLuint *
+ glSamplerParameterIuiv(sampler, pname, params);
+ return 0;
+}
+
+
+int glScissor_bind(lua_State *L)
+{
+ GLint x = luaL_checkinteger(L, 1);
+ GLint y = luaL_checkinteger(L, 2);
+ GLsizei width = luaL_checkinteger(L, 3);
+ GLsizei height = luaL_checkinteger(L, 4);
+ glScissor(x, y, width, height);
+ return 0;
+}
+
+
+int glScissorArrayv_bind(lua_State *L)
+{
+ GLuint first = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLint * v = get: const GLint *
+ glScissorArrayv(first, count, v);
+ return 0;
+}
+
+
+int glScissorIndexed_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLint left = luaL_checkinteger(L, 2);
+ GLint bottom = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLsizei height = luaL_checkinteger(L, 5);
+ glScissorIndexed(index, left, bottom, width, height);
+ return 0;
+}
+
+
+int glScissorIndexedv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLint * v = get: const GLint *
+ glScissorIndexedv(index, v);
+ return 0;
+}
+
+
+int glShaderBinary_bind(lua_State *L)
+{
+ GLsizei count = luaL_checkinteger(L, 1);
+ const GLuint * shaders = get: const GLuint *
+ GLenum binaryFormat = luaL_checkinteger(L, 3);
+ const void * binary = get: const void *
+ GLsizei length = luaL_checkinteger(L, 5);
+ glShaderBinary(count, shaders, binaryFormat, binary, length);
+ return 0;
+}
+
+
+int glShaderSource_bind(lua_State *L)
+{
+ GLuint shader = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLchar ** string = get: const GLchar **
+ const GLint * length = get: const GLint *
+ glShaderSource(shader, count, string, length);
+ return 0;
+}
+
+
+int glStencilFunc_bind(lua_State *L)
+{
+ GLenum func = luaL_checkinteger(L, 1);
+ GLint ref = luaL_checkinteger(L, 2);
+ GLuint mask = luaL_checkinteger(L, 3);
+ glStencilFunc(func, ref, mask);
+ return 0;
+}
+
+
+int glStencilFuncSeparate_bind(lua_State *L)
+{
+ GLenum face = luaL_checkinteger(L, 1);
+ GLenum func = luaL_checkinteger(L, 2);
+ GLint ref = luaL_checkinteger(L, 3);
+ GLuint mask = luaL_checkinteger(L, 4);
+ glStencilFuncSeparate(face, func, ref, mask);
+ return 0;
+}
+
+
+int glStencilMask_bind(lua_State *L)
+{
+ GLuint mask = luaL_checkinteger(L, 1);
+ glStencilMask(mask);
+ return 0;
+}
+
+
+int glStencilMaskSeparate_bind(lua_State *L)
+{
+ GLenum face = luaL_checkinteger(L, 1);
+ GLuint mask = luaL_checkinteger(L, 2);
+ glStencilMaskSeparate(face, mask);
+ return 0;
+}
+
+
+int glStencilOp_bind(lua_State *L)
+{
+ GLenum sfail = luaL_checkinteger(L, 1);
+ GLenum dpfail = luaL_checkinteger(L, 2);
+ GLenum dppass = luaL_checkinteger(L, 3);
+ glStencilOp(sfail, dpfail, dppass);
+ return 0;
+}
+
+
+int glStencilOpSeparate_bind(lua_State *L)
+{
+ GLenum face = luaL_checkinteger(L, 1);
+ GLenum sfail = luaL_checkinteger(L, 2);
+ GLenum dpfail = luaL_checkinteger(L, 3);
+ GLenum dppass = luaL_checkinteger(L, 4);
+ glStencilOpSeparate(face, sfail, dpfail, dppass);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/sigs b/src/opengl/bind/sigs
new file mode 100644
index 0000000..60479df
--- /dev/null
+++ b/src/opengl/bind/sigs
@@ -0,0 +1,445 @@
+void glActiveShaderProgram( GLuint pipeline, GLuint program);
+void glActiveTexture( GLenum texture);
+void glAttachShader( GLuint program, GLuint shader);
+void glBeginConditionalRender( GLuint id, GLenum mode);
+void glBeginQuery( GLenum target, GLuint id);
+void glBeginQuery( GLenum target, GLuint id);
+void glBeginTransformFeedback( GLenum primitiveMode);
+void glBindAttribLocation( GLuint program, GLuint index, const GLchar *name);
+void glBindBuffer( GLenum target, GLuint buffer);
+void glBindBufferBase( GLenum target, GLuint index, GLuint buffer);
+void glBindBufferRange( GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+void glBindFragDataLocation( GLuint program, GLuint colorNumber, const char * name);
+void glBindFragDataLocationIndexed( GLuint program, GLuint colorNumber, GLuint index, const char *name);
+void glBindFramebuffer( GLenum target, GLuint framebuffer);
+void glBindImageTexture( GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+void glBindProgramPipeline( GLuint pipeline);
+void glBindRenderbuffer( GLenum target, GLuint renderbuffer);
+void glBindSampler( GLuint unit, GLuint sampler);
+void glBindTexture( GLenum target, GLuint texture);
+void glBindTextureUnit( GLuint unit, GLuint texture);
+void glBindTransformFeedback( GLenum target, GLuint id);
+void glBindVertexArray( GLuint array);
+void glBindVertexBuffer( GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+void glBlendColor( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+void glBlendEquation( GLenum mode);
+
+void glBlendEquationi( GLuint buf, GLenum mode);
+void glBlendEquationSeparate( GLenum modeRGB, GLenum modeAlpha);
+void glBlendEquationSeparatei( GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+void glBlendFunc( GLenum sfactor, GLenum dfactor);
+void glBlendFunci( GLuint buf, GLenum sfactor, GLenum dfactor);
+void glBlendFuncSeparate( GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+void glBlendFuncSeparatei( GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+void glBlitFramebuffer( GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+void glBlitNamedFramebuffer( GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+void glBufferData( GLenum target, GLsizeiptr size, const void * data, GLenum usage);
+void glBufferStorage( GLenum target, GLsizeiptr size, const void * data, GLbitfield flags);
+void glBufferSubData( GLenum target, GLintptr offset, GLsizeiptr size, const void * data);
+GLenum glCheckFramebufferStatus( GLenum target);
+GLenum glCheckNamedFramebufferStatus( GLuint framebuffer, GLenum target);
+void glClampColor( GLenum target, GLenum clamp);
+void glClear( GLbitfield mask);
+void glClearBufferiv( GLenum buffer, GLint drawbuffer, const GLint * value);
+void glClearBufferuiv( GLenum buffer, GLint drawbuffer, const GLuint * value);
+void glClearBufferfv( GLenum buffer, GLint drawbuffer, const GLfloat * value);
+void glClearBufferfi( GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+void glClearStencil( GLint s);
+GLenum glClientWaitSync( GLsync sync, GLbitfield flags, GLuint64 timeout);
+void glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+void glColorMaski( GLuint buf, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+void glCompileShader( GLuint shader);
+void glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data);
+void glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data);
+void glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data);
+void glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data);
+void glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data);
+void glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data);
+void glCopyBufferSubData( GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+void glCopyBufferSubData( GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+void glCopyTexImage1D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+void glCopyTexImage2D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+void glCopyTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+void glCopyTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+void glCopyTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLuint glCreateProgram( void);
+GLuint glCreateShader( GLenum shaderType);
+GLuint glCreateShaderProgramv( GLenum type, GLsizei count, const char **strings);
+void glCullFace( GLenum mode);
+
+void glDeleteBuffers( GLsizei n, const GLuint * buffers);
+void glDeleteFramebuffers( GLsizei n, GLuint *framebuffers);
+void glDeleteProgram( GLuint program);
+void glDeleteProgramPipelines( GLsizei n, const GLuint *pipelines);
+void glDeleteQueries( GLsizei n, const GLuint * ids);
+void glDeleteRenderbuffers( GLsizei n, GLuint *renderbuffers);
+void glDeleteSamplers( GLsizei n, const GLuint * samplers);
+void glDeleteShader( GLuint shader);
+void glDeleteSync( GLsync sync);
+void glDeleteTextures( GLsizei n, const GLuint * textures);
+void glDeleteTransformFeedbacks( GLsizei n, const GLuint *ids);
+void glDeleteVertexArrays( GLsizei n, const GLuint *arrays);
+void glDepthFunc( GLenum func);
+void glDepthMask( GLboolean flag);
+void glDepthRange( GLdouble nearVal, GLdouble farVal);
+void glDepthRangef( GLfloat nearVal, GLfloat farVal);
+void glDepthRangeArrayv( GLuint first, GLsizei count, const GLdouble *v);
+void glDepthRangeIndexed( GLuint index, GLdouble nearVal, GLdouble farVal);
+void glDetachShader( GLuint program, GLuint shader);
+void glDisable( GLenum cap);
+void glDisablei( GLenum cap, GLuint index);
+void glDisableVertexAttribArray( GLuint index);
+void glDrawArrays( GLenum mode, GLint first, GLsizei count);
+void glDrawArraysIndirect( GLenum mode, const void *indirect);
+void glDrawArraysInstanced( GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+void glDrawBuffer( GLenum buf);
+void glDrawBuffers( GLsizei n, const GLenum *bufs);
+void glDrawElements( GLenum mode, GLsizei count, GLenum type, const void * indices);
+void glDrawElementsBaseVertex( GLenum mode, GLsizei count, GLenum type, void *indices, GLint basevertex);
+void glDrawElementsIndirect( GLenum mode, GLenum type, const void *indirect);
+void glDrawElementsInstanced( GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount);
+void glDrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices);
+void glDrawRangeElementsBaseVertex( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, void *indices, GLint basevertex);
+void glDrawTransformFeedback( GLenum mode, GLuint id);
+void glDrawTransformFeedbackStream( GLenum mode, GLuint id, GLuint stream);
+
+void glEnable( GLenum cap);
+void glEnablei( GLenum cap, GLuint index);
+void glEnableVertexAttribArray( GLuint index);
+void glEndConditionalRender( void);
+void glEndQuery( GLenum target);
+void glEndQueryIndexed( GLenum target, GLuint index);
+void glEndTransformFeedback();
+GLsync glFenceSync( GLenum condition, GLbitfield flags);
+void glFinish( void);
+void glFlush( void);
+void glFlushMappedBufferRange( GLenum target, GLintptr offset, GLsizeiptr length);
+void glFramebufferRenderbuffer( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+void glFramebufferTexture( GLenum target, GLenum attachment, GLuint texture, GLint level);
+void glFramebufferTexture1D( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+void glFramebufferTexture2D( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+void glFramebufferTexture3D( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint layer);
+void glFramebufferTextureLayer( GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+void glFrontFace( GLenum mode);
+void glGenBuffers( GLsizei n, GLuint * buffers);
+void glGenerateMipmap( GLenum target);
+void glGenFramebuffers( GLsizei n, GLuint *ids);
+void glGenProgramPipelines( GLsizei n, GLuint *pipelines);
+void glGenQueries( GLsizei n, GLuint * ids);
+void glGenRenderbuffers( GLsizei n, GLuint *renderbuffers);
+void glGenSamplers( GLsizei n, GLuint *samplers);
+void glGenTextures( GLsizei n, GLuint * textures);
+void glGenTransformFeedbacks( GLsizei n, GLuint *ids);
+void glGenVertexArrays( GLsizei n, GLuint *arrays);
+void glGetBooleanv( GLenum pname, GLboolean * data);
+void glGetDoublev( GLenum pname, GLdouble * data);
+void glGetFloatv( GLenum pname, GLfloat * data);
+void glGetIntegerv( GLenum pname, GLint * data);
+void glGetInteger64v( GLenum pname, GLint64 * data);
+void glGetBooleani_v( GLenum target, GLuint index, GLboolean * data);
+void glGetIntegeri_v( GLenum target, GLuint index, GLint * data);
+void glGetFloati_v( GLenum target, GLuint index, GLfloat * data);
+void glGetDoublei_v( GLenum target, GLuint index, GLdouble * data);
+void glGetInteger64i_v( GLenum target, GLuint index, GLint64 * data);
+void glGetActiveAttrib( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+void glGetActiveSubroutineName( GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+void glGetActiveSubroutineUniformiv( GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);
+void glGetActiveSubroutineUniformName( GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+void glGetActiveUniform( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+void glGetActiveUniformBlockiv( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+void glGetActiveUniformBlockName( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+void glGetActiveUniformName( GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);
+void glGetActiveUniformsiv( GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+void glGetAttachedShaders( GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+GLint glGetAttribLocation( GLuint program, const GLchar *name);
+void glGetBufferParameteriv( GLenum target, GLenum value, GLint * data);
+void glGetBufferParameteri64v( GLenum target, GLenum value, GLint64 * data);
+void glGetBufferPointerv( GLenum target, GLenum pname, void ** params);
+void glGetBufferSubData( GLenum target, GLintptr offset, GLsizeiptr size, void * data);
+void glGetCompressedTexImage( GLenum target, GLint level, void * pixels);
+GLenum glGetError( void);
+GLint glGetFragDataIndex( GLuint program, const char * name);
+GLint glGetFragDataLocation( GLuint program, const char * name);
+void glGetFramebufferAttachmentParameteriv( GLenum target, GLenum attachment, GLenum pname, GLint *params);
+void glGetMultisamplefv( GLenum pname, GLuint index, GLfloat *val);
+void glGetUniformfv( GLuint program, GLint location, GLfloat *params);
+void glGetUniformiv( GLuint program, GLint location, GLint *params);
+void glGetUniformuiv( GLuint program, GLint location, GLuint *params);
+void glGetUniformdv( GLuint program, GLint location, GLdouble *params);
+void glGetProgramiv( GLuint program, GLenum pname, GLint *params);
+void glGetProgramBinary( GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+void glGetProgramInfoLog( GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
+void glGetProgramPipelineiv( GLuint pipeline, GLenum pname, GLint *params);
+void glGetProgramPipelineInfoLog( GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+void glGetProgramPipelineiv( GLuint pipeline, GLenum pname, GLint *params);
+void glGetProgramStageiv( GLuint program, GLenum shadertype, GLenum pname, GLint *values);
+void glGetQueryIndexediv( GLenum target, GLuint index, GLenum pname, GLint * params);
+void glGetQueryiv( GLenum target, GLenum pname, GLint * params);
+void glGetRenderbufferParameteriv( GLenum target, GLenum pname, GLint *params);
+void glGetSamplerParameterfv( GLuint sampler, GLenum pname, GLfloat * params);
+void glGetSamplerParameteriv( GLuint sampler, GLenum pname, GLint * params);
+void glGetSamplerParameterIiv( GLuint sampler, GLenum pname, GLint * params);
+void glGetSamplerParameterIuiv( GLuint sampler, GLenum pname, GLuint * params);
+void glGetShaderiv( GLuint shader, GLenum pname, GLint *params);
+void glGetShaderInfoLog( GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
+void glGetShaderiv( GLuint shader, GLenum pname, GLint *params);
+void glGetShaderPrecisionFormat( GLenum shaderType, GLenum precisionType, GLint *range, GLint *precision);
+void glGetShaderSource( GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+const GLubyte * glGetString(GLenum name);
+const GLubyte * glGetStringi(GLenum name, GLuint index);
+GLuint glGetSubroutineIndex( GLuint program, GLenum shadertype, const GLchar *name);
+GLint glGetSubroutineUniformLocation( GLuint program, GLenum shadertype, const GLchar *name);
+void glGetSynciv( GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+void glGetTexImage( GLenum target, GLint level, GLenum format, GLenum type, void * pixels);
+void glGetTexLevelParameterfv( GLenum target, GLint level, GLenum pname, GLfloat * params);
+void glGetTexLevelParameteriv( GLenum target, GLint level, GLenum pname, GLint * params);
+void glGetTexParameterfv( GLenum target, GLenum pname, GLfloat * params);
+void glGetTexParameteriv( GLenum target, GLenum pname, GLint * params);
+void glGetTexParameterIiv( GLenum target, GLenum pname, GLint * params);
+void glGetTexParameterIuiv( GLenum target, GLenum pname, GLuint * params);
+void glGetTransformFeedbackVarying( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, char *name);
+GLuint glGetUniformBlockIndex( GLuint program, const GLchar *uniformBlockName);
+void glGetUniformIndices( GLuint program, GLsizei uniformCount, const GLchar **uniformNames, GLuint *uniformIndices);
+GLint glGetUniformLocation( GLuint program, const GLchar *name);
+void glGetUniformSubroutineuiv( GLenum shadertype, GLint location, GLuint *values);
+void glGetVertexAttribdv( GLuint index, GLenum pname, GLdouble *params);
+void glGetVertexAttribfv( GLuint index, GLenum pname, GLfloat *params);
+void glGetVertexAttribiv( GLuint index, GLenum pname, GLint *params);
+void glGetVertexAttribIiv( GLuint index, GLenum pname, GLint *params);
+void glGetVertexAttribIuiv( GLuint index, GLenum pname, GLuint *params);
+void glGetVertexAttribLdv( GLuint index, GLenum pname, GLdouble *params);
+void glGetVertexAttribPointerv( GLuint index, GLenum pname, void **pointer);
+void glHint( GLenum target, GLenum mode);
+GLboolean glIsBuffer( GLuint buffer);
+GLboolean glIsEnabled( GLenum cap);
+GLboolean glIsEnabledi( GLenum cap, GLuint index);
+GLboolean glIsFramebuffer( GLuint framebuffer);
+GLboolean glIsProgram( GLuint program);
+GLboolean glIsProgramPipeline( GLuint pipeline);
+GLboolean glIsQuery( GLuint id);
+GLboolean glIsRenderbuffer( GLuint renderbuffer);
+GLboolean glIsSampler( GLuint id);
+GLboolean glIsShader( GLuint shader);
+GLboolean glIsSync( GLsync sync);
+GLboolean glIsTexture( GLuint texture);
+GLboolean glIsTransformFeedback( GLuint id);
+GLboolean glIsVertexArray( GLuint array);
+void glLineWidth( GLfloat width);
+void glLinkProgram( GLuint program);
+void glLogicOp( GLenum opcode);
+
+void * glMapBuffer( GLenum target, GLenum access);
+void * glMapBufferRange( GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+void glMinSampleShading( GLfloat value);
+void glMultiDrawArrays( GLenum mode, const GLint * first, const GLsizei * count, GLsizei drawcount);
+void glMultiDrawElements( GLenum mode, const GLsizei * count, GLenum type, const void * const * indices, GLsizei drawcount);
+void glMultiDrawElementsBaseVertex( GLenum mode, const GLsizei *count, GLenum type, const void * const *indices, GLsizei drawcount, const GLint *basevertex);
+
+void glPatchParameteri( GLenum pname, GLint value);
+void glPatchParameterfv( GLenum pname, const GLfloat *values);
+void glPauseTransformFeedback( void);
+void glPixelStoref( GLenum pname, GLfloat param);
+void glPixelStorei( GLenum pname, GLint param);
+void glPointParameterf( GLenum pname, GLfloat param);
+void glPointParameteri( GLenum pname, GLint param);
+void glPointParameterfv( GLenum pname, const GLfloat * params);
+void glPointParameteriv( GLenum pname, const GLint * params);
+void glPointSize( GLfloat size);
+void glPolygonMode( GLenum face, GLenum mode);
+void glPolygonOffset( GLfloat factor, GLfloat units);
+void glPrimitiveRestartIndex( GLuint index);
+void glProgramBinary( GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+void glProgramParameteri( GLuint program, GLenum pname, GLint value);
+void glProgramUniform1f( GLuint program, GLint location, GLfloat v0);
+void glProgramUniform2f( GLuint program, GLint location, GLfloat v0, GLfloat v1);
+void glProgramUniform3f( GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+void glProgramUniform4f( GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+void glProgramUniform1i( GLuint program, GLint location, GLint v0);
+void glProgramUniform2i( GLuint program, GLint location, GLint v0, GLint v1);
+void glProgramUniform3i( GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+void glProgramUniform4i( GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+void glProgramUniform1ui( GLuint program, GLint location, GLuint v0);
+void glProgramUniform2ui( GLuint program, GLint location, GLuint v0, GLuint v1);
+void glProgramUniform3ui( GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+void glProgramUniform4ui( GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+void glProgramUniform1fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
+void glProgramUniform2fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
+void glProgramUniform3fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
+void glProgramUniform4fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
+void glProgramUniform1iv( GLuint program, GLint location, GLsizei count, const GLint *value);
+void glProgramUniform2iv( GLuint program, GLint location, GLsizei count, const GLint *value);
+void glProgramUniform3iv( GLuint program, GLint location, GLsizei count, const GLint *value);
+void glProgramUniform4iv( GLuint program, GLint location, GLsizei count, const GLint *value);
+void glProgramUniform1uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
+void glProgramUniform2uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
+void glProgramUniform3uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
+void glProgramUniform4uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
+void glProgramUniformMatrix2fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix3fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix4fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix2x3fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix3x2fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix2x4fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix4x2fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix3x4fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix4x3fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProvokingVertex( GLenum provokeMode);
+
+void glQueryCounter( GLuint id, GLenum target);
+void glReadBuffer( GLenum mode);
+void glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void * data);
+void glReleaseShaderCompiler( void);
+void glRenderbufferStorage( GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+void glRenderbufferStorageMultisample( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+void glResumeTransformFeedback( void);
+void glSampleCoverage( GLfloat value, GLboolean invert);
+void glSampleMaski( GLuint maskNumber, GLbitfield mask);
+void glSamplerParameterf( GLuint sampler, GLenum pname, GLfloat param);
+void glSamplerParameteri( GLuint sampler, GLenum pname, GLint param);
+void glSamplerParameterfv( GLuint sampler, GLenum pname, const GLfloat * params);
+void glSamplerParameteriv( GLuint sampler, GLenum pname, const GLint * params);
+void glSamplerParameterIiv( GLuint sampler, GLenum pname, const GLint *params);
+void glSamplerParameterIuiv( GLuint sampler, GLenum pname, const GLuint *params);
+void glScissor( GLint x, GLint y, GLsizei width, GLsizei height);
+void glScissorArrayv( GLuint first, GLsizei count, const GLint *v);
+void glScissorIndexed( GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+void glScissorIndexedv( GLuint index, const GLint *v);
+void glShaderBinary( GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length);
+void glShaderSource( GLuint shader, GLsizei count, const GLchar **string, const GLint *length);
+void glStencilFunc( GLenum func, GLint ref, GLuint mask);
+void glStencilFuncSeparate( GLenum face, GLenum func, GLint ref, GLuint mask);
+void glStencilMask( GLuint mask);
+void glStencilMaskSeparate( GLenum face, GLuint mask);
+void glStencilOp( GLenum sfail, GLenum dpfail, GLenum dppass);
+void glStencilOpSeparate( GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+
+void glTexBuffer( GLenum target, GLenum internalformat, GLuint buffer);
+void glTexImage1D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * data);
+void glTexImage2D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * data);
+void glTexImage2DMultisample( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+void glTexImage3D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * data);
+void glTexImage3DMultisample( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+void glTexParameterf( GLenum target, GLenum pname, GLfloat param);
+void glTexParameteri( GLenum target, GLenum pname, GLint param);
+void glTexParameterfv( GLenum target, GLenum pname, const GLfloat * params);
+void glTexParameteriv( GLenum target, GLenum pname, const GLint * params);
+void glTexParameterIiv( GLenum target, GLenum pname, const GLint * params);
+void glTexParameterIuiv( GLenum target, GLenum pname, const GLuint * params);
+void glTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels);
+void glTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels);
+void glTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels);
+void glTransformFeedbackVaryings( GLuint program, GLsizei count, const char **varyings, GLenum bufferMode);
+void glUniform1f( GLint location, GLfloat v0);
+void glUniform2f( GLint location, GLfloat v0, GLfloat v1);
+void glUniform3f( GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+void glUniform4f( GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+void glUniform1i( GLint location, GLint v0);
+void glUniform2i( GLint location, GLint v0, GLint v1);
+void glUniform3i( GLint location, GLint v0, GLint v1, GLint v2);
+void glUniform4i( GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+void glUniform1ui( GLint location, GLuint v0);
+void glUniform2ui( GLint location, GLuint v0, GLuint v1);
+void glUniform3ui( GLint location, GLuint v0, GLuint v1, GLuint v2);
+void glUniform4ui( GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+void glUniform1fv( GLint location, GLsizei count, const GLfloat *value);
+void glUniform2fv( GLint location, GLsizei count, const GLfloat *value);
+void glUniform3fv( GLint location, GLsizei count, const GLfloat *value);
+void glUniform4fv( GLint location, GLsizei count, const GLfloat *value);
+void glUniform1iv( GLint location, GLsizei count, const GLint *value);
+void glUniform2iv( GLint location, GLsizei count, const GLint *value);
+void glUniform3iv( GLint location, GLsizei count, const GLint *value);
+void glUniform4iv( GLint location, GLsizei count, const GLint *value);
+void glUniform1uiv( GLint location, GLsizei count, const GLuint *value);
+void glUniform2uiv( GLint location, GLsizei count, const GLuint *value);
+void glUniform3uiv( GLint location, GLsizei count, const GLuint *value);
+void glUniform4uiv( GLint location, GLsizei count, const GLuint *value);
+void glUniformMatrix2fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix3fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix4fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix2x3fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix3x2fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix2x4fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix4x2fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix3x4fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix4x3fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformSubroutinesuiv( GLenum shadertype, GLsizei count, const GLuint *indices);
+GLboolean glUnmapBuffer( GLenum target);
+void glUseProgram( GLuint program);
+void glUseProgramStages( GLuint pipeline, GLbitfield stages, GLuint program);
+void glValidateProgram( GLuint program);
+void glValidateProgramPipeline( GLuint pipeline);
+void glVertexAttrib1f( GLuint index, GLfloat v0);
+void glVertexAttrib1s( GLuint index, GLshort v0);
+void glVertexAttrib1d( GLuint index, GLdouble v0);
+void glVertexAttribI1i( GLuint index, GLint v0);
+void glVertexAttribI1ui( GLuint index, GLuint v0);
+void glVertexAttrib2f( GLuint index, GLfloat v0, GLfloat v1);
+void glVertexAttrib2s( GLuint index, GLshort v0, GLshort v1);
+void glVertexAttrib2d( GLuint index, GLdouble v0, GLdouble v1);
+void glVertexAttribI2i( GLuint index, GLint v0, GLint v1);
+void glVertexAttribI2ui( GLuint index, GLuint v0, GLuint v1);
+void glVertexAttrib3f( GLuint index, GLfloat v0, GLfloat v1, GLfloat v2);
+void glVertexAttrib3s( GLuint index, GLshort v0, GLshort v1, GLshort v2);
+void glVertexAttrib3d( GLuint index, GLdouble v0, GLdouble v1, GLdouble v2);
+void glVertexAttribI3i( GLuint index, GLint v0, GLint v1, GLint v2);
+void glVertexAttribI3ui( GLuint index, GLuint v0, GLuint v1, GLuint v2);
+void glVertexAttrib4f( GLuint index, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+void glVertexAttrib4s( GLuint index, GLshort v0, GLshort v1, GLshort v2, GLshort v3);
+void glVertexAttrib4d( GLuint index, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+void glVertexAttrib4Nub( GLuint index, GLubyte v0, GLubyte v1, GLubyte v2, GLubyte v3);
+void glVertexAttribI4i( GLuint index, GLint v0, GLint v1, GLint v2, GLint v3);
+void glVertexAttribI4ui( GLuint index, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+void glVertexAttribL1d( GLuint index, GLdouble v0);
+void glVertexAttribL2d( GLuint index, GLdouble v0, GLdouble v1);
+void glVertexAttribL3d( GLuint index, GLdouble v0, GLdouble v1, GLdouble v2);
+void glVertexAttribL4d( GLuint index, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+void glVertexAttrib1fv( GLuint index, const GLfloat *v);
+void glVertexAttrib1sv( GLuint index, const GLshort *v);
+void glVertexAttrib1dv( GLuint index, const GLdouble *v);
+void glVertexAttribI1iv( GLuint index, const GLint *v);
+void glVertexAttribI1uiv( GLuint index, const GLuint *v);
+void glVertexAttrib2fv( GLuint index, const GLfloat *v);
+void glVertexAttrib2sv( GLuint index, const GLshort *v);
+void glVertexAttrib2dv( GLuint index, const GLdouble *v);
+void glVertexAttribI2iv( GLuint index, const GLint *v);
+void glVertexAttribI2uiv( GLuint index, const GLuint *v);
+void glVertexAttrib3fv( GLuint index, const GLfloat *v);
+void glVertexAttrib3sv( GLuint index, const GLshort *v);
+void glVertexAttrib3dv( GLuint index, const GLdouble *v);
+void glVertexAttribI3iv( GLuint index, const GLint *v);
+void glVertexAttribI3uiv( GLuint index, const GLuint *v);
+void glVertexAttrib4fv( GLuint index, const GLfloat *v);
+void glVertexAttrib4sv( GLuint index, const GLshort *v);
+void glVertexAttrib4dv( GLuint index, const GLdouble *v);
+void glVertexAttrib4iv( GLuint index, const GLint *v);
+void glVertexAttrib4bv( GLuint index, const GLbyte *v);
+void glVertexAttrib4ubv( GLuint index, const GLubyte *v);
+void glVertexAttrib4usv( GLuint index, const GLushort *v);
+void glVertexAttrib4uiv( GLuint index, const GLuint *v);
+void glVertexAttrib4Nbv( GLuint index, const GLbyte *v);
+void glVertexAttrib4Nsv( GLuint index, const GLshort *v);
+void glVertexAttrib4Niv( GLuint index, const GLint *v);
+void glVertexAttrib4Nubv( GLuint index, const GLubyte *v);
+void glVertexAttrib4Nusv( GLuint index, const GLushort *v);
+void glVertexAttrib4Nuiv( GLuint index, const GLuint *v);
+void glVertexAttribI4bv( GLuint index, const GLbyte *v);
+void glVertexAttribI4ubv( GLuint index, const GLubyte *v);
+void glVertexAttribI4sv( GLuint index, const GLshort *v);
+void glVertexAttribI4usv( GLuint index, const GLushort *v);
+void glVertexAttribI4iv( GLuint index, const GLint *v);
+void glVertexAttribI4uiv( GLuint index, const GLuint *v);
+void glVertexAttribL1dv( GLuint index, const GLdouble *v);
+void glVertexAttribL2dv( GLuint index, const GLdouble *v);
+void glVertexAttribL3dv( GLuint index, const GLdouble *v);
+void glVertexAttribL4dv( GLuint index, const GLdouble *v);
+void glVertexAttribP1ui( GLuint index, GLenum type, GLboolean normalized, GLuint value);
+void glVertexAttribP2ui( GLuint index, GLenum type, GLboolean normalized, GLuint value);
+void glVertexAttribP3ui( GLuint index, GLenum type, GLboolean normalized, GLuint value);
+void glVertexAttribP4ui( GLuint index, GLenum type, GLboolean normalized, GLuint value);
+void glVertexAttribPointer( GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer);
+void glVertexAttribIPointer( GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer);
+void glViewport( GLint x, GLint y, GLsizei width, GLsizei height);
+void glViewportArrayv( GLuint first, GLsizei count, const GLfloat *v);
+void glViewportIndexedf( GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+void glViewportIndexedfv( GLuint index, const GLfloat *v);
+void glWaitSync( GLsync sync, GLbitfield flags, GLuint64 timeout);
diff --git a/src/opengl/bind/t b/src/opengl/bind/t
new file mode 100644
index 0000000..d503c1e
--- /dev/null
+++ b/src/opengl/bind/t
@@ -0,0 +1,16 @@
+void glTexBuffer( GLenum target, GLenum internalformat, GLuint buffer);
+void glTexImage1D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * data);
+void glTexImage2D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * data);
+void glTexImage2DMultisample( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+void glTexImage3D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * data);
+void glTexImage3DMultisample( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+void glTexParameterf( GLenum target, GLenum pname, GLfloat param);
+void glTexParameteri( GLenum target, GLenum pname, GLint param);
+void glTexParameterfv( GLenum target, GLenum pname, const GLfloat * params);
+void glTexParameteriv( GLenum target, GLenum pname, const GLint * params);
+void glTexParameterIiv( GLenum target, GLenum pname, const GLint * params);
+void glTexParameterIuiv( GLenum target, GLenum pname, const GLuint * params);
+void glTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels);
+void glTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels);
+void glTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels);
+void glTransformFeedbackVaryings( GLuint program, GLsizei count, const char **varyings, GLenum bufferMode);
diff --git a/src/opengl/bind/t.bind b/src/opengl/bind/t.bind
new file mode 100644
index 0000000..1a447e7
--- /dev/null
+++ b/src/opengl/bind/t.bind
@@ -0,0 +1,204 @@
+int glTexBuffer_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum internalformat = luaL_checkinteger(L, 2);
+ GLuint buffer = luaL_checkinteger(L, 3);
+ glTexBuffer(target, internalformat, buffer);
+ return 0;
+}
+
+
+int glTexImage1D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLint border = luaL_checkinteger(L, 5);
+ GLenum format = luaL_checkinteger(L, 6);
+ GLenum type = luaL_checkinteger(L, 7);
+ const void * data = get: const void *
+ glTexImage1D(target, level, internalformat, width, border, format, type, data);
+ return 0;
+}
+
+
+int glTexImage2D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLsizei height = luaL_checkinteger(L, 5);
+ GLint border = luaL_checkinteger(L, 6);
+ GLenum format = luaL_checkinteger(L, 7);
+ GLenum type = luaL_checkinteger(L, 8);
+ const void * data = get: const void *
+ glTexImage2D(target, level, internalformat, width, height, border, format, type, data);
+ return 0;
+}
+
+
+int glTexImage2DMultisample_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLsizei samples = luaL_checkinteger(L, 2);
+ GLenum internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLsizei height = luaL_checkinteger(L, 5);
+ GLboolean fixedsamplelocations = get: GLboolean
+ glTexImage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations);
+ return 0;
+}
+
+
+int glTexImage3D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLsizei height = luaL_checkinteger(L, 5);
+ GLsizei depth = luaL_checkinteger(L, 6);
+ GLint border = luaL_checkinteger(L, 7);
+ GLenum format = luaL_checkinteger(L, 8);
+ GLenum type = luaL_checkinteger(L, 9);
+ const void * data = get: const void *
+ glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, data);
+ return 0;
+}
+
+
+int glTexImage3DMultisample_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLsizei samples = luaL_checkinteger(L, 2);
+ GLenum internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLsizei height = luaL_checkinteger(L, 5);
+ GLsizei depth = luaL_checkinteger(L, 6);
+ GLboolean fixedsamplelocations = get: GLboolean
+ glTexImage3DMultisample(target, samples, internalformat, width, height, depth, fixedsamplelocations);
+ return 0;
+}
+
+
+int glTexParameterf_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLfloat param = luaL_checknumber(L, 3);
+ glTexParameterf(target, pname, param);
+ return 0;
+}
+
+
+int glTexParameteri_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint param = luaL_checkinteger(L, 3);
+ glTexParameteri(target, pname, param);
+ return 0;
+}
+
+
+int glTexParameterfv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ const GLfloat * params = get: const GLfloat *
+ glTexParameterfv(target, pname, params);
+ return 0;
+}
+
+
+int glTexParameteriv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ const GLint * params = get: const GLint *
+ glTexParameteriv(target, pname, params);
+ return 0;
+}
+
+
+int glTexParameterIiv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ const GLint * params = get: const GLint *
+ glTexParameterIiv(target, pname, params);
+ return 0;
+}
+
+
+int glTexParameterIuiv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ const GLuint * params = get: const GLuint *
+ glTexParameterIuiv(target, pname, params);
+ return 0;
+}
+
+
+int glTexSubImage1D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLenum format = luaL_checkinteger(L, 5);
+ GLenum type = luaL_checkinteger(L, 6);
+ const void * pixels = get: const void *
+ glTexSubImage1D(target, level, xoffset, width, format, type, pixels);
+ return 0;
+}
+
+
+int glTexSubImage2D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLint yoffset = luaL_checkinteger(L, 4);
+ GLsizei width = luaL_checkinteger(L, 5);
+ GLsizei height = luaL_checkinteger(L, 6);
+ GLenum format = luaL_checkinteger(L, 7);
+ GLenum type = luaL_checkinteger(L, 8);
+ const void * pixels = get: const void *
+ glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
+ return 0;
+}
+
+
+int glTexSubImage3D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLint yoffset = luaL_checkinteger(L, 4);
+ GLint zoffset = luaL_checkinteger(L, 5);
+ GLsizei width = luaL_checkinteger(L, 6);
+ GLsizei height = luaL_checkinteger(L, 7);
+ GLsizei depth = luaL_checkinteger(L, 8);
+ GLenum format = luaL_checkinteger(L, 9);
+ GLenum type = luaL_checkinteger(L, 10);
+ const void * pixels = get: const void *
+ glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
+ return 0;
+}
+
+
+int glTransformFeedbackVaryings_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const char ** varyings = get: const char **
+ GLenum bufferMode = luaL_checkinteger(L, 4);
+ glTransformFeedbackVaryings(program, count, varyings, bufferMode);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/u b/src/opengl/bind/u
new file mode 100644
index 0000000..7cd3e42
--- /dev/null
+++ b/src/opengl/bind/u
@@ -0,0 +1,37 @@
+void glUniform1f( GLint location, GLfloat v0);
+void glUniform2f( GLint location, GLfloat v0, GLfloat v1);
+void glUniform3f( GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+void glUniform4f( GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+void glUniform1i( GLint location, GLint v0);
+void glUniform2i( GLint location, GLint v0, GLint v1);
+void glUniform3i( GLint location, GLint v0, GLint v1, GLint v2);
+void glUniform4i( GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+void glUniform1ui( GLint location, GLuint v0);
+void glUniform2ui( GLint location, GLuint v0, GLuint v1);
+void glUniform3ui( GLint location, GLuint v0, GLuint v1, GLuint v2);
+void glUniform4ui( GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+void glUniform1fv( GLint location, GLsizei count, const GLfloat *value);
+void glUniform2fv( GLint location, GLsizei count, const GLfloat *value);
+void glUniform3fv( GLint location, GLsizei count, const GLfloat *value);
+void glUniform4fv( GLint location, GLsizei count, const GLfloat *value);
+void glUniform1iv( GLint location, GLsizei count, const GLint *value);
+void glUniform2iv( GLint location, GLsizei count, const GLint *value);
+void glUniform3iv( GLint location, GLsizei count, const GLint *value);
+void glUniform4iv( GLint location, GLsizei count, const GLint *value);
+void glUniform1uiv( GLint location, GLsizei count, const GLuint *value);
+void glUniform2uiv( GLint location, GLsizei count, const GLuint *value);
+void glUniform3uiv( GLint location, GLsizei count, const GLuint *value);
+void glUniform4uiv( GLint location, GLsizei count, const GLuint *value);
+void glUniformMatrix2fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix3fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix4fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix2x3fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix3x2fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix2x4fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix4x2fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix3x4fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix4x3fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformSubroutinesuiv( GLenum shadertype, GLsizei count, const GLuint *indices);
+GLboolean glUnmapBuffer( GLenum target);
+void glUseProgram( GLuint program);
+void glUseProgramStages( GLuint pipeline, GLbitfield stages, GLuint program);
diff --git a/src/opengl/bind/u.bind b/src/opengl/bind/u.bind
new file mode 100644
index 0000000..07785a8
--- /dev/null
+++ b/src/opengl/bind/u.bind
@@ -0,0 +1,382 @@
+int glUniform1f_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLfloat v0 = luaL_checknumber(L, 2);
+ glUniform1f(location, v0);
+ return 0;
+}
+
+
+int glUniform2f_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLfloat v0 = luaL_checknumber(L, 2);
+ GLfloat v1 = luaL_checknumber(L, 3);
+ glUniform2f(location, v0, v1);
+ return 0;
+}
+
+
+int glUniform3f_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLfloat v0 = luaL_checknumber(L, 2);
+ GLfloat v1 = luaL_checknumber(L, 3);
+ GLfloat v2 = luaL_checknumber(L, 4);
+ glUniform3f(location, v0, v1, v2);
+ return 0;
+}
+
+
+int glUniform4f_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLfloat v0 = luaL_checknumber(L, 2);
+ GLfloat v1 = luaL_checknumber(L, 3);
+ GLfloat v2 = luaL_checknumber(L, 4);
+ GLfloat v3 = luaL_checknumber(L, 5);
+ glUniform4f(location, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glUniform1i_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLint v0 = luaL_checkinteger(L, 2);
+ glUniform1i(location, v0);
+ return 0;
+}
+
+
+int glUniform2i_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLint v0 = luaL_checkinteger(L, 2);
+ GLint v1 = luaL_checkinteger(L, 3);
+ glUniform2i(location, v0, v1);
+ return 0;
+}
+
+
+int glUniform3i_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLint v0 = luaL_checkinteger(L, 2);
+ GLint v1 = luaL_checkinteger(L, 3);
+ GLint v2 = luaL_checkinteger(L, 4);
+ glUniform3i(location, v0, v1, v2);
+ return 0;
+}
+
+
+int glUniform4i_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLint v0 = luaL_checkinteger(L, 2);
+ GLint v1 = luaL_checkinteger(L, 3);
+ GLint v2 = luaL_checkinteger(L, 4);
+ GLint v3 = luaL_checkinteger(L, 5);
+ glUniform4i(location, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glUniform1ui_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLuint v0 = luaL_checkinteger(L, 2);
+ glUniform1ui(location, v0);
+ return 0;
+}
+
+
+int glUniform2ui_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLuint v0 = luaL_checkinteger(L, 2);
+ GLuint v1 = luaL_checkinteger(L, 3);
+ glUniform2ui(location, v0, v1);
+ return 0;
+}
+
+
+int glUniform3ui_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLuint v0 = luaL_checkinteger(L, 2);
+ GLuint v1 = luaL_checkinteger(L, 3);
+ GLuint v2 = luaL_checkinteger(L, 4);
+ glUniform3ui(location, v0, v1, v2);
+ return 0;
+}
+
+
+int glUniform4ui_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLuint v0 = luaL_checkinteger(L, 2);
+ GLuint v1 = luaL_checkinteger(L, 3);
+ GLuint v2 = luaL_checkinteger(L, 4);
+ GLuint v3 = luaL_checkinteger(L, 5);
+ glUniform4ui(location, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glUniform1fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLfloat * value = get: const GLfloat *
+ glUniform1fv(location, count, value);
+ return 0;
+}
+
+
+int glUniform2fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLfloat * value = get: const GLfloat *
+ glUniform2fv(location, count, value);
+ return 0;
+}
+
+
+int glUniform3fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLfloat * value = get: const GLfloat *
+ glUniform3fv(location, count, value);
+ return 0;
+}
+
+
+int glUniform4fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLfloat * value = get: const GLfloat *
+ glUniform4fv(location, count, value);
+ return 0;
+}
+
+
+int glUniform1iv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLint * value = get: const GLint *
+ glUniform1iv(location, count, value);
+ return 0;
+}
+
+
+int glUniform2iv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLint * value = get: const GLint *
+ glUniform2iv(location, count, value);
+ return 0;
+}
+
+
+int glUniform3iv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLint * value = get: const GLint *
+ glUniform3iv(location, count, value);
+ return 0;
+}
+
+
+int glUniform4iv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLint * value = get: const GLint *
+ glUniform4iv(location, count, value);
+ return 0;
+}
+
+
+int glUniform1uiv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLuint * value = get: const GLuint *
+ glUniform1uiv(location, count, value);
+ return 0;
+}
+
+
+int glUniform2uiv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLuint * value = get: const GLuint *
+ glUniform2uiv(location, count, value);
+ return 0;
+}
+
+
+int glUniform3uiv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLuint * value = get: const GLuint *
+ glUniform3uiv(location, count, value);
+ return 0;
+}
+
+
+int glUniform4uiv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLuint * value = get: const GLuint *
+ glUniform4uiv(location, count, value);
+ return 0;
+}
+
+
+int glUniformMatrix2fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix2fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformMatrix3fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix3fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformMatrix4fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix4fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformMatrix2x3fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix2x3fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformMatrix3x2fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix3x2fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformMatrix2x4fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix2x4fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformMatrix4x2fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix4x2fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformMatrix3x4fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix3x4fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformMatrix4x3fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix4x3fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformSubroutinesuiv_bind(lua_State *L)
+{
+ GLenum shadertype = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLuint * indices = get: const GLuint *
+ glUniformSubroutinesuiv(shadertype, count, indices);
+ return 0;
+}
+
+
+int glUnmapBuffer_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glUnmapBuffer(target);
+ /* push result */
+ return /* count */;
+}
+
+
+int glUseProgram_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ glUseProgram(program);
+ return 0;
+}
+
+
+int glUseProgramStages_bind(lua_State *L)
+{
+ GLuint pipeline = luaL_checkinteger(L, 1);
+ GLbitfield stages = luaL_checkinteger(L, 2);
+ GLuint program = luaL_checkinteger(L, 3);
+ glUseProgramStages(pipeline, stages, program);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/v b/src/opengl/bind/v
new file mode 100644
index 0000000..d6bb3aa
--- /dev/null
+++ b/src/opengl/bind/v
@@ -0,0 +1,76 @@
+void glValidateProgram( GLuint program);
+void glValidateProgramPipeline( GLuint pipeline);
+void glVertexAttrib1f( GLuint index, GLfloat v0);
+void glVertexAttrib1s( GLuint index, GLshort v0);
+void glVertexAttrib1d( GLuint index, GLdouble v0);
+void glVertexAttribI1i( GLuint index, GLint v0);
+void glVertexAttribI1ui( GLuint index, GLuint v0);
+void glVertexAttrib2f( GLuint index, GLfloat v0, GLfloat v1);
+void glVertexAttrib2s( GLuint index, GLshort v0, GLshort v1);
+void glVertexAttrib2d( GLuint index, GLdouble v0, GLdouble v1);
+void glVertexAttribI2i( GLuint index, GLint v0, GLint v1);
+void glVertexAttribI2ui( GLuint index, GLuint v0, GLuint v1);
+void glVertexAttrib3f( GLuint index, GLfloat v0, GLfloat v1, GLfloat v2);
+void glVertexAttrib3s( GLuint index, GLshort v0, GLshort v1, GLshort v2);
+void glVertexAttrib3d( GLuint index, GLdouble v0, GLdouble v1, GLdouble v2);
+void glVertexAttribI3i( GLuint index, GLint v0, GLint v1, GLint v2);
+void glVertexAttribI3ui( GLuint index, GLuint v0, GLuint v1, GLuint v2);
+void glVertexAttrib4f( GLuint index, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+void glVertexAttrib4s( GLuint index, GLshort v0, GLshort v1, GLshort v2, GLshort v3);
+void glVertexAttrib4d( GLuint index, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+void glVertexAttrib4Nub( GLuint index, GLubyte v0, GLubyte v1, GLubyte v2, GLubyte v3);
+void glVertexAttribI4i( GLuint index, GLint v0, GLint v1, GLint v2, GLint v3);
+void glVertexAttribI4ui( GLuint index, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+void glVertexAttribL1d( GLuint index, GLdouble v0);
+void glVertexAttribL2d( GLuint index, GLdouble v0, GLdouble v1);
+void glVertexAttribL3d( GLuint index, GLdouble v0, GLdouble v1, GLdouble v2);
+void glVertexAttribL4d( GLuint index, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+void glVertexAttrib1fv( GLuint index, const GLfloat *v);
+void glVertexAttrib1sv( GLuint index, const GLshort *v);
+void glVertexAttrib1dv( GLuint index, const GLdouble *v);
+void glVertexAttribI1iv( GLuint index, const GLint *v);
+void glVertexAttribI1uiv( GLuint index, const GLuint *v);
+void glVertexAttrib2fv( GLuint index, const GLfloat *v);
+void glVertexAttrib2sv( GLuint index, const GLshort *v);
+void glVertexAttrib2dv( GLuint index, const GLdouble *v);
+void glVertexAttribI2iv( GLuint index, const GLint *v);
+void glVertexAttribI2uiv( GLuint index, const GLuint *v);
+void glVertexAttrib3fv( GLuint index, const GLfloat *v);
+void glVertexAttrib3sv( GLuint index, const GLshort *v);
+void glVertexAttrib3dv( GLuint index, const GLdouble *v);
+void glVertexAttribI3iv( GLuint index, const GLint *v);
+void glVertexAttribI3uiv( GLuint index, const GLuint *v);
+void glVertexAttrib4fv( GLuint index, const GLfloat *v);
+void glVertexAttrib4sv( GLuint index, const GLshort *v);
+void glVertexAttrib4dv( GLuint index, const GLdouble *v);
+void glVertexAttrib4iv( GLuint index, const GLint *v);
+void glVertexAttrib4bv( GLuint index, const GLbyte *v);
+void glVertexAttrib4ubv( GLuint index, const GLubyte *v);
+void glVertexAttrib4usv( GLuint index, const GLushort *v);
+void glVertexAttrib4uiv( GLuint index, const GLuint *v);
+void glVertexAttrib4Nbv( GLuint index, const GLbyte *v);
+void glVertexAttrib4Nsv( GLuint index, const GLshort *v);
+void glVertexAttrib4Niv( GLuint index, const GLint *v);
+void glVertexAttrib4Nubv( GLuint index, const GLubyte *v);
+void glVertexAttrib4Nusv( GLuint index, const GLushort *v);
+void glVertexAttrib4Nuiv( GLuint index, const GLuint *v);
+void glVertexAttribI4bv( GLuint index, const GLbyte *v);
+void glVertexAttribI4ubv( GLuint index, const GLubyte *v);
+void glVertexAttribI4sv( GLuint index, const GLshort *v);
+void glVertexAttribI4usv( GLuint index, const GLushort *v);
+void glVertexAttribI4iv( GLuint index, const GLint *v);
+void glVertexAttribI4uiv( GLuint index, const GLuint *v);
+void glVertexAttribL1dv( GLuint index, const GLdouble *v);
+void glVertexAttribL2dv( GLuint index, const GLdouble *v);
+void glVertexAttribL3dv( GLuint index, const GLdouble *v);
+void glVertexAttribL4dv( GLuint index, const GLdouble *v);
+void glVertexAttribP1ui( GLuint index, GLenum type, GLboolean normalized, GLuint value);
+void glVertexAttribP2ui( GLuint index, GLenum type, GLboolean normalized, GLuint value);
+void glVertexAttribP3ui( GLuint index, GLenum type, GLboolean normalized, GLuint value);
+void glVertexAttribP4ui( GLuint index, GLenum type, GLboolean normalized, GLuint value);
+void glVertexAttribPointer( GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer);
+void glVertexAttribIPointer( GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer);
+void glViewport( GLint x, GLint y, GLsizei width, GLsizei height);
+void glViewportArrayv( GLuint first, GLsizei count, const GLfloat *v);
+void glViewportIndexedf( GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+void glViewportIndexedfv( GLuint index, const GLfloat *v);
diff --git a/src/opengl/bind/v.bind b/src/opengl/bind/v.bind
new file mode 100644
index 0000000..ec35e3f
--- /dev/null
+++ b/src/opengl/bind/v.bind
@@ -0,0 +1,742 @@
+int glValidateProgram_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ glValidateProgram(program);
+ return 0;
+}
+
+
+int glValidateProgramPipeline_bind(lua_State *L)
+{
+ GLuint pipeline = luaL_checkinteger(L, 1);
+ glValidateProgramPipeline(pipeline);
+ return 0;
+}
+
+
+int glVertexAttrib1f_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLfloat v0 = luaL_checknumber(L, 2);
+ glVertexAttrib1f(index, v0);
+ return 0;
+}
+
+
+int glVertexAttrib1s_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLshort v0 = luaL_checkinteger(L, 2);
+ glVertexAttrib1s(index, v0);
+ return 0;
+}
+
+
+int glVertexAttrib1d_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble v0 = luaL_checknumber(L, 2);
+ glVertexAttrib1d(index, v0);
+ return 0;
+}
+
+
+int glVertexAttribI1i_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLint v0 = luaL_checkinteger(L, 2);
+ glVertexAttribI1i(index, v0);
+ return 0;
+}
+
+
+int glVertexAttribI1ui_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLuint v0 = luaL_checkinteger(L, 2);
+ glVertexAttribI1ui(index, v0);
+ return 0;
+}
+
+
+int glVertexAttrib2f_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLfloat v0 = luaL_checknumber(L, 2);
+ GLfloat v1 = luaL_checknumber(L, 3);
+ glVertexAttrib2f(index, v0, v1);
+ return 0;
+}
+
+
+int glVertexAttrib2s_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLshort v0 = luaL_checkinteger(L, 2);
+ GLshort v1 = luaL_checkinteger(L, 3);
+ glVertexAttrib2s(index, v0, v1);
+ return 0;
+}
+
+
+int glVertexAttrib2d_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble v0 = luaL_checknumber(L, 2);
+ GLdouble v1 = luaL_checknumber(L, 3);
+ glVertexAttrib2d(index, v0, v1);
+ return 0;
+}
+
+
+int glVertexAttribI2i_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLint v0 = luaL_checkinteger(L, 2);
+ GLint v1 = luaL_checkinteger(L, 3);
+ glVertexAttribI2i(index, v0, v1);
+ return 0;
+}
+
+
+int glVertexAttribI2ui_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLuint v0 = luaL_checkinteger(L, 2);
+ GLuint v1 = luaL_checkinteger(L, 3);
+ glVertexAttribI2ui(index, v0, v1);
+ return 0;
+}
+
+
+int glVertexAttrib3f_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLfloat v0 = luaL_checknumber(L, 2);
+ GLfloat v1 = luaL_checknumber(L, 3);
+ GLfloat v2 = luaL_checknumber(L, 4);
+ glVertexAttrib3f(index, v0, v1, v2);
+ return 0;
+}
+
+
+int glVertexAttrib3s_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLshort v0 = luaL_checkinteger(L, 2);
+ GLshort v1 = luaL_checkinteger(L, 3);
+ GLshort v2 = luaL_checkinteger(L, 4);
+ glVertexAttrib3s(index, v0, v1, v2);
+ return 0;
+}
+
+
+int glVertexAttrib3d_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble v0 = luaL_checknumber(L, 2);
+ GLdouble v1 = luaL_checknumber(L, 3);
+ GLdouble v2 = luaL_checknumber(L, 4);
+ glVertexAttrib3d(index, v0, v1, v2);
+ return 0;
+}
+
+
+int glVertexAttribI3i_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLint v0 = luaL_checkinteger(L, 2);
+ GLint v1 = luaL_checkinteger(L, 3);
+ GLint v2 = luaL_checkinteger(L, 4);
+ glVertexAttribI3i(index, v0, v1, v2);
+ return 0;
+}
+
+
+int glVertexAttribI3ui_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLuint v0 = luaL_checkinteger(L, 2);
+ GLuint v1 = luaL_checkinteger(L, 3);
+ GLuint v2 = luaL_checkinteger(L, 4);
+ glVertexAttribI3ui(index, v0, v1, v2);
+ return 0;
+}
+
+
+int glVertexAttrib4f_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLfloat v0 = luaL_checknumber(L, 2);
+ GLfloat v1 = luaL_checknumber(L, 3);
+ GLfloat v2 = luaL_checknumber(L, 4);
+ GLfloat v3 = luaL_checknumber(L, 5);
+ glVertexAttrib4f(index, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glVertexAttrib4s_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLshort v0 = luaL_checkinteger(L, 2);
+ GLshort v1 = luaL_checkinteger(L, 3);
+ GLshort v2 = luaL_checkinteger(L, 4);
+ GLshort v3 = luaL_checkinteger(L, 5);
+ glVertexAttrib4s(index, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glVertexAttrib4d_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble v0 = luaL_checknumber(L, 2);
+ GLdouble v1 = luaL_checknumber(L, 3);
+ GLdouble v2 = luaL_checknumber(L, 4);
+ GLdouble v3 = luaL_checknumber(L, 5);
+ glVertexAttrib4d(index, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glVertexAttrib4Nub_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLubyte v0 = luaL_checkinteger(L, 2);
+ GLubyte v1 = luaL_checkinteger(L, 3);
+ GLubyte v2 = luaL_checkinteger(L, 4);
+ GLubyte v3 = luaL_checkinteger(L, 5);
+ glVertexAttrib4Nub(index, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glVertexAttribI4i_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLint v0 = luaL_checkinteger(L, 2);
+ GLint v1 = luaL_checkinteger(L, 3);
+ GLint v2 = luaL_checkinteger(L, 4);
+ GLint v3 = luaL_checkinteger(L, 5);
+ glVertexAttribI4i(index, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glVertexAttribI4ui_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLuint v0 = luaL_checkinteger(L, 2);
+ GLuint v1 = luaL_checkinteger(L, 3);
+ GLuint v2 = luaL_checkinteger(L, 4);
+ GLuint v3 = luaL_checkinteger(L, 5);
+ glVertexAttribI4ui(index, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glVertexAttribL1d_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble v0 = luaL_checknumber(L, 2);
+ glVertexAttribL1d(index, v0);
+ return 0;
+}
+
+
+int glVertexAttribL2d_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble v0 = luaL_checknumber(L, 2);
+ GLdouble v1 = luaL_checknumber(L, 3);
+ glVertexAttribL2d(index, v0, v1);
+ return 0;
+}
+
+
+int glVertexAttribL3d_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble v0 = luaL_checknumber(L, 2);
+ GLdouble v1 = luaL_checknumber(L, 3);
+ GLdouble v2 = luaL_checknumber(L, 4);
+ glVertexAttribL3d(index, v0, v1, v2);
+ return 0;
+}
+
+
+int glVertexAttribL4d_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble v0 = luaL_checknumber(L, 2);
+ GLdouble v1 = luaL_checknumber(L, 3);
+ GLdouble v2 = luaL_checknumber(L, 4);
+ GLdouble v3 = luaL_checknumber(L, 5);
+ glVertexAttribL4d(index, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glVertexAttrib1fv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLfloat * v = get: const GLfloat *
+ glVertexAttrib1fv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib1sv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLshort * v = get: const GLshort *
+ glVertexAttrib1sv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib1dv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLdouble * v = get: const GLdouble *
+ glVertexAttrib1dv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI1iv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLint * v = get: const GLint *
+ glVertexAttribI1iv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI1uiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLuint * v = get: const GLuint *
+ glVertexAttribI1uiv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib2fv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLfloat * v = get: const GLfloat *
+ glVertexAttrib2fv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib2sv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLshort * v = get: const GLshort *
+ glVertexAttrib2sv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib2dv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLdouble * v = get: const GLdouble *
+ glVertexAttrib2dv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI2iv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLint * v = get: const GLint *
+ glVertexAttribI2iv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI2uiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLuint * v = get: const GLuint *
+ glVertexAttribI2uiv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib3fv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLfloat * v = get: const GLfloat *
+ glVertexAttrib3fv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib3sv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLshort * v = get: const GLshort *
+ glVertexAttrib3sv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib3dv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLdouble * v = get: const GLdouble *
+ glVertexAttrib3dv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI3iv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLint * v = get: const GLint *
+ glVertexAttribI3iv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI3uiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLuint * v = get: const GLuint *
+ glVertexAttribI3uiv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4fv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLfloat * v = get: const GLfloat *
+ glVertexAttrib4fv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4sv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLshort * v = get: const GLshort *
+ glVertexAttrib4sv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4dv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLdouble * v = get: const GLdouble *
+ glVertexAttrib4dv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4iv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLint * v = get: const GLint *
+ glVertexAttrib4iv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4bv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLbyte * v = get: const GLbyte *
+ glVertexAttrib4bv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4ubv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLubyte * v = get: const GLubyte *
+ glVertexAttrib4ubv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4usv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLushort * v = get: const GLushort *
+ glVertexAttrib4usv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4uiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLuint * v = get: const GLuint *
+ glVertexAttrib4uiv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4Nbv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLbyte * v = get: const GLbyte *
+ glVertexAttrib4Nbv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4Nsv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLshort * v = get: const GLshort *
+ glVertexAttrib4Nsv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4Niv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLint * v = get: const GLint *
+ glVertexAttrib4Niv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4Nubv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLubyte * v = get: const GLubyte *
+ glVertexAttrib4Nubv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4Nusv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLushort * v = get: const GLushort *
+ glVertexAttrib4Nusv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4Nuiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLuint * v = get: const GLuint *
+ glVertexAttrib4Nuiv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI4bv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLbyte * v = get: const GLbyte *
+ glVertexAttribI4bv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI4ubv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLubyte * v = get: const GLubyte *
+ glVertexAttribI4ubv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI4sv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLshort * v = get: const GLshort *
+ glVertexAttribI4sv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI4usv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLushort * v = get: const GLushort *
+ glVertexAttribI4usv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI4iv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLint * v = get: const GLint *
+ glVertexAttribI4iv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI4uiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLuint * v = get: const GLuint *
+ glVertexAttribI4uiv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribL1dv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLdouble * v = get: const GLdouble *
+ glVertexAttribL1dv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribL2dv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLdouble * v = get: const GLdouble *
+ glVertexAttribL2dv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribL3dv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLdouble * v = get: const GLdouble *
+ glVertexAttribL3dv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribL4dv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLdouble * v = get: const GLdouble *
+ glVertexAttribL4dv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribP1ui_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum type = luaL_checkinteger(L, 2);
+ GLboolean normalized = get: GLboolean
+ GLuint value = luaL_checkinteger(L, 4);
+ glVertexAttribP1ui(index, type, normalized, value);
+ return 0;
+}
+
+
+int glVertexAttribP2ui_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum type = luaL_checkinteger(L, 2);
+ GLboolean normalized = get: GLboolean
+ GLuint value = luaL_checkinteger(L, 4);
+ glVertexAttribP2ui(index, type, normalized, value);
+ return 0;
+}
+
+
+int glVertexAttribP3ui_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum type = luaL_checkinteger(L, 2);
+ GLboolean normalized = get: GLboolean
+ GLuint value = luaL_checkinteger(L, 4);
+ glVertexAttribP3ui(index, type, normalized, value);
+ return 0;
+}
+
+
+int glVertexAttribP4ui_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum type = luaL_checkinteger(L, 2);
+ GLboolean normalized = get: GLboolean
+ GLuint value = luaL_checkinteger(L, 4);
+ glVertexAttribP4ui(index, type, normalized, value);
+ return 0;
+}
+
+
+int glVertexAttribPointer_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLint size = luaL_checkinteger(L, 2);
+ GLenum type = luaL_checkinteger(L, 3);
+ GLboolean normalized = get: GLboolean
+ GLsizei stride = luaL_checkinteger(L, 5);
+ const void * pointer = get: const void *
+ glVertexAttribPointer(index, size, type, normalized, stride, pointer);
+ return 0;
+}
+
+
+int glVertexAttribIPointer_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLint size = luaL_checkinteger(L, 2);
+ GLenum type = luaL_checkinteger(L, 3);
+ GLsizei stride = luaL_checkinteger(L, 4);
+ const void * pointer = get: const void *
+ glVertexAttribIPointer(index, size, type, stride, pointer);
+ return 0;
+}
+
+
+int glViewport_bind(lua_State *L)
+{
+ GLint x = luaL_checkinteger(L, 1);
+ GLint y = luaL_checkinteger(L, 2);
+ GLsizei width = luaL_checkinteger(L, 3);
+ GLsizei height = luaL_checkinteger(L, 4);
+ glViewport(x, y, width, height);
+ return 0;
+}
+
+
+int glViewportArrayv_bind(lua_State *L)
+{
+ GLuint first = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLfloat * v = get: const GLfloat *
+ glViewportArrayv(first, count, v);
+ return 0;
+}
+
+
+int glViewportIndexedf_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLfloat x = luaL_checknumber(L, 2);
+ GLfloat y = luaL_checknumber(L, 3);
+ GLfloat w = luaL_checknumber(L, 4);
+ GLfloat h = luaL_checknumber(L, 5);
+ glViewportIndexedf(index, x, y, w, h);
+ return 0;
+}
+
+
+int glViewportIndexedfv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLfloat * v = get: const GLfloat *
+ glViewportIndexedfv(index, v);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/w b/src/opengl/bind/w
new file mode 100644
index 0000000..1a75379
--- /dev/null
+++ b/src/opengl/bind/w
@@ -0,0 +1 @@
+void glWaitSync( GLsync sync, GLbitfield flags, GLuint64 timeout);
diff --git a/src/opengl/bind/w.bind b/src/opengl/bind/w.bind
new file mode 100644
index 0000000..6f5210c
--- /dev/null
+++ b/src/opengl/bind/w.bind
@@ -0,0 +1,10 @@
+int glWaitSync_bind(lua_State *L)
+{
+ GLsync sync = luaL_checkinteger(L, 1);
+ GLbitfield flags = luaL_checkinteger(L, 2);
+ GLuint64 timeout = luaL_checkinteger(L, 3);
+ glWaitSync(sync, flags, timeout);
+ return 0;
+}
+
+
diff --git a/src/opengl/data.c b/src/opengl/data.c
new file mode 100644
index 0000000..b7dc581
--- /dev/null
+++ b/src/opengl/data.c
@@ -0,0 +1,164 @@
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glad/glad.h>
+#include <GLFW/glfw3.h>
+#include <lua.h>
+#include <lauxlib.h>
+#include "util/util.h"
+#include "gl.h"
+
+int gl_create_buffer(lua_State *L);
+int gl_bind_buffer(lua_State *L);
+int gl_buffer_data(lua_State *L);
+
+int gl_vertex_array_create(lua_State *L);
+int gl_vertex_array_bind(lua_State *L);
+int gl_vertex_attrib_pointer(lua_State *L);
+int gl_vertex_array_enable_attrib(lua_State *L);
+
+
+void setup_data(lua_State *L, int gl_index)
+{
+ struct honey_tbl_t tbl[] = {
+ /* functions */
+ H_FUNC("GenBuffers", gl_create_buffer),
+ H_FUNC("BindBuffer", gl_bind_buffer),
+ H_FUNC("BufferData", gl_buffer_data),
+
+ H_FUNC("GenVertexArrays", gl_vertex_array_create),
+ H_FUNC("BindVertexArray", gl_vertex_array_bind),
+ H_FUNC("VertexAttribPointer", gl_vertex_attrib_pointer),
+ H_FUNC("EnableVertexAttribArray", gl_vertex_array_enable_attrib),
+
+ /******** enums ********/
+ /* buffer bind targets */
+ H_INT("ARRAY_BUFFER", GL_ARRAY_BUFFER),
+ H_INT("ELEMENT_ARRAY_BUFFER", GL_ELEMENT_ARRAY_BUFFER),
+
+ /* buffer usage patters */
+ H_INT("STREAM_DRAW", GL_STREAM_DRAW),
+ H_INT("STATIC_DRAW", GL_STATIC_DRAW),
+ H_INT("DYNAMIC_DRAW", GL_DYNAMIC_DRAW),
+
+ H_END
+ };
+ create_table(L, tbl);
+ append_table(L, gl_index, lua_gettop(L));
+ lua_pop(L, 1);
+}
+
+
+int gl_create_buffer(lua_State *L)
+{
+ int buf;
+ glGenBuffers(1, &buf);
+ lua_pushinteger(L, buf);
+ return 1;
+}
+
+
+int gl_bind_buffer(lua_State *L)
+{
+ int target = luaL_checkinteger(L, 1);
+ int buf = luaL_checkinteger(L, 2);
+ glBindBuffer(target, buf);
+ return 0;
+}
+
+
+#define GET_BUFFER_TYPE(type, name, conversion) \
+ void * get_buffer_ ## name (lua_State *L, size_t *sz, int tbl) { \
+ size_t len = lua_objlen(L, tbl); \
+ *sz = len * sizeof(type); \
+ type *buf = malloc(*sz); \
+ if (buf == NULL) \
+ luaL_error(L, "failed to allocate intermediary buffer"); \
+ for (int i=0; i<len; i++) { \
+ lua_rawgeti(L, tbl, i+1); \
+ if (!lua_isnumber(L, -1)) \
+ luaL_error(L, "all elements must be numbers (failed at index %d)", i); \
+ buf[i] = conversion(L, -1); \
+ lua_pop(L, 1); \
+ } \
+ return buf; \
+ }
+
+GET_BUFFER_TYPE(unsigned int, uint, lua_tointeger)
+GET_BUFFER_TYPE(int, int, lua_tointeger)
+GET_BUFFER_TYPE(float, float, lua_tonumber)
+
+int gl_buffer_data(lua_State *L)
+{
+ lua_Integer target, type, usage;
+ target = luaL_checkinteger(L, 1);
+ type = luaL_checkinteger(L, 2);
+ luaL_checktype(L, 3, LUA_TTABLE);
+ int table = 3;
+ usage = luaL_checkinteger(L, 4);
+
+ /* build raw buffer */
+ void *buf; size_t len;
+ switch(type) {
+ case GL_UNSIGNED_INT:
+ buf = get_buffer_uint(L, &len, table);
+ break;
+
+ case GL_INT:
+ buf = get_buffer_int(L, &len, table);
+ break;
+
+ case GL_FLOAT:
+ buf = get_buffer_float(L, &len, table);
+ break;
+
+ default:
+ luaL_error(L, "invalid type");
+ }
+
+ /* call */
+ glBufferData(target, len, buf, usage);
+ free(buf);
+ return 0;
+}
+
+
+int gl_vertex_array_create(lua_State *L)
+{
+ int array;
+ glGenVertexArrays(1, &array);
+ lua_pushinteger(L, array);
+ return 1;
+}
+
+
+int gl_vertex_array_bind(lua_State *L)
+{
+ lua_Integer array = luaL_checkinteger(L, 1);
+ glBindVertexArray(array);
+ return 0;
+}
+
+
+int gl_vertex_attrib_pointer(lua_State *L)
+{
+ lua_Integer index, size, stride, offset;
+ bool normalized;
+ index = luaL_checkinteger(L, 1);
+ size = luaL_checkinteger(L, 2);
+ normalized = lua_toboolean(L, 3);
+ stride = luaL_checkinteger(L, 4);
+ offset = luaL_checkinteger(L, 5);
+
+ glVertexAttribPointer(index, size, GL_FLOAT,
+ normalized, stride*sizeof(float),
+ (void*) (offset*sizeof(float)));
+ return 0;
+}
+
+
+int gl_vertex_array_enable_attrib(lua_State *L)
+{
+ lua_Integer index = luaL_checkinteger(L, 1);
+ glEnableVertexAttribArray(index);
+ return 0;
+}
diff --git a/src/opengl/data.test.c b/src/opengl/data.test.c
new file mode 100644
index 0000000..143b0ce
--- /dev/null
+++ b/src/opengl/data.test.c
@@ -0,0 +1,216 @@
+#include <string.h>
+#include <lua.h>
+#include <lauxlib.h>
+#include <honeysuckle.h>
+#include "test/honey-test.h"
+
+
+int mock_glfwInit_(void);
+int mock_hs_throw_error_(lua_State *L, const char *str, ...);
+void mock_glfwTerminate_();
+void mock_glBufferData_(int, size_t, const void *, int);
+
+#define DUMMY_FUNCTION(...)
+
+#define glfwInit mock_glfwInit_
+#define hs_throw_error mock_hs_throw_error_
+#define glfwTerminate mock_glfwTerminate_
+#undef glBufferData
+#define glBufferData mock_glBufferData_
+#define setup_shader DUMMY_FUNCTION
+#define setup_drawing DUMMY_FUNCTION
+#include "gl/gl.c"
+#undef glBufferData
+#undef glfwTerminate
+#undef hs_throw_error
+#undef glfwInit
+
+
+lily_mock_t *mock_hs_throw_error = NULL;
+static int mock_hs_throw_error_(lua_State *L, const char *str, ...)
+{
+ struct lily_mock_arg_t args[] = {
+ { sizeof(const char *), &str }
+ };
+ lily_mock_store_call(mock_hs_throw_error, args);
+
+ lua_pushstring(L, "some error");
+ lua_error(L);
+
+ return 0;
+}
+
+lily_mock_t *mock_glBufferData = NULL;
+static void mock_glBufferData_(int target, size_t size, const void *data, int usage)
+{
+ struct lily_mock_arg_t args[] = {
+ { sizeof(int), &target },
+ { sizeof(size_t), &size },
+ { sizeof(int), &usage }
+ };
+ lily_mock_store_call(mock_glBufferData, args);
+
+ int use_ints; lily_get_value(mock_glBufferData, int, &use_ints);
+
+ if (use_ints) {
+ size_t count = size/sizeof(int);
+ int *numbers = data;
+ for (int i=0; i<count; i++) {
+ lily_store_value(mock_glBufferData, int, numbers[i]);
+ }
+ }
+ else {
+ size_t count = size/sizeof(float);
+ float *numbers = data;
+ for (int i=0; i<count; i++) {
+ lily_store_value(mock_glBufferData, float, numbers[i]);
+ }
+ }
+}
+
+
+/* ~~~~~~~~ suite ~~~~~~~~ */
+
+void gl_init_succeeds()
+{
+ lily_mock_use(&mock_glfwInit);
+ lily_mock_use(&mock_hs_throw_error);
+
+ lua_State *L = luaL_newstate();
+ lily_store_value(mock_glfwInit, int, 1);
+ lua_pushcfunction(L, gl_init);
+ int err = lua_pcall(L, 0, 0, 0);
+ lua_close(L);
+
+ lily_assert_int_equal(err, 0);
+ lily_assert_int_equal(mock_glfwInit->n_calls, 1);
+ lily_assert_int_equal(mock_hs_throw_error->n_calls, 0);
+}
+
+
+void gl_init_fails()
+{
+ lily_mock_use(&mock_glfwInit);
+ lily_mock_use(&mock_hs_throw_error);
+
+ lua_State *L = luaL_newstate();
+ lily_store_value(mock_glfwInit, int, 0);
+ lua_pushcfunction(L, gl_init);
+ int err = lua_pcall(L, 0, 0, 0);
+ lua_close(L);
+
+ lily_assert_int_equal(err, LUA_ERRRUN);
+ lily_assert_int_equal(mock_hs_throw_error->n_calls, 1);
+}
+
+
+void gl_terminate_works()
+{
+ lily_mock_use(&mock_glfwTerminate);
+
+ lua_State *L = luaL_newstate();
+ lua_pushcfunction(L, gl_terminate);
+ int err = lua_pcall(L, 0, 0, 0);
+ lua_close(L);
+
+ lily_assert_int_equal(err, 0);
+ lily_assert_int_equal(mock_glfwTerminate->n_calls, 1);
+}
+
+
+void gl_buffer_float_works()
+{
+ lily_mock_use(&mock_hs_throw_error);
+ lily_mock_use(&mock_glBufferData);
+ lily_store_value(mock_glBufferData, int, 0); // use floats
+
+ lua_State *L = luaL_newstate();
+ lua_pushcfunction(L, gl_buffer_data);
+ lua_pushinteger(L, GL_ARRAY_BUFFER);
+ lua_pushinteger(L, GL_FLOAT);
+ hs_create_table(L,
+ hs_int_num(1, 22),
+ hs_int_num(2, 33),
+ hs_int_num(3, 44),
+ );
+ lua_pushinteger(L, GL_STATIC_DRAW);
+ int err = hs_call(L, 4, 0);
+ lua_close(L);
+
+ lily_assert_int_equal(err, 0);
+ lily_assert_int_equal(mock_glBufferData->n_calls, 1);
+ int target; size_t size; int usage;
+ struct lily_mock_arg_t args[] = {
+ { sizeof(int), &target },
+ { sizeof(size_t), &size },
+ { sizeof(int), &usage }
+ };
+ lily_mock_get_call(mock_glBufferData, args, 0);
+ lily_assert_int_equal(target, GL_ARRAY_BUFFER);
+ lily_assert_int_equal(size, 3*sizeof(float));
+ lily_assert_int_equal(usage, GL_STATIC_DRAW);
+
+ float n;
+ lily_get_value(mock_glBufferData, float, &n);
+ lily_assert_float_equal(n, 22, 0.1);
+ lily_get_value(mock_glBufferData, float, &n);
+ lily_assert_float_equal(n, 33, 0.1);
+ lily_get_value(mock_glBufferData, float, &n);
+ lily_assert_float_equal(n, 44, 0.1);
+}
+
+
+void gl_buffer_int_works()
+{
+ lily_mock_use(&mock_hs_throw_error);
+ lily_mock_use(&mock_glBufferData);
+ lily_store_value(mock_glBufferData, int, 1); // use ints
+
+ lua_State *L = luaL_newstate();
+ lua_pushcfunction(L, gl_buffer_data);
+ lua_pushinteger(L, GL_ARRAY_BUFFER);
+ lua_pushinteger(L, GL_INT);
+ hs_create_table(L,
+ hs_int_num(1, 22),
+ hs_int_num(2, 33),
+ hs_int_num(3, 44),
+ );
+ lua_pushinteger(L, GL_STATIC_DRAW);
+ int err = hs_call(L, 4, 0);
+ lua_close(L);
+
+ lily_assert_int_equal(err, 0);
+ lily_assert_int_equal(mock_glBufferData->n_calls, 1);
+ int target; size_t size; int usage;
+ struct lily_mock_arg_t args[] = {
+ { sizeof(int), &target },
+ { sizeof(size_t), &size },
+ { sizeof(int), &usage }
+ };
+ lily_mock_get_call(mock_glBufferData, args, 0);
+ lily_assert_int_equal(target, GL_ARRAY_BUFFER);
+ lily_assert_int_equal(size, 3*sizeof(float));
+ lily_assert_int_equal(usage, GL_STATIC_DRAW);
+
+ int n;
+ lily_get_value(mock_glBufferData, int, &n);
+ lily_assert_int_equal(n, 22);
+ lily_get_value(mock_glBufferData, int, &n);
+ lily_assert_int_equal(n, 33);
+ lily_get_value(mock_glBufferData, int, &n);
+ lily_assert_int_equal(n, 44);
+}
+
+void suite_gl()
+{
+ lily_run_test(gl_init_succeeds);
+ lily_run_test(gl_init_fails);
+ lily_run_test(gl_terminate_works);
+ lily_run_test(gl_buffer_float_works);
+ lily_run_test(gl_buffer_int_works);
+
+ lily_mock_destroy(mock_glfwInit);
+ lily_mock_destroy(mock_hs_throw_error);
+ lily_mock_destroy(mock_glfwTerminate);
+ lily_mock_destroy(mock_glBufferData);
+}
diff --git a/src/opengl/drawing.c b/src/opengl/drawing.c
new file mode 100644
index 0000000..eeb0496
--- /dev/null
+++ b/src/opengl/drawing.c
@@ -0,0 +1,127 @@
+#include <glad/glad.h>
+#include <GLFW/glfw3.h>
+#include <lua.h>
+#include <lauxlib.h>
+#include "util/util.h"
+
+int gl_set_viewport(lua_State *L);
+int gl_draw_arrays(lua_State *L);
+int gl_draw_elements(lua_State *L);
+int gl_set_clear_color(lua_State *L);
+int gl_clear(lua_State *L);
+int gl_gen_framebuffers(lua_State *L);
+int gl_bind_framebuffer(lua_State *L);
+int gl_framebuffer_texture_2d(lua_State *L);
+
+void setup_drawing(lua_State *L, int gl_index)
+{
+ struct honey_tbl_t tbl[] = {
+ /* functions */
+ H_FUNC("DrawArrays", gl_draw_arrays),
+ H_FUNC("DrawElements", gl_draw_elements),
+ H_FUNC("ClearColor", gl_set_clear_color),
+ H_FUNC("Clear", gl_clear),
+ H_FUNC("Viewport", gl_set_viewport),
+
+ /******** enums ********/
+ /* rendering primitives */
+ H_INT("POINTS", GL_POINTS),
+ H_INT("LINES", GL_LINES),
+ H_INT("TRIANGLES", GL_TRIANGLES),
+
+ /* clear bitmasks */
+ H_INT("COLOR_BUFFER_BIT", GL_COLOR_BUFFER_BIT),
+ H_INT("DEPTH_BUFFER_BIT", GL_DEPTH_BUFFER_BIT),
+ H_INT("STENCIL_BUFFER_BIT", GL_STENCIL_BUFFER_BIT),
+
+ H_END
+ };
+ create_table(L, tbl);
+ append_table(L, gl_index, lua_gettop(L));
+ lua_pop(L, 1);
+}
+
+int gl_set_clear_color(lua_State *L)
+{
+ lua_Number r, g, b, a;
+ r = luaL_checknumber(L, 1);
+ g = luaL_checknumber(L, 2);
+ b = luaL_checknumber(L, 3);
+ a = luaL_checknumber(L, 4);
+ glClearColor(r, g, b, a);
+ return 0;
+}
+
+
+int gl_clear(lua_State *L)
+{
+ lua_Integer mask = luaL_checkinteger(L, 1);
+ glClear(mask);
+ return 0;
+}
+
+
+int gl_draw_arrays(lua_State *L)
+{
+ lua_Integer mode, first, count;
+ mode = luaL_checkinteger(L, 1);
+ first = luaL_checkinteger(L, 2);
+ count = luaL_checkinteger(L, 3);
+ glDrawArrays(mode, first, count);
+ return 0;
+}
+
+
+int gl_draw_elements(lua_State *L)
+{
+ lua_Integer mode, count, type, offset;
+ mode = luaL_checkinteger(L, 1);
+ count = luaL_checkinteger(L, 2);
+ type = luaL_checkinteger(L, 3);
+ offset = luaL_checkinteger(L, 4);
+ glDrawElements(mode, count, type, (const void*)offset);
+ return 0;
+}
+
+
+int gl_set_viewport(lua_State *L)
+{
+ lua_Integer x, y, w, h;
+ x = luaL_checkinteger(L, 1);
+ y = luaL_checkinteger(L, 2);
+ w = luaL_checkinteger(L, 3);
+ h = luaL_checkinteger(L, 4);
+ glViewport(x, y, w, h);
+ return 0;
+}
+
+
+int gl_gen_framebuffers(lua_State *L)
+{
+ int framebuffer;
+ glGenFramebuffers(1, &framebuffer);
+ lua_pushinteger(L, framebuffer);
+ return 1;
+}
+
+
+int gl_bind_framebuffer(lua_State *L)
+{
+ int target = luaL_checkinteger(L, 1);
+ int framebuffer = luaL_checkinteger(L, 2);
+ glBindFramebuffer(target, framebuffer);
+ return 0;
+}
+
+
+int gl_framebuffer_texture_2d(lua_State *L)
+{
+ int target = luaL_checkinteger(L, 1);
+ int attachment = luaL_checkinteger(L, 2);
+ int textarget = luaL_checkinteger(L, 3);
+ int texture = luaL_checkinteger(L, 4);
+ int level = luaL_checkinteger(L, 5);
+
+ glFramebufferTexture2D(target, attachment, textarget, texture, level);
+ return 0;
+}
diff --git a/src/opengl/gl.c b/src/opengl/gl.c
new file mode 100644
index 0000000..b8da1ec
--- /dev/null
+++ b/src/opengl/gl.c
@@ -0,0 +1,112 @@
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glad/glad.h>
+#include <GLFW/glfw3.h>
+#include <lua.h>
+#include <lauxlib.h>
+#include "util/util.h"
+#include "gl.h"
+
+/* needs to be here because glad uses macros to define glBufferData */
+#ifdef HONEY_TEST_H
+#undef glBufferData
+#define glBufferData mock_glBufferData_
+#endif
+
+
+int gl_init(lua_State *L);
+int glad_init(lua_State *L);
+int gl_terminate(lua_State *L);
+int gl_get_error(lua_State *L);
+int gl_enable(lua_State *L);
+int gl_disable(lua_State *L);
+
+void setup_gl(lua_State *L, int honey_index)
+{
+ struct honey_tbl_t tbl[] = {
+ /* functions */
+ H_FUNC("Init", gl_init),
+ H_FUNC("InitGlad", glad_init),
+ H_FUNC("Terminate", gl_terminate),
+ H_FUNC("GetError", gl_get_error),
+ H_FUNC("Enable", gl_enable),
+ H_FUNC("Disable", gl_disable),
+
+ /******** enums ********/
+ /* data types */
+ H_INT("UNSIGNED_BYTE", GL_UNSIGNED_BYTE),
+ H_INT("UNSIGNED_INT", GL_UNSIGNED_INT),
+ H_INT("INT", GL_INT),
+ H_INT("FLOAT", GL_FLOAT),
+
+ /* error types */
+ H_INT("NO_ERROR", GL_NO_ERROR),
+ H_INT("INVALID_ENUM", GL_INVALID_ENUM),
+ H_INT("INVALID_VALUE", GL_INVALID_VALUE),
+ H_INT("INVALID_OPERATION", GL_INVALID_OPERATION),
+ H_INT("INVALID_FRAMEBUFFER_OPERATION", GL_INVALID_FRAMEBUFFER_OPERATION),
+ H_INT("OUT_OF_MEMORY", GL_OUT_OF_MEMORY),
+
+ /* opengl capabilities */
+ H_INT("DEPTH_TEST", GL_DEPTH_TEST),
+ H_INT("CULL_FACE", GL_CULL_FACE),
+
+ H_END
+ };
+ create_table(L, tbl);
+ int gl_index = lua_gettop(L);
+
+ setup_shader(L, gl_index);
+ setup_drawing(L, gl_index);
+ setup_data(L, gl_index);
+ setup_texture(L, gl_index);
+
+ lua_setfield(L, honey_index, "gl");
+}
+
+
+int gl_init(lua_State *L)
+{
+ if (!glfwInit()) {
+ luaL_error(L, "failed to initialize GLFW");
+ }
+ return 0;
+}
+
+
+int glad_init(lua_State *L)
+{
+ if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
+ luaL_error(L, "failed to initialize GLAD");
+ }
+}
+
+
+int gl_terminate(lua_State *L)
+{
+ glfwTerminate();
+ return 0;
+}
+
+
+int gl_get_error(lua_State *L)
+{
+ lua_pushinteger(L, glGetError());
+ return 1;
+}
+
+
+int gl_enable(lua_State *L)
+{
+ lua_Integer cap = luaL_checkinteger(L, 1);
+ glEnable(cap);
+ return 0;
+}
+
+
+int gl_disable(lua_State *L)
+{
+ lua_Integer cap = luaL_checkinteger(L, 1);
+ glDisable(cap);
+ return 0;
+}
diff --git a/src/opengl/gl.h b/src/opengl/gl.h
new file mode 100644
index 0000000..8aa1ef7
--- /dev/null
+++ b/src/opengl/gl.h
@@ -0,0 +1,14 @@
+#ifndef HONEY_GL_H
+#define HONEY_GL_H
+
+#include <lua.h>
+
+void setup_gl(lua_State *L, int honey_index);
+void setup_shader(lua_State *L, int gl_index);
+void setup_drawing(lua_State *L, int gl_index);
+void setup_data(lua_State *L, int gl_index);
+void setup_texture(lua_State *L, int gl_index);
+
+void setup_window(lua_State *L, int honey_index);
+
+#endif
diff --git a/src/opengl/gl.test.c b/src/opengl/gl.test.c
new file mode 100644
index 0000000..488126f
--- /dev/null
+++ b/src/opengl/gl.test.c
@@ -0,0 +1,237 @@
+#include <string.h>
+#include <lua.h>
+#include <lauxlib.h>
+#include <honeysuckle.h>
+#include "test/honey-test.h"
+
+
+int mock_glfwInit_(void);
+int mock_hs_throw_error_(lua_State *L, const char *str, ...);
+void mock_glfwTerminate_();
+void mock_glBufferData_(int, size_t, const void *, int);
+
+#define DUMMY_FUNCTION(...)
+
+#define glfwInit mock_glfwInit_
+#define hs_throw_error mock_hs_throw_error_
+#define glfwTerminate mock_glfwTerminate_
+#define setup_shader DUMMY_FUNCTION
+#define setup_drawing DUMMY_FUNCTION
+#define setup_texture DUMMY_FUNCTION
+#include "gl/gl.c"
+#include "gl/data.c"
+#undef glBufferData
+#undef glfwTerminate
+#undef hs_throw_error
+#undef glfwInit
+
+
+lily_mock_t *mock_glfwInit = NULL;
+int mock_glfwInit_()
+{
+ struct lily_mock_arg_t args[] = {};
+ lily_mock_store_call(mock_glfwInit, args);
+
+ int result;
+ lily_get_value(mock_glfwInit, int, &result);
+ return result;
+}
+
+
+lily_mock_t *mock_hs_throw_error = NULL;
+int mock_hs_throw_error_(lua_State *L, const char *str, ...)
+{
+ struct lily_mock_arg_t args[] = {
+ { sizeof(const char *), &str }
+ };
+ lily_mock_store_call(mock_hs_throw_error, args);
+
+ lua_pushstring(L, "some error");
+ lua_error(L);
+
+ return 0;
+}
+
+
+lily_mock_t *mock_glfwTerminate = NULL;
+void mock_glfwTerminate_()
+{
+ struct lily_mock_arg_t args[] = {};
+ lily_mock_store_call(mock_glfwTerminate, args);
+}
+
+
+lily_mock_t *mock_glBufferData = NULL;
+void mock_glBufferData_(int target, size_t size, const void *data, int usage)
+{
+ struct lily_mock_arg_t args[] = {
+ { sizeof(int), &target },
+ { sizeof(size_t), &size },
+ { sizeof(int), &usage }
+ };
+ lily_mock_store_call(mock_glBufferData, args);
+
+ int use_ints; lily_get_value(mock_glBufferData, int, &use_ints);
+
+ if (use_ints) {
+ size_t count = size/sizeof(int);
+ int *numbers = data;
+ for (int i=0; i<count; i++) {
+ lily_store_value(mock_glBufferData, int, numbers[i]);
+ }
+ }
+ else {
+ size_t count = size/sizeof(float);
+ float *numbers = data;
+ for (int i=0; i<count; i++) {
+ lily_store_value(mock_glBufferData, float, numbers[i]);
+ }
+ }
+}
+
+
+/* ~~~~~~~~ suite ~~~~~~~~ */
+
+void gl_init_succeeds()
+{
+ lily_mock_use(&mock_glfwInit);
+ lily_mock_use(&mock_hs_throw_error);
+
+ lua_State *L = luaL_newstate();
+ lily_store_value(mock_glfwInit, int, 1);
+ lua_pushcfunction(L, gl_init);
+ int err = lua_pcall(L, 0, 0, 0);
+ lua_close(L);
+
+ lily_assert_int_equal(err, 0);
+ lily_assert_int_equal(mock_glfwInit->n_calls, 1);
+ lily_assert_int_equal(mock_hs_throw_error->n_calls, 0);
+}
+
+
+void gl_init_fails()
+{
+ lily_mock_use(&mock_glfwInit);
+ lily_mock_use(&mock_hs_throw_error);
+
+ lua_State *L = luaL_newstate();
+ lily_store_value(mock_glfwInit, int, 0);
+ lua_pushcfunction(L, gl_init);
+ int err = lua_pcall(L, 0, 0, 0);
+ lua_close(L);
+
+ lily_assert_int_equal(err, LUA_ERRRUN);
+ lily_assert_int_equal(mock_hs_throw_error->n_calls, 1);
+}
+
+
+void gl_terminate_works()
+{
+ lily_mock_use(&mock_glfwTerminate);
+
+ lua_State *L = luaL_newstate();
+ lua_pushcfunction(L, gl_terminate);
+ int err = lua_pcall(L, 0, 0, 0);
+ lua_close(L);
+
+ lily_assert_int_equal(err, 0);
+ lily_assert_int_equal(mock_glfwTerminate->n_calls, 1);
+}
+
+
+void gl_buffer_float_works()
+{
+ lily_mock_use(&mock_hs_throw_error);
+ lily_mock_use(&mock_glBufferData);
+ lily_store_value(mock_glBufferData, int, 0); // use floats
+
+ lua_State *L = luaL_newstate();
+ lua_pushcfunction(L, gl_buffer_data);
+ lua_pushinteger(L, GL_ARRAY_BUFFER);
+ lua_pushinteger(L, GL_FLOAT);
+ hs_create_table(L,
+ hs_int_num(1, 22),
+ hs_int_num(2, 33),
+ hs_int_num(3, 44),
+ );
+ lua_pushinteger(L, GL_STATIC_DRAW);
+ int err = hs_call(L, 4, 0);
+ lua_close(L);
+
+ lily_assert_int_equal(err, 0);
+ lily_assert_int_equal(mock_glBufferData->n_calls, 1);
+ int target; size_t size; int usage;
+ struct lily_mock_arg_t args[] = {
+ { sizeof(int), &target },
+ { sizeof(size_t), &size },
+ { sizeof(int), &usage }
+ };
+ lily_mock_get_call(mock_glBufferData, args, 0);
+ lily_assert_int_equal(target, GL_ARRAY_BUFFER);
+ lily_assert_int_equal(size, 3*sizeof(float));
+ lily_assert_int_equal(usage, GL_STATIC_DRAW);
+
+ float n;
+ lily_get_value(mock_glBufferData, float, &n);
+ lily_assert_float_equal(n, 22, 0.1);
+ lily_get_value(mock_glBufferData, float, &n);
+ lily_assert_float_equal(n, 33, 0.1);
+ lily_get_value(mock_glBufferData, float, &n);
+ lily_assert_float_equal(n, 44, 0.1);
+}
+
+
+void gl_buffer_int_works()
+{
+ lily_mock_use(&mock_hs_throw_error);
+ lily_mock_use(&mock_glBufferData);
+ lily_store_value(mock_glBufferData, int, 1); // use ints
+
+ lua_State *L = luaL_newstate();
+ lua_pushcfunction(L, gl_buffer_data);
+ lua_pushinteger(L, GL_ARRAY_BUFFER);
+ lua_pushinteger(L, GL_INT);
+ hs_create_table(L,
+ hs_int_num(1, 22),
+ hs_int_num(2, 33),
+ hs_int_num(3, 44),
+ );
+ lua_pushinteger(L, GL_STATIC_DRAW);
+ int err = hs_call(L, 4, 0);
+ lua_close(L);
+
+ lily_assert_int_equal(err, 0);
+ lily_assert_int_equal(mock_glBufferData->n_calls, 1);
+ int target; size_t size; int usage;
+ struct lily_mock_arg_t args[] = {
+ { sizeof(int), &target },
+ { sizeof(size_t), &size },
+ { sizeof(int), &usage }
+ };
+ lily_mock_get_call(mock_glBufferData, args, 0);
+ lily_assert_int_equal(target, GL_ARRAY_BUFFER);
+ lily_assert_int_equal(size, 3*sizeof(float));
+ lily_assert_int_equal(usage, GL_STATIC_DRAW);
+
+ int n;
+ lily_get_value(mock_glBufferData, int, &n);
+ lily_assert_int_equal(n, 22);
+ lily_get_value(mock_glBufferData, int, &n);
+ lily_assert_int_equal(n, 33);
+ lily_get_value(mock_glBufferData, int, &n);
+ lily_assert_int_equal(n, 44);
+}
+
+void suite_gl()
+{
+ lily_run_test(gl_init_succeeds);
+ lily_run_test(gl_init_fails);
+ lily_run_test(gl_terminate_works);
+ lily_run_test(gl_buffer_float_works);
+ lily_run_test(gl_buffer_int_works);
+
+ lily_mock_destroy(mock_glfwInit);
+ lily_mock_destroy(mock_hs_throw_error);
+ lily_mock_destroy(mock_glfwTerminate);
+ lily_mock_destroy(mock_glBufferData);
+}
diff --git a/src/opengl/glad/CMakeLists.txt b/src/opengl/glad/CMakeLists.txt
new file mode 100644
index 0000000..de6a508
--- /dev/null
+++ b/src/opengl/glad/CMakeLists.txt
@@ -0,0 +1,9 @@
+project(honey-engine)
+
+target_sources(honey PUBLIC
+ ${CMAKE_CURRENT_LIST_DIR}/src/glad.c
+)
+
+target_include_directories(honey PUBLIC
+ ${CMAKE_CURRENT_LIST_DIR}/include
+)
diff --git a/src/opengl/glad/include/KHR/khrplatform.h b/src/opengl/glad/include/KHR/khrplatform.h
new file mode 100644
index 0000000..0164644
--- /dev/null
+++ b/src/opengl/glad/include/KHR/khrplatform.h
@@ -0,0 +1,311 @@
+#ifndef __khrplatform_h_
+#define __khrplatform_h_
+
+/*
+** Copyright (c) 2008-2018 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+/* Khronos platform-specific types and definitions.
+ *
+ * The master copy of khrplatform.h is maintained in the Khronos EGL
+ * Registry repository at https://github.com/KhronosGroup/EGL-Registry
+ * The last semantic modification to khrplatform.h was at commit ID:
+ * 67a3e0864c2d75ea5287b9f3d2eb74a745936692
+ *
+ * Adopters may modify this file to suit their platform. Adopters are
+ * encouraged to submit platform specific modifications to the Khronos
+ * group so that they can be included in future versions of this file.
+ * Please submit changes by filing pull requests or issues on
+ * the EGL Registry repository linked above.
+ *
+ *
+ * See the Implementer's Guidelines for information about where this file
+ * should be located on your system and for more details of its use:
+ * http://www.khronos.org/registry/implementers_guide.pdf
+ *
+ * This file should be included as
+ * #include <KHR/khrplatform.h>
+ * by Khronos client API header files that use its types and defines.
+ *
+ * The types in khrplatform.h should only be used to define API-specific types.
+ *
+ * Types defined in khrplatform.h:
+ * khronos_int8_t signed 8 bit
+ * khronos_uint8_t unsigned 8 bit
+ * khronos_int16_t signed 16 bit
+ * khronos_uint16_t unsigned 16 bit
+ * khronos_int32_t signed 32 bit
+ * khronos_uint32_t unsigned 32 bit
+ * khronos_int64_t signed 64 bit
+ * khronos_uint64_t unsigned 64 bit
+ * khronos_intptr_t signed same number of bits as a pointer
+ * khronos_uintptr_t unsigned same number of bits as a pointer
+ * khronos_ssize_t signed size
+ * khronos_usize_t unsigned size
+ * khronos_float_t signed 32 bit floating point
+ * khronos_time_ns_t unsigned 64 bit time in nanoseconds
+ * khronos_utime_nanoseconds_t unsigned time interval or absolute time in
+ * nanoseconds
+ * khronos_stime_nanoseconds_t signed time interval in nanoseconds
+ * khronos_boolean_enum_t enumerated boolean type. This should
+ * only be used as a base type when a client API's boolean type is
+ * an enum. Client APIs which use an integer or other type for
+ * booleans cannot use this as the base type for their boolean.
+ *
+ * Tokens defined in khrplatform.h:
+ *
+ * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values.
+ *
+ * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0.
+ * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0.
+ *
+ * Calling convention macros defined in this file:
+ * KHRONOS_APICALL
+ * KHRONOS_APIENTRY
+ * KHRONOS_APIATTRIBUTES
+ *
+ * These may be used in function prototypes as:
+ *
+ * KHRONOS_APICALL void KHRONOS_APIENTRY funcname(
+ * int arg1,
+ * int arg2) KHRONOS_APIATTRIBUTES;
+ */
+
+#if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC)
+# define KHRONOS_STATIC 1
+#endif
+
+/*-------------------------------------------------------------------------
+ * Definition of KHRONOS_APICALL
+ *-------------------------------------------------------------------------
+ * This precedes the return type of the function in the function prototype.
+ */
+#if defined(KHRONOS_STATIC)
+ /* If the preprocessor constant KHRONOS_STATIC is defined, make the
+ * header compatible with static linking. */
+# define KHRONOS_APICALL
+#elif defined(_WIN32)
+# define KHRONOS_APICALL __declspec(dllimport)
+#elif defined (__SYMBIAN32__)
+# define KHRONOS_APICALL IMPORT_C
+#elif defined(__ANDROID__)
+# define KHRONOS_APICALL __attribute__((visibility("default")))
+#else
+# define KHRONOS_APICALL
+#endif
+
+/*-------------------------------------------------------------------------
+ * Definition of KHRONOS_APIENTRY
+ *-------------------------------------------------------------------------
+ * This follows the return type of the function and precedes the function
+ * name in the function prototype.
+ */
+#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__)
+ /* Win32 but not WinCE */
+# define KHRONOS_APIENTRY __stdcall
+#else
+# define KHRONOS_APIENTRY
+#endif
+
+/*-------------------------------------------------------------------------
+ * Definition of KHRONOS_APIATTRIBUTES
+ *-------------------------------------------------------------------------
+ * This follows the closing parenthesis of the function prototype arguments.
+ */
+#if defined (__ARMCC_2__)
+#define KHRONOS_APIATTRIBUTES __softfp
+#else
+#define KHRONOS_APIATTRIBUTES
+#endif
+
+/*-------------------------------------------------------------------------
+ * basic type definitions
+ *-----------------------------------------------------------------------*/
+#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__)
+
+
+/*
+ * Using <stdint.h>
+ */
+#include <stdint.h>
+typedef int32_t khronos_int32_t;
+typedef uint32_t khronos_uint32_t;
+typedef int64_t khronos_int64_t;
+typedef uint64_t khronos_uint64_t;
+#define KHRONOS_SUPPORT_INT64 1
+#define KHRONOS_SUPPORT_FLOAT 1
+/*
+ * To support platform where unsigned long cannot be used interchangeably with
+ * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t.
+ * Ideally, we could just use (u)intptr_t everywhere, but this could result in
+ * ABI breakage if khronos_uintptr_t is changed from unsigned long to
+ * unsigned long long or similar (this results in different C++ name mangling).
+ * To avoid changes for existing platforms, we restrict usage of intptr_t to
+ * platforms where the size of a pointer is larger than the size of long.
+ */
+#if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__)
+#if __SIZEOF_POINTER__ > __SIZEOF_LONG__
+#define KHRONOS_USE_INTPTR_T
+#endif
+#endif
+
+#elif defined(__VMS ) || defined(__sgi)
+
+/*
+ * Using <inttypes.h>
+ */
+#include <inttypes.h>
+typedef int32_t khronos_int32_t;
+typedef uint32_t khronos_uint32_t;
+typedef int64_t khronos_int64_t;
+typedef uint64_t khronos_uint64_t;
+#define KHRONOS_SUPPORT_INT64 1
+#define KHRONOS_SUPPORT_FLOAT 1
+
+#elif defined(_WIN32) && !defined(__SCITECH_SNAP__)
+
+/*
+ * Win32
+ */
+typedef __int32 khronos_int32_t;
+typedef unsigned __int32 khronos_uint32_t;
+typedef __int64 khronos_int64_t;
+typedef unsigned __int64 khronos_uint64_t;
+#define KHRONOS_SUPPORT_INT64 1
+#define KHRONOS_SUPPORT_FLOAT 1
+
+#elif defined(__sun__) || defined(__digital__)
+
+/*
+ * Sun or Digital
+ */
+typedef int khronos_int32_t;
+typedef unsigned int khronos_uint32_t;
+#if defined(__arch64__) || defined(_LP64)
+typedef long int khronos_int64_t;
+typedef unsigned long int khronos_uint64_t;
+#else
+typedef long long int khronos_int64_t;
+typedef unsigned long long int khronos_uint64_t;
+#endif /* __arch64__ */
+#define KHRONOS_SUPPORT_INT64 1
+#define KHRONOS_SUPPORT_FLOAT 1
+
+#elif 0
+
+/*
+ * Hypothetical platform with no float or int64 support
+ */
+typedef int khronos_int32_t;
+typedef unsigned int khronos_uint32_t;
+#define KHRONOS_SUPPORT_INT64 0
+#define KHRONOS_SUPPORT_FLOAT 0
+
+#else
+
+/*
+ * Generic fallback
+ */
+#include <stdint.h>
+typedef int32_t khronos_int32_t;
+typedef uint32_t khronos_uint32_t;
+typedef int64_t khronos_int64_t;
+typedef uint64_t khronos_uint64_t;
+#define KHRONOS_SUPPORT_INT64 1
+#define KHRONOS_SUPPORT_FLOAT 1
+
+#endif
+
+
+/*
+ * Types that are (so far) the same on all platforms
+ */
+typedef signed char khronos_int8_t;
+typedef unsigned char khronos_uint8_t;
+typedef signed short int khronos_int16_t;
+typedef unsigned short int khronos_uint16_t;
+
+/*
+ * Types that differ between LLP64 and LP64 architectures - in LLP64,
+ * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears
+ * to be the only LLP64 architecture in current use.
+ */
+#ifdef KHRONOS_USE_INTPTR_T
+typedef intptr_t khronos_intptr_t;
+typedef uintptr_t khronos_uintptr_t;
+#elif defined(_WIN64)
+typedef signed long long int khronos_intptr_t;
+typedef unsigned long long int khronos_uintptr_t;
+#else
+typedef signed long int khronos_intptr_t;
+typedef unsigned long int khronos_uintptr_t;
+#endif
+
+#if defined(_WIN64)
+typedef signed long long int khronos_ssize_t;
+typedef unsigned long long int khronos_usize_t;
+#else
+typedef signed long int khronos_ssize_t;
+typedef unsigned long int khronos_usize_t;
+#endif
+
+#if KHRONOS_SUPPORT_FLOAT
+/*
+ * Float type
+ */
+typedef float khronos_float_t;
+#endif
+
+#if KHRONOS_SUPPORT_INT64
+/* Time types
+ *
+ * These types can be used to represent a time interval in nanoseconds or
+ * an absolute Unadjusted System Time. Unadjusted System Time is the number
+ * of nanoseconds since some arbitrary system event (e.g. since the last
+ * time the system booted). The Unadjusted System Time is an unsigned
+ * 64 bit value that wraps back to 0 every 584 years. Time intervals
+ * may be either signed or unsigned.
+ */
+typedef khronos_uint64_t khronos_utime_nanoseconds_t;
+typedef khronos_int64_t khronos_stime_nanoseconds_t;
+#endif
+
+/*
+ * Dummy value used to pad enum types to 32 bits.
+ */
+#ifndef KHRONOS_MAX_ENUM
+#define KHRONOS_MAX_ENUM 0x7FFFFFFF
+#endif
+
+/*
+ * Enumerated boolean type
+ *
+ * Values other than zero should be considered to be true. Therefore
+ * comparisons should not be made against KHRONOS_TRUE.
+ */
+typedef enum {
+ KHRONOS_FALSE = 0,
+ KHRONOS_TRUE = 1,
+ KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM
+} khronos_boolean_enum_t;
+
+#endif /* __khrplatform_h_ */
diff --git a/src/opengl/glad/include/glad/glad.h b/src/opengl/glad/include/glad/glad.h
new file mode 100644
index 0000000..a5fe03e
--- /dev/null
+++ b/src/opengl/glad/include/glad/glad.h
@@ -0,0 +1,4133 @@
+/*
+
+ OpenGL loader generated by glad 0.1.36 on Sun Feb 26 22:20:10 2023.
+
+ Language/Generator: C/C++
+ Specification: gl
+ APIs: gl=4.1
+ Profile: compatibility
+ Extensions:
+
+ Loader: True
+ Local files: False
+ Omit khrplatform: False
+ Reproducible: False
+
+ Commandline:
+ --profile="compatibility" --api="gl=4.1" --generator="c" --spec="gl" --extensions=""
+ Online:
+ https://glad.dav1d.de/#profile=compatibility&language=c&specification=gl&loader=on&api=gl%3D4.1
+*/
+
+
+#ifndef __glad_h_
+#define __glad_h_
+
+#ifdef __gl_h_
+#error OpenGL header already included, remove this include, glad already provides it
+#endif
+#define __gl_h_
+
+#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
+#define APIENTRY __stdcall
+#endif
+
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+#ifndef APIENTRYP
+#define APIENTRYP APIENTRY *
+#endif
+
+#ifndef GLAPIENTRY
+#define GLAPIENTRY APIENTRY
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct gladGLversionStruct {
+ int major;
+ int minor;
+};
+
+typedef void* (* GLADloadproc)(const char *name);
+
+#ifndef GLAPI
+# if defined(GLAD_GLAPI_EXPORT)
+# if defined(_WIN32) || defined(__CYGWIN__)
+# if defined(GLAD_GLAPI_EXPORT_BUILD)
+# if defined(__GNUC__)
+# define GLAPI __attribute__ ((dllexport)) extern
+# else
+# define GLAPI __declspec(dllexport) extern
+# endif
+# else
+# if defined(__GNUC__)
+# define GLAPI __attribute__ ((dllimport)) extern
+# else
+# define GLAPI __declspec(dllimport) extern
+# endif
+# endif
+# elif defined(__GNUC__) && defined(GLAD_GLAPI_EXPORT_BUILD)
+# define GLAPI __attribute__ ((visibility ("default"))) extern
+# else
+# define GLAPI extern
+# endif
+# else
+# define GLAPI extern
+# endif
+#endif
+
+GLAPI struct gladGLversionStruct GLVersion;
+
+GLAPI int gladLoadGL(void);
+
+GLAPI int gladLoadGLLoader(GLADloadproc);
+
+#include <KHR/khrplatform.h>
+typedef unsigned int GLenum;
+typedef unsigned char GLboolean;
+typedef unsigned int GLbitfield;
+typedef void GLvoid;
+typedef khronos_int8_t GLbyte;
+typedef khronos_uint8_t GLubyte;
+typedef khronos_int16_t GLshort;
+typedef khronos_uint16_t GLushort;
+typedef int GLint;
+typedef unsigned int GLuint;
+typedef khronos_int32_t GLclampx;
+typedef int GLsizei;
+typedef khronos_float_t GLfloat;
+typedef khronos_float_t GLclampf;
+typedef double GLdouble;
+typedef double GLclampd;
+typedef void *GLeglClientBufferEXT;
+typedef void *GLeglImageOES;
+typedef char GLchar;
+typedef char GLcharARB;
+#ifdef __APPLE__
+typedef void *GLhandleARB;
+#else
+typedef unsigned int GLhandleARB;
+#endif
+typedef khronos_uint16_t GLhalf;
+typedef khronos_uint16_t GLhalfARB;
+typedef khronos_int32_t GLfixed;
+typedef khronos_intptr_t GLintptr;
+typedef khronos_intptr_t GLintptrARB;
+typedef khronos_ssize_t GLsizeiptr;
+typedef khronos_ssize_t GLsizeiptrARB;
+typedef khronos_int64_t GLint64;
+typedef khronos_int64_t GLint64EXT;
+typedef khronos_uint64_t GLuint64;
+typedef khronos_uint64_t GLuint64EXT;
+typedef struct __GLsync *GLsync;
+struct _cl_context;
+struct _cl_event;
+typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
+typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
+typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
+typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam);
+typedef unsigned short GLhalfNV;
+typedef GLintptr GLvdpauSurfaceNV;
+typedef void (APIENTRY *GLVULKANPROCNV)(void);
+#define GL_DEPTH_BUFFER_BIT 0x00000100
+#define GL_STENCIL_BUFFER_BIT 0x00000400
+#define GL_COLOR_BUFFER_BIT 0x00004000
+#define GL_FALSE 0
+#define GL_TRUE 1
+#define GL_POINTS 0x0000
+#define GL_LINES 0x0001
+#define GL_LINE_LOOP 0x0002
+#define GL_LINE_STRIP 0x0003
+#define GL_TRIANGLES 0x0004
+#define GL_TRIANGLE_STRIP 0x0005
+#define GL_TRIANGLE_FAN 0x0006
+#define GL_QUADS 0x0007
+#define GL_NEVER 0x0200
+#define GL_LESS 0x0201
+#define GL_EQUAL 0x0202
+#define GL_LEQUAL 0x0203
+#define GL_GREATER 0x0204
+#define GL_NOTEQUAL 0x0205
+#define GL_GEQUAL 0x0206
+#define GL_ALWAYS 0x0207
+#define GL_ZERO 0
+#define GL_ONE 1
+#define GL_SRC_COLOR 0x0300
+#define GL_ONE_MINUS_SRC_COLOR 0x0301
+#define GL_SRC_ALPHA 0x0302
+#define GL_ONE_MINUS_SRC_ALPHA 0x0303
+#define GL_DST_ALPHA 0x0304
+#define GL_ONE_MINUS_DST_ALPHA 0x0305
+#define GL_DST_COLOR 0x0306
+#define GL_ONE_MINUS_DST_COLOR 0x0307
+#define GL_SRC_ALPHA_SATURATE 0x0308
+#define GL_NONE 0
+#define GL_FRONT_LEFT 0x0400
+#define GL_FRONT_RIGHT 0x0401
+#define GL_BACK_LEFT 0x0402
+#define GL_BACK_RIGHT 0x0403
+#define GL_FRONT 0x0404
+#define GL_BACK 0x0405
+#define GL_LEFT 0x0406
+#define GL_RIGHT 0x0407
+#define GL_FRONT_AND_BACK 0x0408
+#define GL_NO_ERROR 0
+#define GL_INVALID_ENUM 0x0500
+#define GL_INVALID_VALUE 0x0501
+#define GL_INVALID_OPERATION 0x0502
+#define GL_OUT_OF_MEMORY 0x0505
+#define GL_CW 0x0900
+#define GL_CCW 0x0901
+#define GL_POINT_SIZE 0x0B11
+#define GL_POINT_SIZE_RANGE 0x0B12
+#define GL_POINT_SIZE_GRANULARITY 0x0B13
+#define GL_LINE_SMOOTH 0x0B20
+#define GL_LINE_WIDTH 0x0B21
+#define GL_LINE_WIDTH_RANGE 0x0B22
+#define GL_LINE_WIDTH_GRANULARITY 0x0B23
+#define GL_POLYGON_MODE 0x0B40
+#define GL_POLYGON_SMOOTH 0x0B41
+#define GL_CULL_FACE 0x0B44
+#define GL_CULL_FACE_MODE 0x0B45
+#define GL_FRONT_FACE 0x0B46
+#define GL_DEPTH_RANGE 0x0B70
+#define GL_DEPTH_TEST 0x0B71
+#define GL_DEPTH_WRITEMASK 0x0B72
+#define GL_DEPTH_CLEAR_VALUE 0x0B73
+#define GL_DEPTH_FUNC 0x0B74
+#define GL_STENCIL_TEST 0x0B90
+#define GL_STENCIL_CLEAR_VALUE 0x0B91
+#define GL_STENCIL_FUNC 0x0B92
+#define GL_STENCIL_VALUE_MASK 0x0B93
+#define GL_STENCIL_FAIL 0x0B94
+#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95
+#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96
+#define GL_STENCIL_REF 0x0B97
+#define GL_STENCIL_WRITEMASK 0x0B98
+#define GL_VIEWPORT 0x0BA2
+#define GL_DITHER 0x0BD0
+#define GL_BLEND_DST 0x0BE0
+#define GL_BLEND_SRC 0x0BE1
+#define GL_BLEND 0x0BE2
+#define GL_LOGIC_OP_MODE 0x0BF0
+#define GL_DRAW_BUFFER 0x0C01
+#define GL_READ_BUFFER 0x0C02
+#define GL_SCISSOR_BOX 0x0C10
+#define GL_SCISSOR_TEST 0x0C11
+#define GL_COLOR_CLEAR_VALUE 0x0C22
+#define GL_COLOR_WRITEMASK 0x0C23
+#define GL_DOUBLEBUFFER 0x0C32
+#define GL_STEREO 0x0C33
+#define GL_LINE_SMOOTH_HINT 0x0C52
+#define GL_POLYGON_SMOOTH_HINT 0x0C53
+#define GL_UNPACK_SWAP_BYTES 0x0CF0
+#define GL_UNPACK_LSB_FIRST 0x0CF1
+#define GL_UNPACK_ROW_LENGTH 0x0CF2
+#define GL_UNPACK_SKIP_ROWS 0x0CF3
+#define GL_UNPACK_SKIP_PIXELS 0x0CF4
+#define GL_UNPACK_ALIGNMENT 0x0CF5
+#define GL_PACK_SWAP_BYTES 0x0D00
+#define GL_PACK_LSB_FIRST 0x0D01
+#define GL_PACK_ROW_LENGTH 0x0D02
+#define GL_PACK_SKIP_ROWS 0x0D03
+#define GL_PACK_SKIP_PIXELS 0x0D04
+#define GL_PACK_ALIGNMENT 0x0D05
+#define GL_MAX_TEXTURE_SIZE 0x0D33
+#define GL_MAX_VIEWPORT_DIMS 0x0D3A
+#define GL_SUBPIXEL_BITS 0x0D50
+#define GL_TEXTURE_1D 0x0DE0
+#define GL_TEXTURE_2D 0x0DE1
+#define GL_TEXTURE_WIDTH 0x1000
+#define GL_TEXTURE_HEIGHT 0x1001
+#define GL_TEXTURE_BORDER_COLOR 0x1004
+#define GL_DONT_CARE 0x1100
+#define GL_FASTEST 0x1101
+#define GL_NICEST 0x1102
+#define GL_BYTE 0x1400
+#define GL_UNSIGNED_BYTE 0x1401
+#define GL_SHORT 0x1402
+#define GL_UNSIGNED_SHORT 0x1403
+#define GL_INT 0x1404
+#define GL_UNSIGNED_INT 0x1405
+#define GL_FLOAT 0x1406
+#define GL_STACK_OVERFLOW 0x0503
+#define GL_STACK_UNDERFLOW 0x0504
+#define GL_CLEAR 0x1500
+#define GL_AND 0x1501
+#define GL_AND_REVERSE 0x1502
+#define GL_COPY 0x1503
+#define GL_AND_INVERTED 0x1504
+#define GL_NOOP 0x1505
+#define GL_XOR 0x1506
+#define GL_OR 0x1507
+#define GL_NOR 0x1508
+#define GL_EQUIV 0x1509
+#define GL_INVERT 0x150A
+#define GL_OR_REVERSE 0x150B
+#define GL_COPY_INVERTED 0x150C
+#define GL_OR_INVERTED 0x150D
+#define GL_NAND 0x150E
+#define GL_SET 0x150F
+#define GL_TEXTURE 0x1702
+#define GL_COLOR 0x1800
+#define GL_DEPTH 0x1801
+#define GL_STENCIL 0x1802
+#define GL_STENCIL_INDEX 0x1901
+#define GL_DEPTH_COMPONENT 0x1902
+#define GL_RED 0x1903
+#define GL_GREEN 0x1904
+#define GL_BLUE 0x1905
+#define GL_ALPHA 0x1906
+#define GL_RGB 0x1907
+#define GL_RGBA 0x1908
+#define GL_POINT 0x1B00
+#define GL_LINE 0x1B01
+#define GL_FILL 0x1B02
+#define GL_KEEP 0x1E00
+#define GL_REPLACE 0x1E01
+#define GL_INCR 0x1E02
+#define GL_DECR 0x1E03
+#define GL_VENDOR 0x1F00
+#define GL_RENDERER 0x1F01
+#define GL_VERSION 0x1F02
+#define GL_EXTENSIONS 0x1F03
+#define GL_NEAREST 0x2600
+#define GL_LINEAR 0x2601
+#define GL_NEAREST_MIPMAP_NEAREST 0x2700
+#define GL_LINEAR_MIPMAP_NEAREST 0x2701
+#define GL_NEAREST_MIPMAP_LINEAR 0x2702
+#define GL_LINEAR_MIPMAP_LINEAR 0x2703
+#define GL_TEXTURE_MAG_FILTER 0x2800
+#define GL_TEXTURE_MIN_FILTER 0x2801
+#define GL_TEXTURE_WRAP_S 0x2802
+#define GL_TEXTURE_WRAP_T 0x2803
+#define GL_REPEAT 0x2901
+#define GL_CURRENT_BIT 0x00000001
+#define GL_POINT_BIT 0x00000002
+#define GL_LINE_BIT 0x00000004
+#define GL_POLYGON_BIT 0x00000008
+#define GL_POLYGON_STIPPLE_BIT 0x00000010
+#define GL_PIXEL_MODE_BIT 0x00000020
+#define GL_LIGHTING_BIT 0x00000040
+#define GL_FOG_BIT 0x00000080
+#define GL_ACCUM_BUFFER_BIT 0x00000200
+#define GL_VIEWPORT_BIT 0x00000800
+#define GL_TRANSFORM_BIT 0x00001000
+#define GL_ENABLE_BIT 0x00002000
+#define GL_HINT_BIT 0x00008000
+#define GL_EVAL_BIT 0x00010000
+#define GL_LIST_BIT 0x00020000
+#define GL_TEXTURE_BIT 0x00040000
+#define GL_SCISSOR_BIT 0x00080000
+#define GL_ALL_ATTRIB_BITS 0xFFFFFFFF
+#define GL_QUAD_STRIP 0x0008
+#define GL_POLYGON 0x0009
+#define GL_ACCUM 0x0100
+#define GL_LOAD 0x0101
+#define GL_RETURN 0x0102
+#define GL_MULT 0x0103
+#define GL_ADD 0x0104
+#define GL_AUX0 0x0409
+#define GL_AUX1 0x040A
+#define GL_AUX2 0x040B
+#define GL_AUX3 0x040C
+#define GL_2D 0x0600
+#define GL_3D 0x0601
+#define GL_3D_COLOR 0x0602
+#define GL_3D_COLOR_TEXTURE 0x0603
+#define GL_4D_COLOR_TEXTURE 0x0604
+#define GL_PASS_THROUGH_TOKEN 0x0700
+#define GL_POINT_TOKEN 0x0701
+#define GL_LINE_TOKEN 0x0702
+#define GL_POLYGON_TOKEN 0x0703
+#define GL_BITMAP_TOKEN 0x0704
+#define GL_DRAW_PIXEL_TOKEN 0x0705
+#define GL_COPY_PIXEL_TOKEN 0x0706
+#define GL_LINE_RESET_TOKEN 0x0707
+#define GL_EXP 0x0800
+#define GL_EXP2 0x0801
+#define GL_COEFF 0x0A00
+#define GL_ORDER 0x0A01
+#define GL_DOMAIN 0x0A02
+#define GL_PIXEL_MAP_I_TO_I 0x0C70
+#define GL_PIXEL_MAP_S_TO_S 0x0C71
+#define GL_PIXEL_MAP_I_TO_R 0x0C72
+#define GL_PIXEL_MAP_I_TO_G 0x0C73
+#define GL_PIXEL_MAP_I_TO_B 0x0C74
+#define GL_PIXEL_MAP_I_TO_A 0x0C75
+#define GL_PIXEL_MAP_R_TO_R 0x0C76
+#define GL_PIXEL_MAP_G_TO_G 0x0C77
+#define GL_PIXEL_MAP_B_TO_B 0x0C78
+#define GL_PIXEL_MAP_A_TO_A 0x0C79
+#define GL_CURRENT_COLOR 0x0B00
+#define GL_CURRENT_INDEX 0x0B01
+#define GL_CURRENT_NORMAL 0x0B02
+#define GL_CURRENT_TEXTURE_COORDS 0x0B03
+#define GL_CURRENT_RASTER_COLOR 0x0B04
+#define GL_CURRENT_RASTER_INDEX 0x0B05
+#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06
+#define GL_CURRENT_RASTER_POSITION 0x0B07
+#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08
+#define GL_CURRENT_RASTER_DISTANCE 0x0B09
+#define GL_POINT_SMOOTH 0x0B10
+#define GL_LINE_STIPPLE 0x0B24
+#define GL_LINE_STIPPLE_PATTERN 0x0B25
+#define GL_LINE_STIPPLE_REPEAT 0x0B26
+#define GL_LIST_MODE 0x0B30
+#define GL_MAX_LIST_NESTING 0x0B31
+#define GL_LIST_BASE 0x0B32
+#define GL_LIST_INDEX 0x0B33
+#define GL_POLYGON_STIPPLE 0x0B42
+#define GL_EDGE_FLAG 0x0B43
+#define GL_LIGHTING 0x0B50
+#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51
+#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52
+#define GL_LIGHT_MODEL_AMBIENT 0x0B53
+#define GL_SHADE_MODEL 0x0B54
+#define GL_COLOR_MATERIAL_FACE 0x0B55
+#define GL_COLOR_MATERIAL_PARAMETER 0x0B56
+#define GL_COLOR_MATERIAL 0x0B57
+#define GL_FOG 0x0B60
+#define GL_FOG_INDEX 0x0B61
+#define GL_FOG_DENSITY 0x0B62
+#define GL_FOG_START 0x0B63
+#define GL_FOG_END 0x0B64
+#define GL_FOG_MODE 0x0B65
+#define GL_FOG_COLOR 0x0B66
+#define GL_ACCUM_CLEAR_VALUE 0x0B80
+#define GL_MATRIX_MODE 0x0BA0
+#define GL_NORMALIZE 0x0BA1
+#define GL_MODELVIEW_STACK_DEPTH 0x0BA3
+#define GL_PROJECTION_STACK_DEPTH 0x0BA4
+#define GL_TEXTURE_STACK_DEPTH 0x0BA5
+#define GL_MODELVIEW_MATRIX 0x0BA6
+#define GL_PROJECTION_MATRIX 0x0BA7
+#define GL_TEXTURE_MATRIX 0x0BA8
+#define GL_ATTRIB_STACK_DEPTH 0x0BB0
+#define GL_ALPHA_TEST 0x0BC0
+#define GL_ALPHA_TEST_FUNC 0x0BC1
+#define GL_ALPHA_TEST_REF 0x0BC2
+#define GL_LOGIC_OP 0x0BF1
+#define GL_AUX_BUFFERS 0x0C00
+#define GL_INDEX_CLEAR_VALUE 0x0C20
+#define GL_INDEX_WRITEMASK 0x0C21
+#define GL_INDEX_MODE 0x0C30
+#define GL_RGBA_MODE 0x0C31
+#define GL_RENDER_MODE 0x0C40
+#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50
+#define GL_POINT_SMOOTH_HINT 0x0C51
+#define GL_FOG_HINT 0x0C54
+#define GL_TEXTURE_GEN_S 0x0C60
+#define GL_TEXTURE_GEN_T 0x0C61
+#define GL_TEXTURE_GEN_R 0x0C62
+#define GL_TEXTURE_GEN_Q 0x0C63
+#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0
+#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1
+#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2
+#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3
+#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4
+#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5
+#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6
+#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7
+#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8
+#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9
+#define GL_MAP_COLOR 0x0D10
+#define GL_MAP_STENCIL 0x0D11
+#define GL_INDEX_SHIFT 0x0D12
+#define GL_INDEX_OFFSET 0x0D13
+#define GL_RED_SCALE 0x0D14
+#define GL_RED_BIAS 0x0D15
+#define GL_ZOOM_X 0x0D16
+#define GL_ZOOM_Y 0x0D17
+#define GL_GREEN_SCALE 0x0D18
+#define GL_GREEN_BIAS 0x0D19
+#define GL_BLUE_SCALE 0x0D1A
+#define GL_BLUE_BIAS 0x0D1B
+#define GL_ALPHA_SCALE 0x0D1C
+#define GL_ALPHA_BIAS 0x0D1D
+#define GL_DEPTH_SCALE 0x0D1E
+#define GL_DEPTH_BIAS 0x0D1F
+#define GL_MAX_EVAL_ORDER 0x0D30
+#define GL_MAX_LIGHTS 0x0D31
+#define GL_MAX_CLIP_PLANES 0x0D32
+#define GL_MAX_PIXEL_MAP_TABLE 0x0D34
+#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35
+#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36
+#define GL_MAX_NAME_STACK_DEPTH 0x0D37
+#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38
+#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39
+#define GL_INDEX_BITS 0x0D51
+#define GL_RED_BITS 0x0D52
+#define GL_GREEN_BITS 0x0D53
+#define GL_BLUE_BITS 0x0D54
+#define GL_ALPHA_BITS 0x0D55
+#define GL_DEPTH_BITS 0x0D56
+#define GL_STENCIL_BITS 0x0D57
+#define GL_ACCUM_RED_BITS 0x0D58
+#define GL_ACCUM_GREEN_BITS 0x0D59
+#define GL_ACCUM_BLUE_BITS 0x0D5A
+#define GL_ACCUM_ALPHA_BITS 0x0D5B
+#define GL_NAME_STACK_DEPTH 0x0D70
+#define GL_AUTO_NORMAL 0x0D80
+#define GL_MAP1_COLOR_4 0x0D90
+#define GL_MAP1_INDEX 0x0D91
+#define GL_MAP1_NORMAL 0x0D92
+#define GL_MAP1_TEXTURE_COORD_1 0x0D93
+#define GL_MAP1_TEXTURE_COORD_2 0x0D94
+#define GL_MAP1_TEXTURE_COORD_3 0x0D95
+#define GL_MAP1_TEXTURE_COORD_4 0x0D96
+#define GL_MAP1_VERTEX_3 0x0D97
+#define GL_MAP1_VERTEX_4 0x0D98
+#define GL_MAP2_COLOR_4 0x0DB0
+#define GL_MAP2_INDEX 0x0DB1
+#define GL_MAP2_NORMAL 0x0DB2
+#define GL_MAP2_TEXTURE_COORD_1 0x0DB3
+#define GL_MAP2_TEXTURE_COORD_2 0x0DB4
+#define GL_MAP2_TEXTURE_COORD_3 0x0DB5
+#define GL_MAP2_TEXTURE_COORD_4 0x0DB6
+#define GL_MAP2_VERTEX_3 0x0DB7
+#define GL_MAP2_VERTEX_4 0x0DB8
+#define GL_MAP1_GRID_DOMAIN 0x0DD0
+#define GL_MAP1_GRID_SEGMENTS 0x0DD1
+#define GL_MAP2_GRID_DOMAIN 0x0DD2
+#define GL_MAP2_GRID_SEGMENTS 0x0DD3
+#define GL_TEXTURE_COMPONENTS 0x1003
+#define GL_TEXTURE_BORDER 0x1005
+#define GL_AMBIENT 0x1200
+#define GL_DIFFUSE 0x1201
+#define GL_SPECULAR 0x1202
+#define GL_POSITION 0x1203
+#define GL_SPOT_DIRECTION 0x1204
+#define GL_SPOT_EXPONENT 0x1205
+#define GL_SPOT_CUTOFF 0x1206
+#define GL_CONSTANT_ATTENUATION 0x1207
+#define GL_LINEAR_ATTENUATION 0x1208
+#define GL_QUADRATIC_ATTENUATION 0x1209
+#define GL_COMPILE 0x1300
+#define GL_COMPILE_AND_EXECUTE 0x1301
+#define GL_2_BYTES 0x1407
+#define GL_3_BYTES 0x1408
+#define GL_4_BYTES 0x1409
+#define GL_EMISSION 0x1600
+#define GL_SHININESS 0x1601
+#define GL_AMBIENT_AND_DIFFUSE 0x1602
+#define GL_COLOR_INDEXES 0x1603
+#define GL_MODELVIEW 0x1700
+#define GL_PROJECTION 0x1701
+#define GL_COLOR_INDEX 0x1900
+#define GL_LUMINANCE 0x1909
+#define GL_LUMINANCE_ALPHA 0x190A
+#define GL_BITMAP 0x1A00
+#define GL_RENDER 0x1C00
+#define GL_FEEDBACK 0x1C01
+#define GL_SELECT 0x1C02
+#define GL_FLAT 0x1D00
+#define GL_SMOOTH 0x1D01
+#define GL_S 0x2000
+#define GL_T 0x2001
+#define GL_R 0x2002
+#define GL_Q 0x2003
+#define GL_MODULATE 0x2100
+#define GL_DECAL 0x2101
+#define GL_TEXTURE_ENV_MODE 0x2200
+#define GL_TEXTURE_ENV_COLOR 0x2201
+#define GL_TEXTURE_ENV 0x2300
+#define GL_EYE_LINEAR 0x2400
+#define GL_OBJECT_LINEAR 0x2401
+#define GL_SPHERE_MAP 0x2402
+#define GL_TEXTURE_GEN_MODE 0x2500
+#define GL_OBJECT_PLANE 0x2501
+#define GL_EYE_PLANE 0x2502
+#define GL_CLAMP 0x2900
+#define GL_CLIP_PLANE0 0x3000
+#define GL_CLIP_PLANE1 0x3001
+#define GL_CLIP_PLANE2 0x3002
+#define GL_CLIP_PLANE3 0x3003
+#define GL_CLIP_PLANE4 0x3004
+#define GL_CLIP_PLANE5 0x3005
+#define GL_LIGHT0 0x4000
+#define GL_LIGHT1 0x4001
+#define GL_LIGHT2 0x4002
+#define GL_LIGHT3 0x4003
+#define GL_LIGHT4 0x4004
+#define GL_LIGHT5 0x4005
+#define GL_LIGHT6 0x4006
+#define GL_LIGHT7 0x4007
+#define GL_COLOR_LOGIC_OP 0x0BF2
+#define GL_POLYGON_OFFSET_UNITS 0x2A00
+#define GL_POLYGON_OFFSET_POINT 0x2A01
+#define GL_POLYGON_OFFSET_LINE 0x2A02
+#define GL_POLYGON_OFFSET_FILL 0x8037
+#define GL_POLYGON_OFFSET_FACTOR 0x8038
+#define GL_TEXTURE_BINDING_1D 0x8068
+#define GL_TEXTURE_BINDING_2D 0x8069
+#define GL_TEXTURE_INTERNAL_FORMAT 0x1003
+#define GL_TEXTURE_RED_SIZE 0x805C
+#define GL_TEXTURE_GREEN_SIZE 0x805D
+#define GL_TEXTURE_BLUE_SIZE 0x805E
+#define GL_TEXTURE_ALPHA_SIZE 0x805F
+#define GL_DOUBLE 0x140A
+#define GL_PROXY_TEXTURE_1D 0x8063
+#define GL_PROXY_TEXTURE_2D 0x8064
+#define GL_R3_G3_B2 0x2A10
+#define GL_RGB4 0x804F
+#define GL_RGB5 0x8050
+#define GL_RGB8 0x8051
+#define GL_RGB10 0x8052
+#define GL_RGB12 0x8053
+#define GL_RGB16 0x8054
+#define GL_RGBA2 0x8055
+#define GL_RGBA4 0x8056
+#define GL_RGB5_A1 0x8057
+#define GL_RGBA8 0x8058
+#define GL_RGB10_A2 0x8059
+#define GL_RGBA12 0x805A
+#define GL_RGBA16 0x805B
+#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001
+#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002
+#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF
+#define GL_VERTEX_ARRAY_POINTER 0x808E
+#define GL_NORMAL_ARRAY_POINTER 0x808F
+#define GL_COLOR_ARRAY_POINTER 0x8090
+#define GL_INDEX_ARRAY_POINTER 0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093
+#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0
+#define GL_SELECTION_BUFFER_POINTER 0x0DF3
+#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1
+#define GL_INDEX_LOGIC_OP 0x0BF1
+#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B
+#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1
+#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2
+#define GL_SELECTION_BUFFER_SIZE 0x0DF4
+#define GL_VERTEX_ARRAY 0x8074
+#define GL_NORMAL_ARRAY 0x8075
+#define GL_COLOR_ARRAY 0x8076
+#define GL_INDEX_ARRAY 0x8077
+#define GL_TEXTURE_COORD_ARRAY 0x8078
+#define GL_EDGE_FLAG_ARRAY 0x8079
+#define GL_VERTEX_ARRAY_SIZE 0x807A
+#define GL_VERTEX_ARRAY_TYPE 0x807B
+#define GL_VERTEX_ARRAY_STRIDE 0x807C
+#define GL_NORMAL_ARRAY_TYPE 0x807E
+#define GL_NORMAL_ARRAY_STRIDE 0x807F
+#define GL_COLOR_ARRAY_SIZE 0x8081
+#define GL_COLOR_ARRAY_TYPE 0x8082
+#define GL_COLOR_ARRAY_STRIDE 0x8083
+#define GL_INDEX_ARRAY_TYPE 0x8085
+#define GL_INDEX_ARRAY_STRIDE 0x8086
+#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A
+#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C
+#define GL_TEXTURE_LUMINANCE_SIZE 0x8060
+#define GL_TEXTURE_INTENSITY_SIZE 0x8061
+#define GL_TEXTURE_PRIORITY 0x8066
+#define GL_TEXTURE_RESIDENT 0x8067
+#define GL_ALPHA4 0x803B
+#define GL_ALPHA8 0x803C
+#define GL_ALPHA12 0x803D
+#define GL_ALPHA16 0x803E
+#define GL_LUMINANCE4 0x803F
+#define GL_LUMINANCE8 0x8040
+#define GL_LUMINANCE12 0x8041
+#define GL_LUMINANCE16 0x8042
+#define GL_LUMINANCE4_ALPHA4 0x8043
+#define GL_LUMINANCE6_ALPHA2 0x8044
+#define GL_LUMINANCE8_ALPHA8 0x8045
+#define GL_LUMINANCE12_ALPHA4 0x8046
+#define GL_LUMINANCE12_ALPHA12 0x8047
+#define GL_LUMINANCE16_ALPHA16 0x8048
+#define GL_INTENSITY 0x8049
+#define GL_INTENSITY4 0x804A
+#define GL_INTENSITY8 0x804B
+#define GL_INTENSITY12 0x804C
+#define GL_INTENSITY16 0x804D
+#define GL_V2F 0x2A20
+#define GL_V3F 0x2A21
+#define GL_C4UB_V2F 0x2A22
+#define GL_C4UB_V3F 0x2A23
+#define GL_C3F_V3F 0x2A24
+#define GL_N3F_V3F 0x2A25
+#define GL_C4F_N3F_V3F 0x2A26
+#define GL_T2F_V3F 0x2A27
+#define GL_T4F_V4F 0x2A28
+#define GL_T2F_C4UB_V3F 0x2A29
+#define GL_T2F_C3F_V3F 0x2A2A
+#define GL_T2F_N3F_V3F 0x2A2B
+#define GL_T2F_C4F_N3F_V3F 0x2A2C
+#define GL_T4F_C4F_N3F_V4F 0x2A2D
+#define GL_UNSIGNED_BYTE_3_3_2 0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
+#define GL_UNSIGNED_INT_8_8_8_8 0x8035
+#define GL_UNSIGNED_INT_10_10_10_2 0x8036
+#define GL_TEXTURE_BINDING_3D 0x806A
+#define GL_PACK_SKIP_IMAGES 0x806B
+#define GL_PACK_IMAGE_HEIGHT 0x806C
+#define GL_UNPACK_SKIP_IMAGES 0x806D
+#define GL_UNPACK_IMAGE_HEIGHT 0x806E
+#define GL_TEXTURE_3D 0x806F
+#define GL_PROXY_TEXTURE_3D 0x8070
+#define GL_TEXTURE_DEPTH 0x8071
+#define GL_TEXTURE_WRAP_R 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE 0x8073
+#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362
+#define GL_UNSIGNED_SHORT_5_6_5 0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366
+#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367
+#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
+#define GL_BGR 0x80E0
+#define GL_BGRA 0x80E1
+#define GL_MAX_ELEMENTS_VERTICES 0x80E8
+#define GL_MAX_ELEMENTS_INDICES 0x80E9
+#define GL_CLAMP_TO_EDGE 0x812F
+#define GL_TEXTURE_MIN_LOD 0x813A
+#define GL_TEXTURE_MAX_LOD 0x813B
+#define GL_TEXTURE_BASE_LEVEL 0x813C
+#define GL_TEXTURE_MAX_LEVEL 0x813D
+#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12
+#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13
+#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22
+#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23
+#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
+#define GL_RESCALE_NORMAL 0x803A
+#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8
+#define GL_SINGLE_COLOR 0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR 0x81FA
+#define GL_ALIASED_POINT_SIZE_RANGE 0x846D
+#define GL_TEXTURE0 0x84C0
+#define GL_TEXTURE1 0x84C1
+#define GL_TEXTURE2 0x84C2
+#define GL_TEXTURE3 0x84C3
+#define GL_TEXTURE4 0x84C4
+#define GL_TEXTURE5 0x84C5
+#define GL_TEXTURE6 0x84C6
+#define GL_TEXTURE7 0x84C7
+#define GL_TEXTURE8 0x84C8
+#define GL_TEXTURE9 0x84C9
+#define GL_TEXTURE10 0x84CA
+#define GL_TEXTURE11 0x84CB
+#define GL_TEXTURE12 0x84CC
+#define GL_TEXTURE13 0x84CD
+#define GL_TEXTURE14 0x84CE
+#define GL_TEXTURE15 0x84CF
+#define GL_TEXTURE16 0x84D0
+#define GL_TEXTURE17 0x84D1
+#define GL_TEXTURE18 0x84D2
+#define GL_TEXTURE19 0x84D3
+#define GL_TEXTURE20 0x84D4
+#define GL_TEXTURE21 0x84D5
+#define GL_TEXTURE22 0x84D6
+#define GL_TEXTURE23 0x84D7
+#define GL_TEXTURE24 0x84D8
+#define GL_TEXTURE25 0x84D9
+#define GL_TEXTURE26 0x84DA
+#define GL_TEXTURE27 0x84DB
+#define GL_TEXTURE28 0x84DC
+#define GL_TEXTURE29 0x84DD
+#define GL_TEXTURE30 0x84DE
+#define GL_TEXTURE31 0x84DF
+#define GL_ACTIVE_TEXTURE 0x84E0
+#define GL_MULTISAMPLE 0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE 0x809F
+#define GL_SAMPLE_COVERAGE 0x80A0
+#define GL_SAMPLE_BUFFERS 0x80A8
+#define GL_SAMPLES 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
+#define GL_TEXTURE_CUBE_MAP 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
+#define GL_COMPRESSED_RGB 0x84ED
+#define GL_COMPRESSED_RGBA 0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT 0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0
+#define GL_TEXTURE_COMPRESSED 0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
+#define GL_CLAMP_TO_BORDER 0x812D
+#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1
+#define GL_MAX_TEXTURE_UNITS 0x84E2
+#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6
+#define GL_MULTISAMPLE_BIT 0x20000000
+#define GL_NORMAL_MAP 0x8511
+#define GL_REFLECTION_MAP 0x8512
+#define GL_COMPRESSED_ALPHA 0x84E9
+#define GL_COMPRESSED_LUMINANCE 0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB
+#define GL_COMPRESSED_INTENSITY 0x84EC
+#define GL_COMBINE 0x8570
+#define GL_COMBINE_RGB 0x8571
+#define GL_COMBINE_ALPHA 0x8572
+#define GL_SOURCE0_RGB 0x8580
+#define GL_SOURCE1_RGB 0x8581
+#define GL_SOURCE2_RGB 0x8582
+#define GL_SOURCE0_ALPHA 0x8588
+#define GL_SOURCE1_ALPHA 0x8589
+#define GL_SOURCE2_ALPHA 0x858A
+#define GL_OPERAND0_RGB 0x8590
+#define GL_OPERAND1_RGB 0x8591
+#define GL_OPERAND2_RGB 0x8592
+#define GL_OPERAND0_ALPHA 0x8598
+#define GL_OPERAND1_ALPHA 0x8599
+#define GL_OPERAND2_ALPHA 0x859A
+#define GL_RGB_SCALE 0x8573
+#define GL_ADD_SIGNED 0x8574
+#define GL_INTERPOLATE 0x8575
+#define GL_SUBTRACT 0x84E7
+#define GL_CONSTANT 0x8576
+#define GL_PRIMARY_COLOR 0x8577
+#define GL_PREVIOUS 0x8578
+#define GL_DOT3_RGB 0x86AE
+#define GL_DOT3_RGBA 0x86AF
+#define GL_BLEND_DST_RGB 0x80C8
+#define GL_BLEND_SRC_RGB 0x80C9
+#define GL_BLEND_DST_ALPHA 0x80CA
+#define GL_BLEND_SRC_ALPHA 0x80CB
+#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128
+#define GL_DEPTH_COMPONENT16 0x81A5
+#define GL_DEPTH_COMPONENT24 0x81A6
+#define GL_DEPTH_COMPONENT32 0x81A7
+#define GL_MIRRORED_REPEAT 0x8370
+#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD
+#define GL_TEXTURE_LOD_BIAS 0x8501
+#define GL_INCR_WRAP 0x8507
+#define GL_DECR_WRAP 0x8508
+#define GL_TEXTURE_DEPTH_SIZE 0x884A
+#define GL_TEXTURE_COMPARE_MODE 0x884C
+#define GL_TEXTURE_COMPARE_FUNC 0x884D
+#define GL_POINT_SIZE_MIN 0x8126
+#define GL_POINT_SIZE_MAX 0x8127
+#define GL_POINT_DISTANCE_ATTENUATION 0x8129
+#define GL_GENERATE_MIPMAP 0x8191
+#define GL_GENERATE_MIPMAP_HINT 0x8192
+#define GL_FOG_COORDINATE_SOURCE 0x8450
+#define GL_FOG_COORDINATE 0x8451
+#define GL_FRAGMENT_DEPTH 0x8452
+#define GL_CURRENT_FOG_COORDINATE 0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456
+#define GL_FOG_COORDINATE_ARRAY 0x8457
+#define GL_COLOR_SUM 0x8458
+#define GL_CURRENT_SECONDARY_COLOR 0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A
+#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C
+#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D
+#define GL_SECONDARY_COLOR_ARRAY 0x845E
+#define GL_TEXTURE_FILTER_CONTROL 0x8500
+#define GL_DEPTH_TEXTURE_MODE 0x884B
+#define GL_COMPARE_R_TO_TEXTURE 0x884E
+#define GL_BLEND_COLOR 0x8005
+#define GL_BLEND_EQUATION 0x8009
+#define GL_CONSTANT_COLOR 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
+#define GL_CONSTANT_ALPHA 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+#define GL_FUNC_ADD 0x8006
+#define GL_FUNC_REVERSE_SUBTRACT 0x800B
+#define GL_FUNC_SUBTRACT 0x800A
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
+#define GL_BUFFER_SIZE 0x8764
+#define GL_BUFFER_USAGE 0x8765
+#define GL_QUERY_COUNTER_BITS 0x8864
+#define GL_CURRENT_QUERY 0x8865
+#define GL_QUERY_RESULT 0x8866
+#define GL_QUERY_RESULT_AVAILABLE 0x8867
+#define GL_ARRAY_BUFFER 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER 0x8893
+#define GL_ARRAY_BUFFER_BINDING 0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
+#define GL_READ_ONLY 0x88B8
+#define GL_WRITE_ONLY 0x88B9
+#define GL_READ_WRITE 0x88BA
+#define GL_BUFFER_ACCESS 0x88BB
+#define GL_BUFFER_MAPPED 0x88BC
+#define GL_BUFFER_MAP_POINTER 0x88BD
+#define GL_STREAM_DRAW 0x88E0
+#define GL_STREAM_READ 0x88E1
+#define GL_STREAM_COPY 0x88E2
+#define GL_STATIC_DRAW 0x88E4
+#define GL_STATIC_READ 0x88E5
+#define GL_STATIC_COPY 0x88E6
+#define GL_DYNAMIC_DRAW 0x88E8
+#define GL_DYNAMIC_READ 0x88E9
+#define GL_DYNAMIC_COPY 0x88EA
+#define GL_SAMPLES_PASSED 0x8914
+#define GL_SRC1_ALPHA 0x8589
+#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E
+#define GL_FOG_COORD_SRC 0x8450
+#define GL_FOG_COORD 0x8451
+#define GL_CURRENT_FOG_COORD 0x8453
+#define GL_FOG_COORD_ARRAY_TYPE 0x8454
+#define GL_FOG_COORD_ARRAY_STRIDE 0x8455
+#define GL_FOG_COORD_ARRAY_POINTER 0x8456
+#define GL_FOG_COORD_ARRAY 0x8457
+#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D
+#define GL_SRC0_RGB 0x8580
+#define GL_SRC1_RGB 0x8581
+#define GL_SRC2_RGB 0x8582
+#define GL_SRC0_ALPHA 0x8588
+#define GL_SRC2_ALPHA 0x858A
+#define GL_BLEND_EQUATION_RGB 0x8009
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
+#define GL_CURRENT_VERTEX_ATTRIB 0x8626
+#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
+#define GL_STENCIL_BACK_FUNC 0x8800
+#define GL_STENCIL_BACK_FAIL 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803
+#define GL_MAX_DRAW_BUFFERS 0x8824
+#define GL_DRAW_BUFFER0 0x8825
+#define GL_DRAW_BUFFER1 0x8826
+#define GL_DRAW_BUFFER2 0x8827
+#define GL_DRAW_BUFFER3 0x8828
+#define GL_DRAW_BUFFER4 0x8829
+#define GL_DRAW_BUFFER5 0x882A
+#define GL_DRAW_BUFFER6 0x882B
+#define GL_DRAW_BUFFER7 0x882C
+#define GL_DRAW_BUFFER8 0x882D
+#define GL_DRAW_BUFFER9 0x882E
+#define GL_DRAW_BUFFER10 0x882F
+#define GL_DRAW_BUFFER11 0x8830
+#define GL_DRAW_BUFFER12 0x8831
+#define GL_DRAW_BUFFER13 0x8832
+#define GL_DRAW_BUFFER14 0x8833
+#define GL_DRAW_BUFFER15 0x8834
+#define GL_BLEND_EQUATION_ALPHA 0x883D
+#define GL_MAX_VERTEX_ATTRIBS 0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
+#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872
+#define GL_FRAGMENT_SHADER 0x8B30
+#define GL_VERTEX_SHADER 0x8B31
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A
+#define GL_MAX_VARYING_FLOATS 0x8B4B
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
+#define GL_SHADER_TYPE 0x8B4F
+#define GL_FLOAT_VEC2 0x8B50
+#define GL_FLOAT_VEC3 0x8B51
+#define GL_FLOAT_VEC4 0x8B52
+#define GL_INT_VEC2 0x8B53
+#define GL_INT_VEC3 0x8B54
+#define GL_INT_VEC4 0x8B55
+#define GL_BOOL 0x8B56
+#define GL_BOOL_VEC2 0x8B57
+#define GL_BOOL_VEC3 0x8B58
+#define GL_BOOL_VEC4 0x8B59
+#define GL_FLOAT_MAT2 0x8B5A
+#define GL_FLOAT_MAT3 0x8B5B
+#define GL_FLOAT_MAT4 0x8B5C
+#define GL_SAMPLER_1D 0x8B5D
+#define GL_SAMPLER_2D 0x8B5E
+#define GL_SAMPLER_3D 0x8B5F
+#define GL_SAMPLER_CUBE 0x8B60
+#define GL_SAMPLER_1D_SHADOW 0x8B61
+#define GL_SAMPLER_2D_SHADOW 0x8B62
+#define GL_DELETE_STATUS 0x8B80
+#define GL_COMPILE_STATUS 0x8B81
+#define GL_LINK_STATUS 0x8B82
+#define GL_VALIDATE_STATUS 0x8B83
+#define GL_INFO_LOG_LENGTH 0x8B84
+#define GL_ATTACHED_SHADERS 0x8B85
+#define GL_ACTIVE_UNIFORMS 0x8B86
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87
+#define GL_SHADER_SOURCE_LENGTH 0x8B88
+#define GL_ACTIVE_ATTRIBUTES 0x8B89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B
+#define GL_SHADING_LANGUAGE_VERSION 0x8B8C
+#define GL_CURRENT_PROGRAM 0x8B8D
+#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0
+#define GL_LOWER_LEFT 0x8CA1
+#define GL_UPPER_LEFT 0x8CA2
+#define GL_STENCIL_BACK_REF 0x8CA3
+#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4
+#define GL_STENCIL_BACK_WRITEMASK 0x8CA5
+#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643
+#define GL_POINT_SPRITE 0x8861
+#define GL_COORD_REPLACE 0x8862
+#define GL_MAX_TEXTURE_COORDS 0x8871
+#define GL_PIXEL_PACK_BUFFER 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF
+#define GL_FLOAT_MAT2x3 0x8B65
+#define GL_FLOAT_MAT2x4 0x8B66
+#define GL_FLOAT_MAT3x2 0x8B67
+#define GL_FLOAT_MAT3x4 0x8B68
+#define GL_FLOAT_MAT4x2 0x8B69
+#define GL_FLOAT_MAT4x3 0x8B6A
+#define GL_SRGB 0x8C40
+#define GL_SRGB8 0x8C41
+#define GL_SRGB_ALPHA 0x8C42
+#define GL_SRGB8_ALPHA8 0x8C43
+#define GL_COMPRESSED_SRGB 0x8C48
+#define GL_COMPRESSED_SRGB_ALPHA 0x8C49
+#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F
+#define GL_SLUMINANCE_ALPHA 0x8C44
+#define GL_SLUMINANCE8_ALPHA8 0x8C45
+#define GL_SLUMINANCE 0x8C46
+#define GL_SLUMINANCE8 0x8C47
+#define GL_COMPRESSED_SLUMINANCE 0x8C4A
+#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B
+#define GL_COMPARE_REF_TO_TEXTURE 0x884E
+#define GL_CLIP_DISTANCE0 0x3000
+#define GL_CLIP_DISTANCE1 0x3001
+#define GL_CLIP_DISTANCE2 0x3002
+#define GL_CLIP_DISTANCE3 0x3003
+#define GL_CLIP_DISTANCE4 0x3004
+#define GL_CLIP_DISTANCE5 0x3005
+#define GL_CLIP_DISTANCE6 0x3006
+#define GL_CLIP_DISTANCE7 0x3007
+#define GL_MAX_CLIP_DISTANCES 0x0D32
+#define GL_MAJOR_VERSION 0x821B
+#define GL_MINOR_VERSION 0x821C
+#define GL_NUM_EXTENSIONS 0x821D
+#define GL_CONTEXT_FLAGS 0x821E
+#define GL_COMPRESSED_RED 0x8225
+#define GL_COMPRESSED_RG 0x8226
+#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001
+#define GL_RGBA32F 0x8814
+#define GL_RGB32F 0x8815
+#define GL_RGBA16F 0x881A
+#define GL_RGB16F 0x881B
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD
+#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF
+#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905
+#define GL_CLAMP_READ_COLOR 0x891C
+#define GL_FIXED_ONLY 0x891D
+#define GL_MAX_VARYING_COMPONENTS 0x8B4B
+#define GL_TEXTURE_1D_ARRAY 0x8C18
+#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19
+#define GL_TEXTURE_2D_ARRAY 0x8C1A
+#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B
+#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C
+#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D
+#define GL_R11F_G11F_B10F 0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B
+#define GL_RGB9_E5 0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E
+#define GL_TEXTURE_SHARED_SIZE 0x8C3F
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85
+#define GL_PRIMITIVES_GENERATED 0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88
+#define GL_RASTERIZER_DISCARD 0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B
+#define GL_INTERLEAVED_ATTRIBS 0x8C8C
+#define GL_SEPARATE_ATTRIBS 0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F
+#define GL_RGBA32UI 0x8D70
+#define GL_RGB32UI 0x8D71
+#define GL_RGBA16UI 0x8D76
+#define GL_RGB16UI 0x8D77
+#define GL_RGBA8UI 0x8D7C
+#define GL_RGB8UI 0x8D7D
+#define GL_RGBA32I 0x8D82
+#define GL_RGB32I 0x8D83
+#define GL_RGBA16I 0x8D88
+#define GL_RGB16I 0x8D89
+#define GL_RGBA8I 0x8D8E
+#define GL_RGB8I 0x8D8F
+#define GL_RED_INTEGER 0x8D94
+#define GL_GREEN_INTEGER 0x8D95
+#define GL_BLUE_INTEGER 0x8D96
+#define GL_RGB_INTEGER 0x8D98
+#define GL_RGBA_INTEGER 0x8D99
+#define GL_BGR_INTEGER 0x8D9A
+#define GL_BGRA_INTEGER 0x8D9B
+#define GL_SAMPLER_1D_ARRAY 0x8DC0
+#define GL_SAMPLER_2D_ARRAY 0x8DC1
+#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3
+#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW 0x8DC5
+#define GL_UNSIGNED_INT_VEC2 0x8DC6
+#define GL_UNSIGNED_INT_VEC3 0x8DC7
+#define GL_UNSIGNED_INT_VEC4 0x8DC8
+#define GL_INT_SAMPLER_1D 0x8DC9
+#define GL_INT_SAMPLER_2D 0x8DCA
+#define GL_INT_SAMPLER_3D 0x8DCB
+#define GL_INT_SAMPLER_CUBE 0x8DCC
+#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE
+#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF
+#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7
+#define GL_QUERY_WAIT 0x8E13
+#define GL_QUERY_NO_WAIT 0x8E14
+#define GL_QUERY_BY_REGION_WAIT 0x8E15
+#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16
+#define GL_BUFFER_ACCESS_FLAGS 0x911F
+#define GL_BUFFER_MAP_LENGTH 0x9120
+#define GL_BUFFER_MAP_OFFSET 0x9121
+#define GL_DEPTH_COMPONENT32F 0x8CAC
+#define GL_DEPTH32F_STENCIL8 0x8CAD
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD
+#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212
+#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213
+#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214
+#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215
+#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216
+#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217
+#define GL_FRAMEBUFFER_DEFAULT 0x8218
+#define GL_FRAMEBUFFER_UNDEFINED 0x8219
+#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A
+#define GL_MAX_RENDERBUFFER_SIZE 0x84E8
+#define GL_DEPTH_STENCIL 0x84F9
+#define GL_UNSIGNED_INT_24_8 0x84FA
+#define GL_DEPTH24_STENCIL8 0x88F0
+#define GL_TEXTURE_STENCIL_SIZE 0x88F1
+#define GL_TEXTURE_RED_TYPE 0x8C10
+#define GL_TEXTURE_GREEN_TYPE 0x8C11
+#define GL_TEXTURE_BLUE_TYPE 0x8C12
+#define GL_TEXTURE_ALPHA_TYPE 0x8C13
+#define GL_TEXTURE_DEPTH_TYPE 0x8C16
+#define GL_UNSIGNED_NORMALIZED 0x8C17
+#define GL_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_RENDERBUFFER_BINDING 0x8CA7
+#define GL_READ_FRAMEBUFFER 0x8CA8
+#define GL_DRAW_FRAMEBUFFER 0x8CA9
+#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA
+#define GL_RENDERBUFFER_SAMPLES 0x8CAB
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4
+#define GL_FRAMEBUFFER_COMPLETE 0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC
+#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD
+#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF
+#define GL_COLOR_ATTACHMENT0 0x8CE0
+#define GL_COLOR_ATTACHMENT1 0x8CE1
+#define GL_COLOR_ATTACHMENT2 0x8CE2
+#define GL_COLOR_ATTACHMENT3 0x8CE3
+#define GL_COLOR_ATTACHMENT4 0x8CE4
+#define GL_COLOR_ATTACHMENT5 0x8CE5
+#define GL_COLOR_ATTACHMENT6 0x8CE6
+#define GL_COLOR_ATTACHMENT7 0x8CE7
+#define GL_COLOR_ATTACHMENT8 0x8CE8
+#define GL_COLOR_ATTACHMENT9 0x8CE9
+#define GL_COLOR_ATTACHMENT10 0x8CEA
+#define GL_COLOR_ATTACHMENT11 0x8CEB
+#define GL_COLOR_ATTACHMENT12 0x8CEC
+#define GL_COLOR_ATTACHMENT13 0x8CED
+#define GL_COLOR_ATTACHMENT14 0x8CEE
+#define GL_COLOR_ATTACHMENT15 0x8CEF
+#define GL_COLOR_ATTACHMENT16 0x8CF0
+#define GL_COLOR_ATTACHMENT17 0x8CF1
+#define GL_COLOR_ATTACHMENT18 0x8CF2
+#define GL_COLOR_ATTACHMENT19 0x8CF3
+#define GL_COLOR_ATTACHMENT20 0x8CF4
+#define GL_COLOR_ATTACHMENT21 0x8CF5
+#define GL_COLOR_ATTACHMENT22 0x8CF6
+#define GL_COLOR_ATTACHMENT23 0x8CF7
+#define GL_COLOR_ATTACHMENT24 0x8CF8
+#define GL_COLOR_ATTACHMENT25 0x8CF9
+#define GL_COLOR_ATTACHMENT26 0x8CFA
+#define GL_COLOR_ATTACHMENT27 0x8CFB
+#define GL_COLOR_ATTACHMENT28 0x8CFC
+#define GL_COLOR_ATTACHMENT29 0x8CFD
+#define GL_COLOR_ATTACHMENT30 0x8CFE
+#define GL_COLOR_ATTACHMENT31 0x8CFF
+#define GL_DEPTH_ATTACHMENT 0x8D00
+#define GL_STENCIL_ATTACHMENT 0x8D20
+#define GL_FRAMEBUFFER 0x8D40
+#define GL_RENDERBUFFER 0x8D41
+#define GL_RENDERBUFFER_WIDTH 0x8D42
+#define GL_RENDERBUFFER_HEIGHT 0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44
+#define GL_STENCIL_INDEX1 0x8D46
+#define GL_STENCIL_INDEX4 0x8D47
+#define GL_STENCIL_INDEX8 0x8D48
+#define GL_STENCIL_INDEX16 0x8D49
+#define GL_RENDERBUFFER_RED_SIZE 0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
+#define GL_MAX_SAMPLES 0x8D57
+#define GL_INDEX 0x8222
+#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14
+#define GL_TEXTURE_INTENSITY_TYPE 0x8C15
+#define GL_FRAMEBUFFER_SRGB 0x8DB9
+#define GL_HALF_FLOAT 0x140B
+#define GL_MAP_READ_BIT 0x0001
+#define GL_MAP_WRITE_BIT 0x0002
+#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
+#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
+#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
+#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
+#define GL_COMPRESSED_RED_RGTC1 0x8DBB
+#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC
+#define GL_COMPRESSED_RG_RGTC2 0x8DBD
+#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE
+#define GL_RG 0x8227
+#define GL_RG_INTEGER 0x8228
+#define GL_R8 0x8229
+#define GL_R16 0x822A
+#define GL_RG8 0x822B
+#define GL_RG16 0x822C
+#define GL_R16F 0x822D
+#define GL_R32F 0x822E
+#define GL_RG16F 0x822F
+#define GL_RG32F 0x8230
+#define GL_R8I 0x8231
+#define GL_R8UI 0x8232
+#define GL_R16I 0x8233
+#define GL_R16UI 0x8234
+#define GL_R32I 0x8235
+#define GL_R32UI 0x8236
+#define GL_RG8I 0x8237
+#define GL_RG8UI 0x8238
+#define GL_RG16I 0x8239
+#define GL_RG16UI 0x823A
+#define GL_RG32I 0x823B
+#define GL_RG32UI 0x823C
+#define GL_VERTEX_ARRAY_BINDING 0x85B5
+#define GL_CLAMP_VERTEX_COLOR 0x891A
+#define GL_CLAMP_FRAGMENT_COLOR 0x891B
+#define GL_ALPHA_INTEGER 0x8D97
+#define GL_SAMPLER_2D_RECT 0x8B63
+#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64
+#define GL_SAMPLER_BUFFER 0x8DC2
+#define GL_INT_SAMPLER_2D_RECT 0x8DCD
+#define GL_INT_SAMPLER_BUFFER 0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8
+#define GL_TEXTURE_BUFFER 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D
+#define GL_TEXTURE_RECTANGLE 0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8
+#define GL_R8_SNORM 0x8F94
+#define GL_RG8_SNORM 0x8F95
+#define GL_RGB8_SNORM 0x8F96
+#define GL_RGBA8_SNORM 0x8F97
+#define GL_R16_SNORM 0x8F98
+#define GL_RG16_SNORM 0x8F99
+#define GL_RGB16_SNORM 0x8F9A
+#define GL_RGBA16_SNORM 0x8F9B
+#define GL_SIGNED_NORMALIZED 0x8F9C
+#define GL_PRIMITIVE_RESTART 0x8F9D
+#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E
+#define GL_COPY_READ_BUFFER 0x8F36
+#define GL_COPY_WRITE_BUFFER 0x8F37
+#define GL_UNIFORM_BUFFER 0x8A11
+#define GL_UNIFORM_BUFFER_BINDING 0x8A28
+#define GL_UNIFORM_BUFFER_START 0x8A29
+#define GL_UNIFORM_BUFFER_SIZE 0x8A2A
+#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B
+#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C
+#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D
+#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E
+#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F
+#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30
+#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31
+#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32
+#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33
+#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34
+#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35
+#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36
+#define GL_UNIFORM_TYPE 0x8A37
+#define GL_UNIFORM_SIZE 0x8A38
+#define GL_UNIFORM_NAME_LENGTH 0x8A39
+#define GL_UNIFORM_BLOCK_INDEX 0x8A3A
+#define GL_UNIFORM_OFFSET 0x8A3B
+#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C
+#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D
+#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E
+#define GL_UNIFORM_BLOCK_BINDING 0x8A3F
+#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40
+#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46
+#define GL_INVALID_INDEX 0xFFFFFFFF
+#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001
+#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002
+#define GL_LINES_ADJACENCY 0x000A
+#define GL_LINE_STRIP_ADJACENCY 0x000B
+#define GL_TRIANGLES_ADJACENCY 0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D
+#define GL_PROGRAM_POINT_SIZE 0x8642
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8
+#define GL_GEOMETRY_SHADER 0x8DD9
+#define GL_GEOMETRY_VERTICES_OUT 0x8916
+#define GL_GEOMETRY_INPUT_TYPE 0x8917
+#define GL_GEOMETRY_OUTPUT_TYPE 0x8918
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1
+#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122
+#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123
+#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124
+#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125
+#define GL_CONTEXT_PROFILE_MASK 0x9126
+#define GL_DEPTH_CLAMP 0x864F
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C
+#define GL_FIRST_VERTEX_CONVENTION 0x8E4D
+#define GL_LAST_VERTEX_CONVENTION 0x8E4E
+#define GL_PROVOKING_VERTEX 0x8E4F
+#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F
+#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111
+#define GL_OBJECT_TYPE 0x9112
+#define GL_SYNC_CONDITION 0x9113
+#define GL_SYNC_STATUS 0x9114
+#define GL_SYNC_FLAGS 0x9115
+#define GL_SYNC_FENCE 0x9116
+#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117
+#define GL_UNSIGNALED 0x9118
+#define GL_SIGNALED 0x9119
+#define GL_ALREADY_SIGNALED 0x911A
+#define GL_TIMEOUT_EXPIRED 0x911B
+#define GL_CONDITION_SATISFIED 0x911C
+#define GL_WAIT_FAILED 0x911D
+#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF
+#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
+#define GL_SAMPLE_POSITION 0x8E50
+#define GL_SAMPLE_MASK 0x8E51
+#define GL_SAMPLE_MASK_VALUE 0x8E52
+#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59
+#define GL_TEXTURE_2D_MULTISAMPLE 0x9100
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101
+#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105
+#define GL_TEXTURE_SAMPLES 0x9106
+#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107
+#define GL_SAMPLER_2D_MULTISAMPLE 0x9108
+#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A
+#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B
+#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D
+#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E
+#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F
+#define GL_MAX_INTEGER_SAMPLES 0x9110
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE
+#define GL_SRC1_COLOR 0x88F9
+#define GL_ONE_MINUS_SRC1_COLOR 0x88FA
+#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB
+#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC
+#define GL_ANY_SAMPLES_PASSED 0x8C2F
+#define GL_SAMPLER_BINDING 0x8919
+#define GL_RGB10_A2UI 0x906F
+#define GL_TEXTURE_SWIZZLE_R 0x8E42
+#define GL_TEXTURE_SWIZZLE_G 0x8E43
+#define GL_TEXTURE_SWIZZLE_B 0x8E44
+#define GL_TEXTURE_SWIZZLE_A 0x8E45
+#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46
+#define GL_TIME_ELAPSED 0x88BF
+#define GL_TIMESTAMP 0x8E28
+#define GL_INT_2_10_10_10_REV 0x8D9F
+#define GL_SAMPLE_SHADING 0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F
+#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B
+#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F
+#define GL_DRAW_INDIRECT_BUFFER 0x8F3F
+#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43
+#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C
+#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D
+#define GL_MAX_VERTEX_STREAMS 0x8E71
+#define GL_DOUBLE_VEC2 0x8FFC
+#define GL_DOUBLE_VEC3 0x8FFD
+#define GL_DOUBLE_VEC4 0x8FFE
+#define GL_DOUBLE_MAT2 0x8F46
+#define GL_DOUBLE_MAT3 0x8F47
+#define GL_DOUBLE_MAT4 0x8F48
+#define GL_DOUBLE_MAT2x3 0x8F49
+#define GL_DOUBLE_MAT2x4 0x8F4A
+#define GL_DOUBLE_MAT3x2 0x8F4B
+#define GL_DOUBLE_MAT3x4 0x8F4C
+#define GL_DOUBLE_MAT4x2 0x8F4D
+#define GL_DOUBLE_MAT4x3 0x8F4E
+#define GL_ACTIVE_SUBROUTINES 0x8DE5
+#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47
+#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49
+#define GL_MAX_SUBROUTINES 0x8DE7
+#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8
+#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A
+#define GL_COMPATIBLE_SUBROUTINES 0x8E4B
+#define GL_PATCHES 0x000E
+#define GL_PATCH_VERTICES 0x8E72
+#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73
+#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74
+#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75
+#define GL_TESS_GEN_MODE 0x8E76
+#define GL_TESS_GEN_SPACING 0x8E77
+#define GL_TESS_GEN_VERTEX_ORDER 0x8E78
+#define GL_TESS_GEN_POINT_MODE 0x8E79
+#define GL_ISOLINES 0x8E7A
+#define GL_FRACTIONAL_ODD 0x8E7B
+#define GL_FRACTIONAL_EVEN 0x8E7C
+#define GL_MAX_PATCH_VERTICES 0x8E7D
+#define GL_MAX_TESS_GEN_LEVEL 0x8E7E
+#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F
+#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80
+#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81
+#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82
+#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83
+#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84
+#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85
+#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86
+#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89
+#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A
+#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C
+#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D
+#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E
+#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1
+#define GL_TESS_EVALUATION_SHADER 0x8E87
+#define GL_TESS_CONTROL_SHADER 0x8E88
+#define GL_TRANSFORM_FEEDBACK 0x8E22
+#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23
+#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24
+#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25
+#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70
+#define GL_FIXED 0x140C
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B
+#define GL_LOW_FLOAT 0x8DF0
+#define GL_MEDIUM_FLOAT 0x8DF1
+#define GL_HIGH_FLOAT 0x8DF2
+#define GL_LOW_INT 0x8DF3
+#define GL_MEDIUM_INT 0x8DF4
+#define GL_HIGH_INT 0x8DF5
+#define GL_SHADER_COMPILER 0x8DFA
+#define GL_SHADER_BINARY_FORMATS 0x8DF8
+#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9
+#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB
+#define GL_MAX_VARYING_VECTORS 0x8DFC
+#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD
+#define GL_RGB565 0x8D62
+#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
+#define GL_PROGRAM_BINARY_LENGTH 0x8741
+#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE
+#define GL_PROGRAM_BINARY_FORMATS 0x87FF
+#define GL_VERTEX_SHADER_BIT 0x00000001
+#define GL_FRAGMENT_SHADER_BIT 0x00000002
+#define GL_GEOMETRY_SHADER_BIT 0x00000004
+#define GL_TESS_CONTROL_SHADER_BIT 0x00000008
+#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010
+#define GL_ALL_SHADER_BITS 0xFFFFFFFF
+#define GL_PROGRAM_SEPARABLE 0x8258
+#define GL_ACTIVE_PROGRAM 0x8259
+#define GL_PROGRAM_PIPELINE_BINDING 0x825A
+#define GL_MAX_VIEWPORTS 0x825B
+#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C
+#define GL_VIEWPORT_BOUNDS_RANGE 0x825D
+#define GL_LAYER_PROVOKING_VERTEX 0x825E
+#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F
+#define GL_UNDEFINED_VERTEX 0x8260
+#ifndef GL_VERSION_1_0
+#define GL_VERSION_1_0 1
+GLAPI int GLAD_GL_VERSION_1_0;
+typedef void (APIENTRYP PFNGLCULLFACEPROC)(GLenum mode);
+GLAPI PFNGLCULLFACEPROC glad_glCullFace;
+#define glCullFace glad_glCullFace
+typedef void (APIENTRYP PFNGLFRONTFACEPROC)(GLenum mode);
+GLAPI PFNGLFRONTFACEPROC glad_glFrontFace;
+#define glFrontFace glad_glFrontFace
+typedef void (APIENTRYP PFNGLHINTPROC)(GLenum target, GLenum mode);
+GLAPI PFNGLHINTPROC glad_glHint;
+#define glHint glad_glHint
+typedef void (APIENTRYP PFNGLLINEWIDTHPROC)(GLfloat width);
+GLAPI PFNGLLINEWIDTHPROC glad_glLineWidth;
+#define glLineWidth glad_glLineWidth
+typedef void (APIENTRYP PFNGLPOINTSIZEPROC)(GLfloat size);
+GLAPI PFNGLPOINTSIZEPROC glad_glPointSize;
+#define glPointSize glad_glPointSize
+typedef void (APIENTRYP PFNGLPOLYGONMODEPROC)(GLenum face, GLenum mode);
+GLAPI PFNGLPOLYGONMODEPROC glad_glPolygonMode;
+#define glPolygonMode glad_glPolygonMode
+typedef void (APIENTRYP PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI PFNGLSCISSORPROC glad_glScissor;
+#define glScissor glad_glScissor
+typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param);
+GLAPI PFNGLTEXPARAMETERFPROC glad_glTexParameterf;
+#define glTexParameterf glad_glTexParameterf
+typedef void (APIENTRYP PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat *params);
+GLAPI PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv;
+#define glTexParameterfv glad_glTexParameterfv
+typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param);
+GLAPI PFNGLTEXPARAMETERIPROC glad_glTexParameteri;
+#define glTexParameteri glad_glTexParameteri
+typedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint *params);
+GLAPI PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv;
+#define glTexParameteriv glad_glTexParameteriv
+typedef void (APIENTRYP PFNGLTEXIMAGE1DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI PFNGLTEXIMAGE1DPROC glad_glTexImage1D;
+#define glTexImage1D glad_glTexImage1D
+typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI PFNGLTEXIMAGE2DPROC glad_glTexImage2D;
+#define glTexImage2D glad_glTexImage2D
+typedef void (APIENTRYP PFNGLDRAWBUFFERPROC)(GLenum buf);
+GLAPI PFNGLDRAWBUFFERPROC glad_glDrawBuffer;
+#define glDrawBuffer glad_glDrawBuffer
+typedef void (APIENTRYP PFNGLCLEARPROC)(GLbitfield mask);
+GLAPI PFNGLCLEARPROC glad_glClear;
+#define glClear glad_glClear
+typedef void (APIENTRYP PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GLAPI PFNGLCLEARCOLORPROC glad_glClearColor;
+#define glClearColor glad_glClearColor
+typedef void (APIENTRYP PFNGLCLEARSTENCILPROC)(GLint s);
+GLAPI PFNGLCLEARSTENCILPROC glad_glClearStencil;
+#define glClearStencil glad_glClearStencil
+typedef void (APIENTRYP PFNGLCLEARDEPTHPROC)(GLdouble depth);
+GLAPI PFNGLCLEARDEPTHPROC glad_glClearDepth;
+#define glClearDepth glad_glClearDepth
+typedef void (APIENTRYP PFNGLSTENCILMASKPROC)(GLuint mask);
+GLAPI PFNGLSTENCILMASKPROC glad_glStencilMask;
+#define glStencilMask glad_glStencilMask
+typedef void (APIENTRYP PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+GLAPI PFNGLCOLORMASKPROC glad_glColorMask;
+#define glColorMask glad_glColorMask
+typedef void (APIENTRYP PFNGLDEPTHMASKPROC)(GLboolean flag);
+GLAPI PFNGLDEPTHMASKPROC glad_glDepthMask;
+#define glDepthMask glad_glDepthMask
+typedef void (APIENTRYP PFNGLDISABLEPROC)(GLenum cap);
+GLAPI PFNGLDISABLEPROC glad_glDisable;
+#define glDisable glad_glDisable
+typedef void (APIENTRYP PFNGLENABLEPROC)(GLenum cap);
+GLAPI PFNGLENABLEPROC glad_glEnable;
+#define glEnable glad_glEnable
+typedef void (APIENTRYP PFNGLFINISHPROC)(void);
+GLAPI PFNGLFINISHPROC glad_glFinish;
+#define glFinish glad_glFinish
+typedef void (APIENTRYP PFNGLFLUSHPROC)(void);
+GLAPI PFNGLFLUSHPROC glad_glFlush;
+#define glFlush glad_glFlush
+typedef void (APIENTRYP PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor);
+GLAPI PFNGLBLENDFUNCPROC glad_glBlendFunc;
+#define glBlendFunc glad_glBlendFunc
+typedef void (APIENTRYP PFNGLLOGICOPPROC)(GLenum opcode);
+GLAPI PFNGLLOGICOPPROC glad_glLogicOp;
+#define glLogicOp glad_glLogicOp
+typedef void (APIENTRYP PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask);
+GLAPI PFNGLSTENCILFUNCPROC glad_glStencilFunc;
+#define glStencilFunc glad_glStencilFunc
+typedef void (APIENTRYP PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass);
+GLAPI PFNGLSTENCILOPPROC glad_glStencilOp;
+#define glStencilOp glad_glStencilOp
+typedef void (APIENTRYP PFNGLDEPTHFUNCPROC)(GLenum func);
+GLAPI PFNGLDEPTHFUNCPROC glad_glDepthFunc;
+#define glDepthFunc glad_glDepthFunc
+typedef void (APIENTRYP PFNGLPIXELSTOREFPROC)(GLenum pname, GLfloat param);
+GLAPI PFNGLPIXELSTOREFPROC glad_glPixelStoref;
+#define glPixelStoref glad_glPixelStoref
+typedef void (APIENTRYP PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param);
+GLAPI PFNGLPIXELSTOREIPROC glad_glPixelStorei;
+#define glPixelStorei glad_glPixelStorei
+typedef void (APIENTRYP PFNGLREADBUFFERPROC)(GLenum src);
+GLAPI PFNGLREADBUFFERPROC glad_glReadBuffer;
+#define glReadBuffer glad_glReadBuffer
+typedef void (APIENTRYP PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+GLAPI PFNGLREADPIXELSPROC glad_glReadPixels;
+#define glReadPixels glad_glReadPixels
+typedef void (APIENTRYP PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean *data);
+GLAPI PFNGLGETBOOLEANVPROC glad_glGetBooleanv;
+#define glGetBooleanv glad_glGetBooleanv
+typedef void (APIENTRYP PFNGLGETDOUBLEVPROC)(GLenum pname, GLdouble *data);
+GLAPI PFNGLGETDOUBLEVPROC glad_glGetDoublev;
+#define glGetDoublev glad_glGetDoublev
+typedef GLenum (APIENTRYP PFNGLGETERRORPROC)(void);
+GLAPI PFNGLGETERRORPROC glad_glGetError;
+#define glGetError glad_glGetError
+typedef void (APIENTRYP PFNGLGETFLOATVPROC)(GLenum pname, GLfloat *data);
+GLAPI PFNGLGETFLOATVPROC glad_glGetFloatv;
+#define glGetFloatv glad_glGetFloatv
+typedef void (APIENTRYP PFNGLGETINTEGERVPROC)(GLenum pname, GLint *data);
+GLAPI PFNGLGETINTEGERVPROC glad_glGetIntegerv;
+#define glGetIntegerv glad_glGetIntegerv
+typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGPROC)(GLenum name);
+GLAPI PFNGLGETSTRINGPROC glad_glGetString;
+#define glGetString glad_glGetString
+typedef void (APIENTRYP PFNGLGETTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
+GLAPI PFNGLGETTEXIMAGEPROC glad_glGetTexImage;
+#define glGetTexImage glad_glGetTexImage
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat *params);
+GLAPI PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv;
+#define glGetTexParameterfv glad_glGetTexParameterfv
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params);
+GLAPI PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv;
+#define glGetTexParameteriv glad_glGetTexParameteriv
+typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC)(GLenum target, GLint level, GLenum pname, GLfloat *params);
+GLAPI PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv;
+#define glGetTexLevelParameterfv glad_glGetTexLevelParameterfv
+typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC)(GLenum target, GLint level, GLenum pname, GLint *params);
+GLAPI PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv;
+#define glGetTexLevelParameteriv glad_glGetTexLevelParameteriv
+typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC)(GLenum cap);
+GLAPI PFNGLISENABLEDPROC glad_glIsEnabled;
+#define glIsEnabled glad_glIsEnabled
+typedef void (APIENTRYP PFNGLDEPTHRANGEPROC)(GLdouble n, GLdouble f);
+GLAPI PFNGLDEPTHRANGEPROC glad_glDepthRange;
+#define glDepthRange glad_glDepthRange
+typedef void (APIENTRYP PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI PFNGLVIEWPORTPROC glad_glViewport;
+#define glViewport glad_glViewport
+typedef void (APIENTRYP PFNGLNEWLISTPROC)(GLuint list, GLenum mode);
+GLAPI PFNGLNEWLISTPROC glad_glNewList;
+#define glNewList glad_glNewList
+typedef void (APIENTRYP PFNGLENDLISTPROC)(void);
+GLAPI PFNGLENDLISTPROC glad_glEndList;
+#define glEndList glad_glEndList
+typedef void (APIENTRYP PFNGLCALLLISTPROC)(GLuint list);
+GLAPI PFNGLCALLLISTPROC glad_glCallList;
+#define glCallList glad_glCallList
+typedef void (APIENTRYP PFNGLCALLLISTSPROC)(GLsizei n, GLenum type, const void *lists);
+GLAPI PFNGLCALLLISTSPROC glad_glCallLists;
+#define glCallLists glad_glCallLists
+typedef void (APIENTRYP PFNGLDELETELISTSPROC)(GLuint list, GLsizei range);
+GLAPI PFNGLDELETELISTSPROC glad_glDeleteLists;
+#define glDeleteLists glad_glDeleteLists
+typedef GLuint (APIENTRYP PFNGLGENLISTSPROC)(GLsizei range);
+GLAPI PFNGLGENLISTSPROC glad_glGenLists;
+#define glGenLists glad_glGenLists
+typedef void (APIENTRYP PFNGLLISTBASEPROC)(GLuint base);
+GLAPI PFNGLLISTBASEPROC glad_glListBase;
+#define glListBase glad_glListBase
+typedef void (APIENTRYP PFNGLBEGINPROC)(GLenum mode);
+GLAPI PFNGLBEGINPROC glad_glBegin;
+#define glBegin glad_glBegin
+typedef void (APIENTRYP PFNGLBITMAPPROC)(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap);
+GLAPI PFNGLBITMAPPROC glad_glBitmap;
+#define glBitmap glad_glBitmap
+typedef void (APIENTRYP PFNGLCOLOR3BPROC)(GLbyte red, GLbyte green, GLbyte blue);
+GLAPI PFNGLCOLOR3BPROC glad_glColor3b;
+#define glColor3b glad_glColor3b
+typedef void (APIENTRYP PFNGLCOLOR3BVPROC)(const GLbyte *v);
+GLAPI PFNGLCOLOR3BVPROC glad_glColor3bv;
+#define glColor3bv glad_glColor3bv
+typedef void (APIENTRYP PFNGLCOLOR3DPROC)(GLdouble red, GLdouble green, GLdouble blue);
+GLAPI PFNGLCOLOR3DPROC glad_glColor3d;
+#define glColor3d glad_glColor3d
+typedef void (APIENTRYP PFNGLCOLOR3DVPROC)(const GLdouble *v);
+GLAPI PFNGLCOLOR3DVPROC glad_glColor3dv;
+#define glColor3dv glad_glColor3dv
+typedef void (APIENTRYP PFNGLCOLOR3FPROC)(GLfloat red, GLfloat green, GLfloat blue);
+GLAPI PFNGLCOLOR3FPROC glad_glColor3f;
+#define glColor3f glad_glColor3f
+typedef void (APIENTRYP PFNGLCOLOR3FVPROC)(const GLfloat *v);
+GLAPI PFNGLCOLOR3FVPROC glad_glColor3fv;
+#define glColor3fv glad_glColor3fv
+typedef void (APIENTRYP PFNGLCOLOR3IPROC)(GLint red, GLint green, GLint blue);
+GLAPI PFNGLCOLOR3IPROC glad_glColor3i;
+#define glColor3i glad_glColor3i
+typedef void (APIENTRYP PFNGLCOLOR3IVPROC)(const GLint *v);
+GLAPI PFNGLCOLOR3IVPROC glad_glColor3iv;
+#define glColor3iv glad_glColor3iv
+typedef void (APIENTRYP PFNGLCOLOR3SPROC)(GLshort red, GLshort green, GLshort blue);
+GLAPI PFNGLCOLOR3SPROC glad_glColor3s;
+#define glColor3s glad_glColor3s
+typedef void (APIENTRYP PFNGLCOLOR3SVPROC)(const GLshort *v);
+GLAPI PFNGLCOLOR3SVPROC glad_glColor3sv;
+#define glColor3sv glad_glColor3sv
+typedef void (APIENTRYP PFNGLCOLOR3UBPROC)(GLubyte red, GLubyte green, GLubyte blue);
+GLAPI PFNGLCOLOR3UBPROC glad_glColor3ub;
+#define glColor3ub glad_glColor3ub
+typedef void (APIENTRYP PFNGLCOLOR3UBVPROC)(const GLubyte *v);
+GLAPI PFNGLCOLOR3UBVPROC glad_glColor3ubv;
+#define glColor3ubv glad_glColor3ubv
+typedef void (APIENTRYP PFNGLCOLOR3UIPROC)(GLuint red, GLuint green, GLuint blue);
+GLAPI PFNGLCOLOR3UIPROC glad_glColor3ui;
+#define glColor3ui glad_glColor3ui
+typedef void (APIENTRYP PFNGLCOLOR3UIVPROC)(const GLuint *v);
+GLAPI PFNGLCOLOR3UIVPROC glad_glColor3uiv;
+#define glColor3uiv glad_glColor3uiv
+typedef void (APIENTRYP PFNGLCOLOR3USPROC)(GLushort red, GLushort green, GLushort blue);
+GLAPI PFNGLCOLOR3USPROC glad_glColor3us;
+#define glColor3us glad_glColor3us
+typedef void (APIENTRYP PFNGLCOLOR3USVPROC)(const GLushort *v);
+GLAPI PFNGLCOLOR3USVPROC glad_glColor3usv;
+#define glColor3usv glad_glColor3usv
+typedef void (APIENTRYP PFNGLCOLOR4BPROC)(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha);
+GLAPI PFNGLCOLOR4BPROC glad_glColor4b;
+#define glColor4b glad_glColor4b
+typedef void (APIENTRYP PFNGLCOLOR4BVPROC)(const GLbyte *v);
+GLAPI PFNGLCOLOR4BVPROC glad_glColor4bv;
+#define glColor4bv glad_glColor4bv
+typedef void (APIENTRYP PFNGLCOLOR4DPROC)(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha);
+GLAPI PFNGLCOLOR4DPROC glad_glColor4d;
+#define glColor4d glad_glColor4d
+typedef void (APIENTRYP PFNGLCOLOR4DVPROC)(const GLdouble *v);
+GLAPI PFNGLCOLOR4DVPROC glad_glColor4dv;
+#define glColor4dv glad_glColor4dv
+typedef void (APIENTRYP PFNGLCOLOR4FPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GLAPI PFNGLCOLOR4FPROC glad_glColor4f;
+#define glColor4f glad_glColor4f
+typedef void (APIENTRYP PFNGLCOLOR4FVPROC)(const GLfloat *v);
+GLAPI PFNGLCOLOR4FVPROC glad_glColor4fv;
+#define glColor4fv glad_glColor4fv
+typedef void (APIENTRYP PFNGLCOLOR4IPROC)(GLint red, GLint green, GLint blue, GLint alpha);
+GLAPI PFNGLCOLOR4IPROC glad_glColor4i;
+#define glColor4i glad_glColor4i
+typedef void (APIENTRYP PFNGLCOLOR4IVPROC)(const GLint *v);
+GLAPI PFNGLCOLOR4IVPROC glad_glColor4iv;
+#define glColor4iv glad_glColor4iv
+typedef void (APIENTRYP PFNGLCOLOR4SPROC)(GLshort red, GLshort green, GLshort blue, GLshort alpha);
+GLAPI PFNGLCOLOR4SPROC glad_glColor4s;
+#define glColor4s glad_glColor4s
+typedef void (APIENTRYP PFNGLCOLOR4SVPROC)(const GLshort *v);
+GLAPI PFNGLCOLOR4SVPROC glad_glColor4sv;
+#define glColor4sv glad_glColor4sv
+typedef void (APIENTRYP PFNGLCOLOR4UBPROC)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
+GLAPI PFNGLCOLOR4UBPROC glad_glColor4ub;
+#define glColor4ub glad_glColor4ub
+typedef void (APIENTRYP PFNGLCOLOR4UBVPROC)(const GLubyte *v);
+GLAPI PFNGLCOLOR4UBVPROC glad_glColor4ubv;
+#define glColor4ubv glad_glColor4ubv
+typedef void (APIENTRYP PFNGLCOLOR4UIPROC)(GLuint red, GLuint green, GLuint blue, GLuint alpha);
+GLAPI PFNGLCOLOR4UIPROC glad_glColor4ui;
+#define glColor4ui glad_glColor4ui
+typedef void (APIENTRYP PFNGLCOLOR4UIVPROC)(const GLuint *v);
+GLAPI PFNGLCOLOR4UIVPROC glad_glColor4uiv;
+#define glColor4uiv glad_glColor4uiv
+typedef void (APIENTRYP PFNGLCOLOR4USPROC)(GLushort red, GLushort green, GLushort blue, GLushort alpha);
+GLAPI PFNGLCOLOR4USPROC glad_glColor4us;
+#define glColor4us glad_glColor4us
+typedef void (APIENTRYP PFNGLCOLOR4USVPROC)(const GLushort *v);
+GLAPI PFNGLCOLOR4USVPROC glad_glColor4usv;
+#define glColor4usv glad_glColor4usv
+typedef void (APIENTRYP PFNGLEDGEFLAGPROC)(GLboolean flag);
+GLAPI PFNGLEDGEFLAGPROC glad_glEdgeFlag;
+#define glEdgeFlag glad_glEdgeFlag
+typedef void (APIENTRYP PFNGLEDGEFLAGVPROC)(const GLboolean *flag);
+GLAPI PFNGLEDGEFLAGVPROC glad_glEdgeFlagv;
+#define glEdgeFlagv glad_glEdgeFlagv
+typedef void (APIENTRYP PFNGLENDPROC)(void);
+GLAPI PFNGLENDPROC glad_glEnd;
+#define glEnd glad_glEnd
+typedef void (APIENTRYP PFNGLINDEXDPROC)(GLdouble c);
+GLAPI PFNGLINDEXDPROC glad_glIndexd;
+#define glIndexd glad_glIndexd
+typedef void (APIENTRYP PFNGLINDEXDVPROC)(const GLdouble *c);
+GLAPI PFNGLINDEXDVPROC glad_glIndexdv;
+#define glIndexdv glad_glIndexdv
+typedef void (APIENTRYP PFNGLINDEXFPROC)(GLfloat c);
+GLAPI PFNGLINDEXFPROC glad_glIndexf;
+#define glIndexf glad_glIndexf
+typedef void (APIENTRYP PFNGLINDEXFVPROC)(const GLfloat *c);
+GLAPI PFNGLINDEXFVPROC glad_glIndexfv;
+#define glIndexfv glad_glIndexfv
+typedef void (APIENTRYP PFNGLINDEXIPROC)(GLint c);
+GLAPI PFNGLINDEXIPROC glad_glIndexi;
+#define glIndexi glad_glIndexi
+typedef void (APIENTRYP PFNGLINDEXIVPROC)(const GLint *c);
+GLAPI PFNGLINDEXIVPROC glad_glIndexiv;
+#define glIndexiv glad_glIndexiv
+typedef void (APIENTRYP PFNGLINDEXSPROC)(GLshort c);
+GLAPI PFNGLINDEXSPROC glad_glIndexs;
+#define glIndexs glad_glIndexs
+typedef void (APIENTRYP PFNGLINDEXSVPROC)(const GLshort *c);
+GLAPI PFNGLINDEXSVPROC glad_glIndexsv;
+#define glIndexsv glad_glIndexsv
+typedef void (APIENTRYP PFNGLNORMAL3BPROC)(GLbyte nx, GLbyte ny, GLbyte nz);
+GLAPI PFNGLNORMAL3BPROC glad_glNormal3b;
+#define glNormal3b glad_glNormal3b
+typedef void (APIENTRYP PFNGLNORMAL3BVPROC)(const GLbyte *v);
+GLAPI PFNGLNORMAL3BVPROC glad_glNormal3bv;
+#define glNormal3bv glad_glNormal3bv
+typedef void (APIENTRYP PFNGLNORMAL3DPROC)(GLdouble nx, GLdouble ny, GLdouble nz);
+GLAPI PFNGLNORMAL3DPROC glad_glNormal3d;
+#define glNormal3d glad_glNormal3d
+typedef void (APIENTRYP PFNGLNORMAL3DVPROC)(const GLdouble *v);
+GLAPI PFNGLNORMAL3DVPROC glad_glNormal3dv;
+#define glNormal3dv glad_glNormal3dv
+typedef void (APIENTRYP PFNGLNORMAL3FPROC)(GLfloat nx, GLfloat ny, GLfloat nz);
+GLAPI PFNGLNORMAL3FPROC glad_glNormal3f;
+#define glNormal3f glad_glNormal3f
+typedef void (APIENTRYP PFNGLNORMAL3FVPROC)(const GLfloat *v);
+GLAPI PFNGLNORMAL3FVPROC glad_glNormal3fv;
+#define glNormal3fv glad_glNormal3fv
+typedef void (APIENTRYP PFNGLNORMAL3IPROC)(GLint nx, GLint ny, GLint nz);
+GLAPI PFNGLNORMAL3IPROC glad_glNormal3i;
+#define glNormal3i glad_glNormal3i
+typedef void (APIENTRYP PFNGLNORMAL3IVPROC)(const GLint *v);
+GLAPI PFNGLNORMAL3IVPROC glad_glNormal3iv;
+#define glNormal3iv glad_glNormal3iv
+typedef void (APIENTRYP PFNGLNORMAL3SPROC)(GLshort nx, GLshort ny, GLshort nz);
+GLAPI PFNGLNORMAL3SPROC glad_glNormal3s;
+#define glNormal3s glad_glNormal3s
+typedef void (APIENTRYP PFNGLNORMAL3SVPROC)(const GLshort *v);
+GLAPI PFNGLNORMAL3SVPROC glad_glNormal3sv;
+#define glNormal3sv glad_glNormal3sv
+typedef void (APIENTRYP PFNGLRASTERPOS2DPROC)(GLdouble x, GLdouble y);
+GLAPI PFNGLRASTERPOS2DPROC glad_glRasterPos2d;
+#define glRasterPos2d glad_glRasterPos2d
+typedef void (APIENTRYP PFNGLRASTERPOS2DVPROC)(const GLdouble *v);
+GLAPI PFNGLRASTERPOS2DVPROC glad_glRasterPos2dv;
+#define glRasterPos2dv glad_glRasterPos2dv
+typedef void (APIENTRYP PFNGLRASTERPOS2FPROC)(GLfloat x, GLfloat y);
+GLAPI PFNGLRASTERPOS2FPROC glad_glRasterPos2f;
+#define glRasterPos2f glad_glRasterPos2f
+typedef void (APIENTRYP PFNGLRASTERPOS2FVPROC)(const GLfloat *v);
+GLAPI PFNGLRASTERPOS2FVPROC glad_glRasterPos2fv;
+#define glRasterPos2fv glad_glRasterPos2fv
+typedef void (APIENTRYP PFNGLRASTERPOS2IPROC)(GLint x, GLint y);
+GLAPI PFNGLRASTERPOS2IPROC glad_glRasterPos2i;
+#define glRasterPos2i glad_glRasterPos2i
+typedef void (APIENTRYP PFNGLRASTERPOS2IVPROC)(const GLint *v);
+GLAPI PFNGLRASTERPOS2IVPROC glad_glRasterPos2iv;
+#define glRasterPos2iv glad_glRasterPos2iv
+typedef void (APIENTRYP PFNGLRASTERPOS2SPROC)(GLshort x, GLshort y);
+GLAPI PFNGLRASTERPOS2SPROC glad_glRasterPos2s;
+#define glRasterPos2s glad_glRasterPos2s
+typedef void (APIENTRYP PFNGLRASTERPOS2SVPROC)(const GLshort *v);
+GLAPI PFNGLRASTERPOS2SVPROC glad_glRasterPos2sv;
+#define glRasterPos2sv glad_glRasterPos2sv
+typedef void (APIENTRYP PFNGLRASTERPOS3DPROC)(GLdouble x, GLdouble y, GLdouble z);
+GLAPI PFNGLRASTERPOS3DPROC glad_glRasterPos3d;
+#define glRasterPos3d glad_glRasterPos3d
+typedef void (APIENTRYP PFNGLRASTERPOS3DVPROC)(const GLdouble *v);
+GLAPI PFNGLRASTERPOS3DVPROC glad_glRasterPos3dv;
+#define glRasterPos3dv glad_glRasterPos3dv
+typedef void (APIENTRYP PFNGLRASTERPOS3FPROC)(GLfloat x, GLfloat y, GLfloat z);
+GLAPI PFNGLRASTERPOS3FPROC glad_glRasterPos3f;
+#define glRasterPos3f glad_glRasterPos3f
+typedef void (APIENTRYP PFNGLRASTERPOS3FVPROC)(const GLfloat *v);
+GLAPI PFNGLRASTERPOS3FVPROC glad_glRasterPos3fv;
+#define glRasterPos3fv glad_glRasterPos3fv
+typedef void (APIENTRYP PFNGLRASTERPOS3IPROC)(GLint x, GLint y, GLint z);
+GLAPI PFNGLRASTERPOS3IPROC glad_glRasterPos3i;
+#define glRasterPos3i glad_glRasterPos3i
+typedef void (APIENTRYP PFNGLRASTERPOS3IVPROC)(const GLint *v);
+GLAPI PFNGLRASTERPOS3IVPROC glad_glRasterPos3iv;
+#define glRasterPos3iv glad_glRasterPos3iv
+typedef void (APIENTRYP PFNGLRASTERPOS3SPROC)(GLshort x, GLshort y, GLshort z);
+GLAPI PFNGLRASTERPOS3SPROC glad_glRasterPos3s;
+#define glRasterPos3s glad_glRasterPos3s
+typedef void (APIENTRYP PFNGLRASTERPOS3SVPROC)(const GLshort *v);
+GLAPI PFNGLRASTERPOS3SVPROC glad_glRasterPos3sv;
+#define glRasterPos3sv glad_glRasterPos3sv
+typedef void (APIENTRYP PFNGLRASTERPOS4DPROC)(GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI PFNGLRASTERPOS4DPROC glad_glRasterPos4d;
+#define glRasterPos4d glad_glRasterPos4d
+typedef void (APIENTRYP PFNGLRASTERPOS4DVPROC)(const GLdouble *v);
+GLAPI PFNGLRASTERPOS4DVPROC glad_glRasterPos4dv;
+#define glRasterPos4dv glad_glRasterPos4dv
+typedef void (APIENTRYP PFNGLRASTERPOS4FPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI PFNGLRASTERPOS4FPROC glad_glRasterPos4f;
+#define glRasterPos4f glad_glRasterPos4f
+typedef void (APIENTRYP PFNGLRASTERPOS4FVPROC)(const GLfloat *v);
+GLAPI PFNGLRASTERPOS4FVPROC glad_glRasterPos4fv;
+#define glRasterPos4fv glad_glRasterPos4fv
+typedef void (APIENTRYP PFNGLRASTERPOS4IPROC)(GLint x, GLint y, GLint z, GLint w);
+GLAPI PFNGLRASTERPOS4IPROC glad_glRasterPos4i;
+#define glRasterPos4i glad_glRasterPos4i
+typedef void (APIENTRYP PFNGLRASTERPOS4IVPROC)(const GLint *v);
+GLAPI PFNGLRASTERPOS4IVPROC glad_glRasterPos4iv;
+#define glRasterPos4iv glad_glRasterPos4iv
+typedef void (APIENTRYP PFNGLRASTERPOS4SPROC)(GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI PFNGLRASTERPOS4SPROC glad_glRasterPos4s;
+#define glRasterPos4s glad_glRasterPos4s
+typedef void (APIENTRYP PFNGLRASTERPOS4SVPROC)(const GLshort *v);
+GLAPI PFNGLRASTERPOS4SVPROC glad_glRasterPos4sv;
+#define glRasterPos4sv glad_glRasterPos4sv
+typedef void (APIENTRYP PFNGLRECTDPROC)(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2);
+GLAPI PFNGLRECTDPROC glad_glRectd;
+#define glRectd glad_glRectd
+typedef void (APIENTRYP PFNGLRECTDVPROC)(const GLdouble *v1, const GLdouble *v2);
+GLAPI PFNGLRECTDVPROC glad_glRectdv;
+#define glRectdv glad_glRectdv
+typedef void (APIENTRYP PFNGLRECTFPROC)(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2);
+GLAPI PFNGLRECTFPROC glad_glRectf;
+#define glRectf glad_glRectf
+typedef void (APIENTRYP PFNGLRECTFVPROC)(const GLfloat *v1, const GLfloat *v2);
+GLAPI PFNGLRECTFVPROC glad_glRectfv;
+#define glRectfv glad_glRectfv
+typedef void (APIENTRYP PFNGLRECTIPROC)(GLint x1, GLint y1, GLint x2, GLint y2);
+GLAPI PFNGLRECTIPROC glad_glRecti;
+#define glRecti glad_glRecti
+typedef void (APIENTRYP PFNGLRECTIVPROC)(const GLint *v1, const GLint *v2);
+GLAPI PFNGLRECTIVPROC glad_glRectiv;
+#define glRectiv glad_glRectiv
+typedef void (APIENTRYP PFNGLRECTSPROC)(GLshort x1, GLshort y1, GLshort x2, GLshort y2);
+GLAPI PFNGLRECTSPROC glad_glRects;
+#define glRects glad_glRects
+typedef void (APIENTRYP PFNGLRECTSVPROC)(const GLshort *v1, const GLshort *v2);
+GLAPI PFNGLRECTSVPROC glad_glRectsv;
+#define glRectsv glad_glRectsv
+typedef void (APIENTRYP PFNGLTEXCOORD1DPROC)(GLdouble s);
+GLAPI PFNGLTEXCOORD1DPROC glad_glTexCoord1d;
+#define glTexCoord1d glad_glTexCoord1d
+typedef void (APIENTRYP PFNGLTEXCOORD1DVPROC)(const GLdouble *v);
+GLAPI PFNGLTEXCOORD1DVPROC glad_glTexCoord1dv;
+#define glTexCoord1dv glad_glTexCoord1dv
+typedef void (APIENTRYP PFNGLTEXCOORD1FPROC)(GLfloat s);
+GLAPI PFNGLTEXCOORD1FPROC glad_glTexCoord1f;
+#define glTexCoord1f glad_glTexCoord1f
+typedef void (APIENTRYP PFNGLTEXCOORD1FVPROC)(const GLfloat *v);
+GLAPI PFNGLTEXCOORD1FVPROC glad_glTexCoord1fv;
+#define glTexCoord1fv glad_glTexCoord1fv
+typedef void (APIENTRYP PFNGLTEXCOORD1IPROC)(GLint s);
+GLAPI PFNGLTEXCOORD1IPROC glad_glTexCoord1i;
+#define glTexCoord1i glad_glTexCoord1i
+typedef void (APIENTRYP PFNGLTEXCOORD1IVPROC)(const GLint *v);
+GLAPI PFNGLTEXCOORD1IVPROC glad_glTexCoord1iv;
+#define glTexCoord1iv glad_glTexCoord1iv
+typedef void (APIENTRYP PFNGLTEXCOORD1SPROC)(GLshort s);
+GLAPI PFNGLTEXCOORD1SPROC glad_glTexCoord1s;
+#define glTexCoord1s glad_glTexCoord1s
+typedef void (APIENTRYP PFNGLTEXCOORD1SVPROC)(const GLshort *v);
+GLAPI PFNGLTEXCOORD1SVPROC glad_glTexCoord1sv;
+#define glTexCoord1sv glad_glTexCoord1sv
+typedef void (APIENTRYP PFNGLTEXCOORD2DPROC)(GLdouble s, GLdouble t);
+GLAPI PFNGLTEXCOORD2DPROC glad_glTexCoord2d;
+#define glTexCoord2d glad_glTexCoord2d
+typedef void (APIENTRYP PFNGLTEXCOORD2DVPROC)(const GLdouble *v);
+GLAPI PFNGLTEXCOORD2DVPROC glad_glTexCoord2dv;
+#define glTexCoord2dv glad_glTexCoord2dv
+typedef void (APIENTRYP PFNGLTEXCOORD2FPROC)(GLfloat s, GLfloat t);
+GLAPI PFNGLTEXCOORD2FPROC glad_glTexCoord2f;
+#define glTexCoord2f glad_glTexCoord2f
+typedef void (APIENTRYP PFNGLTEXCOORD2FVPROC)(const GLfloat *v);
+GLAPI PFNGLTEXCOORD2FVPROC glad_glTexCoord2fv;
+#define glTexCoord2fv glad_glTexCoord2fv
+typedef void (APIENTRYP PFNGLTEXCOORD2IPROC)(GLint s, GLint t);
+GLAPI PFNGLTEXCOORD2IPROC glad_glTexCoord2i;
+#define glTexCoord2i glad_glTexCoord2i
+typedef void (APIENTRYP PFNGLTEXCOORD2IVPROC)(const GLint *v);
+GLAPI PFNGLTEXCOORD2IVPROC glad_glTexCoord2iv;
+#define glTexCoord2iv glad_glTexCoord2iv
+typedef void (APIENTRYP PFNGLTEXCOORD2SPROC)(GLshort s, GLshort t);
+GLAPI PFNGLTEXCOORD2SPROC glad_glTexCoord2s;
+#define glTexCoord2s glad_glTexCoord2s
+typedef void (APIENTRYP PFNGLTEXCOORD2SVPROC)(const GLshort *v);
+GLAPI PFNGLTEXCOORD2SVPROC glad_glTexCoord2sv;
+#define glTexCoord2sv glad_glTexCoord2sv
+typedef void (APIENTRYP PFNGLTEXCOORD3DPROC)(GLdouble s, GLdouble t, GLdouble r);
+GLAPI PFNGLTEXCOORD3DPROC glad_glTexCoord3d;
+#define glTexCoord3d glad_glTexCoord3d
+typedef void (APIENTRYP PFNGLTEXCOORD3DVPROC)(const GLdouble *v);
+GLAPI PFNGLTEXCOORD3DVPROC glad_glTexCoord3dv;
+#define glTexCoord3dv glad_glTexCoord3dv
+typedef void (APIENTRYP PFNGLTEXCOORD3FPROC)(GLfloat s, GLfloat t, GLfloat r);
+GLAPI PFNGLTEXCOORD3FPROC glad_glTexCoord3f;
+#define glTexCoord3f glad_glTexCoord3f
+typedef void (APIENTRYP PFNGLTEXCOORD3FVPROC)(const GLfloat *v);
+GLAPI PFNGLTEXCOORD3FVPROC glad_glTexCoord3fv;
+#define glTexCoord3fv glad_glTexCoord3fv
+typedef void (APIENTRYP PFNGLTEXCOORD3IPROC)(GLint s, GLint t, GLint r);
+GLAPI PFNGLTEXCOORD3IPROC glad_glTexCoord3i;
+#define glTexCoord3i glad_glTexCoord3i
+typedef void (APIENTRYP PFNGLTEXCOORD3IVPROC)(const GLint *v);
+GLAPI PFNGLTEXCOORD3IVPROC glad_glTexCoord3iv;
+#define glTexCoord3iv glad_glTexCoord3iv
+typedef void (APIENTRYP PFNGLTEXCOORD3SPROC)(GLshort s, GLshort t, GLshort r);
+GLAPI PFNGLTEXCOORD3SPROC glad_glTexCoord3s;
+#define glTexCoord3s glad_glTexCoord3s
+typedef void (APIENTRYP PFNGLTEXCOORD3SVPROC)(const GLshort *v);
+GLAPI PFNGLTEXCOORD3SVPROC glad_glTexCoord3sv;
+#define glTexCoord3sv glad_glTexCoord3sv
+typedef void (APIENTRYP PFNGLTEXCOORD4DPROC)(GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+GLAPI PFNGLTEXCOORD4DPROC glad_glTexCoord4d;
+#define glTexCoord4d glad_glTexCoord4d
+typedef void (APIENTRYP PFNGLTEXCOORD4DVPROC)(const GLdouble *v);
+GLAPI PFNGLTEXCOORD4DVPROC glad_glTexCoord4dv;
+#define glTexCoord4dv glad_glTexCoord4dv
+typedef void (APIENTRYP PFNGLTEXCOORD4FPROC)(GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+GLAPI PFNGLTEXCOORD4FPROC glad_glTexCoord4f;
+#define glTexCoord4f glad_glTexCoord4f
+typedef void (APIENTRYP PFNGLTEXCOORD4FVPROC)(const GLfloat *v);
+GLAPI PFNGLTEXCOORD4FVPROC glad_glTexCoord4fv;
+#define glTexCoord4fv glad_glTexCoord4fv
+typedef void (APIENTRYP PFNGLTEXCOORD4IPROC)(GLint s, GLint t, GLint r, GLint q);
+GLAPI PFNGLTEXCOORD4IPROC glad_glTexCoord4i;
+#define glTexCoord4i glad_glTexCoord4i
+typedef void (APIENTRYP PFNGLTEXCOORD4IVPROC)(const GLint *v);
+GLAPI PFNGLTEXCOORD4IVPROC glad_glTexCoord4iv;
+#define glTexCoord4iv glad_glTexCoord4iv
+typedef void (APIENTRYP PFNGLTEXCOORD4SPROC)(GLshort s, GLshort t, GLshort r, GLshort q);
+GLAPI PFNGLTEXCOORD4SPROC glad_glTexCoord4s;
+#define glTexCoord4s glad_glTexCoord4s
+typedef void (APIENTRYP PFNGLTEXCOORD4SVPROC)(const GLshort *v);
+GLAPI PFNGLTEXCOORD4SVPROC glad_glTexCoord4sv;
+#define glTexCoord4sv glad_glTexCoord4sv
+typedef void (APIENTRYP PFNGLVERTEX2DPROC)(GLdouble x, GLdouble y);
+GLAPI PFNGLVERTEX2DPROC glad_glVertex2d;
+#define glVertex2d glad_glVertex2d
+typedef void (APIENTRYP PFNGLVERTEX2DVPROC)(const GLdouble *v);
+GLAPI PFNGLVERTEX2DVPROC glad_glVertex2dv;
+#define glVertex2dv glad_glVertex2dv
+typedef void (APIENTRYP PFNGLVERTEX2FPROC)(GLfloat x, GLfloat y);
+GLAPI PFNGLVERTEX2FPROC glad_glVertex2f;
+#define glVertex2f glad_glVertex2f
+typedef void (APIENTRYP PFNGLVERTEX2FVPROC)(const GLfloat *v);
+GLAPI PFNGLVERTEX2FVPROC glad_glVertex2fv;
+#define glVertex2fv glad_glVertex2fv
+typedef void (APIENTRYP PFNGLVERTEX2IPROC)(GLint x, GLint y);
+GLAPI PFNGLVERTEX2IPROC glad_glVertex2i;
+#define glVertex2i glad_glVertex2i
+typedef void (APIENTRYP PFNGLVERTEX2IVPROC)(const GLint *v);
+GLAPI PFNGLVERTEX2IVPROC glad_glVertex2iv;
+#define glVertex2iv glad_glVertex2iv
+typedef void (APIENTRYP PFNGLVERTEX2SPROC)(GLshort x, GLshort y);
+GLAPI PFNGLVERTEX2SPROC glad_glVertex2s;
+#define glVertex2s glad_glVertex2s
+typedef void (APIENTRYP PFNGLVERTEX2SVPROC)(const GLshort *v);
+GLAPI PFNGLVERTEX2SVPROC glad_glVertex2sv;
+#define glVertex2sv glad_glVertex2sv
+typedef void (APIENTRYP PFNGLVERTEX3DPROC)(GLdouble x, GLdouble y, GLdouble z);
+GLAPI PFNGLVERTEX3DPROC glad_glVertex3d;
+#define glVertex3d glad_glVertex3d
+typedef void (APIENTRYP PFNGLVERTEX3DVPROC)(const GLdouble *v);
+GLAPI PFNGLVERTEX3DVPROC glad_glVertex3dv;
+#define glVertex3dv glad_glVertex3dv
+typedef void (APIENTRYP PFNGLVERTEX3FPROC)(GLfloat x, GLfloat y, GLfloat z);
+GLAPI PFNGLVERTEX3FPROC glad_glVertex3f;
+#define glVertex3f glad_glVertex3f
+typedef void (APIENTRYP PFNGLVERTEX3FVPROC)(const GLfloat *v);
+GLAPI PFNGLVERTEX3FVPROC glad_glVertex3fv;
+#define glVertex3fv glad_glVertex3fv
+typedef void (APIENTRYP PFNGLVERTEX3IPROC)(GLint x, GLint y, GLint z);
+GLAPI PFNGLVERTEX3IPROC glad_glVertex3i;
+#define glVertex3i glad_glVertex3i
+typedef void (APIENTRYP PFNGLVERTEX3IVPROC)(const GLint *v);
+GLAPI PFNGLVERTEX3IVPROC glad_glVertex3iv;
+#define glVertex3iv glad_glVertex3iv
+typedef void (APIENTRYP PFNGLVERTEX3SPROC)(GLshort x, GLshort y, GLshort z);
+GLAPI PFNGLVERTEX3SPROC glad_glVertex3s;
+#define glVertex3s glad_glVertex3s
+typedef void (APIENTRYP PFNGLVERTEX3SVPROC)(const GLshort *v);
+GLAPI PFNGLVERTEX3SVPROC glad_glVertex3sv;
+#define glVertex3sv glad_glVertex3sv
+typedef void (APIENTRYP PFNGLVERTEX4DPROC)(GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI PFNGLVERTEX4DPROC glad_glVertex4d;
+#define glVertex4d glad_glVertex4d
+typedef void (APIENTRYP PFNGLVERTEX4DVPROC)(const GLdouble *v);
+GLAPI PFNGLVERTEX4DVPROC glad_glVertex4dv;
+#define glVertex4dv glad_glVertex4dv
+typedef void (APIENTRYP PFNGLVERTEX4FPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI PFNGLVERTEX4FPROC glad_glVertex4f;
+#define glVertex4f glad_glVertex4f
+typedef void (APIENTRYP PFNGLVERTEX4FVPROC)(const GLfloat *v);
+GLAPI PFNGLVERTEX4FVPROC glad_glVertex4fv;
+#define glVertex4fv glad_glVertex4fv
+typedef void (APIENTRYP PFNGLVERTEX4IPROC)(GLint x, GLint y, GLint z, GLint w);
+GLAPI PFNGLVERTEX4IPROC glad_glVertex4i;
+#define glVertex4i glad_glVertex4i
+typedef void (APIENTRYP PFNGLVERTEX4IVPROC)(const GLint *v);
+GLAPI PFNGLVERTEX4IVPROC glad_glVertex4iv;
+#define glVertex4iv glad_glVertex4iv
+typedef void (APIENTRYP PFNGLVERTEX4SPROC)(GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI PFNGLVERTEX4SPROC glad_glVertex4s;
+#define glVertex4s glad_glVertex4s
+typedef void (APIENTRYP PFNGLVERTEX4SVPROC)(const GLshort *v);
+GLAPI PFNGLVERTEX4SVPROC glad_glVertex4sv;
+#define glVertex4sv glad_glVertex4sv
+typedef void (APIENTRYP PFNGLCLIPPLANEPROC)(GLenum plane, const GLdouble *equation);
+GLAPI PFNGLCLIPPLANEPROC glad_glClipPlane;
+#define glClipPlane glad_glClipPlane
+typedef void (APIENTRYP PFNGLCOLORMATERIALPROC)(GLenum face, GLenum mode);
+GLAPI PFNGLCOLORMATERIALPROC glad_glColorMaterial;
+#define glColorMaterial glad_glColorMaterial
+typedef void (APIENTRYP PFNGLFOGFPROC)(GLenum pname, GLfloat param);
+GLAPI PFNGLFOGFPROC glad_glFogf;
+#define glFogf glad_glFogf
+typedef void (APIENTRYP PFNGLFOGFVPROC)(GLenum pname, const GLfloat *params);
+GLAPI PFNGLFOGFVPROC glad_glFogfv;
+#define glFogfv glad_glFogfv
+typedef void (APIENTRYP PFNGLFOGIPROC)(GLenum pname, GLint param);
+GLAPI PFNGLFOGIPROC glad_glFogi;
+#define glFogi glad_glFogi
+typedef void (APIENTRYP PFNGLFOGIVPROC)(GLenum pname, const GLint *params);
+GLAPI PFNGLFOGIVPROC glad_glFogiv;
+#define glFogiv glad_glFogiv
+typedef void (APIENTRYP PFNGLLIGHTFPROC)(GLenum light, GLenum pname, GLfloat param);
+GLAPI PFNGLLIGHTFPROC glad_glLightf;
+#define glLightf glad_glLightf
+typedef void (APIENTRYP PFNGLLIGHTFVPROC)(GLenum light, GLenum pname, const GLfloat *params);
+GLAPI PFNGLLIGHTFVPROC glad_glLightfv;
+#define glLightfv glad_glLightfv
+typedef void (APIENTRYP PFNGLLIGHTIPROC)(GLenum light, GLenum pname, GLint param);
+GLAPI PFNGLLIGHTIPROC glad_glLighti;
+#define glLighti glad_glLighti
+typedef void (APIENTRYP PFNGLLIGHTIVPROC)(GLenum light, GLenum pname, const GLint *params);
+GLAPI PFNGLLIGHTIVPROC glad_glLightiv;
+#define glLightiv glad_glLightiv
+typedef void (APIENTRYP PFNGLLIGHTMODELFPROC)(GLenum pname, GLfloat param);
+GLAPI PFNGLLIGHTMODELFPROC glad_glLightModelf;
+#define glLightModelf glad_glLightModelf
+typedef void (APIENTRYP PFNGLLIGHTMODELFVPROC)(GLenum pname, const GLfloat *params);
+GLAPI PFNGLLIGHTMODELFVPROC glad_glLightModelfv;
+#define glLightModelfv glad_glLightModelfv
+typedef void (APIENTRYP PFNGLLIGHTMODELIPROC)(GLenum pname, GLint param);
+GLAPI PFNGLLIGHTMODELIPROC glad_glLightModeli;
+#define glLightModeli glad_glLightModeli
+typedef void (APIENTRYP PFNGLLIGHTMODELIVPROC)(GLenum pname, const GLint *params);
+GLAPI PFNGLLIGHTMODELIVPROC glad_glLightModeliv;
+#define glLightModeliv glad_glLightModeliv
+typedef void (APIENTRYP PFNGLLINESTIPPLEPROC)(GLint factor, GLushort pattern);
+GLAPI PFNGLLINESTIPPLEPROC glad_glLineStipple;
+#define glLineStipple glad_glLineStipple
+typedef void (APIENTRYP PFNGLMATERIALFPROC)(GLenum face, GLenum pname, GLfloat param);
+GLAPI PFNGLMATERIALFPROC glad_glMaterialf;
+#define glMaterialf glad_glMaterialf
+typedef void (APIENTRYP PFNGLMATERIALFVPROC)(GLenum face, GLenum pname, const GLfloat *params);
+GLAPI PFNGLMATERIALFVPROC glad_glMaterialfv;
+#define glMaterialfv glad_glMaterialfv
+typedef void (APIENTRYP PFNGLMATERIALIPROC)(GLenum face, GLenum pname, GLint param);
+GLAPI PFNGLMATERIALIPROC glad_glMateriali;
+#define glMateriali glad_glMateriali
+typedef void (APIENTRYP PFNGLMATERIALIVPROC)(GLenum face, GLenum pname, const GLint *params);
+GLAPI PFNGLMATERIALIVPROC glad_glMaterialiv;
+#define glMaterialiv glad_glMaterialiv
+typedef void (APIENTRYP PFNGLPOLYGONSTIPPLEPROC)(const GLubyte *mask);
+GLAPI PFNGLPOLYGONSTIPPLEPROC glad_glPolygonStipple;
+#define glPolygonStipple glad_glPolygonStipple
+typedef void (APIENTRYP PFNGLSHADEMODELPROC)(GLenum mode);
+GLAPI PFNGLSHADEMODELPROC glad_glShadeModel;
+#define glShadeModel glad_glShadeModel
+typedef void (APIENTRYP PFNGLTEXENVFPROC)(GLenum target, GLenum pname, GLfloat param);
+GLAPI PFNGLTEXENVFPROC glad_glTexEnvf;
+#define glTexEnvf glad_glTexEnvf
+typedef void (APIENTRYP PFNGLTEXENVFVPROC)(GLenum target, GLenum pname, const GLfloat *params);
+GLAPI PFNGLTEXENVFVPROC glad_glTexEnvfv;
+#define glTexEnvfv glad_glTexEnvfv
+typedef void (APIENTRYP PFNGLTEXENVIPROC)(GLenum target, GLenum pname, GLint param);
+GLAPI PFNGLTEXENVIPROC glad_glTexEnvi;
+#define glTexEnvi glad_glTexEnvi
+typedef void (APIENTRYP PFNGLTEXENVIVPROC)(GLenum target, GLenum pname, const GLint *params);
+GLAPI PFNGLTEXENVIVPROC glad_glTexEnviv;
+#define glTexEnviv glad_glTexEnviv
+typedef void (APIENTRYP PFNGLTEXGENDPROC)(GLenum coord, GLenum pname, GLdouble param);
+GLAPI PFNGLTEXGENDPROC glad_glTexGend;
+#define glTexGend glad_glTexGend
+typedef void (APIENTRYP PFNGLTEXGENDVPROC)(GLenum coord, GLenum pname, const GLdouble *params);
+GLAPI PFNGLTEXGENDVPROC glad_glTexGendv;
+#define glTexGendv glad_glTexGendv
+typedef void (APIENTRYP PFNGLTEXGENFPROC)(GLenum coord, GLenum pname, GLfloat param);
+GLAPI PFNGLTEXGENFPROC glad_glTexGenf;
+#define glTexGenf glad_glTexGenf
+typedef void (APIENTRYP PFNGLTEXGENFVPROC)(GLenum coord, GLenum pname, const GLfloat *params);
+GLAPI PFNGLTEXGENFVPROC glad_glTexGenfv;
+#define glTexGenfv glad_glTexGenfv
+typedef void (APIENTRYP PFNGLTEXGENIPROC)(GLenum coord, GLenum pname, GLint param);
+GLAPI PFNGLTEXGENIPROC glad_glTexGeni;
+#define glTexGeni glad_glTexGeni
+typedef void (APIENTRYP PFNGLTEXGENIVPROC)(GLenum coord, GLenum pname, const GLint *params);
+GLAPI PFNGLTEXGENIVPROC glad_glTexGeniv;
+#define glTexGeniv glad_glTexGeniv
+typedef void (APIENTRYP PFNGLFEEDBACKBUFFERPROC)(GLsizei size, GLenum type, GLfloat *buffer);
+GLAPI PFNGLFEEDBACKBUFFERPROC glad_glFeedbackBuffer;
+#define glFeedbackBuffer glad_glFeedbackBuffer
+typedef void (APIENTRYP PFNGLSELECTBUFFERPROC)(GLsizei size, GLuint *buffer);
+GLAPI PFNGLSELECTBUFFERPROC glad_glSelectBuffer;
+#define glSelectBuffer glad_glSelectBuffer
+typedef GLint (APIENTRYP PFNGLRENDERMODEPROC)(GLenum mode);
+GLAPI PFNGLRENDERMODEPROC glad_glRenderMode;
+#define glRenderMode glad_glRenderMode
+typedef void (APIENTRYP PFNGLINITNAMESPROC)(void);
+GLAPI PFNGLINITNAMESPROC glad_glInitNames;
+#define glInitNames glad_glInitNames
+typedef void (APIENTRYP PFNGLLOADNAMEPROC)(GLuint name);
+GLAPI PFNGLLOADNAMEPROC glad_glLoadName;
+#define glLoadName glad_glLoadName
+typedef void (APIENTRYP PFNGLPASSTHROUGHPROC)(GLfloat token);
+GLAPI PFNGLPASSTHROUGHPROC glad_glPassThrough;
+#define glPassThrough glad_glPassThrough
+typedef void (APIENTRYP PFNGLPOPNAMEPROC)(void);
+GLAPI PFNGLPOPNAMEPROC glad_glPopName;
+#define glPopName glad_glPopName
+typedef void (APIENTRYP PFNGLPUSHNAMEPROC)(GLuint name);
+GLAPI PFNGLPUSHNAMEPROC glad_glPushName;
+#define glPushName glad_glPushName
+typedef void (APIENTRYP PFNGLCLEARACCUMPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GLAPI PFNGLCLEARACCUMPROC glad_glClearAccum;
+#define glClearAccum glad_glClearAccum
+typedef void (APIENTRYP PFNGLCLEARINDEXPROC)(GLfloat c);
+GLAPI PFNGLCLEARINDEXPROC glad_glClearIndex;
+#define glClearIndex glad_glClearIndex
+typedef void (APIENTRYP PFNGLINDEXMASKPROC)(GLuint mask);
+GLAPI PFNGLINDEXMASKPROC glad_glIndexMask;
+#define glIndexMask glad_glIndexMask
+typedef void (APIENTRYP PFNGLACCUMPROC)(GLenum op, GLfloat value);
+GLAPI PFNGLACCUMPROC glad_glAccum;
+#define glAccum glad_glAccum
+typedef void (APIENTRYP PFNGLPOPATTRIBPROC)(void);
+GLAPI PFNGLPOPATTRIBPROC glad_glPopAttrib;
+#define glPopAttrib glad_glPopAttrib
+typedef void (APIENTRYP PFNGLPUSHATTRIBPROC)(GLbitfield mask);
+GLAPI PFNGLPUSHATTRIBPROC glad_glPushAttrib;
+#define glPushAttrib glad_glPushAttrib
+typedef void (APIENTRYP PFNGLMAP1DPROC)(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
+GLAPI PFNGLMAP1DPROC glad_glMap1d;
+#define glMap1d glad_glMap1d
+typedef void (APIENTRYP PFNGLMAP1FPROC)(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
+GLAPI PFNGLMAP1FPROC glad_glMap1f;
+#define glMap1f glad_glMap1f
+typedef void (APIENTRYP PFNGLMAP2DPROC)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
+GLAPI PFNGLMAP2DPROC glad_glMap2d;
+#define glMap2d glad_glMap2d
+typedef void (APIENTRYP PFNGLMAP2FPROC)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
+GLAPI PFNGLMAP2FPROC glad_glMap2f;
+#define glMap2f glad_glMap2f
+typedef void (APIENTRYP PFNGLMAPGRID1DPROC)(GLint un, GLdouble u1, GLdouble u2);
+GLAPI PFNGLMAPGRID1DPROC glad_glMapGrid1d;
+#define glMapGrid1d glad_glMapGrid1d
+typedef void (APIENTRYP PFNGLMAPGRID1FPROC)(GLint un, GLfloat u1, GLfloat u2);
+GLAPI PFNGLMAPGRID1FPROC glad_glMapGrid1f;
+#define glMapGrid1f glad_glMapGrid1f
+typedef void (APIENTRYP PFNGLMAPGRID2DPROC)(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2);
+GLAPI PFNGLMAPGRID2DPROC glad_glMapGrid2d;
+#define glMapGrid2d glad_glMapGrid2d
+typedef void (APIENTRYP PFNGLMAPGRID2FPROC)(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2);
+GLAPI PFNGLMAPGRID2FPROC glad_glMapGrid2f;
+#define glMapGrid2f glad_glMapGrid2f
+typedef void (APIENTRYP PFNGLEVALCOORD1DPROC)(GLdouble u);
+GLAPI PFNGLEVALCOORD1DPROC glad_glEvalCoord1d;
+#define glEvalCoord1d glad_glEvalCoord1d
+typedef void (APIENTRYP PFNGLEVALCOORD1DVPROC)(const GLdouble *u);
+GLAPI PFNGLEVALCOORD1DVPROC glad_glEvalCoord1dv;
+#define glEvalCoord1dv glad_glEvalCoord1dv
+typedef void (APIENTRYP PFNGLEVALCOORD1FPROC)(GLfloat u);
+GLAPI PFNGLEVALCOORD1FPROC glad_glEvalCoord1f;
+#define glEvalCoord1f glad_glEvalCoord1f
+typedef void (APIENTRYP PFNGLEVALCOORD1FVPROC)(const GLfloat *u);
+GLAPI PFNGLEVALCOORD1FVPROC glad_glEvalCoord1fv;
+#define glEvalCoord1fv glad_glEvalCoord1fv
+typedef void (APIENTRYP PFNGLEVALCOORD2DPROC)(GLdouble u, GLdouble v);
+GLAPI PFNGLEVALCOORD2DPROC glad_glEvalCoord2d;
+#define glEvalCoord2d glad_glEvalCoord2d
+typedef void (APIENTRYP PFNGLEVALCOORD2DVPROC)(const GLdouble *u);
+GLAPI PFNGLEVALCOORD2DVPROC glad_glEvalCoord2dv;
+#define glEvalCoord2dv glad_glEvalCoord2dv
+typedef void (APIENTRYP PFNGLEVALCOORD2FPROC)(GLfloat u, GLfloat v);
+GLAPI PFNGLEVALCOORD2FPROC glad_glEvalCoord2f;
+#define glEvalCoord2f glad_glEvalCoord2f
+typedef void (APIENTRYP PFNGLEVALCOORD2FVPROC)(const GLfloat *u);
+GLAPI PFNGLEVALCOORD2FVPROC glad_glEvalCoord2fv;
+#define glEvalCoord2fv glad_glEvalCoord2fv
+typedef void (APIENTRYP PFNGLEVALMESH1PROC)(GLenum mode, GLint i1, GLint i2);
+GLAPI PFNGLEVALMESH1PROC glad_glEvalMesh1;
+#define glEvalMesh1 glad_glEvalMesh1
+typedef void (APIENTRYP PFNGLEVALPOINT1PROC)(GLint i);
+GLAPI PFNGLEVALPOINT1PROC glad_glEvalPoint1;
+#define glEvalPoint1 glad_glEvalPoint1
+typedef void (APIENTRYP PFNGLEVALMESH2PROC)(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2);
+GLAPI PFNGLEVALMESH2PROC glad_glEvalMesh2;
+#define glEvalMesh2 glad_glEvalMesh2
+typedef void (APIENTRYP PFNGLEVALPOINT2PROC)(GLint i, GLint j);
+GLAPI PFNGLEVALPOINT2PROC glad_glEvalPoint2;
+#define glEvalPoint2 glad_glEvalPoint2
+typedef void (APIENTRYP PFNGLALPHAFUNCPROC)(GLenum func, GLfloat ref);
+GLAPI PFNGLALPHAFUNCPROC glad_glAlphaFunc;
+#define glAlphaFunc glad_glAlphaFunc
+typedef void (APIENTRYP PFNGLPIXELZOOMPROC)(GLfloat xfactor, GLfloat yfactor);
+GLAPI PFNGLPIXELZOOMPROC glad_glPixelZoom;
+#define glPixelZoom glad_glPixelZoom
+typedef void (APIENTRYP PFNGLPIXELTRANSFERFPROC)(GLenum pname, GLfloat param);
+GLAPI PFNGLPIXELTRANSFERFPROC glad_glPixelTransferf;
+#define glPixelTransferf glad_glPixelTransferf
+typedef void (APIENTRYP PFNGLPIXELTRANSFERIPROC)(GLenum pname, GLint param);
+GLAPI PFNGLPIXELTRANSFERIPROC glad_glPixelTransferi;
+#define glPixelTransferi glad_glPixelTransferi
+typedef void (APIENTRYP PFNGLPIXELMAPFVPROC)(GLenum map, GLsizei mapsize, const GLfloat *values);
+GLAPI PFNGLPIXELMAPFVPROC glad_glPixelMapfv;
+#define glPixelMapfv glad_glPixelMapfv
+typedef void (APIENTRYP PFNGLPIXELMAPUIVPROC)(GLenum map, GLsizei mapsize, const GLuint *values);
+GLAPI PFNGLPIXELMAPUIVPROC glad_glPixelMapuiv;
+#define glPixelMapuiv glad_glPixelMapuiv
+typedef void (APIENTRYP PFNGLPIXELMAPUSVPROC)(GLenum map, GLsizei mapsize, const GLushort *values);
+GLAPI PFNGLPIXELMAPUSVPROC glad_glPixelMapusv;
+#define glPixelMapusv glad_glPixelMapusv
+typedef void (APIENTRYP PFNGLCOPYPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);
+GLAPI PFNGLCOPYPIXELSPROC glad_glCopyPixels;
+#define glCopyPixels glad_glCopyPixels
+typedef void (APIENTRYP PFNGLDRAWPIXELSPROC)(GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+GLAPI PFNGLDRAWPIXELSPROC glad_glDrawPixels;
+#define glDrawPixels glad_glDrawPixels
+typedef void (APIENTRYP PFNGLGETCLIPPLANEPROC)(GLenum plane, GLdouble *equation);
+GLAPI PFNGLGETCLIPPLANEPROC glad_glGetClipPlane;
+#define glGetClipPlane glad_glGetClipPlane
+typedef void (APIENTRYP PFNGLGETLIGHTFVPROC)(GLenum light, GLenum pname, GLfloat *params);
+GLAPI PFNGLGETLIGHTFVPROC glad_glGetLightfv;
+#define glGetLightfv glad_glGetLightfv
+typedef void (APIENTRYP PFNGLGETLIGHTIVPROC)(GLenum light, GLenum pname, GLint *params);
+GLAPI PFNGLGETLIGHTIVPROC glad_glGetLightiv;
+#define glGetLightiv glad_glGetLightiv
+typedef void (APIENTRYP PFNGLGETMAPDVPROC)(GLenum target, GLenum query, GLdouble *v);
+GLAPI PFNGLGETMAPDVPROC glad_glGetMapdv;
+#define glGetMapdv glad_glGetMapdv
+typedef void (APIENTRYP PFNGLGETMAPFVPROC)(GLenum target, GLenum query, GLfloat *v);
+GLAPI PFNGLGETMAPFVPROC glad_glGetMapfv;
+#define glGetMapfv glad_glGetMapfv
+typedef void (APIENTRYP PFNGLGETMAPIVPROC)(GLenum target, GLenum query, GLint *v);
+GLAPI PFNGLGETMAPIVPROC glad_glGetMapiv;
+#define glGetMapiv glad_glGetMapiv
+typedef void (APIENTRYP PFNGLGETMATERIALFVPROC)(GLenum face, GLenum pname, GLfloat *params);
+GLAPI PFNGLGETMATERIALFVPROC glad_glGetMaterialfv;
+#define glGetMaterialfv glad_glGetMaterialfv
+typedef void (APIENTRYP PFNGLGETMATERIALIVPROC)(GLenum face, GLenum pname, GLint *params);
+GLAPI PFNGLGETMATERIALIVPROC glad_glGetMaterialiv;
+#define glGetMaterialiv glad_glGetMaterialiv
+typedef void (APIENTRYP PFNGLGETPIXELMAPFVPROC)(GLenum map, GLfloat *values);
+GLAPI PFNGLGETPIXELMAPFVPROC glad_glGetPixelMapfv;
+#define glGetPixelMapfv glad_glGetPixelMapfv
+typedef void (APIENTRYP PFNGLGETPIXELMAPUIVPROC)(GLenum map, GLuint *values);
+GLAPI PFNGLGETPIXELMAPUIVPROC glad_glGetPixelMapuiv;
+#define glGetPixelMapuiv glad_glGetPixelMapuiv
+typedef void (APIENTRYP PFNGLGETPIXELMAPUSVPROC)(GLenum map, GLushort *values);
+GLAPI PFNGLGETPIXELMAPUSVPROC glad_glGetPixelMapusv;
+#define glGetPixelMapusv glad_glGetPixelMapusv
+typedef void (APIENTRYP PFNGLGETPOLYGONSTIPPLEPROC)(GLubyte *mask);
+GLAPI PFNGLGETPOLYGONSTIPPLEPROC glad_glGetPolygonStipple;
+#define glGetPolygonStipple glad_glGetPolygonStipple
+typedef void (APIENTRYP PFNGLGETTEXENVFVPROC)(GLenum target, GLenum pname, GLfloat *params);
+GLAPI PFNGLGETTEXENVFVPROC glad_glGetTexEnvfv;
+#define glGetTexEnvfv glad_glGetTexEnvfv
+typedef void (APIENTRYP PFNGLGETTEXENVIVPROC)(GLenum target, GLenum pname, GLint *params);
+GLAPI PFNGLGETTEXENVIVPROC glad_glGetTexEnviv;
+#define glGetTexEnviv glad_glGetTexEnviv
+typedef void (APIENTRYP PFNGLGETTEXGENDVPROC)(GLenum coord, GLenum pname, GLdouble *params);
+GLAPI PFNGLGETTEXGENDVPROC glad_glGetTexGendv;
+#define glGetTexGendv glad_glGetTexGendv
+typedef void (APIENTRYP PFNGLGETTEXGENFVPROC)(GLenum coord, GLenum pname, GLfloat *params);
+GLAPI PFNGLGETTEXGENFVPROC glad_glGetTexGenfv;
+#define glGetTexGenfv glad_glGetTexGenfv
+typedef void (APIENTRYP PFNGLGETTEXGENIVPROC)(GLenum coord, GLenum pname, GLint *params);
+GLAPI PFNGLGETTEXGENIVPROC glad_glGetTexGeniv;
+#define glGetTexGeniv glad_glGetTexGeniv
+typedef GLboolean (APIENTRYP PFNGLISLISTPROC)(GLuint list);
+GLAPI PFNGLISLISTPROC glad_glIsList;
+#define glIsList glad_glIsList
+typedef void (APIENTRYP PFNGLFRUSTUMPROC)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GLAPI PFNGLFRUSTUMPROC glad_glFrustum;
+#define glFrustum glad_glFrustum
+typedef void (APIENTRYP PFNGLLOADIDENTITYPROC)(void);
+GLAPI PFNGLLOADIDENTITYPROC glad_glLoadIdentity;
+#define glLoadIdentity glad_glLoadIdentity
+typedef void (APIENTRYP PFNGLLOADMATRIXFPROC)(const GLfloat *m);
+GLAPI PFNGLLOADMATRIXFPROC glad_glLoadMatrixf;
+#define glLoadMatrixf glad_glLoadMatrixf
+typedef void (APIENTRYP PFNGLLOADMATRIXDPROC)(const GLdouble *m);
+GLAPI PFNGLLOADMATRIXDPROC glad_glLoadMatrixd;
+#define glLoadMatrixd glad_glLoadMatrixd
+typedef void (APIENTRYP PFNGLMATRIXMODEPROC)(GLenum mode);
+GLAPI PFNGLMATRIXMODEPROC glad_glMatrixMode;
+#define glMatrixMode glad_glMatrixMode
+typedef void (APIENTRYP PFNGLMULTMATRIXFPROC)(const GLfloat *m);
+GLAPI PFNGLMULTMATRIXFPROC glad_glMultMatrixf;
+#define glMultMatrixf glad_glMultMatrixf
+typedef void (APIENTRYP PFNGLMULTMATRIXDPROC)(const GLdouble *m);
+GLAPI PFNGLMULTMATRIXDPROC glad_glMultMatrixd;
+#define glMultMatrixd glad_glMultMatrixd
+typedef void (APIENTRYP PFNGLORTHOPROC)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GLAPI PFNGLORTHOPROC glad_glOrtho;
+#define glOrtho glad_glOrtho
+typedef void (APIENTRYP PFNGLPOPMATRIXPROC)(void);
+GLAPI PFNGLPOPMATRIXPROC glad_glPopMatrix;
+#define glPopMatrix glad_glPopMatrix
+typedef void (APIENTRYP PFNGLPUSHMATRIXPROC)(void);
+GLAPI PFNGLPUSHMATRIXPROC glad_glPushMatrix;
+#define glPushMatrix glad_glPushMatrix
+typedef void (APIENTRYP PFNGLROTATEDPROC)(GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+GLAPI PFNGLROTATEDPROC glad_glRotated;
+#define glRotated glad_glRotated
+typedef void (APIENTRYP PFNGLROTATEFPROC)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+GLAPI PFNGLROTATEFPROC glad_glRotatef;
+#define glRotatef glad_glRotatef
+typedef void (APIENTRYP PFNGLSCALEDPROC)(GLdouble x, GLdouble y, GLdouble z);
+GLAPI PFNGLSCALEDPROC glad_glScaled;
+#define glScaled glad_glScaled
+typedef void (APIENTRYP PFNGLSCALEFPROC)(GLfloat x, GLfloat y, GLfloat z);
+GLAPI PFNGLSCALEFPROC glad_glScalef;
+#define glScalef glad_glScalef
+typedef void (APIENTRYP PFNGLTRANSLATEDPROC)(GLdouble x, GLdouble y, GLdouble z);
+GLAPI PFNGLTRANSLATEDPROC glad_glTranslated;
+#define glTranslated glad_glTranslated
+typedef void (APIENTRYP PFNGLTRANSLATEFPROC)(GLfloat x, GLfloat y, GLfloat z);
+GLAPI PFNGLTRANSLATEFPROC glad_glTranslatef;
+#define glTranslatef glad_glTranslatef
+#endif
+#ifndef GL_VERSION_1_1
+#define GL_VERSION_1_1 1
+GLAPI int GLAD_GL_VERSION_1_1;
+typedef void (APIENTRYP PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count);
+GLAPI PFNGLDRAWARRAYSPROC glad_glDrawArrays;
+#define glDrawArrays glad_glDrawArrays
+typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices);
+GLAPI PFNGLDRAWELEMENTSPROC glad_glDrawElements;
+#define glDrawElements glad_glDrawElements
+typedef void (APIENTRYP PFNGLGETPOINTERVPROC)(GLenum pname, void **params);
+GLAPI PFNGLGETPOINTERVPROC glad_glGetPointerv;
+#define glGetPointerv glad_glGetPointerv
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units);
+GLAPI PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset;
+#define glPolygonOffset glad_glPolygonOffset
+typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+GLAPI PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D;
+#define glCopyTexImage1D glad_glCopyTexImage1D
+typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GLAPI PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D;
+#define glCopyTexImage2D glad_glCopyTexImage2D
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D;
+#define glCopyTexSubImage1D glad_glCopyTexSubImage1D
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D;
+#define glCopyTexSubImage2D glad_glCopyTexSubImage2D
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+GLAPI PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D;
+#define glTexSubImage1D glad_glTexSubImage1D
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+GLAPI PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D;
+#define glTexSubImage2D glad_glTexSubImage2D
+typedef void (APIENTRYP PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture);
+GLAPI PFNGLBINDTEXTUREPROC glad_glBindTexture;
+#define glBindTexture glad_glBindTexture
+typedef void (APIENTRYP PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint *textures);
+GLAPI PFNGLDELETETEXTURESPROC glad_glDeleteTextures;
+#define glDeleteTextures glad_glDeleteTextures
+typedef void (APIENTRYP PFNGLGENTEXTURESPROC)(GLsizei n, GLuint *textures);
+GLAPI PFNGLGENTEXTURESPROC glad_glGenTextures;
+#define glGenTextures glad_glGenTextures
+typedef GLboolean (APIENTRYP PFNGLISTEXTUREPROC)(GLuint texture);
+GLAPI PFNGLISTEXTUREPROC glad_glIsTexture;
+#define glIsTexture glad_glIsTexture
+typedef void (APIENTRYP PFNGLARRAYELEMENTPROC)(GLint i);
+GLAPI PFNGLARRAYELEMENTPROC glad_glArrayElement;
+#define glArrayElement glad_glArrayElement
+typedef void (APIENTRYP PFNGLCOLORPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI PFNGLCOLORPOINTERPROC glad_glColorPointer;
+#define glColorPointer glad_glColorPointer
+typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEPROC)(GLenum array);
+GLAPI PFNGLDISABLECLIENTSTATEPROC glad_glDisableClientState;
+#define glDisableClientState glad_glDisableClientState
+typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERPROC)(GLsizei stride, const void *pointer);
+GLAPI PFNGLEDGEFLAGPOINTERPROC glad_glEdgeFlagPointer;
+#define glEdgeFlagPointer glad_glEdgeFlagPointer
+typedef void (APIENTRYP PFNGLENABLECLIENTSTATEPROC)(GLenum array);
+GLAPI PFNGLENABLECLIENTSTATEPROC glad_glEnableClientState;
+#define glEnableClientState glad_glEnableClientState
+typedef void (APIENTRYP PFNGLINDEXPOINTERPROC)(GLenum type, GLsizei stride, const void *pointer);
+GLAPI PFNGLINDEXPOINTERPROC glad_glIndexPointer;
+#define glIndexPointer glad_glIndexPointer
+typedef void (APIENTRYP PFNGLINTERLEAVEDARRAYSPROC)(GLenum format, GLsizei stride, const void *pointer);
+GLAPI PFNGLINTERLEAVEDARRAYSPROC glad_glInterleavedArrays;
+#define glInterleavedArrays glad_glInterleavedArrays
+typedef void (APIENTRYP PFNGLNORMALPOINTERPROC)(GLenum type, GLsizei stride, const void *pointer);
+GLAPI PFNGLNORMALPOINTERPROC glad_glNormalPointer;
+#define glNormalPointer glad_glNormalPointer
+typedef void (APIENTRYP PFNGLTEXCOORDPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI PFNGLTEXCOORDPOINTERPROC glad_glTexCoordPointer;
+#define glTexCoordPointer glad_glTexCoordPointer
+typedef void (APIENTRYP PFNGLVERTEXPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI PFNGLVERTEXPOINTERPROC glad_glVertexPointer;
+#define glVertexPointer glad_glVertexPointer
+typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTPROC)(GLsizei n, const GLuint *textures, GLboolean *residences);
+GLAPI PFNGLARETEXTURESRESIDENTPROC glad_glAreTexturesResident;
+#define glAreTexturesResident glad_glAreTexturesResident
+typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESPROC)(GLsizei n, const GLuint *textures, const GLfloat *priorities);
+GLAPI PFNGLPRIORITIZETEXTURESPROC glad_glPrioritizeTextures;
+#define glPrioritizeTextures glad_glPrioritizeTextures
+typedef void (APIENTRYP PFNGLINDEXUBPROC)(GLubyte c);
+GLAPI PFNGLINDEXUBPROC glad_glIndexub;
+#define glIndexub glad_glIndexub
+typedef void (APIENTRYP PFNGLINDEXUBVPROC)(const GLubyte *c);
+GLAPI PFNGLINDEXUBVPROC glad_glIndexubv;
+#define glIndexubv glad_glIndexubv
+typedef void (APIENTRYP PFNGLPOPCLIENTATTRIBPROC)(void);
+GLAPI PFNGLPOPCLIENTATTRIBPROC glad_glPopClientAttrib;
+#define glPopClientAttrib glad_glPopClientAttrib
+typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBPROC)(GLbitfield mask);
+GLAPI PFNGLPUSHCLIENTATTRIBPROC glad_glPushClientAttrib;
+#define glPushClientAttrib glad_glPushClientAttrib
+#endif
+#ifndef GL_VERSION_1_2
+#define GL_VERSION_1_2 1
+GLAPI int GLAD_GL_VERSION_1_2;
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+GLAPI PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements;
+#define glDrawRangeElements glad_glDrawRangeElements
+typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI PFNGLTEXIMAGE3DPROC glad_glTexImage3D;
+#define glTexImage3D glad_glTexImage3D
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+GLAPI PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D;
+#define glTexSubImage3D glad_glTexSubImage3D
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D;
+#define glCopyTexSubImage3D glad_glCopyTexSubImage3D
+#endif
+#ifndef GL_VERSION_1_3
+#define GL_VERSION_1_3 1
+GLAPI int GLAD_GL_VERSION_1_3;
+typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC)(GLenum texture);
+GLAPI PFNGLACTIVETEXTUREPROC glad_glActiveTexture;
+#define glActiveTexture glad_glActiveTexture
+typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert);
+GLAPI PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage;
+#define glSampleCoverage glad_glSampleCoverage
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+GLAPI PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D;
+#define glCompressedTexImage3D glad_glCompressedTexImage3D
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+GLAPI PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D;
+#define glCompressedTexImage2D glad_glCompressedTexImage2D
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data);
+GLAPI PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D;
+#define glCompressedTexImage1D glad_glCompressedTexImage1D
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D;
+#define glCompressedTexSubImage3D glad_glCompressedTexSubImage3D
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D;
+#define glCompressedTexSubImage2D glad_glCompressedTexSubImage2D
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D;
+#define glCompressedTexSubImage1D glad_glCompressedTexSubImage1D
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void *img);
+GLAPI PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage;
+#define glGetCompressedTexImage glad_glGetCompressedTexImage
+typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC)(GLenum texture);
+GLAPI PFNGLCLIENTACTIVETEXTUREPROC glad_glClientActiveTexture;
+#define glClientActiveTexture glad_glClientActiveTexture
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC)(GLenum target, GLdouble s);
+GLAPI PFNGLMULTITEXCOORD1DPROC glad_glMultiTexCoord1d;
+#define glMultiTexCoord1d glad_glMultiTexCoord1d
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC)(GLenum target, const GLdouble *v);
+GLAPI PFNGLMULTITEXCOORD1DVPROC glad_glMultiTexCoord1dv;
+#define glMultiTexCoord1dv glad_glMultiTexCoord1dv
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC)(GLenum target, GLfloat s);
+GLAPI PFNGLMULTITEXCOORD1FPROC glad_glMultiTexCoord1f;
+#define glMultiTexCoord1f glad_glMultiTexCoord1f
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC)(GLenum target, const GLfloat *v);
+GLAPI PFNGLMULTITEXCOORD1FVPROC glad_glMultiTexCoord1fv;
+#define glMultiTexCoord1fv glad_glMultiTexCoord1fv
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC)(GLenum target, GLint s);
+GLAPI PFNGLMULTITEXCOORD1IPROC glad_glMultiTexCoord1i;
+#define glMultiTexCoord1i glad_glMultiTexCoord1i
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC)(GLenum target, const GLint *v);
+GLAPI PFNGLMULTITEXCOORD1IVPROC glad_glMultiTexCoord1iv;
+#define glMultiTexCoord1iv glad_glMultiTexCoord1iv
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC)(GLenum target, GLshort s);
+GLAPI PFNGLMULTITEXCOORD1SPROC glad_glMultiTexCoord1s;
+#define glMultiTexCoord1s glad_glMultiTexCoord1s
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC)(GLenum target, const GLshort *v);
+GLAPI PFNGLMULTITEXCOORD1SVPROC glad_glMultiTexCoord1sv;
+#define glMultiTexCoord1sv glad_glMultiTexCoord1sv
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC)(GLenum target, GLdouble s, GLdouble t);
+GLAPI PFNGLMULTITEXCOORD2DPROC glad_glMultiTexCoord2d;
+#define glMultiTexCoord2d glad_glMultiTexCoord2d
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC)(GLenum target, const GLdouble *v);
+GLAPI PFNGLMULTITEXCOORD2DVPROC glad_glMultiTexCoord2dv;
+#define glMultiTexCoord2dv glad_glMultiTexCoord2dv
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC)(GLenum target, GLfloat s, GLfloat t);
+GLAPI PFNGLMULTITEXCOORD2FPROC glad_glMultiTexCoord2f;
+#define glMultiTexCoord2f glad_glMultiTexCoord2f
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC)(GLenum target, const GLfloat *v);
+GLAPI PFNGLMULTITEXCOORD2FVPROC glad_glMultiTexCoord2fv;
+#define glMultiTexCoord2fv glad_glMultiTexCoord2fv
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC)(GLenum target, GLint s, GLint t);
+GLAPI PFNGLMULTITEXCOORD2IPROC glad_glMultiTexCoord2i;
+#define glMultiTexCoord2i glad_glMultiTexCoord2i
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC)(GLenum target, const GLint *v);
+GLAPI PFNGLMULTITEXCOORD2IVPROC glad_glMultiTexCoord2iv;
+#define glMultiTexCoord2iv glad_glMultiTexCoord2iv
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC)(GLenum target, GLshort s, GLshort t);
+GLAPI PFNGLMULTITEXCOORD2SPROC glad_glMultiTexCoord2s;
+#define glMultiTexCoord2s glad_glMultiTexCoord2s
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC)(GLenum target, const GLshort *v);
+GLAPI PFNGLMULTITEXCOORD2SVPROC glad_glMultiTexCoord2sv;
+#define glMultiTexCoord2sv glad_glMultiTexCoord2sv
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r);
+GLAPI PFNGLMULTITEXCOORD3DPROC glad_glMultiTexCoord3d;
+#define glMultiTexCoord3d glad_glMultiTexCoord3d
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC)(GLenum target, const GLdouble *v);
+GLAPI PFNGLMULTITEXCOORD3DVPROC glad_glMultiTexCoord3dv;
+#define glMultiTexCoord3dv glad_glMultiTexCoord3dv
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r);
+GLAPI PFNGLMULTITEXCOORD3FPROC glad_glMultiTexCoord3f;
+#define glMultiTexCoord3f glad_glMultiTexCoord3f
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC)(GLenum target, const GLfloat *v);
+GLAPI PFNGLMULTITEXCOORD3FVPROC glad_glMultiTexCoord3fv;
+#define glMultiTexCoord3fv glad_glMultiTexCoord3fv
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC)(GLenum target, GLint s, GLint t, GLint r);
+GLAPI PFNGLMULTITEXCOORD3IPROC glad_glMultiTexCoord3i;
+#define glMultiTexCoord3i glad_glMultiTexCoord3i
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC)(GLenum target, const GLint *v);
+GLAPI PFNGLMULTITEXCOORD3IVPROC glad_glMultiTexCoord3iv;
+#define glMultiTexCoord3iv glad_glMultiTexCoord3iv
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC)(GLenum target, GLshort s, GLshort t, GLshort r);
+GLAPI PFNGLMULTITEXCOORD3SPROC glad_glMultiTexCoord3s;
+#define glMultiTexCoord3s glad_glMultiTexCoord3s
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC)(GLenum target, const GLshort *v);
+GLAPI PFNGLMULTITEXCOORD3SVPROC glad_glMultiTexCoord3sv;
+#define glMultiTexCoord3sv glad_glMultiTexCoord3sv
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+GLAPI PFNGLMULTITEXCOORD4DPROC glad_glMultiTexCoord4d;
+#define glMultiTexCoord4d glad_glMultiTexCoord4d
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC)(GLenum target, const GLdouble *v);
+GLAPI PFNGLMULTITEXCOORD4DVPROC glad_glMultiTexCoord4dv;
+#define glMultiTexCoord4dv glad_glMultiTexCoord4dv
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+GLAPI PFNGLMULTITEXCOORD4FPROC glad_glMultiTexCoord4f;
+#define glMultiTexCoord4f glad_glMultiTexCoord4f
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC)(GLenum target, const GLfloat *v);
+GLAPI PFNGLMULTITEXCOORD4FVPROC glad_glMultiTexCoord4fv;
+#define glMultiTexCoord4fv glad_glMultiTexCoord4fv
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC)(GLenum target, GLint s, GLint t, GLint r, GLint q);
+GLAPI PFNGLMULTITEXCOORD4IPROC glad_glMultiTexCoord4i;
+#define glMultiTexCoord4i glad_glMultiTexCoord4i
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC)(GLenum target, const GLint *v);
+GLAPI PFNGLMULTITEXCOORD4IVPROC glad_glMultiTexCoord4iv;
+#define glMultiTexCoord4iv glad_glMultiTexCoord4iv
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+GLAPI PFNGLMULTITEXCOORD4SPROC glad_glMultiTexCoord4s;
+#define glMultiTexCoord4s glad_glMultiTexCoord4s
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC)(GLenum target, const GLshort *v);
+GLAPI PFNGLMULTITEXCOORD4SVPROC glad_glMultiTexCoord4sv;
+#define glMultiTexCoord4sv glad_glMultiTexCoord4sv
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC)(const GLfloat *m);
+GLAPI PFNGLLOADTRANSPOSEMATRIXFPROC glad_glLoadTransposeMatrixf;
+#define glLoadTransposeMatrixf glad_glLoadTransposeMatrixf
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC)(const GLdouble *m);
+GLAPI PFNGLLOADTRANSPOSEMATRIXDPROC glad_glLoadTransposeMatrixd;
+#define glLoadTransposeMatrixd glad_glLoadTransposeMatrixd
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC)(const GLfloat *m);
+GLAPI PFNGLMULTTRANSPOSEMATRIXFPROC glad_glMultTransposeMatrixf;
+#define glMultTransposeMatrixf glad_glMultTransposeMatrixf
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC)(const GLdouble *m);
+GLAPI PFNGLMULTTRANSPOSEMATRIXDPROC glad_glMultTransposeMatrixd;
+#define glMultTransposeMatrixd glad_glMultTransposeMatrixd
+#endif
+#ifndef GL_VERSION_1_4
+#define GL_VERSION_1_4 1
+GLAPI int GLAD_GL_VERSION_1_4;
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+GLAPI PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate;
+#define glBlendFuncSeparate glad_glBlendFuncSeparate
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC)(GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);
+GLAPI PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays;
+#define glMultiDrawArrays glad_glMultiDrawArrays
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount);
+GLAPI PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements;
+#define glMultiDrawElements glad_glMultiDrawElements
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param);
+GLAPI PFNGLPOINTPARAMETERFPROC glad_glPointParameterf;
+#define glPointParameterf glad_glPointParameterf
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat *params);
+GLAPI PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv;
+#define glPointParameterfv glad_glPointParameterfv
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC)(GLenum pname, GLint param);
+GLAPI PFNGLPOINTPARAMETERIPROC glad_glPointParameteri;
+#define glPointParameteri glad_glPointParameteri
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC)(GLenum pname, const GLint *params);
+GLAPI PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv;
+#define glPointParameteriv glad_glPointParameteriv
+typedef void (APIENTRYP PFNGLFOGCOORDFPROC)(GLfloat coord);
+GLAPI PFNGLFOGCOORDFPROC glad_glFogCoordf;
+#define glFogCoordf glad_glFogCoordf
+typedef void (APIENTRYP PFNGLFOGCOORDFVPROC)(const GLfloat *coord);
+GLAPI PFNGLFOGCOORDFVPROC glad_glFogCoordfv;
+#define glFogCoordfv glad_glFogCoordfv
+typedef void (APIENTRYP PFNGLFOGCOORDDPROC)(GLdouble coord);
+GLAPI PFNGLFOGCOORDDPROC glad_glFogCoordd;
+#define glFogCoordd glad_glFogCoordd
+typedef void (APIENTRYP PFNGLFOGCOORDDVPROC)(const GLdouble *coord);
+GLAPI PFNGLFOGCOORDDVPROC glad_glFogCoorddv;
+#define glFogCoorddv glad_glFogCoorddv
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC)(GLenum type, GLsizei stride, const void *pointer);
+GLAPI PFNGLFOGCOORDPOINTERPROC glad_glFogCoordPointer;
+#define glFogCoordPointer glad_glFogCoordPointer
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC)(GLbyte red, GLbyte green, GLbyte blue);
+GLAPI PFNGLSECONDARYCOLOR3BPROC glad_glSecondaryColor3b;
+#define glSecondaryColor3b glad_glSecondaryColor3b
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC)(const GLbyte *v);
+GLAPI PFNGLSECONDARYCOLOR3BVPROC glad_glSecondaryColor3bv;
+#define glSecondaryColor3bv glad_glSecondaryColor3bv
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC)(GLdouble red, GLdouble green, GLdouble blue);
+GLAPI PFNGLSECONDARYCOLOR3DPROC glad_glSecondaryColor3d;
+#define glSecondaryColor3d glad_glSecondaryColor3d
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC)(const GLdouble *v);
+GLAPI PFNGLSECONDARYCOLOR3DVPROC glad_glSecondaryColor3dv;
+#define glSecondaryColor3dv glad_glSecondaryColor3dv
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC)(GLfloat red, GLfloat green, GLfloat blue);
+GLAPI PFNGLSECONDARYCOLOR3FPROC glad_glSecondaryColor3f;
+#define glSecondaryColor3f glad_glSecondaryColor3f
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC)(const GLfloat *v);
+GLAPI PFNGLSECONDARYCOLOR3FVPROC glad_glSecondaryColor3fv;
+#define glSecondaryColor3fv glad_glSecondaryColor3fv
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC)(GLint red, GLint green, GLint blue);
+GLAPI PFNGLSECONDARYCOLOR3IPROC glad_glSecondaryColor3i;
+#define glSecondaryColor3i glad_glSecondaryColor3i
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC)(const GLint *v);
+GLAPI PFNGLSECONDARYCOLOR3IVPROC glad_glSecondaryColor3iv;
+#define glSecondaryColor3iv glad_glSecondaryColor3iv
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC)(GLshort red, GLshort green, GLshort blue);
+GLAPI PFNGLSECONDARYCOLOR3SPROC glad_glSecondaryColor3s;
+#define glSecondaryColor3s glad_glSecondaryColor3s
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC)(const GLshort *v);
+GLAPI PFNGLSECONDARYCOLOR3SVPROC glad_glSecondaryColor3sv;
+#define glSecondaryColor3sv glad_glSecondaryColor3sv
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC)(GLubyte red, GLubyte green, GLubyte blue);
+GLAPI PFNGLSECONDARYCOLOR3UBPROC glad_glSecondaryColor3ub;
+#define glSecondaryColor3ub glad_glSecondaryColor3ub
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC)(const GLubyte *v);
+GLAPI PFNGLSECONDARYCOLOR3UBVPROC glad_glSecondaryColor3ubv;
+#define glSecondaryColor3ubv glad_glSecondaryColor3ubv
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC)(GLuint red, GLuint green, GLuint blue);
+GLAPI PFNGLSECONDARYCOLOR3UIPROC glad_glSecondaryColor3ui;
+#define glSecondaryColor3ui glad_glSecondaryColor3ui
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC)(const GLuint *v);
+GLAPI PFNGLSECONDARYCOLOR3UIVPROC glad_glSecondaryColor3uiv;
+#define glSecondaryColor3uiv glad_glSecondaryColor3uiv
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC)(GLushort red, GLushort green, GLushort blue);
+GLAPI PFNGLSECONDARYCOLOR3USPROC glad_glSecondaryColor3us;
+#define glSecondaryColor3us glad_glSecondaryColor3us
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC)(const GLushort *v);
+GLAPI PFNGLSECONDARYCOLOR3USVPROC glad_glSecondaryColor3usv;
+#define glSecondaryColor3usv glad_glSecondaryColor3usv
+typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI PFNGLSECONDARYCOLORPOINTERPROC glad_glSecondaryColorPointer;
+#define glSecondaryColorPointer glad_glSecondaryColorPointer
+typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC)(GLdouble x, GLdouble y);
+GLAPI PFNGLWINDOWPOS2DPROC glad_glWindowPos2d;
+#define glWindowPos2d glad_glWindowPos2d
+typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC)(const GLdouble *v);
+GLAPI PFNGLWINDOWPOS2DVPROC glad_glWindowPos2dv;
+#define glWindowPos2dv glad_glWindowPos2dv
+typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC)(GLfloat x, GLfloat y);
+GLAPI PFNGLWINDOWPOS2FPROC glad_glWindowPos2f;
+#define glWindowPos2f glad_glWindowPos2f
+typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC)(const GLfloat *v);
+GLAPI PFNGLWINDOWPOS2FVPROC glad_glWindowPos2fv;
+#define glWindowPos2fv glad_glWindowPos2fv
+typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC)(GLint x, GLint y);
+GLAPI PFNGLWINDOWPOS2IPROC glad_glWindowPos2i;
+#define glWindowPos2i glad_glWindowPos2i
+typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC)(const GLint *v);
+GLAPI PFNGLWINDOWPOS2IVPROC glad_glWindowPos2iv;
+#define glWindowPos2iv glad_glWindowPos2iv
+typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC)(GLshort x, GLshort y);
+GLAPI PFNGLWINDOWPOS2SPROC glad_glWindowPos2s;
+#define glWindowPos2s glad_glWindowPos2s
+typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC)(const GLshort *v);
+GLAPI PFNGLWINDOWPOS2SVPROC glad_glWindowPos2sv;
+#define glWindowPos2sv glad_glWindowPos2sv
+typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC)(GLdouble x, GLdouble y, GLdouble z);
+GLAPI PFNGLWINDOWPOS3DPROC glad_glWindowPos3d;
+#define glWindowPos3d glad_glWindowPos3d
+typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC)(const GLdouble *v);
+GLAPI PFNGLWINDOWPOS3DVPROC glad_glWindowPos3dv;
+#define glWindowPos3dv glad_glWindowPos3dv
+typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC)(GLfloat x, GLfloat y, GLfloat z);
+GLAPI PFNGLWINDOWPOS3FPROC glad_glWindowPos3f;
+#define glWindowPos3f glad_glWindowPos3f
+typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC)(const GLfloat *v);
+GLAPI PFNGLWINDOWPOS3FVPROC glad_glWindowPos3fv;
+#define glWindowPos3fv glad_glWindowPos3fv
+typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC)(GLint x, GLint y, GLint z);
+GLAPI PFNGLWINDOWPOS3IPROC glad_glWindowPos3i;
+#define glWindowPos3i glad_glWindowPos3i
+typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC)(const GLint *v);
+GLAPI PFNGLWINDOWPOS3IVPROC glad_glWindowPos3iv;
+#define glWindowPos3iv glad_glWindowPos3iv
+typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC)(GLshort x, GLshort y, GLshort z);
+GLAPI PFNGLWINDOWPOS3SPROC glad_glWindowPos3s;
+#define glWindowPos3s glad_glWindowPos3s
+typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC)(const GLshort *v);
+GLAPI PFNGLWINDOWPOS3SVPROC glad_glWindowPos3sv;
+#define glWindowPos3sv glad_glWindowPos3sv
+typedef void (APIENTRYP PFNGLBLENDCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GLAPI PFNGLBLENDCOLORPROC glad_glBlendColor;
+#define glBlendColor glad_glBlendColor
+typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC)(GLenum mode);
+GLAPI PFNGLBLENDEQUATIONPROC glad_glBlendEquation;
+#define glBlendEquation glad_glBlendEquation
+#endif
+#ifndef GL_VERSION_1_5
+#define GL_VERSION_1_5 1
+GLAPI int GLAD_GL_VERSION_1_5;
+typedef void (APIENTRYP PFNGLGENQUERIESPROC)(GLsizei n, GLuint *ids);
+GLAPI PFNGLGENQUERIESPROC glad_glGenQueries;
+#define glGenQueries glad_glGenQueries
+typedef void (APIENTRYP PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint *ids);
+GLAPI PFNGLDELETEQUERIESPROC glad_glDeleteQueries;
+#define glDeleteQueries glad_glDeleteQueries
+typedef GLboolean (APIENTRYP PFNGLISQUERYPROC)(GLuint id);
+GLAPI PFNGLISQUERYPROC glad_glIsQuery;
+#define glIsQuery glad_glIsQuery
+typedef void (APIENTRYP PFNGLBEGINQUERYPROC)(GLenum target, GLuint id);
+GLAPI PFNGLBEGINQUERYPROC glad_glBeginQuery;
+#define glBeginQuery glad_glBeginQuery
+typedef void (APIENTRYP PFNGLENDQUERYPROC)(GLenum target);
+GLAPI PFNGLENDQUERYPROC glad_glEndQuery;
+#define glEndQuery glad_glEndQuery
+typedef void (APIENTRYP PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint *params);
+GLAPI PFNGLGETQUERYIVPROC glad_glGetQueryiv;
+#define glGetQueryiv glad_glGetQueryiv
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC)(GLuint id, GLenum pname, GLint *params);
+GLAPI PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv;
+#define glGetQueryObjectiv glad_glGetQueryObjectiv
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint *params);
+GLAPI PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv;
+#define glGetQueryObjectuiv glad_glGetQueryObjectuiv
+typedef void (APIENTRYP PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer);
+GLAPI PFNGLBINDBUFFERPROC glad_glBindBuffer;
+#define glBindBuffer glad_glBindBuffer
+typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint *buffers);
+GLAPI PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers;
+#define glDeleteBuffers glad_glDeleteBuffers
+typedef void (APIENTRYP PFNGLGENBUFFERSPROC)(GLsizei n, GLuint *buffers);
+GLAPI PFNGLGENBUFFERSPROC glad_glGenBuffers;
+#define glGenBuffers glad_glGenBuffers
+typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC)(GLuint buffer);
+GLAPI PFNGLISBUFFERPROC glad_glIsBuffer;
+#define glIsBuffer glad_glIsBuffer
+typedef void (APIENTRYP PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+GLAPI PFNGLBUFFERDATAPROC glad_glBufferData;
+#define glBufferData glad_glBufferData
+typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+GLAPI PFNGLBUFFERSUBDATAPROC glad_glBufferSubData;
+#define glBufferSubData glad_glBufferSubData
+typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, void *data);
+GLAPI PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData;
+#define glGetBufferSubData glad_glGetBufferSubData
+typedef void * (APIENTRYP PFNGLMAPBUFFERPROC)(GLenum target, GLenum access);
+GLAPI PFNGLMAPBUFFERPROC glad_glMapBuffer;
+#define glMapBuffer glad_glMapBuffer
+typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC)(GLenum target);
+GLAPI PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer;
+#define glUnmapBuffer glad_glUnmapBuffer
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params);
+GLAPI PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv;
+#define glGetBufferParameteriv glad_glGetBufferParameteriv
+typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, void **params);
+GLAPI PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv;
+#define glGetBufferPointerv glad_glGetBufferPointerv
+#endif
+#ifndef GL_VERSION_2_0
+#define GL_VERSION_2_0 1
+GLAPI int GLAD_GL_VERSION_2_0;
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha);
+GLAPI PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate;
+#define glBlendEquationSeparate glad_glBlendEquationSeparate
+typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum *bufs);
+GLAPI PFNGLDRAWBUFFERSPROC glad_glDrawBuffers;
+#define glDrawBuffers glad_glDrawBuffers
+typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+GLAPI PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate;
+#define glStencilOpSeparate glad_glStencilOpSeparate
+typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face, GLenum func, GLint ref, GLuint mask);
+GLAPI PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate;
+#define glStencilFuncSeparate glad_glStencilFuncSeparate
+typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask);
+GLAPI PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate;
+#define glStencilMaskSeparate glad_glStencilMaskSeparate
+typedef void (APIENTRYP PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader);
+GLAPI PFNGLATTACHSHADERPROC glad_glAttachShader;
+#define glAttachShader glad_glAttachShader
+typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar *name);
+GLAPI PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation;
+#define glBindAttribLocation glad_glBindAttribLocation
+typedef void (APIENTRYP PFNGLCOMPILESHADERPROC)(GLuint shader);
+GLAPI PFNGLCOMPILESHADERPROC glad_glCompileShader;
+#define glCompileShader glad_glCompileShader
+typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC)(void);
+GLAPI PFNGLCREATEPROGRAMPROC glad_glCreateProgram;
+#define glCreateProgram glad_glCreateProgram
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC)(GLenum type);
+GLAPI PFNGLCREATESHADERPROC glad_glCreateShader;
+#define glCreateShader glad_glCreateShader
+typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC)(GLuint program);
+GLAPI PFNGLDELETEPROGRAMPROC glad_glDeleteProgram;
+#define glDeleteProgram glad_glDeleteProgram
+typedef void (APIENTRYP PFNGLDELETESHADERPROC)(GLuint shader);
+GLAPI PFNGLDELETESHADERPROC glad_glDeleteShader;
+#define glDeleteShader glad_glDeleteShader
+typedef void (APIENTRYP PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader);
+GLAPI PFNGLDETACHSHADERPROC glad_glDetachShader;
+#define glDetachShader glad_glDetachShader
+typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index);
+GLAPI PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray;
+#define glDisableVertexAttribArray glad_glDisableVertexAttribArray
+typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index);
+GLAPI PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray;
+#define glEnableVertexAttribArray glad_glEnableVertexAttribArray
+typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GLAPI PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib;
+#define glGetActiveAttrib glad_glGetActiveAttrib
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GLAPI PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform;
+#define glGetActiveUniform glad_glGetActiveUniform
+typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+GLAPI PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders;
+#define glGetAttachedShaders glad_glGetAttachedShaders
+typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar *name);
+GLAPI PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation;
+#define glGetAttribLocation glad_glGetAttribLocation
+typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint *params);
+GLAPI PFNGLGETPROGRAMIVPROC glad_glGetProgramiv;
+#define glGetProgramiv glad_glGetProgramiv
+typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GLAPI PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog;
+#define glGetProgramInfoLog glad_glGetProgramInfoLog
+typedef void (APIENTRYP PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint *params);
+GLAPI PFNGLGETSHADERIVPROC glad_glGetShaderiv;
+#define glGetShaderiv glad_glGetShaderiv
+typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GLAPI PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog;
+#define glGetShaderInfoLog glad_glGetShaderInfoLog
+typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+GLAPI PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource;
+#define glGetShaderSource glad_glGetShaderSource
+typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar *name);
+GLAPI PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation;
+#define glGetUniformLocation glad_glGetUniformLocation
+typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat *params);
+GLAPI PFNGLGETUNIFORMFVPROC glad_glGetUniformfv;
+#define glGetUniformfv glad_glGetUniformfv
+typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint *params);
+GLAPI PFNGLGETUNIFORMIVPROC glad_glGetUniformiv;
+#define glGetUniformiv glad_glGetUniformiv
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble *params);
+GLAPI PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv;
+#define glGetVertexAttribdv glad_glGetVertexAttribdv
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat *params);
+GLAPI PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv;
+#define glGetVertexAttribfv glad_glGetVertexAttribfv
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint *params);
+GLAPI PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv;
+#define glGetVertexAttribiv glad_glGetVertexAttribiv
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, void **pointer);
+GLAPI PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv;
+#define glGetVertexAttribPointerv glad_glGetVertexAttribPointerv
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC)(GLuint program);
+GLAPI PFNGLISPROGRAMPROC glad_glIsProgram;
+#define glIsProgram glad_glIsProgram
+typedef GLboolean (APIENTRYP PFNGLISSHADERPROC)(GLuint shader);
+GLAPI PFNGLISSHADERPROC glad_glIsShader;
+#define glIsShader glad_glIsShader
+typedef void (APIENTRYP PFNGLLINKPROGRAMPROC)(GLuint program);
+GLAPI PFNGLLINKPROGRAMPROC glad_glLinkProgram;
+#define glLinkProgram glad_glLinkProgram
+typedef void (APIENTRYP PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+GLAPI PFNGLSHADERSOURCEPROC glad_glShaderSource;
+#define glShaderSource glad_glShaderSource
+typedef void (APIENTRYP PFNGLUSEPROGRAMPROC)(GLuint program);
+GLAPI PFNGLUSEPROGRAMPROC glad_glUseProgram;
+#define glUseProgram glad_glUseProgram
+typedef void (APIENTRYP PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0);
+GLAPI PFNGLUNIFORM1FPROC glad_glUniform1f;
+#define glUniform1f glad_glUniform1f
+typedef void (APIENTRYP PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1);
+GLAPI PFNGLUNIFORM2FPROC glad_glUniform2f;
+#define glUniform2f glad_glUniform2f
+typedef void (APIENTRYP PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI PFNGLUNIFORM3FPROC glad_glUniform3f;
+#define glUniform3f glad_glUniform3f
+typedef void (APIENTRYP PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI PFNGLUNIFORM4FPROC glad_glUniform4f;
+#define glUniform4f glad_glUniform4f
+typedef void (APIENTRYP PFNGLUNIFORM1IPROC)(GLint location, GLint v0);
+GLAPI PFNGLUNIFORM1IPROC glad_glUniform1i;
+#define glUniform1i glad_glUniform1i
+typedef void (APIENTRYP PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1);
+GLAPI PFNGLUNIFORM2IPROC glad_glUniform2i;
+#define glUniform2i glad_glUniform2i
+typedef void (APIENTRYP PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI PFNGLUNIFORM3IPROC glad_glUniform3i;
+#define glUniform3i glad_glUniform3i
+typedef void (APIENTRYP PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI PFNGLUNIFORM4IPROC glad_glUniform4i;
+#define glUniform4i glad_glUniform4i
+typedef void (APIENTRYP PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat *value);
+GLAPI PFNGLUNIFORM1FVPROC glad_glUniform1fv;
+#define glUniform1fv glad_glUniform1fv
+typedef void (APIENTRYP PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat *value);
+GLAPI PFNGLUNIFORM2FVPROC glad_glUniform2fv;
+#define glUniform2fv glad_glUniform2fv
+typedef void (APIENTRYP PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat *value);
+GLAPI PFNGLUNIFORM3FVPROC glad_glUniform3fv;
+#define glUniform3fv glad_glUniform3fv
+typedef void (APIENTRYP PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat *value);
+GLAPI PFNGLUNIFORM4FVPROC glad_glUniform4fv;
+#define glUniform4fv glad_glUniform4fv
+typedef void (APIENTRYP PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint *value);
+GLAPI PFNGLUNIFORM1IVPROC glad_glUniform1iv;
+#define glUniform1iv glad_glUniform1iv
+typedef void (APIENTRYP PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint *value);
+GLAPI PFNGLUNIFORM2IVPROC glad_glUniform2iv;
+#define glUniform2iv glad_glUniform2iv
+typedef void (APIENTRYP PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint *value);
+GLAPI PFNGLUNIFORM3IVPROC glad_glUniform3iv;
+#define glUniform3iv glad_glUniform3iv
+typedef void (APIENTRYP PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint *value);
+GLAPI PFNGLUNIFORM4IVPROC glad_glUniform4iv;
+#define glUniform4iv glad_glUniform4iv
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv;
+#define glUniformMatrix2fv glad_glUniformMatrix2fv
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv;
+#define glUniformMatrix3fv glad_glUniformMatrix3fv
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv;
+#define glUniformMatrix4fv glad_glUniformMatrix4fv
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC)(GLuint program);
+GLAPI PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram;
+#define glValidateProgram glad_glValidateProgram
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC)(GLuint index, GLdouble x);
+GLAPI PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d;
+#define glVertexAttrib1d glad_glVertexAttrib1d
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble *v);
+GLAPI PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv;
+#define glVertexAttrib1dv glad_glVertexAttrib1dv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x);
+GLAPI PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f;
+#define glVertexAttrib1f glad_glVertexAttrib1f
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat *v);
+GLAPI PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv;
+#define glVertexAttrib1fv glad_glVertexAttrib1fv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC)(GLuint index, GLshort x);
+GLAPI PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s;
+#define glVertexAttrib1s glad_glVertexAttrib1s
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC)(GLuint index, const GLshort *v);
+GLAPI PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv;
+#define glVertexAttrib1sv glad_glVertexAttrib1sv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y);
+GLAPI PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d;
+#define glVertexAttrib2d glad_glVertexAttrib2d
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble *v);
+GLAPI PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv;
+#define glVertexAttrib2dv glad_glVertexAttrib2dv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y);
+GLAPI PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f;
+#define glVertexAttrib2f glad_glVertexAttrib2f
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat *v);
+GLAPI PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv;
+#define glVertexAttrib2fv glad_glVertexAttrib2fv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y);
+GLAPI PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s;
+#define glVertexAttrib2s glad_glVertexAttrib2s
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC)(GLuint index, const GLshort *v);
+GLAPI PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv;
+#define glVertexAttrib2sv glad_glVertexAttrib2sv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d;
+#define glVertexAttrib3d glad_glVertexAttrib3d
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble *v);
+GLAPI PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv;
+#define glVertexAttrib3dv glad_glVertexAttrib3dv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GLAPI PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f;
+#define glVertexAttrib3f glad_glVertexAttrib3f
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat *v);
+GLAPI PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv;
+#define glVertexAttrib3fv glad_glVertexAttrib3fv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z);
+GLAPI PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s;
+#define glVertexAttrib3s glad_glVertexAttrib3s
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC)(GLuint index, const GLshort *v);
+GLAPI PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv;
+#define glVertexAttrib3sv glad_glVertexAttrib3sv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte *v);
+GLAPI PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv;
+#define glVertexAttrib4Nbv glad_glVertexAttrib4Nbv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC)(GLuint index, const GLint *v);
+GLAPI PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv;
+#define glVertexAttrib4Niv glad_glVertexAttrib4Niv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort *v);
+GLAPI PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv;
+#define glVertexAttrib4Nsv glad_glVertexAttrib4Nsv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+GLAPI PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub;
+#define glVertexAttrib4Nub glad_glVertexAttrib4Nub
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte *v);
+GLAPI PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv;
+#define glVertexAttrib4Nubv glad_glVertexAttrib4Nubv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint *v);
+GLAPI PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv;
+#define glVertexAttrib4Nuiv glad_glVertexAttrib4Nuiv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort *v);
+GLAPI PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv;
+#define glVertexAttrib4Nusv glad_glVertexAttrib4Nusv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte *v);
+GLAPI PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv;
+#define glVertexAttrib4bv glad_glVertexAttrib4bv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d;
+#define glVertexAttrib4d glad_glVertexAttrib4d
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble *v);
+GLAPI PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv;
+#define glVertexAttrib4dv glad_glVertexAttrib4dv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f;
+#define glVertexAttrib4f glad_glVertexAttrib4f
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat *v);
+GLAPI PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv;
+#define glVertexAttrib4fv glad_glVertexAttrib4fv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC)(GLuint index, const GLint *v);
+GLAPI PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv;
+#define glVertexAttrib4iv glad_glVertexAttrib4iv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s;
+#define glVertexAttrib4s glad_glVertexAttrib4s
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC)(GLuint index, const GLshort *v);
+GLAPI PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv;
+#define glVertexAttrib4sv glad_glVertexAttrib4sv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte *v);
+GLAPI PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv;
+#define glVertexAttrib4ubv glad_glVertexAttrib4ubv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint *v);
+GLAPI PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv;
+#define glVertexAttrib4uiv glad_glVertexAttrib4uiv
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC)(GLuint index, const GLushort *v);
+GLAPI PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv;
+#define glVertexAttrib4usv glad_glVertexAttrib4usv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+GLAPI PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer;
+#define glVertexAttribPointer glad_glVertexAttribPointer
+#endif
+#ifndef GL_VERSION_2_1
+#define GL_VERSION_2_1 1
+GLAPI int GLAD_GL_VERSION_2_1;
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv;
+#define glUniformMatrix2x3fv glad_glUniformMatrix2x3fv
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv;
+#define glUniformMatrix3x2fv glad_glUniformMatrix3x2fv
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv;
+#define glUniformMatrix2x4fv glad_glUniformMatrix2x4fv
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv;
+#define glUniformMatrix4x2fv glad_glUniformMatrix4x2fv
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv;
+#define glUniformMatrix3x4fv glad_glUniformMatrix3x4fv
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv;
+#define glUniformMatrix4x3fv glad_glUniformMatrix4x3fv
+#endif
+#ifndef GL_VERSION_3_0
+#define GL_VERSION_3_0 1
+GLAPI int GLAD_GL_VERSION_3_0;
+typedef void (APIENTRYP PFNGLCOLORMASKIPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+GLAPI PFNGLCOLORMASKIPROC glad_glColorMaski;
+#define glColorMaski glad_glColorMaski
+typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC)(GLenum target, GLuint index, GLboolean *data);
+GLAPI PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v;
+#define glGetBooleani_v glad_glGetBooleani_v
+typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint *data);
+GLAPI PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v;
+#define glGetIntegeri_v glad_glGetIntegeri_v
+typedef void (APIENTRYP PFNGLENABLEIPROC)(GLenum target, GLuint index);
+GLAPI PFNGLENABLEIPROC glad_glEnablei;
+#define glEnablei glad_glEnablei
+typedef void (APIENTRYP PFNGLDISABLEIPROC)(GLenum target, GLuint index);
+GLAPI PFNGLDISABLEIPROC glad_glDisablei;
+#define glDisablei glad_glDisablei
+typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC)(GLenum target, GLuint index);
+GLAPI PFNGLISENABLEDIPROC glad_glIsEnabledi;
+#define glIsEnabledi glad_glIsEnabledi
+typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode);
+GLAPI PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback;
+#define glBeginTransformFeedback glad_glBeginTransformFeedback
+typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC)(void);
+GLAPI PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback;
+#define glEndTransformFeedback glad_glEndTransformFeedback
+typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange;
+#define glBindBufferRange glad_glBindBufferRange
+typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer);
+GLAPI PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase;
+#define glBindBufferBase glad_glBindBufferBase
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+GLAPI PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings;
+#define glTransformFeedbackVaryings glad_glTransformFeedbackVaryings
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+GLAPI PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying;
+#define glGetTransformFeedbackVarying glad_glGetTransformFeedbackVarying
+typedef void (APIENTRYP PFNGLCLAMPCOLORPROC)(GLenum target, GLenum clamp);
+GLAPI PFNGLCLAMPCOLORPROC glad_glClampColor;
+#define glClampColor glad_glClampColor
+typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC)(GLuint id, GLenum mode);
+GLAPI PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender;
+#define glBeginConditionalRender glad_glBeginConditionalRender
+typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC)(void);
+GLAPI PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender;
+#define glEndConditionalRender glad_glEndConditionalRender
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer;
+#define glVertexAttribIPointer glad_glVertexAttribIPointer
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index, GLenum pname, GLint *params);
+GLAPI PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv;
+#define glGetVertexAttribIiv glad_glGetVertexAttribIiv
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index, GLenum pname, GLuint *params);
+GLAPI PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv;
+#define glGetVertexAttribIuiv glad_glGetVertexAttribIuiv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC)(GLuint index, GLint x);
+GLAPI PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i;
+#define glVertexAttribI1i glad_glVertexAttribI1i
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC)(GLuint index, GLint x, GLint y);
+GLAPI PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i;
+#define glVertexAttribI2i glad_glVertexAttribI2i
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC)(GLuint index, GLint x, GLint y, GLint z);
+GLAPI PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i;
+#define glVertexAttribI3i glad_glVertexAttribI3i
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i;
+#define glVertexAttribI4i glad_glVertexAttribI4i
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC)(GLuint index, GLuint x);
+GLAPI PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui;
+#define glVertexAttribI1ui glad_glVertexAttribI1ui
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC)(GLuint index, GLuint x, GLuint y);
+GLAPI PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui;
+#define glVertexAttribI2ui glad_glVertexAttribI2ui
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z);
+GLAPI PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui;
+#define glVertexAttribI3ui glad_glVertexAttribI3ui
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui;
+#define glVertexAttribI4ui glad_glVertexAttribI4ui
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC)(GLuint index, const GLint *v);
+GLAPI PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv;
+#define glVertexAttribI1iv glad_glVertexAttribI1iv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC)(GLuint index, const GLint *v);
+GLAPI PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv;
+#define glVertexAttribI2iv glad_glVertexAttribI2iv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC)(GLuint index, const GLint *v);
+GLAPI PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv;
+#define glVertexAttribI3iv glad_glVertexAttribI3iv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC)(GLuint index, const GLint *v);
+GLAPI PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv;
+#define glVertexAttribI4iv glad_glVertexAttribI4iv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC)(GLuint index, const GLuint *v);
+GLAPI PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv;
+#define glVertexAttribI1uiv glad_glVertexAttribI1uiv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC)(GLuint index, const GLuint *v);
+GLAPI PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv;
+#define glVertexAttribI2uiv glad_glVertexAttribI2uiv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC)(GLuint index, const GLuint *v);
+GLAPI PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv;
+#define glVertexAttribI3uiv glad_glVertexAttribI3uiv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index, const GLuint *v);
+GLAPI PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv;
+#define glVertexAttribI4uiv glad_glVertexAttribI4uiv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC)(GLuint index, const GLbyte *v);
+GLAPI PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv;
+#define glVertexAttribI4bv glad_glVertexAttribI4bv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC)(GLuint index, const GLshort *v);
+GLAPI PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv;
+#define glVertexAttribI4sv glad_glVertexAttribI4sv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC)(GLuint index, const GLubyte *v);
+GLAPI PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv;
+#define glVertexAttribI4ubv glad_glVertexAttribI4ubv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC)(GLuint index, const GLushort *v);
+GLAPI PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv;
+#define glVertexAttribI4usv glad_glVertexAttribI4usv
+typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC)(GLuint program, GLint location, GLuint *params);
+GLAPI PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv;
+#define glGetUniformuiv glad_glGetUniformuiv
+typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC)(GLuint program, GLuint color, const GLchar *name);
+GLAPI PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation;
+#define glBindFragDataLocation glad_glBindFragDataLocation
+typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC)(GLuint program, const GLchar *name);
+GLAPI PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation;
+#define glGetFragDataLocation glad_glGetFragDataLocation
+typedef void (APIENTRYP PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0);
+GLAPI PFNGLUNIFORM1UIPROC glad_glUniform1ui;
+#define glUniform1ui glad_glUniform1ui
+typedef void (APIENTRYP PFNGLUNIFORM2UIPROC)(GLint location, GLuint v0, GLuint v1);
+GLAPI PFNGLUNIFORM2UIPROC glad_glUniform2ui;
+#define glUniform2ui glad_glUniform2ui
+typedef void (APIENTRYP PFNGLUNIFORM3UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI PFNGLUNIFORM3UIPROC glad_glUniform3ui;
+#define glUniform3ui glad_glUniform3ui
+typedef void (APIENTRYP PFNGLUNIFORM4UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI PFNGLUNIFORM4UIPROC glad_glUniform4ui;
+#define glUniform4ui glad_glUniform4ui
+typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC)(GLint location, GLsizei count, const GLuint *value);
+GLAPI PFNGLUNIFORM1UIVPROC glad_glUniform1uiv;
+#define glUniform1uiv glad_glUniform1uiv
+typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC)(GLint location, GLsizei count, const GLuint *value);
+GLAPI PFNGLUNIFORM2UIVPROC glad_glUniform2uiv;
+#define glUniform2uiv glad_glUniform2uiv
+typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC)(GLint location, GLsizei count, const GLuint *value);
+GLAPI PFNGLUNIFORM3UIVPROC glad_glUniform3uiv;
+#define glUniform3uiv glad_glUniform3uiv
+typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC)(GLint location, GLsizei count, const GLuint *value);
+GLAPI PFNGLUNIFORM4UIVPROC glad_glUniform4uiv;
+#define glUniform4uiv glad_glUniform4uiv
+typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, const GLint *params);
+GLAPI PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv;
+#define glTexParameterIiv glad_glTexParameterIiv
+typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, const GLuint *params);
+GLAPI PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv;
+#define glTexParameterIuiv glad_glTexParameterIuiv
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, GLint *params);
+GLAPI PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv;
+#define glGetTexParameterIiv glad_glGetTexParameterIiv
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, GLuint *params);
+GLAPI PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv;
+#define glGetTexParameterIuiv glad_glGetTexParameterIuiv
+typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC)(GLenum buffer, GLint drawbuffer, const GLint *value);
+GLAPI PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv;
+#define glClearBufferiv glad_glClearBufferiv
+typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC)(GLenum buffer, GLint drawbuffer, const GLuint *value);
+GLAPI PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv;
+#define glClearBufferuiv glad_glClearBufferuiv
+typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC)(GLenum buffer, GLint drawbuffer, const GLfloat *value);
+GLAPI PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv;
+#define glClearBufferfv glad_glClearBufferfv
+typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+GLAPI PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi;
+#define glClearBufferfi glad_glClearBufferfi
+typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC)(GLenum name, GLuint index);
+GLAPI PFNGLGETSTRINGIPROC glad_glGetStringi;
+#define glGetStringi glad_glGetStringi
+typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer);
+GLAPI PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer;
+#define glIsRenderbuffer glad_glIsRenderbuffer
+typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer);
+GLAPI PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer;
+#define glBindRenderbuffer glad_glBindRenderbuffer
+typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint *renderbuffers);
+GLAPI PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers;
+#define glDeleteRenderbuffers glad_glDeleteRenderbuffers
+typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers);
+GLAPI PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers;
+#define glGenRenderbuffers glad_glGenRenderbuffers
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage;
+#define glRenderbufferStorage glad_glRenderbufferStorage
+typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params);
+GLAPI PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv;
+#define glGetRenderbufferParameteriv glad_glGetRenderbufferParameteriv
+typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer);
+GLAPI PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer;
+#define glIsFramebuffer glad_glIsFramebuffer
+typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer);
+GLAPI PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer;
+#define glBindFramebuffer glad_glBindFramebuffer
+typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint *framebuffers);
+GLAPI PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers;
+#define glDeleteFramebuffers glad_glDeleteFramebuffers
+typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers);
+GLAPI PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers;
+#define glGenFramebuffers glad_glGenFramebuffers
+typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target);
+GLAPI PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus;
+#define glCheckFramebufferStatus glad_glCheckFramebufferStatus
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D;
+#define glFramebufferTexture1D glad_glFramebufferTexture1D
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D;
+#define glFramebufferTexture2D glad_glFramebufferTexture2D
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+GLAPI PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D;
+#define glFramebufferTexture3D glad_glFramebufferTexture3D
+typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GLAPI PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer;
+#define glFramebufferRenderbuffer glad_glFramebufferRenderbuffer
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint *params);
+GLAPI PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv;
+#define glGetFramebufferAttachmentParameteriv glad_glGetFramebufferAttachmentParameteriv
+typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC)(GLenum target);
+GLAPI PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap;
+#define glGenerateMipmap glad_glGenerateMipmap
+typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+GLAPI PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer;
+#define glBlitFramebuffer glad_glBlitFramebuffer
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample;
+#define glRenderbufferStorageMultisample glad_glRenderbufferStorageMultisample
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GLAPI PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer;
+#define glFramebufferTextureLayer glad_glFramebufferTextureLayer
+typedef void * (APIENTRYP PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GLAPI PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange;
+#define glMapBufferRange glad_glMapBufferRange
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length);
+GLAPI PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange;
+#define glFlushMappedBufferRange glad_glFlushMappedBufferRange
+typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC)(GLuint array);
+GLAPI PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray;
+#define glBindVertexArray glad_glBindVertexArray
+typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint *arrays);
+GLAPI PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays;
+#define glDeleteVertexArrays glad_glDeleteVertexArrays
+typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint *arrays);
+GLAPI PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays;
+#define glGenVertexArrays glad_glGenVertexArrays
+typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC)(GLuint array);
+GLAPI PFNGLISVERTEXARRAYPROC glad_glIsVertexArray;
+#define glIsVertexArray glad_glIsVertexArray
+#endif
+#ifndef GL_VERSION_3_1
+#define GL_VERSION_3_1 1
+GLAPI int GLAD_GL_VERSION_3_1;
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+GLAPI PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced;
+#define glDrawArraysInstanced glad_glDrawArraysInstanced
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+GLAPI PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced;
+#define glDrawElementsInstanced glad_glDrawElementsInstanced
+typedef void (APIENTRYP PFNGLTEXBUFFERPROC)(GLenum target, GLenum internalformat, GLuint buffer);
+GLAPI PFNGLTEXBUFFERPROC glad_glTexBuffer;
+#define glTexBuffer glad_glTexBuffer
+typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC)(GLuint index);
+GLAPI PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex;
+#define glPrimitiveRestartIndex glad_glPrimitiveRestartIndex
+typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+GLAPI PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData;
+#define glCopyBufferSubData glad_glCopyBufferSubData
+typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC)(GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+GLAPI PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices;
+#define glGetUniformIndices glad_glGetUniformIndices
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC)(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+GLAPI PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv;
+#define glGetActiveUniformsiv glad_glGetActiveUniformsiv
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);
+GLAPI PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName;
+#define glGetActiveUniformName glad_glGetActiveUniformName
+typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC)(GLuint program, const GLchar *uniformBlockName);
+GLAPI PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex;
+#define glGetUniformBlockIndex glad_glGetUniformBlockIndex
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+GLAPI PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv;
+#define glGetActiveUniformBlockiv glad_glGetActiveUniformBlockiv
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+GLAPI PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName;
+#define glGetActiveUniformBlockName glad_glGetActiveUniformBlockName
+typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+GLAPI PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding;
+#define glUniformBlockBinding glad_glUniformBlockBinding
+#endif
+#ifndef GL_VERSION_3_2
+#define GL_VERSION_3_2 1
+GLAPI int GLAD_GL_VERSION_3_2;
+typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GLAPI PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex;
+#define glDrawElementsBaseVertex glad_glDrawElementsBaseVertex
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GLAPI PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex;
+#define glDrawRangeElementsBaseVertex glad_glDrawRangeElementsBaseVertex
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+GLAPI PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex;
+#define glDrawElementsInstancedBaseVertex glad_glDrawElementsInstancedBaseVertex
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex);
+GLAPI PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex;
+#define glMultiDrawElementsBaseVertex glad_glMultiDrawElementsBaseVertex
+typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC)(GLenum mode);
+GLAPI PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex;
+#define glProvokingVertex glad_glProvokingVertex
+typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC)(GLenum condition, GLbitfield flags);
+GLAPI PFNGLFENCESYNCPROC glad_glFenceSync;
+#define glFenceSync glad_glFenceSync
+typedef GLboolean (APIENTRYP PFNGLISSYNCPROC)(GLsync sync);
+GLAPI PFNGLISSYNCPROC glad_glIsSync;
+#define glIsSync glad_glIsSync
+typedef void (APIENTRYP PFNGLDELETESYNCPROC)(GLsync sync);
+GLAPI PFNGLDELETESYNCPROC glad_glDeleteSync;
+#define glDeleteSync glad_glDeleteSync
+typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout);
+GLAPI PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync;
+#define glClientWaitSync glad_glClientWaitSync
+typedef void (APIENTRYP PFNGLWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout);
+GLAPI PFNGLWAITSYNCPROC glad_glWaitSync;
+#define glWaitSync glad_glWaitSync
+typedef void (APIENTRYP PFNGLGETINTEGER64VPROC)(GLenum pname, GLint64 *data);
+GLAPI PFNGLGETINTEGER64VPROC glad_glGetInteger64v;
+#define glGetInteger64v glad_glGetInteger64v
+typedef void (APIENTRYP PFNGLGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values);
+GLAPI PFNGLGETSYNCIVPROC glad_glGetSynciv;
+#define glGetSynciv glad_glGetSynciv
+typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC)(GLenum target, GLuint index, GLint64 *data);
+GLAPI PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v;
+#define glGetInteger64i_v glad_glGetInteger64i_v
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum target, GLenum pname, GLint64 *params);
+GLAPI PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v;
+#define glGetBufferParameteri64v glad_glGetBufferParameteri64v
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level);
+GLAPI PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture;
+#define glFramebufferTexture glad_glFramebufferTexture
+typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample;
+#define glTexImage2DMultisample glad_glTexImage2DMultisample
+typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+GLAPI PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample;
+#define glTexImage3DMultisample glad_glTexImage3DMultisample
+typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC)(GLenum pname, GLuint index, GLfloat *val);
+GLAPI PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv;
+#define glGetMultisamplefv glad_glGetMultisamplefv
+typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC)(GLuint maskNumber, GLbitfield mask);
+GLAPI PFNGLSAMPLEMASKIPROC glad_glSampleMaski;
+#define glSampleMaski glad_glSampleMaski
+#endif
+#ifndef GL_VERSION_3_3
+#define GL_VERSION_3_3 1
+GLAPI int GLAD_GL_VERSION_3_3;
+typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
+GLAPI PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed;
+#define glBindFragDataLocationIndexed glad_glBindFragDataLocationIndexed
+typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC)(GLuint program, const GLchar *name);
+GLAPI PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex;
+#define glGetFragDataIndex glad_glGetFragDataIndex
+typedef void (APIENTRYP PFNGLGENSAMPLERSPROC)(GLsizei count, GLuint *samplers);
+GLAPI PFNGLGENSAMPLERSPROC glad_glGenSamplers;
+#define glGenSamplers glad_glGenSamplers
+typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC)(GLsizei count, const GLuint *samplers);
+GLAPI PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers;
+#define glDeleteSamplers glad_glDeleteSamplers
+typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC)(GLuint sampler);
+GLAPI PFNGLISSAMPLERPROC glad_glIsSampler;
+#define glIsSampler glad_glIsSampler
+typedef void (APIENTRYP PFNGLBINDSAMPLERPROC)(GLuint unit, GLuint sampler);
+GLAPI PFNGLBINDSAMPLERPROC glad_glBindSampler;
+#define glBindSampler glad_glBindSampler
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler, GLenum pname, GLint param);
+GLAPI PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri;
+#define glSamplerParameteri glad_glSamplerParameteri
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, const GLint *param);
+GLAPI PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv;
+#define glSamplerParameteriv glad_glSamplerParameteriv
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler, GLenum pname, GLfloat param);
+GLAPI PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf;
+#define glSamplerParameterf glad_glSamplerParameterf
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, const GLfloat *param);
+GLAPI PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv;
+#define glSamplerParameterfv glad_glSamplerParameterfv
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, const GLint *param);
+GLAPI PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv;
+#define glSamplerParameterIiv glad_glSamplerParameterIiv
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, const GLuint *param);
+GLAPI PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv;
+#define glSamplerParameterIuiv glad_glSamplerParameterIuiv
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, GLint *params);
+GLAPI PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv;
+#define glGetSamplerParameteriv glad_glGetSamplerParameteriv
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, GLint *params);
+GLAPI PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv;
+#define glGetSamplerParameterIiv glad_glGetSamplerParameterIiv
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, GLfloat *params);
+GLAPI PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv;
+#define glGetSamplerParameterfv glad_glGetSamplerParameterfv
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, GLuint *params);
+GLAPI PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv;
+#define glGetSamplerParameterIuiv glad_glGetSamplerParameterIuiv
+typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC)(GLuint id, GLenum target);
+GLAPI PFNGLQUERYCOUNTERPROC glad_glQueryCounter;
+#define glQueryCounter glad_glQueryCounter
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC)(GLuint id, GLenum pname, GLint64 *params);
+GLAPI PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v;
+#define glGetQueryObjecti64v glad_glGetQueryObjecti64v
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC)(GLuint id, GLenum pname, GLuint64 *params);
+GLAPI PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v;
+#define glGetQueryObjectui64v glad_glGetQueryObjectui64v
+typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index, GLuint divisor);
+GLAPI PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor;
+#define glVertexAttribDivisor glad_glVertexAttribDivisor
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui;
+#define glVertexAttribP1ui glad_glVertexAttribP1ui
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv;
+#define glVertexAttribP1uiv glad_glVertexAttribP1uiv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui;
+#define glVertexAttribP2ui glad_glVertexAttribP2ui
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv;
+#define glVertexAttribP2uiv glad_glVertexAttribP2uiv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui;
+#define glVertexAttribP3ui glad_glVertexAttribP3ui
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv;
+#define glVertexAttribP3uiv glad_glVertexAttribP3uiv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui;
+#define glVertexAttribP4ui glad_glVertexAttribP4ui
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv;
+#define glVertexAttribP4uiv glad_glVertexAttribP4uiv
+typedef void (APIENTRYP PFNGLVERTEXP2UIPROC)(GLenum type, GLuint value);
+GLAPI PFNGLVERTEXP2UIPROC glad_glVertexP2ui;
+#define glVertexP2ui glad_glVertexP2ui
+typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC)(GLenum type, const GLuint *value);
+GLAPI PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv;
+#define glVertexP2uiv glad_glVertexP2uiv
+typedef void (APIENTRYP PFNGLVERTEXP3UIPROC)(GLenum type, GLuint value);
+GLAPI PFNGLVERTEXP3UIPROC glad_glVertexP3ui;
+#define glVertexP3ui glad_glVertexP3ui
+typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC)(GLenum type, const GLuint *value);
+GLAPI PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv;
+#define glVertexP3uiv glad_glVertexP3uiv
+typedef void (APIENTRYP PFNGLVERTEXP4UIPROC)(GLenum type, GLuint value);
+GLAPI PFNGLVERTEXP4UIPROC glad_glVertexP4ui;
+#define glVertexP4ui glad_glVertexP4ui
+typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC)(GLenum type, const GLuint *value);
+GLAPI PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv;
+#define glVertexP4uiv glad_glVertexP4uiv
+typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC)(GLenum type, GLuint coords);
+GLAPI PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui;
+#define glTexCoordP1ui glad_glTexCoordP1ui
+typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC)(GLenum type, const GLuint *coords);
+GLAPI PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv;
+#define glTexCoordP1uiv glad_glTexCoordP1uiv
+typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC)(GLenum type, GLuint coords);
+GLAPI PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui;
+#define glTexCoordP2ui glad_glTexCoordP2ui
+typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC)(GLenum type, const GLuint *coords);
+GLAPI PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv;
+#define glTexCoordP2uiv glad_glTexCoordP2uiv
+typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC)(GLenum type, GLuint coords);
+GLAPI PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui;
+#define glTexCoordP3ui glad_glTexCoordP3ui
+typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC)(GLenum type, const GLuint *coords);
+GLAPI PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv;
+#define glTexCoordP3uiv glad_glTexCoordP3uiv
+typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC)(GLenum type, GLuint coords);
+GLAPI PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui;
+#define glTexCoordP4ui glad_glTexCoordP4ui
+typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC)(GLenum type, const GLuint *coords);
+GLAPI PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv;
+#define glTexCoordP4uiv glad_glTexCoordP4uiv
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC)(GLenum texture, GLenum type, GLuint coords);
+GLAPI PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui;
+#define glMultiTexCoordP1ui glad_glMultiTexCoordP1ui
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC)(GLenum texture, GLenum type, const GLuint *coords);
+GLAPI PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv;
+#define glMultiTexCoordP1uiv glad_glMultiTexCoordP1uiv
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC)(GLenum texture, GLenum type, GLuint coords);
+GLAPI PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui;
+#define glMultiTexCoordP2ui glad_glMultiTexCoordP2ui
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC)(GLenum texture, GLenum type, const GLuint *coords);
+GLAPI PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv;
+#define glMultiTexCoordP2uiv glad_glMultiTexCoordP2uiv
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC)(GLenum texture, GLenum type, GLuint coords);
+GLAPI PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui;
+#define glMultiTexCoordP3ui glad_glMultiTexCoordP3ui
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC)(GLenum texture, GLenum type, const GLuint *coords);
+GLAPI PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv;
+#define glMultiTexCoordP3uiv glad_glMultiTexCoordP3uiv
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC)(GLenum texture, GLenum type, GLuint coords);
+GLAPI PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui;
+#define glMultiTexCoordP4ui glad_glMultiTexCoordP4ui
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC)(GLenum texture, GLenum type, const GLuint *coords);
+GLAPI PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv;
+#define glMultiTexCoordP4uiv glad_glMultiTexCoordP4uiv
+typedef void (APIENTRYP PFNGLNORMALP3UIPROC)(GLenum type, GLuint coords);
+GLAPI PFNGLNORMALP3UIPROC glad_glNormalP3ui;
+#define glNormalP3ui glad_glNormalP3ui
+typedef void (APIENTRYP PFNGLNORMALP3UIVPROC)(GLenum type, const GLuint *coords);
+GLAPI PFNGLNORMALP3UIVPROC glad_glNormalP3uiv;
+#define glNormalP3uiv glad_glNormalP3uiv
+typedef void (APIENTRYP PFNGLCOLORP3UIPROC)(GLenum type, GLuint color);
+GLAPI PFNGLCOLORP3UIPROC glad_glColorP3ui;
+#define glColorP3ui glad_glColorP3ui
+typedef void (APIENTRYP PFNGLCOLORP3UIVPROC)(GLenum type, const GLuint *color);
+GLAPI PFNGLCOLORP3UIVPROC glad_glColorP3uiv;
+#define glColorP3uiv glad_glColorP3uiv
+typedef void (APIENTRYP PFNGLCOLORP4UIPROC)(GLenum type, GLuint color);
+GLAPI PFNGLCOLORP4UIPROC glad_glColorP4ui;
+#define glColorP4ui glad_glColorP4ui
+typedef void (APIENTRYP PFNGLCOLORP4UIVPROC)(GLenum type, const GLuint *color);
+GLAPI PFNGLCOLORP4UIVPROC glad_glColorP4uiv;
+#define glColorP4uiv glad_glColorP4uiv
+typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC)(GLenum type, GLuint color);
+GLAPI PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui;
+#define glSecondaryColorP3ui glad_glSecondaryColorP3ui
+typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC)(GLenum type, const GLuint *color);
+GLAPI PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv;
+#define glSecondaryColorP3uiv glad_glSecondaryColorP3uiv
+#endif
+#ifndef GL_VERSION_4_0
+#define GL_VERSION_4_0 1
+GLAPI int GLAD_GL_VERSION_4_0;
+typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC)(GLfloat value);
+GLAPI PFNGLMINSAMPLESHADINGPROC glad_glMinSampleShading;
+#define glMinSampleShading glad_glMinSampleShading
+typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC)(GLuint buf, GLenum mode);
+GLAPI PFNGLBLENDEQUATIONIPROC glad_glBlendEquationi;
+#define glBlendEquationi glad_glBlendEquationi
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+GLAPI PFNGLBLENDEQUATIONSEPARATEIPROC glad_glBlendEquationSeparatei;
+#define glBlendEquationSeparatei glad_glBlendEquationSeparatei
+typedef void (APIENTRYP PFNGLBLENDFUNCIPROC)(GLuint buf, GLenum src, GLenum dst);
+GLAPI PFNGLBLENDFUNCIPROC glad_glBlendFunci;
+#define glBlendFunci glad_glBlendFunci
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+GLAPI PFNGLBLENDFUNCSEPARATEIPROC glad_glBlendFuncSeparatei;
+#define glBlendFuncSeparatei glad_glBlendFuncSeparatei
+typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC)(GLenum mode, const void *indirect);
+GLAPI PFNGLDRAWARRAYSINDIRECTPROC glad_glDrawArraysIndirect;
+#define glDrawArraysIndirect glad_glDrawArraysIndirect
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, const void *indirect);
+GLAPI PFNGLDRAWELEMENTSINDIRECTPROC glad_glDrawElementsIndirect;
+#define glDrawElementsIndirect glad_glDrawElementsIndirect
+typedef void (APIENTRYP PFNGLUNIFORM1DPROC)(GLint location, GLdouble x);
+GLAPI PFNGLUNIFORM1DPROC glad_glUniform1d;
+#define glUniform1d glad_glUniform1d
+typedef void (APIENTRYP PFNGLUNIFORM2DPROC)(GLint location, GLdouble x, GLdouble y);
+GLAPI PFNGLUNIFORM2DPROC glad_glUniform2d;
+#define glUniform2d glad_glUniform2d
+typedef void (APIENTRYP PFNGLUNIFORM3DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z);
+GLAPI PFNGLUNIFORM3DPROC glad_glUniform3d;
+#define glUniform3d glad_glUniform3d
+typedef void (APIENTRYP PFNGLUNIFORM4DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI PFNGLUNIFORM4DPROC glad_glUniform4d;
+#define glUniform4d glad_glUniform4d
+typedef void (APIENTRYP PFNGLUNIFORM1DVPROC)(GLint location, GLsizei count, const GLdouble *value);
+GLAPI PFNGLUNIFORM1DVPROC glad_glUniform1dv;
+#define glUniform1dv glad_glUniform1dv
+typedef void (APIENTRYP PFNGLUNIFORM2DVPROC)(GLint location, GLsizei count, const GLdouble *value);
+GLAPI PFNGLUNIFORM2DVPROC glad_glUniform2dv;
+#define glUniform2dv glad_glUniform2dv
+typedef void (APIENTRYP PFNGLUNIFORM3DVPROC)(GLint location, GLsizei count, const GLdouble *value);
+GLAPI PFNGLUNIFORM3DVPROC glad_glUniform3dv;
+#define glUniform3dv glad_glUniform3dv
+typedef void (APIENTRYP PFNGLUNIFORM4DVPROC)(GLint location, GLsizei count, const GLdouble *value);
+GLAPI PFNGLUNIFORM4DVPROC glad_glUniform4dv;
+#define glUniform4dv glad_glUniform4dv
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLUNIFORMMATRIX2DVPROC glad_glUniformMatrix2dv;
+#define glUniformMatrix2dv glad_glUniformMatrix2dv
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLUNIFORMMATRIX3DVPROC glad_glUniformMatrix3dv;
+#define glUniformMatrix3dv glad_glUniformMatrix3dv
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLUNIFORMMATRIX4DVPROC glad_glUniformMatrix4dv;
+#define glUniformMatrix4dv glad_glUniformMatrix4dv
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLUNIFORMMATRIX2X3DVPROC glad_glUniformMatrix2x3dv;
+#define glUniformMatrix2x3dv glad_glUniformMatrix2x3dv
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLUNIFORMMATRIX2X4DVPROC glad_glUniformMatrix2x4dv;
+#define glUniformMatrix2x4dv glad_glUniformMatrix2x4dv
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLUNIFORMMATRIX3X2DVPROC glad_glUniformMatrix3x2dv;
+#define glUniformMatrix3x2dv glad_glUniformMatrix3x2dv
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLUNIFORMMATRIX3X4DVPROC glad_glUniformMatrix3x4dv;
+#define glUniformMatrix3x4dv glad_glUniformMatrix3x4dv
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLUNIFORMMATRIX4X2DVPROC glad_glUniformMatrix4x2dv;
+#define glUniformMatrix4x2dv glad_glUniformMatrix4x2dv
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLUNIFORMMATRIX4X3DVPROC glad_glUniformMatrix4x3dv;
+#define glUniformMatrix4x3dv glad_glUniformMatrix4x3dv
+typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC)(GLuint program, GLint location, GLdouble *params);
+GLAPI PFNGLGETUNIFORMDVPROC glad_glGetUniformdv;
+#define glGetUniformdv glad_glGetUniformdv
+typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)(GLuint program, GLenum shadertype, const GLchar *name);
+GLAPI PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glad_glGetSubroutineUniformLocation;
+#define glGetSubroutineUniformLocation glad_glGetSubroutineUniformLocation
+typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC)(GLuint program, GLenum shadertype, const GLchar *name);
+GLAPI PFNGLGETSUBROUTINEINDEXPROC glad_glGetSubroutineIndex;
+#define glGetSubroutineIndex glad_glGetSubroutineIndex
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)(GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);
+GLAPI PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glad_glGetActiveSubroutineUniformiv;
+#define glGetActiveSubroutineUniformiv glad_glGetActiveSubroutineUniformiv
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+GLAPI PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glad_glGetActiveSubroutineUniformName;
+#define glGetActiveSubroutineUniformName glad_glGetActiveSubroutineUniformName
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+GLAPI PFNGLGETACTIVESUBROUTINENAMEPROC glad_glGetActiveSubroutineName;
+#define glGetActiveSubroutineName glad_glGetActiveSubroutineName
+typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC)(GLenum shadertype, GLsizei count, const GLuint *indices);
+GLAPI PFNGLUNIFORMSUBROUTINESUIVPROC glad_glUniformSubroutinesuiv;
+#define glUniformSubroutinesuiv glad_glUniformSubroutinesuiv
+typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC)(GLenum shadertype, GLint location, GLuint *params);
+GLAPI PFNGLGETUNIFORMSUBROUTINEUIVPROC glad_glGetUniformSubroutineuiv;
+#define glGetUniformSubroutineuiv glad_glGetUniformSubroutineuiv
+typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC)(GLuint program, GLenum shadertype, GLenum pname, GLint *values);
+GLAPI PFNGLGETPROGRAMSTAGEIVPROC glad_glGetProgramStageiv;
+#define glGetProgramStageiv glad_glGetProgramStageiv
+typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC)(GLenum pname, GLint value);
+GLAPI PFNGLPATCHPARAMETERIPROC glad_glPatchParameteri;
+#define glPatchParameteri glad_glPatchParameteri
+typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC)(GLenum pname, const GLfloat *values);
+GLAPI PFNGLPATCHPARAMETERFVPROC glad_glPatchParameterfv;
+#define glPatchParameterfv glad_glPatchParameterfv
+typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC)(GLenum target, GLuint id);
+GLAPI PFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback;
+#define glBindTransformFeedback glad_glBindTransformFeedback
+typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC)(GLsizei n, const GLuint *ids);
+GLAPI PFNGLDELETETRANSFORMFEEDBACKSPROC glad_glDeleteTransformFeedbacks;
+#define glDeleteTransformFeedbacks glad_glDeleteTransformFeedbacks
+typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint *ids);
+GLAPI PFNGLGENTRANSFORMFEEDBACKSPROC glad_glGenTransformFeedbacks;
+#define glGenTransformFeedbacks glad_glGenTransformFeedbacks
+typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC)(GLuint id);
+GLAPI PFNGLISTRANSFORMFEEDBACKPROC glad_glIsTransformFeedback;
+#define glIsTransformFeedback glad_glIsTransformFeedback
+typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC)(void);
+GLAPI PFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback;
+#define glPauseTransformFeedback glad_glPauseTransformFeedback
+typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC)(void);
+GLAPI PFNGLRESUMETRANSFORMFEEDBACKPROC glad_glResumeTransformFeedback;
+#define glResumeTransformFeedback glad_glResumeTransformFeedback
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC)(GLenum mode, GLuint id);
+GLAPI PFNGLDRAWTRANSFORMFEEDBACKPROC glad_glDrawTransformFeedback;
+#define glDrawTransformFeedback glad_glDrawTransformFeedback
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)(GLenum mode, GLuint id, GLuint stream);
+GLAPI PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glad_glDrawTransformFeedbackStream;
+#define glDrawTransformFeedbackStream glad_glDrawTransformFeedbackStream
+typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC)(GLenum target, GLuint index, GLuint id);
+GLAPI PFNGLBEGINQUERYINDEXEDPROC glad_glBeginQueryIndexed;
+#define glBeginQueryIndexed glad_glBeginQueryIndexed
+typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC)(GLenum target, GLuint index);
+GLAPI PFNGLENDQUERYINDEXEDPROC glad_glEndQueryIndexed;
+#define glEndQueryIndexed glad_glEndQueryIndexed
+typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC)(GLenum target, GLuint index, GLenum pname, GLint *params);
+GLAPI PFNGLGETQUERYINDEXEDIVPROC glad_glGetQueryIndexediv;
+#define glGetQueryIndexediv glad_glGetQueryIndexediv
+#endif
+#ifndef GL_VERSION_4_1
+#define GL_VERSION_4_1 1
+GLAPI int GLAD_GL_VERSION_4_1;
+typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC)(void);
+GLAPI PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler;
+#define glReleaseShaderCompiler glad_glReleaseShaderCompiler
+typedef void (APIENTRYP PFNGLSHADERBINARYPROC)(GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length);
+GLAPI PFNGLSHADERBINARYPROC glad_glShaderBinary;
+#define glShaderBinary glad_glShaderBinary
+typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC)(GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+GLAPI PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat;
+#define glGetShaderPrecisionFormat glad_glGetShaderPrecisionFormat
+typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC)(GLfloat n, GLfloat f);
+GLAPI PFNGLDEPTHRANGEFPROC glad_glDepthRangef;
+#define glDepthRangef glad_glDepthRangef
+typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC)(GLfloat d);
+GLAPI PFNGLCLEARDEPTHFPROC glad_glClearDepthf;
+#define glClearDepthf glad_glClearDepthf
+typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC)(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+GLAPI PFNGLGETPROGRAMBINARYPROC glad_glGetProgramBinary;
+#define glGetProgramBinary glad_glGetProgramBinary
+typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC)(GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+GLAPI PFNGLPROGRAMBINARYPROC glad_glProgramBinary;
+#define glProgramBinary glad_glProgramBinary
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC)(GLuint program, GLenum pname, GLint value);
+GLAPI PFNGLPROGRAMPARAMETERIPROC glad_glProgramParameteri;
+#define glProgramParameteri glad_glProgramParameteri
+typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC)(GLuint pipeline, GLbitfield stages, GLuint program);
+GLAPI PFNGLUSEPROGRAMSTAGESPROC glad_glUseProgramStages;
+#define glUseProgramStages glad_glUseProgramStages
+typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC)(GLuint pipeline, GLuint program);
+GLAPI PFNGLACTIVESHADERPROGRAMPROC glad_glActiveShaderProgram;
+#define glActiveShaderProgram glad_glActiveShaderProgram
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC)(GLenum type, GLsizei count, const GLchar *const*strings);
+GLAPI PFNGLCREATESHADERPROGRAMVPROC glad_glCreateShaderProgramv;
+#define glCreateShaderProgramv glad_glCreateShaderProgramv
+typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC)(GLuint pipeline);
+GLAPI PFNGLBINDPROGRAMPIPELINEPROC glad_glBindProgramPipeline;
+#define glBindProgramPipeline glad_glBindProgramPipeline
+typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC)(GLsizei n, const GLuint *pipelines);
+GLAPI PFNGLDELETEPROGRAMPIPELINESPROC glad_glDeleteProgramPipelines;
+#define glDeleteProgramPipelines glad_glDeleteProgramPipelines
+typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC)(GLsizei n, GLuint *pipelines);
+GLAPI PFNGLGENPROGRAMPIPELINESPROC glad_glGenProgramPipelines;
+#define glGenProgramPipelines glad_glGenProgramPipelines
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC)(GLuint pipeline);
+GLAPI PFNGLISPROGRAMPIPELINEPROC glad_glIsProgramPipeline;
+#define glIsProgramPipeline glad_glIsProgramPipeline
+typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC)(GLuint pipeline, GLenum pname, GLint *params);
+GLAPI PFNGLGETPROGRAMPIPELINEIVPROC glad_glGetProgramPipelineiv;
+#define glGetProgramPipelineiv glad_glGetProgramPipelineiv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC)(GLuint program, GLint location, GLint v0);
+GLAPI PFNGLPROGRAMUNIFORM1IPROC glad_glProgramUniform1i;
+#define glProgramUniform1i glad_glProgramUniform1i
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI PFNGLPROGRAMUNIFORM1IVPROC glad_glProgramUniform1iv;
+#define glProgramUniform1iv glad_glProgramUniform1iv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC)(GLuint program, GLint location, GLfloat v0);
+GLAPI PFNGLPROGRAMUNIFORM1FPROC glad_glProgramUniform1f;
+#define glProgramUniform1f glad_glProgramUniform1f
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI PFNGLPROGRAMUNIFORM1FVPROC glad_glProgramUniform1fv;
+#define glProgramUniform1fv glad_glProgramUniform1fv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC)(GLuint program, GLint location, GLdouble v0);
+GLAPI PFNGLPROGRAMUNIFORM1DPROC glad_glProgramUniform1d;
+#define glProgramUniform1d glad_glProgramUniform1d
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI PFNGLPROGRAMUNIFORM1DVPROC glad_glProgramUniform1dv;
+#define glProgramUniform1dv glad_glProgramUniform1dv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC)(GLuint program, GLint location, GLuint v0);
+GLAPI PFNGLPROGRAMUNIFORM1UIPROC glad_glProgramUniform1ui;
+#define glProgramUniform1ui glad_glProgramUniform1ui
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI PFNGLPROGRAMUNIFORM1UIVPROC glad_glProgramUniform1uiv;
+#define glProgramUniform1uiv glad_glProgramUniform1uiv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC)(GLuint program, GLint location, GLint v0, GLint v1);
+GLAPI PFNGLPROGRAMUNIFORM2IPROC glad_glProgramUniform2i;
+#define glProgramUniform2i glad_glProgramUniform2i
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI PFNGLPROGRAMUNIFORM2IVPROC glad_glProgramUniform2iv;
+#define glProgramUniform2iv glad_glProgramUniform2iv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1);
+GLAPI PFNGLPROGRAMUNIFORM2FPROC glad_glProgramUniform2f;
+#define glProgramUniform2f glad_glProgramUniform2f
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI PFNGLPROGRAMUNIFORM2FVPROC glad_glProgramUniform2fv;
+#define glProgramUniform2fv glad_glProgramUniform2fv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1);
+GLAPI PFNGLPROGRAMUNIFORM2DPROC glad_glProgramUniform2d;
+#define glProgramUniform2d glad_glProgramUniform2d
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI PFNGLPROGRAMUNIFORM2DVPROC glad_glProgramUniform2dv;
+#define glProgramUniform2dv glad_glProgramUniform2dv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1);
+GLAPI PFNGLPROGRAMUNIFORM2UIPROC glad_glProgramUniform2ui;
+#define glProgramUniform2ui glad_glProgramUniform2ui
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI PFNGLPROGRAMUNIFORM2UIVPROC glad_glProgramUniform2uiv;
+#define glProgramUniform2uiv glad_glProgramUniform2uiv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI PFNGLPROGRAMUNIFORM3IPROC glad_glProgramUniform3i;
+#define glProgramUniform3i glad_glProgramUniform3i
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI PFNGLPROGRAMUNIFORM3IVPROC glad_glProgramUniform3iv;
+#define glProgramUniform3iv glad_glProgramUniform3iv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI PFNGLPROGRAMUNIFORM3FPROC glad_glProgramUniform3f;
+#define glProgramUniform3f glad_glProgramUniform3f
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI PFNGLPROGRAMUNIFORM3FVPROC glad_glProgramUniform3fv;
+#define glProgramUniform3fv glad_glProgramUniform3fv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2);
+GLAPI PFNGLPROGRAMUNIFORM3DPROC glad_glProgramUniform3d;
+#define glProgramUniform3d glad_glProgramUniform3d
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI PFNGLPROGRAMUNIFORM3DVPROC glad_glProgramUniform3dv;
+#define glProgramUniform3dv glad_glProgramUniform3dv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI PFNGLPROGRAMUNIFORM3UIPROC glad_glProgramUniform3ui;
+#define glProgramUniform3ui glad_glProgramUniform3ui
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI PFNGLPROGRAMUNIFORM3UIVPROC glad_glProgramUniform3uiv;
+#define glProgramUniform3uiv glad_glProgramUniform3uiv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI PFNGLPROGRAMUNIFORM4IPROC glad_glProgramUniform4i;
+#define glProgramUniform4i glad_glProgramUniform4i
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI PFNGLPROGRAMUNIFORM4IVPROC glad_glProgramUniform4iv;
+#define glProgramUniform4iv glad_glProgramUniform4iv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI PFNGLPROGRAMUNIFORM4FPROC glad_glProgramUniform4f;
+#define glProgramUniform4f glad_glProgramUniform4f
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI PFNGLPROGRAMUNIFORM4FVPROC glad_glProgramUniform4fv;
+#define glProgramUniform4fv glad_glProgramUniform4fv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+GLAPI PFNGLPROGRAMUNIFORM4DPROC glad_glProgramUniform4d;
+#define glProgramUniform4d glad_glProgramUniform4d
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI PFNGLPROGRAMUNIFORM4DVPROC glad_glProgramUniform4dv;
+#define glProgramUniform4dv glad_glProgramUniform4dv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI PFNGLPROGRAMUNIFORM4UIPROC glad_glProgramUniform4ui;
+#define glProgramUniform4ui glad_glProgramUniform4ui
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI PFNGLPROGRAMUNIFORM4UIVPROC glad_glProgramUniform4uiv;
+#define glProgramUniform4uiv glad_glProgramUniform4uiv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX2FVPROC glad_glProgramUniformMatrix2fv;
+#define glProgramUniformMatrix2fv glad_glProgramUniformMatrix2fv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX3FVPROC glad_glProgramUniformMatrix3fv;
+#define glProgramUniformMatrix3fv glad_glProgramUniformMatrix3fv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX4FVPROC glad_glProgramUniformMatrix4fv;
+#define glProgramUniformMatrix4fv glad_glProgramUniformMatrix4fv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX2DVPROC glad_glProgramUniformMatrix2dv;
+#define glProgramUniformMatrix2dv glad_glProgramUniformMatrix2dv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX3DVPROC glad_glProgramUniformMatrix3dv;
+#define glProgramUniformMatrix3dv glad_glProgramUniformMatrix3dv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX4DVPROC glad_glProgramUniformMatrix4dv;
+#define glProgramUniformMatrix4dv glad_glProgramUniformMatrix4dv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glad_glProgramUniformMatrix2x3fv;
+#define glProgramUniformMatrix2x3fv glad_glProgramUniformMatrix2x3fv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glad_glProgramUniformMatrix3x2fv;
+#define glProgramUniformMatrix3x2fv glad_glProgramUniformMatrix3x2fv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glad_glProgramUniformMatrix2x4fv;
+#define glProgramUniformMatrix2x4fv glad_glProgramUniformMatrix2x4fv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glad_glProgramUniformMatrix4x2fv;
+#define glProgramUniformMatrix4x2fv glad_glProgramUniformMatrix4x2fv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glad_glProgramUniformMatrix3x4fv;
+#define glProgramUniformMatrix3x4fv glad_glProgramUniformMatrix3x4fv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glad_glProgramUniformMatrix4x3fv;
+#define glProgramUniformMatrix4x3fv glad_glProgramUniformMatrix4x3fv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glad_glProgramUniformMatrix2x3dv;
+#define glProgramUniformMatrix2x3dv glad_glProgramUniformMatrix2x3dv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glad_glProgramUniformMatrix3x2dv;
+#define glProgramUniformMatrix3x2dv glad_glProgramUniformMatrix3x2dv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glad_glProgramUniformMatrix2x4dv;
+#define glProgramUniformMatrix2x4dv glad_glProgramUniformMatrix2x4dv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glad_glProgramUniformMatrix4x2dv;
+#define glProgramUniformMatrix4x2dv glad_glProgramUniformMatrix4x2dv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glad_glProgramUniformMatrix3x4dv;
+#define glProgramUniformMatrix3x4dv glad_glProgramUniformMatrix3x4dv
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glad_glProgramUniformMatrix4x3dv;
+#define glProgramUniformMatrix4x3dv glad_glProgramUniformMatrix4x3dv
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC)(GLuint pipeline);
+GLAPI PFNGLVALIDATEPROGRAMPIPELINEPROC glad_glValidateProgramPipeline;
+#define glValidateProgramPipeline glad_glValidateProgramPipeline
+typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC)(GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GLAPI PFNGLGETPROGRAMPIPELINEINFOLOGPROC glad_glGetProgramPipelineInfoLog;
+#define glGetProgramPipelineInfoLog glad_glGetProgramPipelineInfoLog
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC)(GLuint index, GLdouble x);
+GLAPI PFNGLVERTEXATTRIBL1DPROC glad_glVertexAttribL1d;
+#define glVertexAttribL1d glad_glVertexAttribL1d
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC)(GLuint index, GLdouble x, GLdouble y);
+GLAPI PFNGLVERTEXATTRIBL2DPROC glad_glVertexAttribL2d;
+#define glVertexAttribL2d glad_glVertexAttribL2d
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI PFNGLVERTEXATTRIBL3DPROC glad_glVertexAttribL3d;
+#define glVertexAttribL3d glad_glVertexAttribL3d
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI PFNGLVERTEXATTRIBL4DPROC glad_glVertexAttribL4d;
+#define glVertexAttribL4d glad_glVertexAttribL4d
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC)(GLuint index, const GLdouble *v);
+GLAPI PFNGLVERTEXATTRIBL1DVPROC glad_glVertexAttribL1dv;
+#define glVertexAttribL1dv glad_glVertexAttribL1dv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC)(GLuint index, const GLdouble *v);
+GLAPI PFNGLVERTEXATTRIBL2DVPROC glad_glVertexAttribL2dv;
+#define glVertexAttribL2dv glad_glVertexAttribL2dv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC)(GLuint index, const GLdouble *v);
+GLAPI PFNGLVERTEXATTRIBL3DVPROC glad_glVertexAttribL3dv;
+#define glVertexAttribL3dv glad_glVertexAttribL3dv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC)(GLuint index, const GLdouble *v);
+GLAPI PFNGLVERTEXATTRIBL4DVPROC glad_glVertexAttribL4dv;
+#define glVertexAttribL4dv glad_glVertexAttribL4dv
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI PFNGLVERTEXATTRIBLPOINTERPROC glad_glVertexAttribLPointer;
+#define glVertexAttribLPointer glad_glVertexAttribLPointer
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC)(GLuint index, GLenum pname, GLdouble *params);
+GLAPI PFNGLGETVERTEXATTRIBLDVPROC glad_glGetVertexAttribLdv;
+#define glGetVertexAttribLdv glad_glGetVertexAttribLdv
+typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC)(GLuint first, GLsizei count, const GLfloat *v);
+GLAPI PFNGLVIEWPORTARRAYVPROC glad_glViewportArrayv;
+#define glViewportArrayv glad_glViewportArrayv
+typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+GLAPI PFNGLVIEWPORTINDEXEDFPROC glad_glViewportIndexedf;
+#define glViewportIndexedf glad_glViewportIndexedf
+typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC)(GLuint index, const GLfloat *v);
+GLAPI PFNGLVIEWPORTINDEXEDFVPROC glad_glViewportIndexedfv;
+#define glViewportIndexedfv glad_glViewportIndexedfv
+typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC)(GLuint first, GLsizei count, const GLint *v);
+GLAPI PFNGLSCISSORARRAYVPROC glad_glScissorArrayv;
+#define glScissorArrayv glad_glScissorArrayv
+typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+GLAPI PFNGLSCISSORINDEXEDPROC glad_glScissorIndexed;
+#define glScissorIndexed glad_glScissorIndexed
+typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC)(GLuint index, const GLint *v);
+GLAPI PFNGLSCISSORINDEXEDVPROC glad_glScissorIndexedv;
+#define glScissorIndexedv glad_glScissorIndexedv
+typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC)(GLuint first, GLsizei count, const GLdouble *v);
+GLAPI PFNGLDEPTHRANGEARRAYVPROC glad_glDepthRangeArrayv;
+#define glDepthRangeArrayv glad_glDepthRangeArrayv
+typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC)(GLuint index, GLdouble n, GLdouble f);
+GLAPI PFNGLDEPTHRANGEINDEXEDPROC glad_glDepthRangeIndexed;
+#define glDepthRangeIndexed glad_glDepthRangeIndexed
+typedef void (APIENTRYP PFNGLGETFLOATI_VPROC)(GLenum target, GLuint index, GLfloat *data);
+GLAPI PFNGLGETFLOATI_VPROC glad_glGetFloati_v;
+#define glGetFloati_v glad_glGetFloati_v
+typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC)(GLenum target, GLuint index, GLdouble *data);
+GLAPI PFNGLGETDOUBLEI_VPROC glad_glGetDoublei_v;
+#define glGetDoublei_v glad_glGetDoublei_v
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/opengl/glad/src/glad.c b/src/opengl/glad/src/glad.c
new file mode 100644
index 0000000..2004507
--- /dev/null
+++ b/src/opengl/glad/src/glad.c
@@ -0,0 +1,2121 @@
+/*
+
+ OpenGL loader generated by glad 0.1.36 on Sun Feb 26 22:20:10 2023.
+
+ Language/Generator: C/C++
+ Specification: gl
+ APIs: gl=4.1
+ Profile: compatibility
+ Extensions:
+
+ Loader: True
+ Local files: False
+ Omit khrplatform: False
+ Reproducible: False
+
+ Commandline:
+ --profile="compatibility" --api="gl=4.1" --generator="c" --spec="gl" --extensions=""
+ Online:
+ https://glad.dav1d.de/#profile=compatibility&language=c&specification=gl&loader=on&api=gl%3D4.1
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <glad/glad.h>
+
+static void* get_proc(const char *namez);
+
+#if defined(_WIN32) || defined(__CYGWIN__)
+#ifndef _WINDOWS_
+#undef APIENTRY
+#endif
+#include <windows.h>
+static HMODULE libGL;
+
+typedef void* (APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)(const char*);
+static PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr;
+
+#ifdef _MSC_VER
+#ifdef __has_include
+ #if __has_include(<winapifamily.h>)
+ #define HAVE_WINAPIFAMILY 1
+ #endif
+#elif _MSC_VER >= 1700 && !_USING_V110_SDK71_
+ #define HAVE_WINAPIFAMILY 1
+#endif
+#endif
+
+#ifdef HAVE_WINAPIFAMILY
+ #include <winapifamily.h>
+ #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
+ #define IS_UWP 1
+ #endif
+#endif
+
+static
+int open_gl(void) {
+#ifndef IS_UWP
+ libGL = LoadLibraryW(L"opengl32.dll");
+ if(libGL != NULL) {
+ void (* tmp)(void);
+ tmp = (void(*)(void)) GetProcAddress(libGL, "wglGetProcAddress");
+ gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE) tmp;
+ return gladGetProcAddressPtr != NULL;
+ }
+#endif
+
+ return 0;
+}
+
+static
+void close_gl(void) {
+ if(libGL != NULL) {
+ FreeLibrary((HMODULE) libGL);
+ libGL = NULL;
+ }
+}
+#else
+#include <dlfcn.h>
+static void* libGL;
+
+#if !defined(__APPLE__) && !defined(__HAIKU__)
+typedef void* (APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)(const char*);
+static PFNGLXGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr;
+#endif
+
+static
+int open_gl(void) {
+#ifdef __APPLE__
+ static const char *NAMES[] = {
+ "../Frameworks/OpenGL.framework/OpenGL",
+ "/Library/Frameworks/OpenGL.framework/OpenGL",
+ "/System/Library/Frameworks/OpenGL.framework/OpenGL",
+ "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL"
+ };
+#else
+ static const char *NAMES[] = {"libGL.so.1", "libGL.so"};
+#endif
+
+ unsigned int index = 0;
+ for(index = 0; index < (sizeof(NAMES) / sizeof(NAMES[0])); index++) {
+ libGL = dlopen(NAMES[index], RTLD_NOW | RTLD_GLOBAL);
+
+ if(libGL != NULL) {
+#if defined(__APPLE__) || defined(__HAIKU__)
+ return 1;
+#else
+ gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(libGL,
+ "glXGetProcAddressARB");
+ return gladGetProcAddressPtr != NULL;
+#endif
+ }
+ }
+
+ return 0;
+}
+
+static
+void close_gl(void) {
+ if(libGL != NULL) {
+ dlclose(libGL);
+ libGL = NULL;
+ }
+}
+#endif
+
+static
+void* get_proc(const char *namez) {
+ void* result = NULL;
+ if(libGL == NULL) return NULL;
+
+#if !defined(__APPLE__) && !defined(__HAIKU__)
+ if(gladGetProcAddressPtr != NULL) {
+ result = gladGetProcAddressPtr(namez);
+ }
+#endif
+ if(result == NULL) {
+#if defined(_WIN32) || defined(__CYGWIN__)
+ result = (void*)GetProcAddress((HMODULE) libGL, namez);
+#else
+ result = dlsym(libGL, namez);
+#endif
+ }
+
+ return result;
+}
+
+int gladLoadGL(void) {
+ int status = 0;
+
+ if(open_gl()) {
+ status = gladLoadGLLoader(&get_proc);
+ close_gl();
+ }
+
+ return status;
+}
+
+struct gladGLversionStruct GLVersion = { 0, 0 };
+
+#if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0)
+#define _GLAD_IS_SOME_NEW_VERSION 1
+#endif
+
+static int max_loaded_major;
+static int max_loaded_minor;
+
+static const char *exts = NULL;
+static int num_exts_i = 0;
+static char **exts_i = NULL;
+
+static int get_exts(void) {
+#ifdef _GLAD_IS_SOME_NEW_VERSION
+ if(max_loaded_major < 3) {
+#endif
+ exts = (const char *)glGetString(GL_EXTENSIONS);
+#ifdef _GLAD_IS_SOME_NEW_VERSION
+ } else {
+ unsigned int index;
+
+ num_exts_i = 0;
+ glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i);
+ if (num_exts_i > 0) {
+ exts_i = (char **)malloc((size_t)num_exts_i * (sizeof *exts_i));
+ }
+
+ if (exts_i == NULL) {
+ return 0;
+ }
+
+ for(index = 0; index < (unsigned)num_exts_i; index++) {
+ const char *gl_str_tmp = (const char*)glGetStringi(GL_EXTENSIONS, index);
+ size_t len = strlen(gl_str_tmp);
+
+ char *local_str = (char*)malloc((len+1) * sizeof(char));
+ if(local_str != NULL) {
+ memcpy(local_str, gl_str_tmp, (len+1) * sizeof(char));
+ }
+ exts_i[index] = local_str;
+ }
+ }
+#endif
+ return 1;
+}
+
+static void free_exts(void) {
+ if (exts_i != NULL) {
+ int index;
+ for(index = 0; index < num_exts_i; index++) {
+ free((char *)exts_i[index]);
+ }
+ free((void *)exts_i);
+ exts_i = NULL;
+ }
+}
+
+static int has_ext(const char *ext) {
+#ifdef _GLAD_IS_SOME_NEW_VERSION
+ if(max_loaded_major < 3) {
+#endif
+ const char *extensions;
+ const char *loc;
+ const char *terminator;
+ extensions = exts;
+ if(extensions == NULL || ext == NULL) {
+ return 0;
+ }
+
+ while(1) {
+ loc = strstr(extensions, ext);
+ if(loc == NULL) {
+ return 0;
+ }
+
+ terminator = loc + strlen(ext);
+ if((loc == extensions || *(loc - 1) == ' ') &&
+ (*terminator == ' ' || *terminator == '\0')) {
+ return 1;
+ }
+ extensions = terminator;
+ }
+#ifdef _GLAD_IS_SOME_NEW_VERSION
+ } else {
+ int index;
+ if(exts_i == NULL) return 0;
+ for(index = 0; index < num_exts_i; index++) {
+ const char *e = exts_i[index];
+
+ if(exts_i[index] != NULL && strcmp(e, ext) == 0) {
+ return 1;
+ }
+ }
+ }
+#endif
+
+ return 0;
+}
+int GLAD_GL_VERSION_1_0 = 0;
+int GLAD_GL_VERSION_1_1 = 0;
+int GLAD_GL_VERSION_1_2 = 0;
+int GLAD_GL_VERSION_1_3 = 0;
+int GLAD_GL_VERSION_1_4 = 0;
+int GLAD_GL_VERSION_1_5 = 0;
+int GLAD_GL_VERSION_2_0 = 0;
+int GLAD_GL_VERSION_2_1 = 0;
+int GLAD_GL_VERSION_3_0 = 0;
+int GLAD_GL_VERSION_3_1 = 0;
+int GLAD_GL_VERSION_3_2 = 0;
+int GLAD_GL_VERSION_3_3 = 0;
+int GLAD_GL_VERSION_4_0 = 0;
+int GLAD_GL_VERSION_4_1 = 0;
+PFNGLACCUMPROC glad_glAccum = NULL;
+PFNGLACTIVESHADERPROGRAMPROC glad_glActiveShaderProgram = NULL;
+PFNGLACTIVETEXTUREPROC glad_glActiveTexture = NULL;
+PFNGLALPHAFUNCPROC glad_glAlphaFunc = NULL;
+PFNGLARETEXTURESRESIDENTPROC glad_glAreTexturesResident = NULL;
+PFNGLARRAYELEMENTPROC glad_glArrayElement = NULL;
+PFNGLATTACHSHADERPROC glad_glAttachShader = NULL;
+PFNGLBEGINPROC glad_glBegin = NULL;
+PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender = NULL;
+PFNGLBEGINQUERYPROC glad_glBeginQuery = NULL;
+PFNGLBEGINQUERYINDEXEDPROC glad_glBeginQueryIndexed = NULL;
+PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback = NULL;
+PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation = NULL;
+PFNGLBINDBUFFERPROC glad_glBindBuffer = NULL;
+PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase = NULL;
+PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange = NULL;
+PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation = NULL;
+PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed = NULL;
+PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer = NULL;
+PFNGLBINDPROGRAMPIPELINEPROC glad_glBindProgramPipeline = NULL;
+PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer = NULL;
+PFNGLBINDSAMPLERPROC glad_glBindSampler = NULL;
+PFNGLBINDTEXTUREPROC glad_glBindTexture = NULL;
+PFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback = NULL;
+PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray = NULL;
+PFNGLBITMAPPROC glad_glBitmap = NULL;
+PFNGLBLENDCOLORPROC glad_glBlendColor = NULL;
+PFNGLBLENDEQUATIONPROC glad_glBlendEquation = NULL;
+PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate = NULL;
+PFNGLBLENDEQUATIONSEPARATEIPROC glad_glBlendEquationSeparatei = NULL;
+PFNGLBLENDEQUATIONIPROC glad_glBlendEquationi = NULL;
+PFNGLBLENDFUNCPROC glad_glBlendFunc = NULL;
+PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate = NULL;
+PFNGLBLENDFUNCSEPARATEIPROC glad_glBlendFuncSeparatei = NULL;
+PFNGLBLENDFUNCIPROC glad_glBlendFunci = NULL;
+PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer = NULL;
+PFNGLBUFFERDATAPROC glad_glBufferData = NULL;
+PFNGLBUFFERSUBDATAPROC glad_glBufferSubData = NULL;
+PFNGLCALLLISTPROC glad_glCallList = NULL;
+PFNGLCALLLISTSPROC glad_glCallLists = NULL;
+PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus = NULL;
+PFNGLCLAMPCOLORPROC glad_glClampColor = NULL;
+PFNGLCLEARPROC glad_glClear = NULL;
+PFNGLCLEARACCUMPROC glad_glClearAccum = NULL;
+PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi = NULL;
+PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv = NULL;
+PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv = NULL;
+PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv = NULL;
+PFNGLCLEARCOLORPROC glad_glClearColor = NULL;
+PFNGLCLEARDEPTHPROC glad_glClearDepth = NULL;
+PFNGLCLEARDEPTHFPROC glad_glClearDepthf = NULL;
+PFNGLCLEARINDEXPROC glad_glClearIndex = NULL;
+PFNGLCLEARSTENCILPROC glad_glClearStencil = NULL;
+PFNGLCLIENTACTIVETEXTUREPROC glad_glClientActiveTexture = NULL;
+PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync = NULL;
+PFNGLCLIPPLANEPROC glad_glClipPlane = NULL;
+PFNGLCOLOR3BPROC glad_glColor3b = NULL;
+PFNGLCOLOR3BVPROC glad_glColor3bv = NULL;
+PFNGLCOLOR3DPROC glad_glColor3d = NULL;
+PFNGLCOLOR3DVPROC glad_glColor3dv = NULL;
+PFNGLCOLOR3FPROC glad_glColor3f = NULL;
+PFNGLCOLOR3FVPROC glad_glColor3fv = NULL;
+PFNGLCOLOR3IPROC glad_glColor3i = NULL;
+PFNGLCOLOR3IVPROC glad_glColor3iv = NULL;
+PFNGLCOLOR3SPROC glad_glColor3s = NULL;
+PFNGLCOLOR3SVPROC glad_glColor3sv = NULL;
+PFNGLCOLOR3UBPROC glad_glColor3ub = NULL;
+PFNGLCOLOR3UBVPROC glad_glColor3ubv = NULL;
+PFNGLCOLOR3UIPROC glad_glColor3ui = NULL;
+PFNGLCOLOR3UIVPROC glad_glColor3uiv = NULL;
+PFNGLCOLOR3USPROC glad_glColor3us = NULL;
+PFNGLCOLOR3USVPROC glad_glColor3usv = NULL;
+PFNGLCOLOR4BPROC glad_glColor4b = NULL;
+PFNGLCOLOR4BVPROC glad_glColor4bv = NULL;
+PFNGLCOLOR4DPROC glad_glColor4d = NULL;
+PFNGLCOLOR4DVPROC glad_glColor4dv = NULL;
+PFNGLCOLOR4FPROC glad_glColor4f = NULL;
+PFNGLCOLOR4FVPROC glad_glColor4fv = NULL;
+PFNGLCOLOR4IPROC glad_glColor4i = NULL;
+PFNGLCOLOR4IVPROC glad_glColor4iv = NULL;
+PFNGLCOLOR4SPROC glad_glColor4s = NULL;
+PFNGLCOLOR4SVPROC glad_glColor4sv = NULL;
+PFNGLCOLOR4UBPROC glad_glColor4ub = NULL;
+PFNGLCOLOR4UBVPROC glad_glColor4ubv = NULL;
+PFNGLCOLOR4UIPROC glad_glColor4ui = NULL;
+PFNGLCOLOR4UIVPROC glad_glColor4uiv = NULL;
+PFNGLCOLOR4USPROC glad_glColor4us = NULL;
+PFNGLCOLOR4USVPROC glad_glColor4usv = NULL;
+PFNGLCOLORMASKPROC glad_glColorMask = NULL;
+PFNGLCOLORMASKIPROC glad_glColorMaski = NULL;
+PFNGLCOLORMATERIALPROC glad_glColorMaterial = NULL;
+PFNGLCOLORP3UIPROC glad_glColorP3ui = NULL;
+PFNGLCOLORP3UIVPROC glad_glColorP3uiv = NULL;
+PFNGLCOLORP4UIPROC glad_glColorP4ui = NULL;
+PFNGLCOLORP4UIVPROC glad_glColorP4uiv = NULL;
+PFNGLCOLORPOINTERPROC glad_glColorPointer = NULL;
+PFNGLCOMPILESHADERPROC glad_glCompileShader = NULL;
+PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D = NULL;
+PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D = NULL;
+PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D = NULL;
+PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D = NULL;
+PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D = NULL;
+PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D = NULL;
+PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData = NULL;
+PFNGLCOPYPIXELSPROC glad_glCopyPixels = NULL;
+PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D = NULL;
+PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D = NULL;
+PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D = NULL;
+PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D = NULL;
+PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D = NULL;
+PFNGLCREATEPROGRAMPROC glad_glCreateProgram = NULL;
+PFNGLCREATESHADERPROC glad_glCreateShader = NULL;
+PFNGLCREATESHADERPROGRAMVPROC glad_glCreateShaderProgramv = NULL;
+PFNGLCULLFACEPROC glad_glCullFace = NULL;
+PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers = NULL;
+PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers = NULL;
+PFNGLDELETELISTSPROC glad_glDeleteLists = NULL;
+PFNGLDELETEPROGRAMPROC glad_glDeleteProgram = NULL;
+PFNGLDELETEPROGRAMPIPELINESPROC glad_glDeleteProgramPipelines = NULL;
+PFNGLDELETEQUERIESPROC glad_glDeleteQueries = NULL;
+PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers = NULL;
+PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers = NULL;
+PFNGLDELETESHADERPROC glad_glDeleteShader = NULL;
+PFNGLDELETESYNCPROC glad_glDeleteSync = NULL;
+PFNGLDELETETEXTURESPROC glad_glDeleteTextures = NULL;
+PFNGLDELETETRANSFORMFEEDBACKSPROC glad_glDeleteTransformFeedbacks = NULL;
+PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays = NULL;
+PFNGLDEPTHFUNCPROC glad_glDepthFunc = NULL;
+PFNGLDEPTHMASKPROC glad_glDepthMask = NULL;
+PFNGLDEPTHRANGEPROC glad_glDepthRange = NULL;
+PFNGLDEPTHRANGEARRAYVPROC glad_glDepthRangeArrayv = NULL;
+PFNGLDEPTHRANGEINDEXEDPROC glad_glDepthRangeIndexed = NULL;
+PFNGLDEPTHRANGEFPROC glad_glDepthRangef = NULL;
+PFNGLDETACHSHADERPROC glad_glDetachShader = NULL;
+PFNGLDISABLEPROC glad_glDisable = NULL;
+PFNGLDISABLECLIENTSTATEPROC glad_glDisableClientState = NULL;
+PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray = NULL;
+PFNGLDISABLEIPROC glad_glDisablei = NULL;
+PFNGLDRAWARRAYSPROC glad_glDrawArrays = NULL;
+PFNGLDRAWARRAYSINDIRECTPROC glad_glDrawArraysIndirect = NULL;
+PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced = NULL;
+PFNGLDRAWBUFFERPROC glad_glDrawBuffer = NULL;
+PFNGLDRAWBUFFERSPROC glad_glDrawBuffers = NULL;
+PFNGLDRAWELEMENTSPROC glad_glDrawElements = NULL;
+PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex = NULL;
+PFNGLDRAWELEMENTSINDIRECTPROC glad_glDrawElementsIndirect = NULL;
+PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced = NULL;
+PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex = NULL;
+PFNGLDRAWPIXELSPROC glad_glDrawPixels = NULL;
+PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements = NULL;
+PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex = NULL;
+PFNGLDRAWTRANSFORMFEEDBACKPROC glad_glDrawTransformFeedback = NULL;
+PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glad_glDrawTransformFeedbackStream = NULL;
+PFNGLEDGEFLAGPROC glad_glEdgeFlag = NULL;
+PFNGLEDGEFLAGPOINTERPROC glad_glEdgeFlagPointer = NULL;
+PFNGLEDGEFLAGVPROC glad_glEdgeFlagv = NULL;
+PFNGLENABLEPROC glad_glEnable = NULL;
+PFNGLENABLECLIENTSTATEPROC glad_glEnableClientState = NULL;
+PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray = NULL;
+PFNGLENABLEIPROC glad_glEnablei = NULL;
+PFNGLENDPROC glad_glEnd = NULL;
+PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender = NULL;
+PFNGLENDLISTPROC glad_glEndList = NULL;
+PFNGLENDQUERYPROC glad_glEndQuery = NULL;
+PFNGLENDQUERYINDEXEDPROC glad_glEndQueryIndexed = NULL;
+PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback = NULL;
+PFNGLEVALCOORD1DPROC glad_glEvalCoord1d = NULL;
+PFNGLEVALCOORD1DVPROC glad_glEvalCoord1dv = NULL;
+PFNGLEVALCOORD1FPROC glad_glEvalCoord1f = NULL;
+PFNGLEVALCOORD1FVPROC glad_glEvalCoord1fv = NULL;
+PFNGLEVALCOORD2DPROC glad_glEvalCoord2d = NULL;
+PFNGLEVALCOORD2DVPROC glad_glEvalCoord2dv = NULL;
+PFNGLEVALCOORD2FPROC glad_glEvalCoord2f = NULL;
+PFNGLEVALCOORD2FVPROC glad_glEvalCoord2fv = NULL;
+PFNGLEVALMESH1PROC glad_glEvalMesh1 = NULL;
+PFNGLEVALMESH2PROC glad_glEvalMesh2 = NULL;
+PFNGLEVALPOINT1PROC glad_glEvalPoint1 = NULL;
+PFNGLEVALPOINT2PROC glad_glEvalPoint2 = NULL;
+PFNGLFEEDBACKBUFFERPROC glad_glFeedbackBuffer = NULL;
+PFNGLFENCESYNCPROC glad_glFenceSync = NULL;
+PFNGLFINISHPROC glad_glFinish = NULL;
+PFNGLFLUSHPROC glad_glFlush = NULL;
+PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange = NULL;
+PFNGLFOGCOORDPOINTERPROC glad_glFogCoordPointer = NULL;
+PFNGLFOGCOORDDPROC glad_glFogCoordd = NULL;
+PFNGLFOGCOORDDVPROC glad_glFogCoorddv = NULL;
+PFNGLFOGCOORDFPROC glad_glFogCoordf = NULL;
+PFNGLFOGCOORDFVPROC glad_glFogCoordfv = NULL;
+PFNGLFOGFPROC glad_glFogf = NULL;
+PFNGLFOGFVPROC glad_glFogfv = NULL;
+PFNGLFOGIPROC glad_glFogi = NULL;
+PFNGLFOGIVPROC glad_glFogiv = NULL;
+PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer = NULL;
+PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture = NULL;
+PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D = NULL;
+PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D = NULL;
+PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D = NULL;
+PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer = NULL;
+PFNGLFRONTFACEPROC glad_glFrontFace = NULL;
+PFNGLFRUSTUMPROC glad_glFrustum = NULL;
+PFNGLGENBUFFERSPROC glad_glGenBuffers = NULL;
+PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers = NULL;
+PFNGLGENLISTSPROC glad_glGenLists = NULL;
+PFNGLGENPROGRAMPIPELINESPROC glad_glGenProgramPipelines = NULL;
+PFNGLGENQUERIESPROC glad_glGenQueries = NULL;
+PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers = NULL;
+PFNGLGENSAMPLERSPROC glad_glGenSamplers = NULL;
+PFNGLGENTEXTURESPROC glad_glGenTextures = NULL;
+PFNGLGENTRANSFORMFEEDBACKSPROC glad_glGenTransformFeedbacks = NULL;
+PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays = NULL;
+PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap = NULL;
+PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib = NULL;
+PFNGLGETACTIVESUBROUTINENAMEPROC glad_glGetActiveSubroutineName = NULL;
+PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glad_glGetActiveSubroutineUniformName = NULL;
+PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glad_glGetActiveSubroutineUniformiv = NULL;
+PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform = NULL;
+PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName = NULL;
+PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv = NULL;
+PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName = NULL;
+PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv = NULL;
+PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders = NULL;
+PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation = NULL;
+PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v = NULL;
+PFNGLGETBOOLEANVPROC glad_glGetBooleanv = NULL;
+PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v = NULL;
+PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv = NULL;
+PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv = NULL;
+PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData = NULL;
+PFNGLGETCLIPPLANEPROC glad_glGetClipPlane = NULL;
+PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage = NULL;
+PFNGLGETDOUBLEI_VPROC glad_glGetDoublei_v = NULL;
+PFNGLGETDOUBLEVPROC glad_glGetDoublev = NULL;
+PFNGLGETERRORPROC glad_glGetError = NULL;
+PFNGLGETFLOATI_VPROC glad_glGetFloati_v = NULL;
+PFNGLGETFLOATVPROC glad_glGetFloatv = NULL;
+PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex = NULL;
+PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation = NULL;
+PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv = NULL;
+PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v = NULL;
+PFNGLGETINTEGER64VPROC glad_glGetInteger64v = NULL;
+PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v = NULL;
+PFNGLGETINTEGERVPROC glad_glGetIntegerv = NULL;
+PFNGLGETLIGHTFVPROC glad_glGetLightfv = NULL;
+PFNGLGETLIGHTIVPROC glad_glGetLightiv = NULL;
+PFNGLGETMAPDVPROC glad_glGetMapdv = NULL;
+PFNGLGETMAPFVPROC glad_glGetMapfv = NULL;
+PFNGLGETMAPIVPROC glad_glGetMapiv = NULL;
+PFNGLGETMATERIALFVPROC glad_glGetMaterialfv = NULL;
+PFNGLGETMATERIALIVPROC glad_glGetMaterialiv = NULL;
+PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv = NULL;
+PFNGLGETPIXELMAPFVPROC glad_glGetPixelMapfv = NULL;
+PFNGLGETPIXELMAPUIVPROC glad_glGetPixelMapuiv = NULL;
+PFNGLGETPIXELMAPUSVPROC glad_glGetPixelMapusv = NULL;
+PFNGLGETPOINTERVPROC glad_glGetPointerv = NULL;
+PFNGLGETPOLYGONSTIPPLEPROC glad_glGetPolygonStipple = NULL;
+PFNGLGETPROGRAMBINARYPROC glad_glGetProgramBinary = NULL;
+PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog = NULL;
+PFNGLGETPROGRAMPIPELINEINFOLOGPROC glad_glGetProgramPipelineInfoLog = NULL;
+PFNGLGETPROGRAMPIPELINEIVPROC glad_glGetProgramPipelineiv = NULL;
+PFNGLGETPROGRAMSTAGEIVPROC glad_glGetProgramStageiv = NULL;
+PFNGLGETPROGRAMIVPROC glad_glGetProgramiv = NULL;
+PFNGLGETQUERYINDEXEDIVPROC glad_glGetQueryIndexediv = NULL;
+PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v = NULL;
+PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv = NULL;
+PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v = NULL;
+PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv = NULL;
+PFNGLGETQUERYIVPROC glad_glGetQueryiv = NULL;
+PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv = NULL;
+PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv = NULL;
+PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv = NULL;
+PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv = NULL;
+PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv = NULL;
+PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog = NULL;
+PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat = NULL;
+PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource = NULL;
+PFNGLGETSHADERIVPROC glad_glGetShaderiv = NULL;
+PFNGLGETSTRINGPROC glad_glGetString = NULL;
+PFNGLGETSTRINGIPROC glad_glGetStringi = NULL;
+PFNGLGETSUBROUTINEINDEXPROC glad_glGetSubroutineIndex = NULL;
+PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glad_glGetSubroutineUniformLocation = NULL;
+PFNGLGETSYNCIVPROC glad_glGetSynciv = NULL;
+PFNGLGETTEXENVFVPROC glad_glGetTexEnvfv = NULL;
+PFNGLGETTEXENVIVPROC glad_glGetTexEnviv = NULL;
+PFNGLGETTEXGENDVPROC glad_glGetTexGendv = NULL;
+PFNGLGETTEXGENFVPROC glad_glGetTexGenfv = NULL;
+PFNGLGETTEXGENIVPROC glad_glGetTexGeniv = NULL;
+PFNGLGETTEXIMAGEPROC glad_glGetTexImage = NULL;
+PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv = NULL;
+PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv = NULL;
+PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv = NULL;
+PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv = NULL;
+PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv = NULL;
+PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv = NULL;
+PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying = NULL;
+PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex = NULL;
+PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices = NULL;
+PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation = NULL;
+PFNGLGETUNIFORMSUBROUTINEUIVPROC glad_glGetUniformSubroutineuiv = NULL;
+PFNGLGETUNIFORMDVPROC glad_glGetUniformdv = NULL;
+PFNGLGETUNIFORMFVPROC glad_glGetUniformfv = NULL;
+PFNGLGETUNIFORMIVPROC glad_glGetUniformiv = NULL;
+PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv = NULL;
+PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv = NULL;
+PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv = NULL;
+PFNGLGETVERTEXATTRIBLDVPROC glad_glGetVertexAttribLdv = NULL;
+PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv = NULL;
+PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv = NULL;
+PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv = NULL;
+PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv = NULL;
+PFNGLHINTPROC glad_glHint = NULL;
+PFNGLINDEXMASKPROC glad_glIndexMask = NULL;
+PFNGLINDEXPOINTERPROC glad_glIndexPointer = NULL;
+PFNGLINDEXDPROC glad_glIndexd = NULL;
+PFNGLINDEXDVPROC glad_glIndexdv = NULL;
+PFNGLINDEXFPROC glad_glIndexf = NULL;
+PFNGLINDEXFVPROC glad_glIndexfv = NULL;
+PFNGLINDEXIPROC glad_glIndexi = NULL;
+PFNGLINDEXIVPROC glad_glIndexiv = NULL;
+PFNGLINDEXSPROC glad_glIndexs = NULL;
+PFNGLINDEXSVPROC glad_glIndexsv = NULL;
+PFNGLINDEXUBPROC glad_glIndexub = NULL;
+PFNGLINDEXUBVPROC glad_glIndexubv = NULL;
+PFNGLINITNAMESPROC glad_glInitNames = NULL;
+PFNGLINTERLEAVEDARRAYSPROC glad_glInterleavedArrays = NULL;
+PFNGLISBUFFERPROC glad_glIsBuffer = NULL;
+PFNGLISENABLEDPROC glad_glIsEnabled = NULL;
+PFNGLISENABLEDIPROC glad_glIsEnabledi = NULL;
+PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer = NULL;
+PFNGLISLISTPROC glad_glIsList = NULL;
+PFNGLISPROGRAMPROC glad_glIsProgram = NULL;
+PFNGLISPROGRAMPIPELINEPROC glad_glIsProgramPipeline = NULL;
+PFNGLISQUERYPROC glad_glIsQuery = NULL;
+PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer = NULL;
+PFNGLISSAMPLERPROC glad_glIsSampler = NULL;
+PFNGLISSHADERPROC glad_glIsShader = NULL;
+PFNGLISSYNCPROC glad_glIsSync = NULL;
+PFNGLISTEXTUREPROC glad_glIsTexture = NULL;
+PFNGLISTRANSFORMFEEDBACKPROC glad_glIsTransformFeedback = NULL;
+PFNGLISVERTEXARRAYPROC glad_glIsVertexArray = NULL;
+PFNGLLIGHTMODELFPROC glad_glLightModelf = NULL;
+PFNGLLIGHTMODELFVPROC glad_glLightModelfv = NULL;
+PFNGLLIGHTMODELIPROC glad_glLightModeli = NULL;
+PFNGLLIGHTMODELIVPROC glad_glLightModeliv = NULL;
+PFNGLLIGHTFPROC glad_glLightf = NULL;
+PFNGLLIGHTFVPROC glad_glLightfv = NULL;
+PFNGLLIGHTIPROC glad_glLighti = NULL;
+PFNGLLIGHTIVPROC glad_glLightiv = NULL;
+PFNGLLINESTIPPLEPROC glad_glLineStipple = NULL;
+PFNGLLINEWIDTHPROC glad_glLineWidth = NULL;
+PFNGLLINKPROGRAMPROC glad_glLinkProgram = NULL;
+PFNGLLISTBASEPROC glad_glListBase = NULL;
+PFNGLLOADIDENTITYPROC glad_glLoadIdentity = NULL;
+PFNGLLOADMATRIXDPROC glad_glLoadMatrixd = NULL;
+PFNGLLOADMATRIXFPROC glad_glLoadMatrixf = NULL;
+PFNGLLOADNAMEPROC glad_glLoadName = NULL;
+PFNGLLOADTRANSPOSEMATRIXDPROC glad_glLoadTransposeMatrixd = NULL;
+PFNGLLOADTRANSPOSEMATRIXFPROC glad_glLoadTransposeMatrixf = NULL;
+PFNGLLOGICOPPROC glad_glLogicOp = NULL;
+PFNGLMAP1DPROC glad_glMap1d = NULL;
+PFNGLMAP1FPROC glad_glMap1f = NULL;
+PFNGLMAP2DPROC glad_glMap2d = NULL;
+PFNGLMAP2FPROC glad_glMap2f = NULL;
+PFNGLMAPBUFFERPROC glad_glMapBuffer = NULL;
+PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange = NULL;
+PFNGLMAPGRID1DPROC glad_glMapGrid1d = NULL;
+PFNGLMAPGRID1FPROC glad_glMapGrid1f = NULL;
+PFNGLMAPGRID2DPROC glad_glMapGrid2d = NULL;
+PFNGLMAPGRID2FPROC glad_glMapGrid2f = NULL;
+PFNGLMATERIALFPROC glad_glMaterialf = NULL;
+PFNGLMATERIALFVPROC glad_glMaterialfv = NULL;
+PFNGLMATERIALIPROC glad_glMateriali = NULL;
+PFNGLMATERIALIVPROC glad_glMaterialiv = NULL;
+PFNGLMATRIXMODEPROC glad_glMatrixMode = NULL;
+PFNGLMINSAMPLESHADINGPROC glad_glMinSampleShading = NULL;
+PFNGLMULTMATRIXDPROC glad_glMultMatrixd = NULL;
+PFNGLMULTMATRIXFPROC glad_glMultMatrixf = NULL;
+PFNGLMULTTRANSPOSEMATRIXDPROC glad_glMultTransposeMatrixd = NULL;
+PFNGLMULTTRANSPOSEMATRIXFPROC glad_glMultTransposeMatrixf = NULL;
+PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays = NULL;
+PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements = NULL;
+PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex = NULL;
+PFNGLMULTITEXCOORD1DPROC glad_glMultiTexCoord1d = NULL;
+PFNGLMULTITEXCOORD1DVPROC glad_glMultiTexCoord1dv = NULL;
+PFNGLMULTITEXCOORD1FPROC glad_glMultiTexCoord1f = NULL;
+PFNGLMULTITEXCOORD1FVPROC glad_glMultiTexCoord1fv = NULL;
+PFNGLMULTITEXCOORD1IPROC glad_glMultiTexCoord1i = NULL;
+PFNGLMULTITEXCOORD1IVPROC glad_glMultiTexCoord1iv = NULL;
+PFNGLMULTITEXCOORD1SPROC glad_glMultiTexCoord1s = NULL;
+PFNGLMULTITEXCOORD1SVPROC glad_glMultiTexCoord1sv = NULL;
+PFNGLMULTITEXCOORD2DPROC glad_glMultiTexCoord2d = NULL;
+PFNGLMULTITEXCOORD2DVPROC glad_glMultiTexCoord2dv = NULL;
+PFNGLMULTITEXCOORD2FPROC glad_glMultiTexCoord2f = NULL;
+PFNGLMULTITEXCOORD2FVPROC glad_glMultiTexCoord2fv = NULL;
+PFNGLMULTITEXCOORD2IPROC glad_glMultiTexCoord2i = NULL;
+PFNGLMULTITEXCOORD2IVPROC glad_glMultiTexCoord2iv = NULL;
+PFNGLMULTITEXCOORD2SPROC glad_glMultiTexCoord2s = NULL;
+PFNGLMULTITEXCOORD2SVPROC glad_glMultiTexCoord2sv = NULL;
+PFNGLMULTITEXCOORD3DPROC glad_glMultiTexCoord3d = NULL;
+PFNGLMULTITEXCOORD3DVPROC glad_glMultiTexCoord3dv = NULL;
+PFNGLMULTITEXCOORD3FPROC glad_glMultiTexCoord3f = NULL;
+PFNGLMULTITEXCOORD3FVPROC glad_glMultiTexCoord3fv = NULL;
+PFNGLMULTITEXCOORD3IPROC glad_glMultiTexCoord3i = NULL;
+PFNGLMULTITEXCOORD3IVPROC glad_glMultiTexCoord3iv = NULL;
+PFNGLMULTITEXCOORD3SPROC glad_glMultiTexCoord3s = NULL;
+PFNGLMULTITEXCOORD3SVPROC glad_glMultiTexCoord3sv = NULL;
+PFNGLMULTITEXCOORD4DPROC glad_glMultiTexCoord4d = NULL;
+PFNGLMULTITEXCOORD4DVPROC glad_glMultiTexCoord4dv = NULL;
+PFNGLMULTITEXCOORD4FPROC glad_glMultiTexCoord4f = NULL;
+PFNGLMULTITEXCOORD4FVPROC glad_glMultiTexCoord4fv = NULL;
+PFNGLMULTITEXCOORD4IPROC glad_glMultiTexCoord4i = NULL;
+PFNGLMULTITEXCOORD4IVPROC glad_glMultiTexCoord4iv = NULL;
+PFNGLMULTITEXCOORD4SPROC glad_glMultiTexCoord4s = NULL;
+PFNGLMULTITEXCOORD4SVPROC glad_glMultiTexCoord4sv = NULL;
+PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui = NULL;
+PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv = NULL;
+PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui = NULL;
+PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv = NULL;
+PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui = NULL;
+PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv = NULL;
+PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui = NULL;
+PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv = NULL;
+PFNGLNEWLISTPROC glad_glNewList = NULL;
+PFNGLNORMAL3BPROC glad_glNormal3b = NULL;
+PFNGLNORMAL3BVPROC glad_glNormal3bv = NULL;
+PFNGLNORMAL3DPROC glad_glNormal3d = NULL;
+PFNGLNORMAL3DVPROC glad_glNormal3dv = NULL;
+PFNGLNORMAL3FPROC glad_glNormal3f = NULL;
+PFNGLNORMAL3FVPROC glad_glNormal3fv = NULL;
+PFNGLNORMAL3IPROC glad_glNormal3i = NULL;
+PFNGLNORMAL3IVPROC glad_glNormal3iv = NULL;
+PFNGLNORMAL3SPROC glad_glNormal3s = NULL;
+PFNGLNORMAL3SVPROC glad_glNormal3sv = NULL;
+PFNGLNORMALP3UIPROC glad_glNormalP3ui = NULL;
+PFNGLNORMALP3UIVPROC glad_glNormalP3uiv = NULL;
+PFNGLNORMALPOINTERPROC glad_glNormalPointer = NULL;
+PFNGLORTHOPROC glad_glOrtho = NULL;
+PFNGLPASSTHROUGHPROC glad_glPassThrough = NULL;
+PFNGLPATCHPARAMETERFVPROC glad_glPatchParameterfv = NULL;
+PFNGLPATCHPARAMETERIPROC glad_glPatchParameteri = NULL;
+PFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback = NULL;
+PFNGLPIXELMAPFVPROC glad_glPixelMapfv = NULL;
+PFNGLPIXELMAPUIVPROC glad_glPixelMapuiv = NULL;
+PFNGLPIXELMAPUSVPROC glad_glPixelMapusv = NULL;
+PFNGLPIXELSTOREFPROC glad_glPixelStoref = NULL;
+PFNGLPIXELSTOREIPROC glad_glPixelStorei = NULL;
+PFNGLPIXELTRANSFERFPROC glad_glPixelTransferf = NULL;
+PFNGLPIXELTRANSFERIPROC glad_glPixelTransferi = NULL;
+PFNGLPIXELZOOMPROC glad_glPixelZoom = NULL;
+PFNGLPOINTPARAMETERFPROC glad_glPointParameterf = NULL;
+PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv = NULL;
+PFNGLPOINTPARAMETERIPROC glad_glPointParameteri = NULL;
+PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv = NULL;
+PFNGLPOINTSIZEPROC glad_glPointSize = NULL;
+PFNGLPOLYGONMODEPROC glad_glPolygonMode = NULL;
+PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset = NULL;
+PFNGLPOLYGONSTIPPLEPROC glad_glPolygonStipple = NULL;
+PFNGLPOPATTRIBPROC glad_glPopAttrib = NULL;
+PFNGLPOPCLIENTATTRIBPROC glad_glPopClientAttrib = NULL;
+PFNGLPOPMATRIXPROC glad_glPopMatrix = NULL;
+PFNGLPOPNAMEPROC glad_glPopName = NULL;
+PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex = NULL;
+PFNGLPRIORITIZETEXTURESPROC glad_glPrioritizeTextures = NULL;
+PFNGLPROGRAMBINARYPROC glad_glProgramBinary = NULL;
+PFNGLPROGRAMPARAMETERIPROC glad_glProgramParameteri = NULL;
+PFNGLPROGRAMUNIFORM1DPROC glad_glProgramUniform1d = NULL;
+PFNGLPROGRAMUNIFORM1DVPROC glad_glProgramUniform1dv = NULL;
+PFNGLPROGRAMUNIFORM1FPROC glad_glProgramUniform1f = NULL;
+PFNGLPROGRAMUNIFORM1FVPROC glad_glProgramUniform1fv = NULL;
+PFNGLPROGRAMUNIFORM1IPROC glad_glProgramUniform1i = NULL;
+PFNGLPROGRAMUNIFORM1IVPROC glad_glProgramUniform1iv = NULL;
+PFNGLPROGRAMUNIFORM1UIPROC glad_glProgramUniform1ui = NULL;
+PFNGLPROGRAMUNIFORM1UIVPROC glad_glProgramUniform1uiv = NULL;
+PFNGLPROGRAMUNIFORM2DPROC glad_glProgramUniform2d = NULL;
+PFNGLPROGRAMUNIFORM2DVPROC glad_glProgramUniform2dv = NULL;
+PFNGLPROGRAMUNIFORM2FPROC glad_glProgramUniform2f = NULL;
+PFNGLPROGRAMUNIFORM2FVPROC glad_glProgramUniform2fv = NULL;
+PFNGLPROGRAMUNIFORM2IPROC glad_glProgramUniform2i = NULL;
+PFNGLPROGRAMUNIFORM2IVPROC glad_glProgramUniform2iv = NULL;
+PFNGLPROGRAMUNIFORM2UIPROC glad_glProgramUniform2ui = NULL;
+PFNGLPROGRAMUNIFORM2UIVPROC glad_glProgramUniform2uiv = NULL;
+PFNGLPROGRAMUNIFORM3DPROC glad_glProgramUniform3d = NULL;
+PFNGLPROGRAMUNIFORM3DVPROC glad_glProgramUniform3dv = NULL;
+PFNGLPROGRAMUNIFORM3FPROC glad_glProgramUniform3f = NULL;
+PFNGLPROGRAMUNIFORM3FVPROC glad_glProgramUniform3fv = NULL;
+PFNGLPROGRAMUNIFORM3IPROC glad_glProgramUniform3i = NULL;
+PFNGLPROGRAMUNIFORM3IVPROC glad_glProgramUniform3iv = NULL;
+PFNGLPROGRAMUNIFORM3UIPROC glad_glProgramUniform3ui = NULL;
+PFNGLPROGRAMUNIFORM3UIVPROC glad_glProgramUniform3uiv = NULL;
+PFNGLPROGRAMUNIFORM4DPROC glad_glProgramUniform4d = NULL;
+PFNGLPROGRAMUNIFORM4DVPROC glad_glProgramUniform4dv = NULL;
+PFNGLPROGRAMUNIFORM4FPROC glad_glProgramUniform4f = NULL;
+PFNGLPROGRAMUNIFORM4FVPROC glad_glProgramUniform4fv = NULL;
+PFNGLPROGRAMUNIFORM4IPROC glad_glProgramUniform4i = NULL;
+PFNGLPROGRAMUNIFORM4IVPROC glad_glProgramUniform4iv = NULL;
+PFNGLPROGRAMUNIFORM4UIPROC glad_glProgramUniform4ui = NULL;
+PFNGLPROGRAMUNIFORM4UIVPROC glad_glProgramUniform4uiv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX2DVPROC glad_glProgramUniformMatrix2dv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX2FVPROC glad_glProgramUniformMatrix2fv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glad_glProgramUniformMatrix2x3dv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glad_glProgramUniformMatrix2x3fv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glad_glProgramUniformMatrix2x4dv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glad_glProgramUniformMatrix2x4fv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX3DVPROC glad_glProgramUniformMatrix3dv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX3FVPROC glad_glProgramUniformMatrix3fv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glad_glProgramUniformMatrix3x2dv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glad_glProgramUniformMatrix3x2fv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glad_glProgramUniformMatrix3x4dv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glad_glProgramUniformMatrix3x4fv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX4DVPROC glad_glProgramUniformMatrix4dv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX4FVPROC glad_glProgramUniformMatrix4fv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glad_glProgramUniformMatrix4x2dv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glad_glProgramUniformMatrix4x2fv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glad_glProgramUniformMatrix4x3dv = NULL;
+PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glad_glProgramUniformMatrix4x3fv = NULL;
+PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex = NULL;
+PFNGLPUSHATTRIBPROC glad_glPushAttrib = NULL;
+PFNGLPUSHCLIENTATTRIBPROC glad_glPushClientAttrib = NULL;
+PFNGLPUSHMATRIXPROC glad_glPushMatrix = NULL;
+PFNGLPUSHNAMEPROC glad_glPushName = NULL;
+PFNGLQUERYCOUNTERPROC glad_glQueryCounter = NULL;
+PFNGLRASTERPOS2DPROC glad_glRasterPos2d = NULL;
+PFNGLRASTERPOS2DVPROC glad_glRasterPos2dv = NULL;
+PFNGLRASTERPOS2FPROC glad_glRasterPos2f = NULL;
+PFNGLRASTERPOS2FVPROC glad_glRasterPos2fv = NULL;
+PFNGLRASTERPOS2IPROC glad_glRasterPos2i = NULL;
+PFNGLRASTERPOS2IVPROC glad_glRasterPos2iv = NULL;
+PFNGLRASTERPOS2SPROC glad_glRasterPos2s = NULL;
+PFNGLRASTERPOS2SVPROC glad_glRasterPos2sv = NULL;
+PFNGLRASTERPOS3DPROC glad_glRasterPos3d = NULL;
+PFNGLRASTERPOS3DVPROC glad_glRasterPos3dv = NULL;
+PFNGLRASTERPOS3FPROC glad_glRasterPos3f = NULL;
+PFNGLRASTERPOS3FVPROC glad_glRasterPos3fv = NULL;
+PFNGLRASTERPOS3IPROC glad_glRasterPos3i = NULL;
+PFNGLRASTERPOS3IVPROC glad_glRasterPos3iv = NULL;
+PFNGLRASTERPOS3SPROC glad_glRasterPos3s = NULL;
+PFNGLRASTERPOS3SVPROC glad_glRasterPos3sv = NULL;
+PFNGLRASTERPOS4DPROC glad_glRasterPos4d = NULL;
+PFNGLRASTERPOS4DVPROC glad_glRasterPos4dv = NULL;
+PFNGLRASTERPOS4FPROC glad_glRasterPos4f = NULL;
+PFNGLRASTERPOS4FVPROC glad_glRasterPos4fv = NULL;
+PFNGLRASTERPOS4IPROC glad_glRasterPos4i = NULL;
+PFNGLRASTERPOS4IVPROC glad_glRasterPos4iv = NULL;
+PFNGLRASTERPOS4SPROC glad_glRasterPos4s = NULL;
+PFNGLRASTERPOS4SVPROC glad_glRasterPos4sv = NULL;
+PFNGLREADBUFFERPROC glad_glReadBuffer = NULL;
+PFNGLREADPIXELSPROC glad_glReadPixels = NULL;
+PFNGLRECTDPROC glad_glRectd = NULL;
+PFNGLRECTDVPROC glad_glRectdv = NULL;
+PFNGLRECTFPROC glad_glRectf = NULL;
+PFNGLRECTFVPROC glad_glRectfv = NULL;
+PFNGLRECTIPROC glad_glRecti = NULL;
+PFNGLRECTIVPROC glad_glRectiv = NULL;
+PFNGLRECTSPROC glad_glRects = NULL;
+PFNGLRECTSVPROC glad_glRectsv = NULL;
+PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler = NULL;
+PFNGLRENDERMODEPROC glad_glRenderMode = NULL;
+PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage = NULL;
+PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample = NULL;
+PFNGLRESUMETRANSFORMFEEDBACKPROC glad_glResumeTransformFeedback = NULL;
+PFNGLROTATEDPROC glad_glRotated = NULL;
+PFNGLROTATEFPROC glad_glRotatef = NULL;
+PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage = NULL;
+PFNGLSAMPLEMASKIPROC glad_glSampleMaski = NULL;
+PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv = NULL;
+PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv = NULL;
+PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf = NULL;
+PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv = NULL;
+PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri = NULL;
+PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv = NULL;
+PFNGLSCALEDPROC glad_glScaled = NULL;
+PFNGLSCALEFPROC glad_glScalef = NULL;
+PFNGLSCISSORPROC glad_glScissor = NULL;
+PFNGLSCISSORARRAYVPROC glad_glScissorArrayv = NULL;
+PFNGLSCISSORINDEXEDPROC glad_glScissorIndexed = NULL;
+PFNGLSCISSORINDEXEDVPROC glad_glScissorIndexedv = NULL;
+PFNGLSECONDARYCOLOR3BPROC glad_glSecondaryColor3b = NULL;
+PFNGLSECONDARYCOLOR3BVPROC glad_glSecondaryColor3bv = NULL;
+PFNGLSECONDARYCOLOR3DPROC glad_glSecondaryColor3d = NULL;
+PFNGLSECONDARYCOLOR3DVPROC glad_glSecondaryColor3dv = NULL;
+PFNGLSECONDARYCOLOR3FPROC glad_glSecondaryColor3f = NULL;
+PFNGLSECONDARYCOLOR3FVPROC glad_glSecondaryColor3fv = NULL;
+PFNGLSECONDARYCOLOR3IPROC glad_glSecondaryColor3i = NULL;
+PFNGLSECONDARYCOLOR3IVPROC glad_glSecondaryColor3iv = NULL;
+PFNGLSECONDARYCOLOR3SPROC glad_glSecondaryColor3s = NULL;
+PFNGLSECONDARYCOLOR3SVPROC glad_glSecondaryColor3sv = NULL;
+PFNGLSECONDARYCOLOR3UBPROC glad_glSecondaryColor3ub = NULL;
+PFNGLSECONDARYCOLOR3UBVPROC glad_glSecondaryColor3ubv = NULL;
+PFNGLSECONDARYCOLOR3UIPROC glad_glSecondaryColor3ui = NULL;
+PFNGLSECONDARYCOLOR3UIVPROC glad_glSecondaryColor3uiv = NULL;
+PFNGLSECONDARYCOLOR3USPROC glad_glSecondaryColor3us = NULL;
+PFNGLSECONDARYCOLOR3USVPROC glad_glSecondaryColor3usv = NULL;
+PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui = NULL;
+PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv = NULL;
+PFNGLSECONDARYCOLORPOINTERPROC glad_glSecondaryColorPointer = NULL;
+PFNGLSELECTBUFFERPROC glad_glSelectBuffer = NULL;
+PFNGLSHADEMODELPROC glad_glShadeModel = NULL;
+PFNGLSHADERBINARYPROC glad_glShaderBinary = NULL;
+PFNGLSHADERSOURCEPROC glad_glShaderSource = NULL;
+PFNGLSTENCILFUNCPROC glad_glStencilFunc = NULL;
+PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate = NULL;
+PFNGLSTENCILMASKPROC glad_glStencilMask = NULL;
+PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate = NULL;
+PFNGLSTENCILOPPROC glad_glStencilOp = NULL;
+PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate = NULL;
+PFNGLTEXBUFFERPROC glad_glTexBuffer = NULL;
+PFNGLTEXCOORD1DPROC glad_glTexCoord1d = NULL;
+PFNGLTEXCOORD1DVPROC glad_glTexCoord1dv = NULL;
+PFNGLTEXCOORD1FPROC glad_glTexCoord1f = NULL;
+PFNGLTEXCOORD1FVPROC glad_glTexCoord1fv = NULL;
+PFNGLTEXCOORD1IPROC glad_glTexCoord1i = NULL;
+PFNGLTEXCOORD1IVPROC glad_glTexCoord1iv = NULL;
+PFNGLTEXCOORD1SPROC glad_glTexCoord1s = NULL;
+PFNGLTEXCOORD1SVPROC glad_glTexCoord1sv = NULL;
+PFNGLTEXCOORD2DPROC glad_glTexCoord2d = NULL;
+PFNGLTEXCOORD2DVPROC glad_glTexCoord2dv = NULL;
+PFNGLTEXCOORD2FPROC glad_glTexCoord2f = NULL;
+PFNGLTEXCOORD2FVPROC glad_glTexCoord2fv = NULL;
+PFNGLTEXCOORD2IPROC glad_glTexCoord2i = NULL;
+PFNGLTEXCOORD2IVPROC glad_glTexCoord2iv = NULL;
+PFNGLTEXCOORD2SPROC glad_glTexCoord2s = NULL;
+PFNGLTEXCOORD2SVPROC glad_glTexCoord2sv = NULL;
+PFNGLTEXCOORD3DPROC glad_glTexCoord3d = NULL;
+PFNGLTEXCOORD3DVPROC glad_glTexCoord3dv = NULL;
+PFNGLTEXCOORD3FPROC glad_glTexCoord3f = NULL;
+PFNGLTEXCOORD3FVPROC glad_glTexCoord3fv = NULL;
+PFNGLTEXCOORD3IPROC glad_glTexCoord3i = NULL;
+PFNGLTEXCOORD3IVPROC glad_glTexCoord3iv = NULL;
+PFNGLTEXCOORD3SPROC glad_glTexCoord3s = NULL;
+PFNGLTEXCOORD3SVPROC glad_glTexCoord3sv = NULL;
+PFNGLTEXCOORD4DPROC glad_glTexCoord4d = NULL;
+PFNGLTEXCOORD4DVPROC glad_glTexCoord4dv = NULL;
+PFNGLTEXCOORD4FPROC glad_glTexCoord4f = NULL;
+PFNGLTEXCOORD4FVPROC glad_glTexCoord4fv = NULL;
+PFNGLTEXCOORD4IPROC glad_glTexCoord4i = NULL;
+PFNGLTEXCOORD4IVPROC glad_glTexCoord4iv = NULL;
+PFNGLTEXCOORD4SPROC glad_glTexCoord4s = NULL;
+PFNGLTEXCOORD4SVPROC glad_glTexCoord4sv = NULL;
+PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui = NULL;
+PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv = NULL;
+PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui = NULL;
+PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv = NULL;
+PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui = NULL;
+PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv = NULL;
+PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui = NULL;
+PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv = NULL;
+PFNGLTEXCOORDPOINTERPROC glad_glTexCoordPointer = NULL;
+PFNGLTEXENVFPROC glad_glTexEnvf = NULL;
+PFNGLTEXENVFVPROC glad_glTexEnvfv = NULL;
+PFNGLTEXENVIPROC glad_glTexEnvi = NULL;
+PFNGLTEXENVIVPROC glad_glTexEnviv = NULL;
+PFNGLTEXGENDPROC glad_glTexGend = NULL;
+PFNGLTEXGENDVPROC glad_glTexGendv = NULL;
+PFNGLTEXGENFPROC glad_glTexGenf = NULL;
+PFNGLTEXGENFVPROC glad_glTexGenfv = NULL;
+PFNGLTEXGENIPROC glad_glTexGeni = NULL;
+PFNGLTEXGENIVPROC glad_glTexGeniv = NULL;
+PFNGLTEXIMAGE1DPROC glad_glTexImage1D = NULL;
+PFNGLTEXIMAGE2DPROC glad_glTexImage2D = NULL;
+PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample = NULL;
+PFNGLTEXIMAGE3DPROC glad_glTexImage3D = NULL;
+PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample = NULL;
+PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv = NULL;
+PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv = NULL;
+PFNGLTEXPARAMETERFPROC glad_glTexParameterf = NULL;
+PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv = NULL;
+PFNGLTEXPARAMETERIPROC glad_glTexParameteri = NULL;
+PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv = NULL;
+PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D = NULL;
+PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D = NULL;
+PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D = NULL;
+PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings = NULL;
+PFNGLTRANSLATEDPROC glad_glTranslated = NULL;
+PFNGLTRANSLATEFPROC glad_glTranslatef = NULL;
+PFNGLUNIFORM1DPROC glad_glUniform1d = NULL;
+PFNGLUNIFORM1DVPROC glad_glUniform1dv = NULL;
+PFNGLUNIFORM1FPROC glad_glUniform1f = NULL;
+PFNGLUNIFORM1FVPROC glad_glUniform1fv = NULL;
+PFNGLUNIFORM1IPROC glad_glUniform1i = NULL;
+PFNGLUNIFORM1IVPROC glad_glUniform1iv = NULL;
+PFNGLUNIFORM1UIPROC glad_glUniform1ui = NULL;
+PFNGLUNIFORM1UIVPROC glad_glUniform1uiv = NULL;
+PFNGLUNIFORM2DPROC glad_glUniform2d = NULL;
+PFNGLUNIFORM2DVPROC glad_glUniform2dv = NULL;
+PFNGLUNIFORM2FPROC glad_glUniform2f = NULL;
+PFNGLUNIFORM2FVPROC glad_glUniform2fv = NULL;
+PFNGLUNIFORM2IPROC glad_glUniform2i = NULL;
+PFNGLUNIFORM2IVPROC glad_glUniform2iv = NULL;
+PFNGLUNIFORM2UIPROC glad_glUniform2ui = NULL;
+PFNGLUNIFORM2UIVPROC glad_glUniform2uiv = NULL;
+PFNGLUNIFORM3DPROC glad_glUniform3d = NULL;
+PFNGLUNIFORM3DVPROC glad_glUniform3dv = NULL;
+PFNGLUNIFORM3FPROC glad_glUniform3f = NULL;
+PFNGLUNIFORM3FVPROC glad_glUniform3fv = NULL;
+PFNGLUNIFORM3IPROC glad_glUniform3i = NULL;
+PFNGLUNIFORM3IVPROC glad_glUniform3iv = NULL;
+PFNGLUNIFORM3UIPROC glad_glUniform3ui = NULL;
+PFNGLUNIFORM3UIVPROC glad_glUniform3uiv = NULL;
+PFNGLUNIFORM4DPROC glad_glUniform4d = NULL;
+PFNGLUNIFORM4DVPROC glad_glUniform4dv = NULL;
+PFNGLUNIFORM4FPROC glad_glUniform4f = NULL;
+PFNGLUNIFORM4FVPROC glad_glUniform4fv = NULL;
+PFNGLUNIFORM4IPROC glad_glUniform4i = NULL;
+PFNGLUNIFORM4IVPROC glad_glUniform4iv = NULL;
+PFNGLUNIFORM4UIPROC glad_glUniform4ui = NULL;
+PFNGLUNIFORM4UIVPROC glad_glUniform4uiv = NULL;
+PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding = NULL;
+PFNGLUNIFORMMATRIX2DVPROC glad_glUniformMatrix2dv = NULL;
+PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv = NULL;
+PFNGLUNIFORMMATRIX2X3DVPROC glad_glUniformMatrix2x3dv = NULL;
+PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv = NULL;
+PFNGLUNIFORMMATRIX2X4DVPROC glad_glUniformMatrix2x4dv = NULL;
+PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv = NULL;
+PFNGLUNIFORMMATRIX3DVPROC glad_glUniformMatrix3dv = NULL;
+PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv = NULL;
+PFNGLUNIFORMMATRIX3X2DVPROC glad_glUniformMatrix3x2dv = NULL;
+PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv = NULL;
+PFNGLUNIFORMMATRIX3X4DVPROC glad_glUniformMatrix3x4dv = NULL;
+PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv = NULL;
+PFNGLUNIFORMMATRIX4DVPROC glad_glUniformMatrix4dv = NULL;
+PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv = NULL;
+PFNGLUNIFORMMATRIX4X2DVPROC glad_glUniformMatrix4x2dv = NULL;
+PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv = NULL;
+PFNGLUNIFORMMATRIX4X3DVPROC glad_glUniformMatrix4x3dv = NULL;
+PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv = NULL;
+PFNGLUNIFORMSUBROUTINESUIVPROC glad_glUniformSubroutinesuiv = NULL;
+PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer = NULL;
+PFNGLUSEPROGRAMPROC glad_glUseProgram = NULL;
+PFNGLUSEPROGRAMSTAGESPROC glad_glUseProgramStages = NULL;
+PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram = NULL;
+PFNGLVALIDATEPROGRAMPIPELINEPROC glad_glValidateProgramPipeline = NULL;
+PFNGLVERTEX2DPROC glad_glVertex2d = NULL;
+PFNGLVERTEX2DVPROC glad_glVertex2dv = NULL;
+PFNGLVERTEX2FPROC glad_glVertex2f = NULL;
+PFNGLVERTEX2FVPROC glad_glVertex2fv = NULL;
+PFNGLVERTEX2IPROC glad_glVertex2i = NULL;
+PFNGLVERTEX2IVPROC glad_glVertex2iv = NULL;
+PFNGLVERTEX2SPROC glad_glVertex2s = NULL;
+PFNGLVERTEX2SVPROC glad_glVertex2sv = NULL;
+PFNGLVERTEX3DPROC glad_glVertex3d = NULL;
+PFNGLVERTEX3DVPROC glad_glVertex3dv = NULL;
+PFNGLVERTEX3FPROC glad_glVertex3f = NULL;
+PFNGLVERTEX3FVPROC glad_glVertex3fv = NULL;
+PFNGLVERTEX3IPROC glad_glVertex3i = NULL;
+PFNGLVERTEX3IVPROC glad_glVertex3iv = NULL;
+PFNGLVERTEX3SPROC glad_glVertex3s = NULL;
+PFNGLVERTEX3SVPROC glad_glVertex3sv = NULL;
+PFNGLVERTEX4DPROC glad_glVertex4d = NULL;
+PFNGLVERTEX4DVPROC glad_glVertex4dv = NULL;
+PFNGLVERTEX4FPROC glad_glVertex4f = NULL;
+PFNGLVERTEX4FVPROC glad_glVertex4fv = NULL;
+PFNGLVERTEX4IPROC glad_glVertex4i = NULL;
+PFNGLVERTEX4IVPROC glad_glVertex4iv = NULL;
+PFNGLVERTEX4SPROC glad_glVertex4s = NULL;
+PFNGLVERTEX4SVPROC glad_glVertex4sv = NULL;
+PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d = NULL;
+PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv = NULL;
+PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f = NULL;
+PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv = NULL;
+PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s = NULL;
+PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv = NULL;
+PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d = NULL;
+PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv = NULL;
+PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f = NULL;
+PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv = NULL;
+PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s = NULL;
+PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv = NULL;
+PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d = NULL;
+PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv = NULL;
+PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f = NULL;
+PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv = NULL;
+PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s = NULL;
+PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv = NULL;
+PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv = NULL;
+PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv = NULL;
+PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv = NULL;
+PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub = NULL;
+PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv = NULL;
+PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv = NULL;
+PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv = NULL;
+PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv = NULL;
+PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d = NULL;
+PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv = NULL;
+PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f = NULL;
+PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv = NULL;
+PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv = NULL;
+PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s = NULL;
+PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv = NULL;
+PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv = NULL;
+PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv = NULL;
+PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv = NULL;
+PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor = NULL;
+PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i = NULL;
+PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv = NULL;
+PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui = NULL;
+PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv = NULL;
+PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i = NULL;
+PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv = NULL;
+PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui = NULL;
+PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv = NULL;
+PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i = NULL;
+PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv = NULL;
+PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui = NULL;
+PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv = NULL;
+PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv = NULL;
+PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i = NULL;
+PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv = NULL;
+PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv = NULL;
+PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv = NULL;
+PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui = NULL;
+PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv = NULL;
+PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv = NULL;
+PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer = NULL;
+PFNGLVERTEXATTRIBL1DPROC glad_glVertexAttribL1d = NULL;
+PFNGLVERTEXATTRIBL1DVPROC glad_glVertexAttribL1dv = NULL;
+PFNGLVERTEXATTRIBL2DPROC glad_glVertexAttribL2d = NULL;
+PFNGLVERTEXATTRIBL2DVPROC glad_glVertexAttribL2dv = NULL;
+PFNGLVERTEXATTRIBL3DPROC glad_glVertexAttribL3d = NULL;
+PFNGLVERTEXATTRIBL3DVPROC glad_glVertexAttribL3dv = NULL;
+PFNGLVERTEXATTRIBL4DPROC glad_glVertexAttribL4d = NULL;
+PFNGLVERTEXATTRIBL4DVPROC glad_glVertexAttribL4dv = NULL;
+PFNGLVERTEXATTRIBLPOINTERPROC glad_glVertexAttribLPointer = NULL;
+PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui = NULL;
+PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv = NULL;
+PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui = NULL;
+PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv = NULL;
+PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui = NULL;
+PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv = NULL;
+PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui = NULL;
+PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv = NULL;
+PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer = NULL;
+PFNGLVERTEXP2UIPROC glad_glVertexP2ui = NULL;
+PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv = NULL;
+PFNGLVERTEXP3UIPROC glad_glVertexP3ui = NULL;
+PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv = NULL;
+PFNGLVERTEXP4UIPROC glad_glVertexP4ui = NULL;
+PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv = NULL;
+PFNGLVERTEXPOINTERPROC glad_glVertexPointer = NULL;
+PFNGLVIEWPORTPROC glad_glViewport = NULL;
+PFNGLVIEWPORTARRAYVPROC glad_glViewportArrayv = NULL;
+PFNGLVIEWPORTINDEXEDFPROC glad_glViewportIndexedf = NULL;
+PFNGLVIEWPORTINDEXEDFVPROC glad_glViewportIndexedfv = NULL;
+PFNGLWAITSYNCPROC glad_glWaitSync = NULL;
+PFNGLWINDOWPOS2DPROC glad_glWindowPos2d = NULL;
+PFNGLWINDOWPOS2DVPROC glad_glWindowPos2dv = NULL;
+PFNGLWINDOWPOS2FPROC glad_glWindowPos2f = NULL;
+PFNGLWINDOWPOS2FVPROC glad_glWindowPos2fv = NULL;
+PFNGLWINDOWPOS2IPROC glad_glWindowPos2i = NULL;
+PFNGLWINDOWPOS2IVPROC glad_glWindowPos2iv = NULL;
+PFNGLWINDOWPOS2SPROC glad_glWindowPos2s = NULL;
+PFNGLWINDOWPOS2SVPROC glad_glWindowPos2sv = NULL;
+PFNGLWINDOWPOS3DPROC glad_glWindowPos3d = NULL;
+PFNGLWINDOWPOS3DVPROC glad_glWindowPos3dv = NULL;
+PFNGLWINDOWPOS3FPROC glad_glWindowPos3f = NULL;
+PFNGLWINDOWPOS3FVPROC glad_glWindowPos3fv = NULL;
+PFNGLWINDOWPOS3IPROC glad_glWindowPos3i = NULL;
+PFNGLWINDOWPOS3IVPROC glad_glWindowPos3iv = NULL;
+PFNGLWINDOWPOS3SPROC glad_glWindowPos3s = NULL;
+PFNGLWINDOWPOS3SVPROC glad_glWindowPos3sv = NULL;
+static void load_GL_VERSION_1_0(GLADloadproc load) {
+ if(!GLAD_GL_VERSION_1_0) return;
+ glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace");
+ glad_glFrontFace = (PFNGLFRONTFACEPROC)load("glFrontFace");
+ glad_glHint = (PFNGLHINTPROC)load("glHint");
+ glad_glLineWidth = (PFNGLLINEWIDTHPROC)load("glLineWidth");
+ glad_glPointSize = (PFNGLPOINTSIZEPROC)load("glPointSize");
+ glad_glPolygonMode = (PFNGLPOLYGONMODEPROC)load("glPolygonMode");
+ glad_glScissor = (PFNGLSCISSORPROC)load("glScissor");
+ glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC)load("glTexParameterf");
+ glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC)load("glTexParameterfv");
+ glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC)load("glTexParameteri");
+ glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC)load("glTexParameteriv");
+ glad_glTexImage1D = (PFNGLTEXIMAGE1DPROC)load("glTexImage1D");
+ glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC)load("glTexImage2D");
+ glad_glDrawBuffer = (PFNGLDRAWBUFFERPROC)load("glDrawBuffer");
+ glad_glClear = (PFNGLCLEARPROC)load("glClear");
+ glad_glClearColor = (PFNGLCLEARCOLORPROC)load("glClearColor");
+ glad_glClearStencil = (PFNGLCLEARSTENCILPROC)load("glClearStencil");
+ glad_glClearDepth = (PFNGLCLEARDEPTHPROC)load("glClearDepth");
+ glad_glStencilMask = (PFNGLSTENCILMASKPROC)load("glStencilMask");
+ glad_glColorMask = (PFNGLCOLORMASKPROC)load("glColorMask");
+ glad_glDepthMask = (PFNGLDEPTHMASKPROC)load("glDepthMask");
+ glad_glDisable = (PFNGLDISABLEPROC)load("glDisable");
+ glad_glEnable = (PFNGLENABLEPROC)load("glEnable");
+ glad_glFinish = (PFNGLFINISHPROC)load("glFinish");
+ glad_glFlush = (PFNGLFLUSHPROC)load("glFlush");
+ glad_glBlendFunc = (PFNGLBLENDFUNCPROC)load("glBlendFunc");
+ glad_glLogicOp = (PFNGLLOGICOPPROC)load("glLogicOp");
+ glad_glStencilFunc = (PFNGLSTENCILFUNCPROC)load("glStencilFunc");
+ glad_glStencilOp = (PFNGLSTENCILOPPROC)load("glStencilOp");
+ glad_glDepthFunc = (PFNGLDEPTHFUNCPROC)load("glDepthFunc");
+ glad_glPixelStoref = (PFNGLPIXELSTOREFPROC)load("glPixelStoref");
+ glad_glPixelStorei = (PFNGLPIXELSTOREIPROC)load("glPixelStorei");
+ glad_glReadBuffer = (PFNGLREADBUFFERPROC)load("glReadBuffer");
+ glad_glReadPixels = (PFNGLREADPIXELSPROC)load("glReadPixels");
+ glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC)load("glGetBooleanv");
+ glad_glGetDoublev = (PFNGLGETDOUBLEVPROC)load("glGetDoublev");
+ glad_glGetError = (PFNGLGETERRORPROC)load("glGetError");
+ glad_glGetFloatv = (PFNGLGETFLOATVPROC)load("glGetFloatv");
+ glad_glGetIntegerv = (PFNGLGETINTEGERVPROC)load("glGetIntegerv");
+ glad_glGetString = (PFNGLGETSTRINGPROC)load("glGetString");
+ glad_glGetTexImage = (PFNGLGETTEXIMAGEPROC)load("glGetTexImage");
+ glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC)load("glGetTexParameterfv");
+ glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC)load("glGetTexParameteriv");
+ glad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC)load("glGetTexLevelParameterfv");
+ glad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC)load("glGetTexLevelParameteriv");
+ glad_glIsEnabled = (PFNGLISENABLEDPROC)load("glIsEnabled");
+ glad_glDepthRange = (PFNGLDEPTHRANGEPROC)load("glDepthRange");
+ glad_glViewport = (PFNGLVIEWPORTPROC)load("glViewport");
+ glad_glNewList = (PFNGLNEWLISTPROC)load("glNewList");
+ glad_glEndList = (PFNGLENDLISTPROC)load("glEndList");
+ glad_glCallList = (PFNGLCALLLISTPROC)load("glCallList");
+ glad_glCallLists = (PFNGLCALLLISTSPROC)load("glCallLists");
+ glad_glDeleteLists = (PFNGLDELETELISTSPROC)load("glDeleteLists");
+ glad_glGenLists = (PFNGLGENLISTSPROC)load("glGenLists");
+ glad_glListBase = (PFNGLLISTBASEPROC)load("glListBase");
+ glad_glBegin = (PFNGLBEGINPROC)load("glBegin");
+ glad_glBitmap = (PFNGLBITMAPPROC)load("glBitmap");
+ glad_glColor3b = (PFNGLCOLOR3BPROC)load("glColor3b");
+ glad_glColor3bv = (PFNGLCOLOR3BVPROC)load("glColor3bv");
+ glad_glColor3d = (PFNGLCOLOR3DPROC)load("glColor3d");
+ glad_glColor3dv = (PFNGLCOLOR3DVPROC)load("glColor3dv");
+ glad_glColor3f = (PFNGLCOLOR3FPROC)load("glColor3f");
+ glad_glColor3fv = (PFNGLCOLOR3FVPROC)load("glColor3fv");
+ glad_glColor3i = (PFNGLCOLOR3IPROC)load("glColor3i");
+ glad_glColor3iv = (PFNGLCOLOR3IVPROC)load("glColor3iv");
+ glad_glColor3s = (PFNGLCOLOR3SPROC)load("glColor3s");
+ glad_glColor3sv = (PFNGLCOLOR3SVPROC)load("glColor3sv");
+ glad_glColor3ub = (PFNGLCOLOR3UBPROC)load("glColor3ub");
+ glad_glColor3ubv = (PFNGLCOLOR3UBVPROC)load("glColor3ubv");
+ glad_glColor3ui = (PFNGLCOLOR3UIPROC)load("glColor3ui");
+ glad_glColor3uiv = (PFNGLCOLOR3UIVPROC)load("glColor3uiv");
+ glad_glColor3us = (PFNGLCOLOR3USPROC)load("glColor3us");
+ glad_glColor3usv = (PFNGLCOLOR3USVPROC)load("glColor3usv");
+ glad_glColor4b = (PFNGLCOLOR4BPROC)load("glColor4b");
+ glad_glColor4bv = (PFNGLCOLOR4BVPROC)load("glColor4bv");
+ glad_glColor4d = (PFNGLCOLOR4DPROC)load("glColor4d");
+ glad_glColor4dv = (PFNGLCOLOR4DVPROC)load("glColor4dv");
+ glad_glColor4f = (PFNGLCOLOR4FPROC)load("glColor4f");
+ glad_glColor4fv = (PFNGLCOLOR4FVPROC)load("glColor4fv");
+ glad_glColor4i = (PFNGLCOLOR4IPROC)load("glColor4i");
+ glad_glColor4iv = (PFNGLCOLOR4IVPROC)load("glColor4iv");
+ glad_glColor4s = (PFNGLCOLOR4SPROC)load("glColor4s");
+ glad_glColor4sv = (PFNGLCOLOR4SVPROC)load("glColor4sv");
+ glad_glColor4ub = (PFNGLCOLOR4UBPROC)load("glColor4ub");
+ glad_glColor4ubv = (PFNGLCOLOR4UBVPROC)load("glColor4ubv");
+ glad_glColor4ui = (PFNGLCOLOR4UIPROC)load("glColor4ui");
+ glad_glColor4uiv = (PFNGLCOLOR4UIVPROC)load("glColor4uiv");
+ glad_glColor4us = (PFNGLCOLOR4USPROC)load("glColor4us");
+ glad_glColor4usv = (PFNGLCOLOR4USVPROC)load("glColor4usv");
+ glad_glEdgeFlag = (PFNGLEDGEFLAGPROC)load("glEdgeFlag");
+ glad_glEdgeFlagv = (PFNGLEDGEFLAGVPROC)load("glEdgeFlagv");
+ glad_glEnd = (PFNGLENDPROC)load("glEnd");
+ glad_glIndexd = (PFNGLINDEXDPROC)load("glIndexd");
+ glad_glIndexdv = (PFNGLINDEXDVPROC)load("glIndexdv");
+ glad_glIndexf = (PFNGLINDEXFPROC)load("glIndexf");
+ glad_glIndexfv = (PFNGLINDEXFVPROC)load("glIndexfv");
+ glad_glIndexi = (PFNGLINDEXIPROC)load("glIndexi");
+ glad_glIndexiv = (PFNGLINDEXIVPROC)load("glIndexiv");
+ glad_glIndexs = (PFNGLINDEXSPROC)load("glIndexs");
+ glad_glIndexsv = (PFNGLINDEXSVPROC)load("glIndexsv");
+ glad_glNormal3b = (PFNGLNORMAL3BPROC)load("glNormal3b");
+ glad_glNormal3bv = (PFNGLNORMAL3BVPROC)load("glNormal3bv");
+ glad_glNormal3d = (PFNGLNORMAL3DPROC)load("glNormal3d");
+ glad_glNormal3dv = (PFNGLNORMAL3DVPROC)load("glNormal3dv");
+ glad_glNormal3f = (PFNGLNORMAL3FPROC)load("glNormal3f");
+ glad_glNormal3fv = (PFNGLNORMAL3FVPROC)load("glNormal3fv");
+ glad_glNormal3i = (PFNGLNORMAL3IPROC)load("glNormal3i");
+ glad_glNormal3iv = (PFNGLNORMAL3IVPROC)load("glNormal3iv");
+ glad_glNormal3s = (PFNGLNORMAL3SPROC)load("glNormal3s");
+ glad_glNormal3sv = (PFNGLNORMAL3SVPROC)load("glNormal3sv");
+ glad_glRasterPos2d = (PFNGLRASTERPOS2DPROC)load("glRasterPos2d");
+ glad_glRasterPos2dv = (PFNGLRASTERPOS2DVPROC)load("glRasterPos2dv");
+ glad_glRasterPos2f = (PFNGLRASTERPOS2FPROC)load("glRasterPos2f");
+ glad_glRasterPos2fv = (PFNGLRASTERPOS2FVPROC)load("glRasterPos2fv");
+ glad_glRasterPos2i = (PFNGLRASTERPOS2IPROC)load("glRasterPos2i");
+ glad_glRasterPos2iv = (PFNGLRASTERPOS2IVPROC)load("glRasterPos2iv");
+ glad_glRasterPos2s = (PFNGLRASTERPOS2SPROC)load("glRasterPos2s");
+ glad_glRasterPos2sv = (PFNGLRASTERPOS2SVPROC)load("glRasterPos2sv");
+ glad_glRasterPos3d = (PFNGLRASTERPOS3DPROC)load("glRasterPos3d");
+ glad_glRasterPos3dv = (PFNGLRASTERPOS3DVPROC)load("glRasterPos3dv");
+ glad_glRasterPos3f = (PFNGLRASTERPOS3FPROC)load("glRasterPos3f");
+ glad_glRasterPos3fv = (PFNGLRASTERPOS3FVPROC)load("glRasterPos3fv");
+ glad_glRasterPos3i = (PFNGLRASTERPOS3IPROC)load("glRasterPos3i");
+ glad_glRasterPos3iv = (PFNGLRASTERPOS3IVPROC)load("glRasterPos3iv");
+ glad_glRasterPos3s = (PFNGLRASTERPOS3SPROC)load("glRasterPos3s");
+ glad_glRasterPos3sv = (PFNGLRASTERPOS3SVPROC)load("glRasterPos3sv");
+ glad_glRasterPos4d = (PFNGLRASTERPOS4DPROC)load("glRasterPos4d");
+ glad_glRasterPos4dv = (PFNGLRASTERPOS4DVPROC)load("glRasterPos4dv");
+ glad_glRasterPos4f = (PFNGLRASTERPOS4FPROC)load("glRasterPos4f");
+ glad_glRasterPos4fv = (PFNGLRASTERPOS4FVPROC)load("glRasterPos4fv");
+ glad_glRasterPos4i = (PFNGLRASTERPOS4IPROC)load("glRasterPos4i");
+ glad_glRasterPos4iv = (PFNGLRASTERPOS4IVPROC)load("glRasterPos4iv");
+ glad_glRasterPos4s = (PFNGLRASTERPOS4SPROC)load("glRasterPos4s");
+ glad_glRasterPos4sv = (PFNGLRASTERPOS4SVPROC)load("glRasterPos4sv");
+ glad_glRectd = (PFNGLRECTDPROC)load("glRectd");
+ glad_glRectdv = (PFNGLRECTDVPROC)load("glRectdv");
+ glad_glRectf = (PFNGLRECTFPROC)load("glRectf");
+ glad_glRectfv = (PFNGLRECTFVPROC)load("glRectfv");
+ glad_glRecti = (PFNGLRECTIPROC)load("glRecti");
+ glad_glRectiv = (PFNGLRECTIVPROC)load("glRectiv");
+ glad_glRects = (PFNGLRECTSPROC)load("glRects");
+ glad_glRectsv = (PFNGLRECTSVPROC)load("glRectsv");
+ glad_glTexCoord1d = (PFNGLTEXCOORD1DPROC)load("glTexCoord1d");
+ glad_glTexCoord1dv = (PFNGLTEXCOORD1DVPROC)load("glTexCoord1dv");
+ glad_glTexCoord1f = (PFNGLTEXCOORD1FPROC)load("glTexCoord1f");
+ glad_glTexCoord1fv = (PFNGLTEXCOORD1FVPROC)load("glTexCoord1fv");
+ glad_glTexCoord1i = (PFNGLTEXCOORD1IPROC)load("glTexCoord1i");
+ glad_glTexCoord1iv = (PFNGLTEXCOORD1IVPROC)load("glTexCoord1iv");
+ glad_glTexCoord1s = (PFNGLTEXCOORD1SPROC)load("glTexCoord1s");
+ glad_glTexCoord1sv = (PFNGLTEXCOORD1SVPROC)load("glTexCoord1sv");
+ glad_glTexCoord2d = (PFNGLTEXCOORD2DPROC)load("glTexCoord2d");
+ glad_glTexCoord2dv = (PFNGLTEXCOORD2DVPROC)load("glTexCoord2dv");
+ glad_glTexCoord2f = (PFNGLTEXCOORD2FPROC)load("glTexCoord2f");
+ glad_glTexCoord2fv = (PFNGLTEXCOORD2FVPROC)load("glTexCoord2fv");
+ glad_glTexCoord2i = (PFNGLTEXCOORD2IPROC)load("glTexCoord2i");
+ glad_glTexCoord2iv = (PFNGLTEXCOORD2IVPROC)load("glTexCoord2iv");
+ glad_glTexCoord2s = (PFNGLTEXCOORD2SPROC)load("glTexCoord2s");
+ glad_glTexCoord2sv = (PFNGLTEXCOORD2SVPROC)load("glTexCoord2sv");
+ glad_glTexCoord3d = (PFNGLTEXCOORD3DPROC)load("glTexCoord3d");
+ glad_glTexCoord3dv = (PFNGLTEXCOORD3DVPROC)load("glTexCoord3dv");
+ glad_glTexCoord3f = (PFNGLTEXCOORD3FPROC)load("glTexCoord3f");
+ glad_glTexCoord3fv = (PFNGLTEXCOORD3FVPROC)load("glTexCoord3fv");
+ glad_glTexCoord3i = (PFNGLTEXCOORD3IPROC)load("glTexCoord3i");
+ glad_glTexCoord3iv = (PFNGLTEXCOORD3IVPROC)load("glTexCoord3iv");
+ glad_glTexCoord3s = (PFNGLTEXCOORD3SPROC)load("glTexCoord3s");
+ glad_glTexCoord3sv = (PFNGLTEXCOORD3SVPROC)load("glTexCoord3sv");
+ glad_glTexCoord4d = (PFNGLTEXCOORD4DPROC)load("glTexCoord4d");
+ glad_glTexCoord4dv = (PFNGLTEXCOORD4DVPROC)load("glTexCoord4dv");
+ glad_glTexCoord4f = (PFNGLTEXCOORD4FPROC)load("glTexCoord4f");
+ glad_glTexCoord4fv = (PFNGLTEXCOORD4FVPROC)load("glTexCoord4fv");
+ glad_glTexCoord4i = (PFNGLTEXCOORD4IPROC)load("glTexCoord4i");
+ glad_glTexCoord4iv = (PFNGLTEXCOORD4IVPROC)load("glTexCoord4iv");
+ glad_glTexCoord4s = (PFNGLTEXCOORD4SPROC)load("glTexCoord4s");
+ glad_glTexCoord4sv = (PFNGLTEXCOORD4SVPROC)load("glTexCoord4sv");
+ glad_glVertex2d = (PFNGLVERTEX2DPROC)load("glVertex2d");
+ glad_glVertex2dv = (PFNGLVERTEX2DVPROC)load("glVertex2dv");
+ glad_glVertex2f = (PFNGLVERTEX2FPROC)load("glVertex2f");
+ glad_glVertex2fv = (PFNGLVERTEX2FVPROC)load("glVertex2fv");
+ glad_glVertex2i = (PFNGLVERTEX2IPROC)load("glVertex2i");
+ glad_glVertex2iv = (PFNGLVERTEX2IVPROC)load("glVertex2iv");
+ glad_glVertex2s = (PFNGLVERTEX2SPROC)load("glVertex2s");
+ glad_glVertex2sv = (PFNGLVERTEX2SVPROC)load("glVertex2sv");
+ glad_glVertex3d = (PFNGLVERTEX3DPROC)load("glVertex3d");
+ glad_glVertex3dv = (PFNGLVERTEX3DVPROC)load("glVertex3dv");
+ glad_glVertex3f = (PFNGLVERTEX3FPROC)load("glVertex3f");
+ glad_glVertex3fv = (PFNGLVERTEX3FVPROC)load("glVertex3fv");
+ glad_glVertex3i = (PFNGLVERTEX3IPROC)load("glVertex3i");
+ glad_glVertex3iv = (PFNGLVERTEX3IVPROC)load("glVertex3iv");
+ glad_glVertex3s = (PFNGLVERTEX3SPROC)load("glVertex3s");
+ glad_glVertex3sv = (PFNGLVERTEX3SVPROC)load("glVertex3sv");
+ glad_glVertex4d = (PFNGLVERTEX4DPROC)load("glVertex4d");
+ glad_glVertex4dv = (PFNGLVERTEX4DVPROC)load("glVertex4dv");
+ glad_glVertex4f = (PFNGLVERTEX4FPROC)load("glVertex4f");
+ glad_glVertex4fv = (PFNGLVERTEX4FVPROC)load("glVertex4fv");
+ glad_glVertex4i = (PFNGLVERTEX4IPROC)load("glVertex4i");
+ glad_glVertex4iv = (PFNGLVERTEX4IVPROC)load("glVertex4iv");
+ glad_glVertex4s = (PFNGLVERTEX4SPROC)load("glVertex4s");
+ glad_glVertex4sv = (PFNGLVERTEX4SVPROC)load("glVertex4sv");
+ glad_glClipPlane = (PFNGLCLIPPLANEPROC)load("glClipPlane");
+ glad_glColorMaterial = (PFNGLCOLORMATERIALPROC)load("glColorMaterial");
+ glad_glFogf = (PFNGLFOGFPROC)load("glFogf");
+ glad_glFogfv = (PFNGLFOGFVPROC)load("glFogfv");
+ glad_glFogi = (PFNGLFOGIPROC)load("glFogi");
+ glad_glFogiv = (PFNGLFOGIVPROC)load("glFogiv");
+ glad_glLightf = (PFNGLLIGHTFPROC)load("glLightf");
+ glad_glLightfv = (PFNGLLIGHTFVPROC)load("glLightfv");
+ glad_glLighti = (PFNGLLIGHTIPROC)load("glLighti");
+ glad_glLightiv = (PFNGLLIGHTIVPROC)load("glLightiv");
+ glad_glLightModelf = (PFNGLLIGHTMODELFPROC)load("glLightModelf");
+ glad_glLightModelfv = (PFNGLLIGHTMODELFVPROC)load("glLightModelfv");
+ glad_glLightModeli = (PFNGLLIGHTMODELIPROC)load("glLightModeli");
+ glad_glLightModeliv = (PFNGLLIGHTMODELIVPROC)load("glLightModeliv");
+ glad_glLineStipple = (PFNGLLINESTIPPLEPROC)load("glLineStipple");
+ glad_glMaterialf = (PFNGLMATERIALFPROC)load("glMaterialf");
+ glad_glMaterialfv = (PFNGLMATERIALFVPROC)load("glMaterialfv");
+ glad_glMateriali = (PFNGLMATERIALIPROC)load("glMateriali");
+ glad_glMaterialiv = (PFNGLMATERIALIVPROC)load("glMaterialiv");
+ glad_glPolygonStipple = (PFNGLPOLYGONSTIPPLEPROC)load("glPolygonStipple");
+ glad_glShadeModel = (PFNGLSHADEMODELPROC)load("glShadeModel");
+ glad_glTexEnvf = (PFNGLTEXENVFPROC)load("glTexEnvf");
+ glad_glTexEnvfv = (PFNGLTEXENVFVPROC)load("glTexEnvfv");
+ glad_glTexEnvi = (PFNGLTEXENVIPROC)load("glTexEnvi");
+ glad_glTexEnviv = (PFNGLTEXENVIVPROC)load("glTexEnviv");
+ glad_glTexGend = (PFNGLTEXGENDPROC)load("glTexGend");
+ glad_glTexGendv = (PFNGLTEXGENDVPROC)load("glTexGendv");
+ glad_glTexGenf = (PFNGLTEXGENFPROC)load("glTexGenf");
+ glad_glTexGenfv = (PFNGLTEXGENFVPROC)load("glTexGenfv");
+ glad_glTexGeni = (PFNGLTEXGENIPROC)load("glTexGeni");
+ glad_glTexGeniv = (PFNGLTEXGENIVPROC)load("glTexGeniv");
+ glad_glFeedbackBuffer = (PFNGLFEEDBACKBUFFERPROC)load("glFeedbackBuffer");
+ glad_glSelectBuffer = (PFNGLSELECTBUFFERPROC)load("glSelectBuffer");
+ glad_glRenderMode = (PFNGLRENDERMODEPROC)load("glRenderMode");
+ glad_glInitNames = (PFNGLINITNAMESPROC)load("glInitNames");
+ glad_glLoadName = (PFNGLLOADNAMEPROC)load("glLoadName");
+ glad_glPassThrough = (PFNGLPASSTHROUGHPROC)load("glPassThrough");
+ glad_glPopName = (PFNGLPOPNAMEPROC)load("glPopName");
+ glad_glPushName = (PFNGLPUSHNAMEPROC)load("glPushName");
+ glad_glClearAccum = (PFNGLCLEARACCUMPROC)load("glClearAccum");
+ glad_glClearIndex = (PFNGLCLEARINDEXPROC)load("glClearIndex");
+ glad_glIndexMask = (PFNGLINDEXMASKPROC)load("glIndexMask");
+ glad_glAccum = (PFNGLACCUMPROC)load("glAccum");
+ glad_glPopAttrib = (PFNGLPOPATTRIBPROC)load("glPopAttrib");
+ glad_glPushAttrib = (PFNGLPUSHATTRIBPROC)load("glPushAttrib");
+ glad_glMap1d = (PFNGLMAP1DPROC)load("glMap1d");
+ glad_glMap1f = (PFNGLMAP1FPROC)load("glMap1f");
+ glad_glMap2d = (PFNGLMAP2DPROC)load("glMap2d");
+ glad_glMap2f = (PFNGLMAP2FPROC)load("glMap2f");
+ glad_glMapGrid1d = (PFNGLMAPGRID1DPROC)load("glMapGrid1d");
+ glad_glMapGrid1f = (PFNGLMAPGRID1FPROC)load("glMapGrid1f");
+ glad_glMapGrid2d = (PFNGLMAPGRID2DPROC)load("glMapGrid2d");
+ glad_glMapGrid2f = (PFNGLMAPGRID2FPROC)load("glMapGrid2f");
+ glad_glEvalCoord1d = (PFNGLEVALCOORD1DPROC)load("glEvalCoord1d");
+ glad_glEvalCoord1dv = (PFNGLEVALCOORD1DVPROC)load("glEvalCoord1dv");
+ glad_glEvalCoord1f = (PFNGLEVALCOORD1FPROC)load("glEvalCoord1f");
+ glad_glEvalCoord1fv = (PFNGLEVALCOORD1FVPROC)load("glEvalCoord1fv");
+ glad_glEvalCoord2d = (PFNGLEVALCOORD2DPROC)load("glEvalCoord2d");
+ glad_glEvalCoord2dv = (PFNGLEVALCOORD2DVPROC)load("glEvalCoord2dv");
+ glad_glEvalCoord2f = (PFNGLEVALCOORD2FPROC)load("glEvalCoord2f");
+ glad_glEvalCoord2fv = (PFNGLEVALCOORD2FVPROC)load("glEvalCoord2fv");
+ glad_glEvalMesh1 = (PFNGLEVALMESH1PROC)load("glEvalMesh1");
+ glad_glEvalPoint1 = (PFNGLEVALPOINT1PROC)load("glEvalPoint1");
+ glad_glEvalMesh2 = (PFNGLEVALMESH2PROC)load("glEvalMesh2");
+ glad_glEvalPoint2 = (PFNGLEVALPOINT2PROC)load("glEvalPoint2");
+ glad_glAlphaFunc = (PFNGLALPHAFUNCPROC)load("glAlphaFunc");
+ glad_glPixelZoom = (PFNGLPIXELZOOMPROC)load("glPixelZoom");
+ glad_glPixelTransferf = (PFNGLPIXELTRANSFERFPROC)load("glPixelTransferf");
+ glad_glPixelTransferi = (PFNGLPIXELTRANSFERIPROC)load("glPixelTransferi");
+ glad_glPixelMapfv = (PFNGLPIXELMAPFVPROC)load("glPixelMapfv");
+ glad_glPixelMapuiv = (PFNGLPIXELMAPUIVPROC)load("glPixelMapuiv");
+ glad_glPixelMapusv = (PFNGLPIXELMAPUSVPROC)load("glPixelMapusv");
+ glad_glCopyPixels = (PFNGLCOPYPIXELSPROC)load("glCopyPixels");
+ glad_glDrawPixels = (PFNGLDRAWPIXELSPROC)load("glDrawPixels");
+ glad_glGetClipPlane = (PFNGLGETCLIPPLANEPROC)load("glGetClipPlane");
+ glad_glGetLightfv = (PFNGLGETLIGHTFVPROC)load("glGetLightfv");
+ glad_glGetLightiv = (PFNGLGETLIGHTIVPROC)load("glGetLightiv");
+ glad_glGetMapdv = (PFNGLGETMAPDVPROC)load("glGetMapdv");
+ glad_glGetMapfv = (PFNGLGETMAPFVPROC)load("glGetMapfv");
+ glad_glGetMapiv = (PFNGLGETMAPIVPROC)load("glGetMapiv");
+ glad_glGetMaterialfv = (PFNGLGETMATERIALFVPROC)load("glGetMaterialfv");
+ glad_glGetMaterialiv = (PFNGLGETMATERIALIVPROC)load("glGetMaterialiv");
+ glad_glGetPixelMapfv = (PFNGLGETPIXELMAPFVPROC)load("glGetPixelMapfv");
+ glad_glGetPixelMapuiv = (PFNGLGETPIXELMAPUIVPROC)load("glGetPixelMapuiv");
+ glad_glGetPixelMapusv = (PFNGLGETPIXELMAPUSVPROC)load("glGetPixelMapusv");
+ glad_glGetPolygonStipple = (PFNGLGETPOLYGONSTIPPLEPROC)load("glGetPolygonStipple");
+ glad_glGetTexEnvfv = (PFNGLGETTEXENVFVPROC)load("glGetTexEnvfv");
+ glad_glGetTexEnviv = (PFNGLGETTEXENVIVPROC)load("glGetTexEnviv");
+ glad_glGetTexGendv = (PFNGLGETTEXGENDVPROC)load("glGetTexGendv");
+ glad_glGetTexGenfv = (PFNGLGETTEXGENFVPROC)load("glGetTexGenfv");
+ glad_glGetTexGeniv = (PFNGLGETTEXGENIVPROC)load("glGetTexGeniv");
+ glad_glIsList = (PFNGLISLISTPROC)load("glIsList");
+ glad_glFrustum = (PFNGLFRUSTUMPROC)load("glFrustum");
+ glad_glLoadIdentity = (PFNGLLOADIDENTITYPROC)load("glLoadIdentity");
+ glad_glLoadMatrixf = (PFNGLLOADMATRIXFPROC)load("glLoadMatrixf");
+ glad_glLoadMatrixd = (PFNGLLOADMATRIXDPROC)load("glLoadMatrixd");
+ glad_glMatrixMode = (PFNGLMATRIXMODEPROC)load("glMatrixMode");
+ glad_glMultMatrixf = (PFNGLMULTMATRIXFPROC)load("glMultMatrixf");
+ glad_glMultMatrixd = (PFNGLMULTMATRIXDPROC)load("glMultMatrixd");
+ glad_glOrtho = (PFNGLORTHOPROC)load("glOrtho");
+ glad_glPopMatrix = (PFNGLPOPMATRIXPROC)load("glPopMatrix");
+ glad_glPushMatrix = (PFNGLPUSHMATRIXPROC)load("glPushMatrix");
+ glad_glRotated = (PFNGLROTATEDPROC)load("glRotated");
+ glad_glRotatef = (PFNGLROTATEFPROC)load("glRotatef");
+ glad_glScaled = (PFNGLSCALEDPROC)load("glScaled");
+ glad_glScalef = (PFNGLSCALEFPROC)load("glScalef");
+ glad_glTranslated = (PFNGLTRANSLATEDPROC)load("glTranslated");
+ glad_glTranslatef = (PFNGLTRANSLATEFPROC)load("glTranslatef");
+}
+static void load_GL_VERSION_1_1(GLADloadproc load) {
+ if(!GLAD_GL_VERSION_1_1) return;
+ glad_glDrawArrays = (PFNGLDRAWARRAYSPROC)load("glDrawArrays");
+ glad_glDrawElements = (PFNGLDRAWELEMENTSPROC)load("glDrawElements");
+ glad_glGetPointerv = (PFNGLGETPOINTERVPROC)load("glGetPointerv");
+ glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)load("glPolygonOffset");
+ glad_glCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC)load("glCopyTexImage1D");
+ glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC)load("glCopyTexImage2D");
+ glad_glCopyTexSubImage1D = (PFNGLCOPYTEXSUBIMAGE1DPROC)load("glCopyTexSubImage1D");
+ glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)load("glCopyTexSubImage2D");
+ glad_glTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC)load("glTexSubImage1D");
+ glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)load("glTexSubImage2D");
+ glad_glBindTexture = (PFNGLBINDTEXTUREPROC)load("glBindTexture");
+ glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC)load("glDeleteTextures");
+ glad_glGenTextures = (PFNGLGENTEXTURESPROC)load("glGenTextures");
+ glad_glIsTexture = (PFNGLISTEXTUREPROC)load("glIsTexture");
+ glad_glArrayElement = (PFNGLARRAYELEMENTPROC)load("glArrayElement");
+ glad_glColorPointer = (PFNGLCOLORPOINTERPROC)load("glColorPointer");
+ glad_glDisableClientState = (PFNGLDISABLECLIENTSTATEPROC)load("glDisableClientState");
+ glad_glEdgeFlagPointer = (PFNGLEDGEFLAGPOINTERPROC)load("glEdgeFlagPointer");
+ glad_glEnableClientState = (PFNGLENABLECLIENTSTATEPROC)load("glEnableClientState");
+ glad_glIndexPointer = (PFNGLINDEXPOINTERPROC)load("glIndexPointer");
+ glad_glInterleavedArrays = (PFNGLINTERLEAVEDARRAYSPROC)load("glInterleavedArrays");
+ glad_glNormalPointer = (PFNGLNORMALPOINTERPROC)load("glNormalPointer");
+ glad_glTexCoordPointer = (PFNGLTEXCOORDPOINTERPROC)load("glTexCoordPointer");
+ glad_glVertexPointer = (PFNGLVERTEXPOINTERPROC)load("glVertexPointer");
+ glad_glAreTexturesResident = (PFNGLARETEXTURESRESIDENTPROC)load("glAreTexturesResident");
+ glad_glPrioritizeTextures = (PFNGLPRIORITIZETEXTURESPROC)load("glPrioritizeTextures");
+ glad_glIndexub = (PFNGLINDEXUBPROC)load("glIndexub");
+ glad_glIndexubv = (PFNGLINDEXUBVPROC)load("glIndexubv");
+ glad_glPopClientAttrib = (PFNGLPOPCLIENTATTRIBPROC)load("glPopClientAttrib");
+ glad_glPushClientAttrib = (PFNGLPUSHCLIENTATTRIBPROC)load("glPushClientAttrib");
+}
+static void load_GL_VERSION_1_2(GLADloadproc load) {
+ if(!GLAD_GL_VERSION_1_2) return;
+ glad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)load("glDrawRangeElements");
+ glad_glTexImage3D = (PFNGLTEXIMAGE3DPROC)load("glTexImage3D");
+ glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)load("glTexSubImage3D");
+ glad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)load("glCopyTexSubImage3D");
+}
+static void load_GL_VERSION_1_3(GLADloadproc load) {
+ if(!GLAD_GL_VERSION_1_3) return;
+ glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC)load("glActiveTexture");
+ glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)load("glSampleCoverage");
+ glad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)load("glCompressedTexImage3D");
+ glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)load("glCompressedTexImage2D");
+ glad_glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)load("glCompressedTexImage1D");
+ glad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)load("glCompressedTexSubImage3D");
+ glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)load("glCompressedTexSubImage2D");
+ glad_glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)load("glCompressedTexSubImage1D");
+ glad_glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)load("glGetCompressedTexImage");
+ glad_glClientActiveTexture = (PFNGLCLIENTACTIVETEXTUREPROC)load("glClientActiveTexture");
+ glad_glMultiTexCoord1d = (PFNGLMULTITEXCOORD1DPROC)load("glMultiTexCoord1d");
+ glad_glMultiTexCoord1dv = (PFNGLMULTITEXCOORD1DVPROC)load("glMultiTexCoord1dv");
+ glad_glMultiTexCoord1f = (PFNGLMULTITEXCOORD1FPROC)load("glMultiTexCoord1f");
+ glad_glMultiTexCoord1fv = (PFNGLMULTITEXCOORD1FVPROC)load("glMultiTexCoord1fv");
+ glad_glMultiTexCoord1i = (PFNGLMULTITEXCOORD1IPROC)load("glMultiTexCoord1i");
+ glad_glMultiTexCoord1iv = (PFNGLMULTITEXCOORD1IVPROC)load("glMultiTexCoord1iv");
+ glad_glMultiTexCoord1s = (PFNGLMULTITEXCOORD1SPROC)load("glMultiTexCoord1s");
+ glad_glMultiTexCoord1sv = (PFNGLMULTITEXCOORD1SVPROC)load("glMultiTexCoord1sv");
+ glad_glMultiTexCoord2d = (PFNGLMULTITEXCOORD2DPROC)load("glMultiTexCoord2d");
+ glad_glMultiTexCoord2dv = (PFNGLMULTITEXCOORD2DVPROC)load("glMultiTexCoord2dv");
+ glad_glMultiTexCoord2f = (PFNGLMULTITEXCOORD2FPROC)load("glMultiTexCoord2f");
+ glad_glMultiTexCoord2fv = (PFNGLMULTITEXCOORD2FVPROC)load("glMultiTexCoord2fv");
+ glad_glMultiTexCoord2i = (PFNGLMULTITEXCOORD2IPROC)load("glMultiTexCoord2i");
+ glad_glMultiTexCoord2iv = (PFNGLMULTITEXCOORD2IVPROC)load("glMultiTexCoord2iv");
+ glad_glMultiTexCoord2s = (PFNGLMULTITEXCOORD2SPROC)load("glMultiTexCoord2s");
+ glad_glMultiTexCoord2sv = (PFNGLMULTITEXCOORD2SVPROC)load("glMultiTexCoord2sv");
+ glad_glMultiTexCoord3d = (PFNGLMULTITEXCOORD3DPROC)load("glMultiTexCoord3d");
+ glad_glMultiTexCoord3dv = (PFNGLMULTITEXCOORD3DVPROC)load("glMultiTexCoord3dv");
+ glad_glMultiTexCoord3f = (PFNGLMULTITEXCOORD3FPROC)load("glMultiTexCoord3f");
+ glad_glMultiTexCoord3fv = (PFNGLMULTITEXCOORD3FVPROC)load("glMultiTexCoord3fv");
+ glad_glMultiTexCoord3i = (PFNGLMULTITEXCOORD3IPROC)load("glMultiTexCoord3i");
+ glad_glMultiTexCoord3iv = (PFNGLMULTITEXCOORD3IVPROC)load("glMultiTexCoord3iv");
+ glad_glMultiTexCoord3s = (PFNGLMULTITEXCOORD3SPROC)load("glMultiTexCoord3s");
+ glad_glMultiTexCoord3sv = (PFNGLMULTITEXCOORD3SVPROC)load("glMultiTexCoord3sv");
+ glad_glMultiTexCoord4d = (PFNGLMULTITEXCOORD4DPROC)load("glMultiTexCoord4d");
+ glad_glMultiTexCoord4dv = (PFNGLMULTITEXCOORD4DVPROC)load("glMultiTexCoord4dv");
+ glad_glMultiTexCoord4f = (PFNGLMULTITEXCOORD4FPROC)load("glMultiTexCoord4f");
+ glad_glMultiTexCoord4fv = (PFNGLMULTITEXCOORD4FVPROC)load("glMultiTexCoord4fv");
+ glad_glMultiTexCoord4i = (PFNGLMULTITEXCOORD4IPROC)load("glMultiTexCoord4i");
+ glad_glMultiTexCoord4iv = (PFNGLMULTITEXCOORD4IVPROC)load("glMultiTexCoord4iv");
+ glad_glMultiTexCoord4s = (PFNGLMULTITEXCOORD4SPROC)load("glMultiTexCoord4s");
+ glad_glMultiTexCoord4sv = (PFNGLMULTITEXCOORD4SVPROC)load("glMultiTexCoord4sv");
+ glad_glLoadTransposeMatrixf = (PFNGLLOADTRANSPOSEMATRIXFPROC)load("glLoadTransposeMatrixf");
+ glad_glLoadTransposeMatrixd = (PFNGLLOADTRANSPOSEMATRIXDPROC)load("glLoadTransposeMatrixd");
+ glad_glMultTransposeMatrixf = (PFNGLMULTTRANSPOSEMATRIXFPROC)load("glMultTransposeMatrixf");
+ glad_glMultTransposeMatrixd = (PFNGLMULTTRANSPOSEMATRIXDPROC)load("glMultTransposeMatrixd");
+}
+static void load_GL_VERSION_1_4(GLADloadproc load) {
+ if(!GLAD_GL_VERSION_1_4) return;
+ glad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)load("glBlendFuncSeparate");
+ glad_glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)load("glMultiDrawArrays");
+ glad_glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)load("glMultiDrawElements");
+ glad_glPointParameterf = (PFNGLPOINTPARAMETERFPROC)load("glPointParameterf");
+ glad_glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)load("glPointParameterfv");
+ glad_glPointParameteri = (PFNGLPOINTPARAMETERIPROC)load("glPointParameteri");
+ glad_glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)load("glPointParameteriv");
+ glad_glFogCoordf = (PFNGLFOGCOORDFPROC)load("glFogCoordf");
+ glad_glFogCoordfv = (PFNGLFOGCOORDFVPROC)load("glFogCoordfv");
+ glad_glFogCoordd = (PFNGLFOGCOORDDPROC)load("glFogCoordd");
+ glad_glFogCoorddv = (PFNGLFOGCOORDDVPROC)load("glFogCoorddv");
+ glad_glFogCoordPointer = (PFNGLFOGCOORDPOINTERPROC)load("glFogCoordPointer");
+ glad_glSecondaryColor3b = (PFNGLSECONDARYCOLOR3BPROC)load("glSecondaryColor3b");
+ glad_glSecondaryColor3bv = (PFNGLSECONDARYCOLOR3BVPROC)load("glSecondaryColor3bv");
+ glad_glSecondaryColor3d = (PFNGLSECONDARYCOLOR3DPROC)load("glSecondaryColor3d");
+ glad_glSecondaryColor3dv = (PFNGLSECONDARYCOLOR3DVPROC)load("glSecondaryColor3dv");
+ glad_glSecondaryColor3f = (PFNGLSECONDARYCOLOR3FPROC)load("glSecondaryColor3f");
+ glad_glSecondaryColor3fv = (PFNGLSECONDARYCOLOR3FVPROC)load("glSecondaryColor3fv");
+ glad_glSecondaryColor3i = (PFNGLSECONDARYCOLOR3IPROC)load("glSecondaryColor3i");
+ glad_glSecondaryColor3iv = (PFNGLSECONDARYCOLOR3IVPROC)load("glSecondaryColor3iv");
+ glad_glSecondaryColor3s = (PFNGLSECONDARYCOLOR3SPROC)load("glSecondaryColor3s");
+ glad_glSecondaryColor3sv = (PFNGLSECONDARYCOLOR3SVPROC)load("glSecondaryColor3sv");
+ glad_glSecondaryColor3ub = (PFNGLSECONDARYCOLOR3UBPROC)load("glSecondaryColor3ub");
+ glad_glSecondaryColor3ubv = (PFNGLSECONDARYCOLOR3UBVPROC)load("glSecondaryColor3ubv");
+ glad_glSecondaryColor3ui = (PFNGLSECONDARYCOLOR3UIPROC)load("glSecondaryColor3ui");
+ glad_glSecondaryColor3uiv = (PFNGLSECONDARYCOLOR3UIVPROC)load("glSecondaryColor3uiv");
+ glad_glSecondaryColor3us = (PFNGLSECONDARYCOLOR3USPROC)load("glSecondaryColor3us");
+ glad_glSecondaryColor3usv = (PFNGLSECONDARYCOLOR3USVPROC)load("glSecondaryColor3usv");
+ glad_glSecondaryColorPointer = (PFNGLSECONDARYCOLORPOINTERPROC)load("glSecondaryColorPointer");
+ glad_glWindowPos2d = (PFNGLWINDOWPOS2DPROC)load("glWindowPos2d");
+ glad_glWindowPos2dv = (PFNGLWINDOWPOS2DVPROC)load("glWindowPos2dv");
+ glad_glWindowPos2f = (PFNGLWINDOWPOS2FPROC)load("glWindowPos2f");
+ glad_glWindowPos2fv = (PFNGLWINDOWPOS2FVPROC)load("glWindowPos2fv");
+ glad_glWindowPos2i = (PFNGLWINDOWPOS2IPROC)load("glWindowPos2i");
+ glad_glWindowPos2iv = (PFNGLWINDOWPOS2IVPROC)load("glWindowPos2iv");
+ glad_glWindowPos2s = (PFNGLWINDOWPOS2SPROC)load("glWindowPos2s");
+ glad_glWindowPos2sv = (PFNGLWINDOWPOS2SVPROC)load("glWindowPos2sv");
+ glad_glWindowPos3d = (PFNGLWINDOWPOS3DPROC)load("glWindowPos3d");
+ glad_glWindowPos3dv = (PFNGLWINDOWPOS3DVPROC)load("glWindowPos3dv");
+ glad_glWindowPos3f = (PFNGLWINDOWPOS3FPROC)load("glWindowPos3f");
+ glad_glWindowPos3fv = (PFNGLWINDOWPOS3FVPROC)load("glWindowPos3fv");
+ glad_glWindowPos3i = (PFNGLWINDOWPOS3IPROC)load("glWindowPos3i");
+ glad_glWindowPos3iv = (PFNGLWINDOWPOS3IVPROC)load("glWindowPos3iv");
+ glad_glWindowPos3s = (PFNGLWINDOWPOS3SPROC)load("glWindowPos3s");
+ glad_glWindowPos3sv = (PFNGLWINDOWPOS3SVPROC)load("glWindowPos3sv");
+ glad_glBlendColor = (PFNGLBLENDCOLORPROC)load("glBlendColor");
+ glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load("glBlendEquation");
+}
+static void load_GL_VERSION_1_5(GLADloadproc load) {
+ if(!GLAD_GL_VERSION_1_5) return;
+ glad_glGenQueries = (PFNGLGENQUERIESPROC)load("glGenQueries");
+ glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC)load("glDeleteQueries");
+ glad_glIsQuery = (PFNGLISQUERYPROC)load("glIsQuery");
+ glad_glBeginQuery = (PFNGLBEGINQUERYPROC)load("glBeginQuery");
+ glad_glEndQuery = (PFNGLENDQUERYPROC)load("glEndQuery");
+ glad_glGetQueryiv = (PFNGLGETQUERYIVPROC)load("glGetQueryiv");
+ glad_glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)load("glGetQueryObjectiv");
+ glad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)load("glGetQueryObjectuiv");
+ glad_glBindBuffer = (PFNGLBINDBUFFERPROC)load("glBindBuffer");
+ glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)load("glDeleteBuffers");
+ glad_glGenBuffers = (PFNGLGENBUFFERSPROC)load("glGenBuffers");
+ glad_glIsBuffer = (PFNGLISBUFFERPROC)load("glIsBuffer");
+ glad_glBufferData = (PFNGLBUFFERDATAPROC)load("glBufferData");
+ glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC)load("glBufferSubData");
+ glad_glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)load("glGetBufferSubData");
+ glad_glMapBuffer = (PFNGLMAPBUFFERPROC)load("glMapBuffer");
+ glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)load("glUnmapBuffer");
+ glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)load("glGetBufferParameteriv");
+ glad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)load("glGetBufferPointerv");
+}
+static void load_GL_VERSION_2_0(GLADloadproc load) {
+ if(!GLAD_GL_VERSION_2_0) return;
+ glad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)load("glBlendEquationSeparate");
+ glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC)load("glDrawBuffers");
+ glad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)load("glStencilOpSeparate");
+ glad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)load("glStencilFuncSeparate");
+ glad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)load("glStencilMaskSeparate");
+ glad_glAttachShader = (PFNGLATTACHSHADERPROC)load("glAttachShader");
+ glad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)load("glBindAttribLocation");
+ glad_glCompileShader = (PFNGLCOMPILESHADERPROC)load("glCompileShader");
+ glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC)load("glCreateProgram");
+ glad_glCreateShader = (PFNGLCREATESHADERPROC)load("glCreateShader");
+ glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC)load("glDeleteProgram");
+ glad_glDeleteShader = (PFNGLDELETESHADERPROC)load("glDeleteShader");
+ glad_glDetachShader = (PFNGLDETACHSHADERPROC)load("glDetachShader");
+ glad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)load("glDisableVertexAttribArray");
+ glad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)load("glEnableVertexAttribArray");
+ glad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)load("glGetActiveAttrib");
+ glad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)load("glGetActiveUniform");
+ glad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)load("glGetAttachedShaders");
+ glad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)load("glGetAttribLocation");
+ glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC)load("glGetProgramiv");
+ glad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)load("glGetProgramInfoLog");
+ glad_glGetShaderiv = (PFNGLGETSHADERIVPROC)load("glGetShaderiv");
+ glad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)load("glGetShaderInfoLog");
+ glad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)load("glGetShaderSource");
+ glad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)load("glGetUniformLocation");
+ glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC)load("glGetUniformfv");
+ glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC)load("glGetUniformiv");
+ glad_glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)load("glGetVertexAttribdv");
+ glad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)load("glGetVertexAttribfv");
+ glad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)load("glGetVertexAttribiv");
+ glad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)load("glGetVertexAttribPointerv");
+ glad_glIsProgram = (PFNGLISPROGRAMPROC)load("glIsProgram");
+ glad_glIsShader = (PFNGLISSHADERPROC)load("glIsShader");
+ glad_glLinkProgram = (PFNGLLINKPROGRAMPROC)load("glLinkProgram");
+ glad_glShaderSource = (PFNGLSHADERSOURCEPROC)load("glShaderSource");
+ glad_glUseProgram = (PFNGLUSEPROGRAMPROC)load("glUseProgram");
+ glad_glUniform1f = (PFNGLUNIFORM1FPROC)load("glUniform1f");
+ glad_glUniform2f = (PFNGLUNIFORM2FPROC)load("glUniform2f");
+ glad_glUniform3f = (PFNGLUNIFORM3FPROC)load("glUniform3f");
+ glad_glUniform4f = (PFNGLUNIFORM4FPROC)load("glUniform4f");
+ glad_glUniform1i = (PFNGLUNIFORM1IPROC)load("glUniform1i");
+ glad_glUniform2i = (PFNGLUNIFORM2IPROC)load("glUniform2i");
+ glad_glUniform3i = (PFNGLUNIFORM3IPROC)load("glUniform3i");
+ glad_glUniform4i = (PFNGLUNIFORM4IPROC)load("glUniform4i");
+ glad_glUniform1fv = (PFNGLUNIFORM1FVPROC)load("glUniform1fv");
+ glad_glUniform2fv = (PFNGLUNIFORM2FVPROC)load("glUniform2fv");
+ glad_glUniform3fv = (PFNGLUNIFORM3FVPROC)load("glUniform3fv");
+ glad_glUniform4fv = (PFNGLUNIFORM4FVPROC)load("glUniform4fv");
+ glad_glUniform1iv = (PFNGLUNIFORM1IVPROC)load("glUniform1iv");
+ glad_glUniform2iv = (PFNGLUNIFORM2IVPROC)load("glUniform2iv");
+ glad_glUniform3iv = (PFNGLUNIFORM3IVPROC)load("glUniform3iv");
+ glad_glUniform4iv = (PFNGLUNIFORM4IVPROC)load("glUniform4iv");
+ glad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)load("glUniformMatrix2fv");
+ glad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)load("glUniformMatrix3fv");
+ glad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)load("glUniformMatrix4fv");
+ glad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)load("glValidateProgram");
+ glad_glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)load("glVertexAttrib1d");
+ glad_glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)load("glVertexAttrib1dv");
+ glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)load("glVertexAttrib1f");
+ glad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)load("glVertexAttrib1fv");
+ glad_glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)load("glVertexAttrib1s");
+ glad_glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)load("glVertexAttrib1sv");
+ glad_glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)load("glVertexAttrib2d");
+ glad_glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)load("glVertexAttrib2dv");
+ glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)load("glVertexAttrib2f");
+ glad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)load("glVertexAttrib2fv");
+ glad_glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)load("glVertexAttrib2s");
+ glad_glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)load("glVertexAttrib2sv");
+ glad_glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)load("glVertexAttrib3d");
+ glad_glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)load("glVertexAttrib3dv");
+ glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)load("glVertexAttrib3f");
+ glad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)load("glVertexAttrib3fv");
+ glad_glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)load("glVertexAttrib3s");
+ glad_glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)load("glVertexAttrib3sv");
+ glad_glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)load("glVertexAttrib4Nbv");
+ glad_glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)load("glVertexAttrib4Niv");
+ glad_glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)load("glVertexAttrib4Nsv");
+ glad_glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)load("glVertexAttrib4Nub");
+ glad_glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)load("glVertexAttrib4Nubv");
+ glad_glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)load("glVertexAttrib4Nuiv");
+ glad_glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)load("glVertexAttrib4Nusv");
+ glad_glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)load("glVertexAttrib4bv");
+ glad_glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)load("glVertexAttrib4d");
+ glad_glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)load("glVertexAttrib4dv");
+ glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)load("glVertexAttrib4f");
+ glad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)load("glVertexAttrib4fv");
+ glad_glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)load("glVertexAttrib4iv");
+ glad_glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)load("glVertexAttrib4s");
+ glad_glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)load("glVertexAttrib4sv");
+ glad_glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)load("glVertexAttrib4ubv");
+ glad_glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)load("glVertexAttrib4uiv");
+ glad_glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)load("glVertexAttrib4usv");
+ glad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)load("glVertexAttribPointer");
+}
+static void load_GL_VERSION_2_1(GLADloadproc load) {
+ if(!GLAD_GL_VERSION_2_1) return;
+ glad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)load("glUniformMatrix2x3fv");
+ glad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)load("glUniformMatrix3x2fv");
+ glad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)load("glUniformMatrix2x4fv");
+ glad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)load("glUniformMatrix4x2fv");
+ glad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)load("glUniformMatrix3x4fv");
+ glad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)load("glUniformMatrix4x3fv");
+}
+static void load_GL_VERSION_3_0(GLADloadproc load) {
+ if(!GLAD_GL_VERSION_3_0) return;
+ glad_glColorMaski = (PFNGLCOLORMASKIPROC)load("glColorMaski");
+ glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)load("glGetBooleani_v");
+ glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v");
+ glad_glEnablei = (PFNGLENABLEIPROC)load("glEnablei");
+ glad_glDisablei = (PFNGLDISABLEIPROC)load("glDisablei");
+ glad_glIsEnabledi = (PFNGLISENABLEDIPROC)load("glIsEnabledi");
+ glad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)load("glBeginTransformFeedback");
+ glad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)load("glEndTransformFeedback");
+ glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange");
+ glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase");
+ glad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)load("glTransformFeedbackVaryings");
+ glad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)load("glGetTransformFeedbackVarying");
+ glad_glClampColor = (PFNGLCLAMPCOLORPROC)load("glClampColor");
+ glad_glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)load("glBeginConditionalRender");
+ glad_glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC)load("glEndConditionalRender");
+ glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)load("glVertexAttribIPointer");
+ glad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)load("glGetVertexAttribIiv");
+ glad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)load("glGetVertexAttribIuiv");
+ glad_glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)load("glVertexAttribI1i");
+ glad_glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)load("glVertexAttribI2i");
+ glad_glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)load("glVertexAttribI3i");
+ glad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)load("glVertexAttribI4i");
+ glad_glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)load("glVertexAttribI1ui");
+ glad_glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC)load("glVertexAttribI2ui");
+ glad_glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)load("glVertexAttribI3ui");
+ glad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)load("glVertexAttribI4ui");
+ glad_glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)load("glVertexAttribI1iv");
+ glad_glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)load("glVertexAttribI2iv");
+ glad_glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)load("glVertexAttribI3iv");
+ glad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)load("glVertexAttribI4iv");
+ glad_glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)load("glVertexAttribI1uiv");
+ glad_glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)load("glVertexAttribI2uiv");
+ glad_glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)load("glVertexAttribI3uiv");
+ glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)load("glVertexAttribI4uiv");
+ glad_glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)load("glVertexAttribI4bv");
+ glad_glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)load("glVertexAttribI4sv");
+ glad_glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)load("glVertexAttribI4ubv");
+ glad_glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)load("glVertexAttribI4usv");
+ glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)load("glGetUniformuiv");
+ glad_glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)load("glBindFragDataLocation");
+ glad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)load("glGetFragDataLocation");
+ glad_glUniform1ui = (PFNGLUNIFORM1UIPROC)load("glUniform1ui");
+ glad_glUniform2ui = (PFNGLUNIFORM2UIPROC)load("glUniform2ui");
+ glad_glUniform3ui = (PFNGLUNIFORM3UIPROC)load("glUniform3ui");
+ glad_glUniform4ui = (PFNGLUNIFORM4UIPROC)load("glUniform4ui");
+ glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC)load("glUniform1uiv");
+ glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC)load("glUniform2uiv");
+ glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC)load("glUniform3uiv");
+ glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC)load("glUniform4uiv");
+ glad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)load("glTexParameterIiv");
+ glad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)load("glTexParameterIuiv");
+ glad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)load("glGetTexParameterIiv");
+ glad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)load("glGetTexParameterIuiv");
+ glad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)load("glClearBufferiv");
+ glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)load("glClearBufferuiv");
+ glad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)load("glClearBufferfv");
+ glad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)load("glClearBufferfi");
+ glad_glGetStringi = (PFNGLGETSTRINGIPROC)load("glGetStringi");
+ glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer");
+ glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer");
+ glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers");
+ glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers");
+ glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage");
+ glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv");
+ glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer");
+ glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer");
+ glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers");
+ glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers");
+ glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus");
+ glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)load("glFramebufferTexture1D");
+ glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D");
+ glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)load("glFramebufferTexture3D");
+ glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer");
+ glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv");
+ glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap");
+ glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer");
+ glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample");
+ glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer");
+ glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load("glMapBufferRange");
+ glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load("glFlushMappedBufferRange");
+ glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray");
+ glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays");
+ glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays");
+ glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray");
+}
+static void load_GL_VERSION_3_1(GLADloadproc load) {
+ if(!GLAD_GL_VERSION_3_1) return;
+ glad_glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)load("glDrawArraysInstanced");
+ glad_glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)load("glDrawElementsInstanced");
+ glad_glTexBuffer = (PFNGLTEXBUFFERPROC)load("glTexBuffer");
+ glad_glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)load("glPrimitiveRestartIndex");
+ glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)load("glCopyBufferSubData");
+ glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices");
+ glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv");
+ glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)load("glGetActiveUniformName");
+ glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex");
+ glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv");
+ glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName");
+ glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding");
+ glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange");
+ glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase");
+ glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v");
+}
+static void load_GL_VERSION_3_2(GLADloadproc load) {
+ if(!GLAD_GL_VERSION_3_2) return;
+ glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)load("glDrawElementsBaseVertex");
+ glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load("glDrawRangeElementsBaseVertex");
+ glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load("glDrawElementsInstancedBaseVertex");
+ glad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)load("glMultiDrawElementsBaseVertex");
+ glad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)load("glProvokingVertex");
+ glad_glFenceSync = (PFNGLFENCESYNCPROC)load("glFenceSync");
+ glad_glIsSync = (PFNGLISSYNCPROC)load("glIsSync");
+ glad_glDeleteSync = (PFNGLDELETESYNCPROC)load("glDeleteSync");
+ glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load("glClientWaitSync");
+ glad_glWaitSync = (PFNGLWAITSYNCPROC)load("glWaitSync");
+ glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC)load("glGetInteger64v");
+ glad_glGetSynciv = (PFNGLGETSYNCIVPROC)load("glGetSynciv");
+ glad_glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)load("glGetInteger64i_v");
+ glad_glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)load("glGetBufferParameteri64v");
+ glad_glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)load("glFramebufferTexture");
+ glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load("glTexImage2DMultisample");
+ glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load("glTexImage3DMultisample");
+ glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv");
+ glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski");
+}
+static void load_GL_VERSION_3_3(GLADloadproc load) {
+ if(!GLAD_GL_VERSION_3_3) return;
+ glad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)load("glBindFragDataLocationIndexed");
+ glad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)load("glGetFragDataIndex");
+ glad_glGenSamplers = (PFNGLGENSAMPLERSPROC)load("glGenSamplers");
+ glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load("glDeleteSamplers");
+ glad_glIsSampler = (PFNGLISSAMPLERPROC)load("glIsSampler");
+ glad_glBindSampler = (PFNGLBINDSAMPLERPROC)load("glBindSampler");
+ glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)load("glSamplerParameteri");
+ glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)load("glSamplerParameteriv");
+ glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)load("glSamplerParameterf");
+ glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)load("glSamplerParameterfv");
+ glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)load("glSamplerParameterIiv");
+ glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)load("glSamplerParameterIuiv");
+ glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)load("glGetSamplerParameteriv");
+ glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)load("glGetSamplerParameterIiv");
+ glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)load("glGetSamplerParameterfv");
+ glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)load("glGetSamplerParameterIuiv");
+ glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC)load("glQueryCounter");
+ glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)load("glGetQueryObjecti64v");
+ glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)load("glGetQueryObjectui64v");
+ glad_glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)load("glVertexAttribDivisor");
+ glad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)load("glVertexAttribP1ui");
+ glad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)load("glVertexAttribP1uiv");
+ glad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)load("glVertexAttribP2ui");
+ glad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)load("glVertexAttribP2uiv");
+ glad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)load("glVertexAttribP3ui");
+ glad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)load("glVertexAttribP3uiv");
+ glad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)load("glVertexAttribP4ui");
+ glad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)load("glVertexAttribP4uiv");
+ glad_glVertexP2ui = (PFNGLVERTEXP2UIPROC)load("glVertexP2ui");
+ glad_glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)load("glVertexP2uiv");
+ glad_glVertexP3ui = (PFNGLVERTEXP3UIPROC)load("glVertexP3ui");
+ glad_glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)load("glVertexP3uiv");
+ glad_glVertexP4ui = (PFNGLVERTEXP4UIPROC)load("glVertexP4ui");
+ glad_glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)load("glVertexP4uiv");
+ glad_glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)load("glTexCoordP1ui");
+ glad_glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)load("glTexCoordP1uiv");
+ glad_glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)load("glTexCoordP2ui");
+ glad_glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)load("glTexCoordP2uiv");
+ glad_glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)load("glTexCoordP3ui");
+ glad_glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)load("glTexCoordP3uiv");
+ glad_glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)load("glTexCoordP4ui");
+ glad_glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)load("glTexCoordP4uiv");
+ glad_glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)load("glMultiTexCoordP1ui");
+ glad_glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)load("glMultiTexCoordP1uiv");
+ glad_glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)load("glMultiTexCoordP2ui");
+ glad_glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)load("glMultiTexCoordP2uiv");
+ glad_glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)load("glMultiTexCoordP3ui");
+ glad_glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)load("glMultiTexCoordP3uiv");
+ glad_glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)load("glMultiTexCoordP4ui");
+ glad_glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)load("glMultiTexCoordP4uiv");
+ glad_glNormalP3ui = (PFNGLNORMALP3UIPROC)load("glNormalP3ui");
+ glad_glNormalP3uiv = (PFNGLNORMALP3UIVPROC)load("glNormalP3uiv");
+ glad_glColorP3ui = (PFNGLCOLORP3UIPROC)load("glColorP3ui");
+ glad_glColorP3uiv = (PFNGLCOLORP3UIVPROC)load("glColorP3uiv");
+ glad_glColorP4ui = (PFNGLCOLORP4UIPROC)load("glColorP4ui");
+ glad_glColorP4uiv = (PFNGLCOLORP4UIVPROC)load("glColorP4uiv");
+ glad_glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)load("glSecondaryColorP3ui");
+ glad_glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)load("glSecondaryColorP3uiv");
+}
+static void load_GL_VERSION_4_0(GLADloadproc load) {
+ if(!GLAD_GL_VERSION_4_0) return;
+ glad_glMinSampleShading = (PFNGLMINSAMPLESHADINGPROC)load("glMinSampleShading");
+ glad_glBlendEquationi = (PFNGLBLENDEQUATIONIPROC)load("glBlendEquationi");
+ glad_glBlendEquationSeparatei = (PFNGLBLENDEQUATIONSEPARATEIPROC)load("glBlendEquationSeparatei");
+ glad_glBlendFunci = (PFNGLBLENDFUNCIPROC)load("glBlendFunci");
+ glad_glBlendFuncSeparatei = (PFNGLBLENDFUNCSEPARATEIPROC)load("glBlendFuncSeparatei");
+ glad_glDrawArraysIndirect = (PFNGLDRAWARRAYSINDIRECTPROC)load("glDrawArraysIndirect");
+ glad_glDrawElementsIndirect = (PFNGLDRAWELEMENTSINDIRECTPROC)load("glDrawElementsIndirect");
+ glad_glUniform1d = (PFNGLUNIFORM1DPROC)load("glUniform1d");
+ glad_glUniform2d = (PFNGLUNIFORM2DPROC)load("glUniform2d");
+ glad_glUniform3d = (PFNGLUNIFORM3DPROC)load("glUniform3d");
+ glad_glUniform4d = (PFNGLUNIFORM4DPROC)load("glUniform4d");
+ glad_glUniform1dv = (PFNGLUNIFORM1DVPROC)load("glUniform1dv");
+ glad_glUniform2dv = (PFNGLUNIFORM2DVPROC)load("glUniform2dv");
+ glad_glUniform3dv = (PFNGLUNIFORM3DVPROC)load("glUniform3dv");
+ glad_glUniform4dv = (PFNGLUNIFORM4DVPROC)load("glUniform4dv");
+ glad_glUniformMatrix2dv = (PFNGLUNIFORMMATRIX2DVPROC)load("glUniformMatrix2dv");
+ glad_glUniformMatrix3dv = (PFNGLUNIFORMMATRIX3DVPROC)load("glUniformMatrix3dv");
+ glad_glUniformMatrix4dv = (PFNGLUNIFORMMATRIX4DVPROC)load("glUniformMatrix4dv");
+ glad_glUniformMatrix2x3dv = (PFNGLUNIFORMMATRIX2X3DVPROC)load("glUniformMatrix2x3dv");
+ glad_glUniformMatrix2x4dv = (PFNGLUNIFORMMATRIX2X4DVPROC)load("glUniformMatrix2x4dv");
+ glad_glUniformMatrix3x2dv = (PFNGLUNIFORMMATRIX3X2DVPROC)load("glUniformMatrix3x2dv");
+ glad_glUniformMatrix3x4dv = (PFNGLUNIFORMMATRIX3X4DVPROC)load("glUniformMatrix3x4dv");
+ glad_glUniformMatrix4x2dv = (PFNGLUNIFORMMATRIX4X2DVPROC)load("glUniformMatrix4x2dv");
+ glad_glUniformMatrix4x3dv = (PFNGLUNIFORMMATRIX4X3DVPROC)load("glUniformMatrix4x3dv");
+ glad_glGetUniformdv = (PFNGLGETUNIFORMDVPROC)load("glGetUniformdv");
+ glad_glGetSubroutineUniformLocation = (PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)load("glGetSubroutineUniformLocation");
+ glad_glGetSubroutineIndex = (PFNGLGETSUBROUTINEINDEXPROC)load("glGetSubroutineIndex");
+ glad_glGetActiveSubroutineUniformiv = (PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)load("glGetActiveSubroutineUniformiv");
+ glad_glGetActiveSubroutineUniformName = (PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)load("glGetActiveSubroutineUniformName");
+ glad_glGetActiveSubroutineName = (PFNGLGETACTIVESUBROUTINENAMEPROC)load("glGetActiveSubroutineName");
+ glad_glUniformSubroutinesuiv = (PFNGLUNIFORMSUBROUTINESUIVPROC)load("glUniformSubroutinesuiv");
+ glad_glGetUniformSubroutineuiv = (PFNGLGETUNIFORMSUBROUTINEUIVPROC)load("glGetUniformSubroutineuiv");
+ glad_glGetProgramStageiv = (PFNGLGETPROGRAMSTAGEIVPROC)load("glGetProgramStageiv");
+ glad_glPatchParameteri = (PFNGLPATCHPARAMETERIPROC)load("glPatchParameteri");
+ glad_glPatchParameterfv = (PFNGLPATCHPARAMETERFVPROC)load("glPatchParameterfv");
+ glad_glBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC)load("glBindTransformFeedback");
+ glad_glDeleteTransformFeedbacks = (PFNGLDELETETRANSFORMFEEDBACKSPROC)load("glDeleteTransformFeedbacks");
+ glad_glGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC)load("glGenTransformFeedbacks");
+ glad_glIsTransformFeedback = (PFNGLISTRANSFORMFEEDBACKPROC)load("glIsTransformFeedback");
+ glad_glPauseTransformFeedback = (PFNGLPAUSETRANSFORMFEEDBACKPROC)load("glPauseTransformFeedback");
+ glad_glResumeTransformFeedback = (PFNGLRESUMETRANSFORMFEEDBACKPROC)load("glResumeTransformFeedback");
+ glad_glDrawTransformFeedback = (PFNGLDRAWTRANSFORMFEEDBACKPROC)load("glDrawTransformFeedback");
+ glad_glDrawTransformFeedbackStream = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)load("glDrawTransformFeedbackStream");
+ glad_glBeginQueryIndexed = (PFNGLBEGINQUERYINDEXEDPROC)load("glBeginQueryIndexed");
+ glad_glEndQueryIndexed = (PFNGLENDQUERYINDEXEDPROC)load("glEndQueryIndexed");
+ glad_glGetQueryIndexediv = (PFNGLGETQUERYINDEXEDIVPROC)load("glGetQueryIndexediv");
+}
+static void load_GL_VERSION_4_1(GLADloadproc load) {
+ if(!GLAD_GL_VERSION_4_1) return;
+ glad_glReleaseShaderCompiler = (PFNGLRELEASESHADERCOMPILERPROC)load("glReleaseShaderCompiler");
+ glad_glShaderBinary = (PFNGLSHADERBINARYPROC)load("glShaderBinary");
+ glad_glGetShaderPrecisionFormat = (PFNGLGETSHADERPRECISIONFORMATPROC)load("glGetShaderPrecisionFormat");
+ glad_glDepthRangef = (PFNGLDEPTHRANGEFPROC)load("glDepthRangef");
+ glad_glClearDepthf = (PFNGLCLEARDEPTHFPROC)load("glClearDepthf");
+ glad_glGetProgramBinary = (PFNGLGETPROGRAMBINARYPROC)load("glGetProgramBinary");
+ glad_glProgramBinary = (PFNGLPROGRAMBINARYPROC)load("glProgramBinary");
+ glad_glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC)load("glProgramParameteri");
+ glad_glUseProgramStages = (PFNGLUSEPROGRAMSTAGESPROC)load("glUseProgramStages");
+ glad_glActiveShaderProgram = (PFNGLACTIVESHADERPROGRAMPROC)load("glActiveShaderProgram");
+ glad_glCreateShaderProgramv = (PFNGLCREATESHADERPROGRAMVPROC)load("glCreateShaderProgramv");
+ glad_glBindProgramPipeline = (PFNGLBINDPROGRAMPIPELINEPROC)load("glBindProgramPipeline");
+ glad_glDeleteProgramPipelines = (PFNGLDELETEPROGRAMPIPELINESPROC)load("glDeleteProgramPipelines");
+ glad_glGenProgramPipelines = (PFNGLGENPROGRAMPIPELINESPROC)load("glGenProgramPipelines");
+ glad_glIsProgramPipeline = (PFNGLISPROGRAMPIPELINEPROC)load("glIsProgramPipeline");
+ glad_glGetProgramPipelineiv = (PFNGLGETPROGRAMPIPELINEIVPROC)load("glGetProgramPipelineiv");
+ glad_glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC)load("glProgramParameteri");
+ glad_glProgramUniform1i = (PFNGLPROGRAMUNIFORM1IPROC)load("glProgramUniform1i");
+ glad_glProgramUniform1iv = (PFNGLPROGRAMUNIFORM1IVPROC)load("glProgramUniform1iv");
+ glad_glProgramUniform1f = (PFNGLPROGRAMUNIFORM1FPROC)load("glProgramUniform1f");
+ glad_glProgramUniform1fv = (PFNGLPROGRAMUNIFORM1FVPROC)load("glProgramUniform1fv");
+ glad_glProgramUniform1d = (PFNGLPROGRAMUNIFORM1DPROC)load("glProgramUniform1d");
+ glad_glProgramUniform1dv = (PFNGLPROGRAMUNIFORM1DVPROC)load("glProgramUniform1dv");
+ glad_glProgramUniform1ui = (PFNGLPROGRAMUNIFORM1UIPROC)load("glProgramUniform1ui");
+ glad_glProgramUniform1uiv = (PFNGLPROGRAMUNIFORM1UIVPROC)load("glProgramUniform1uiv");
+ glad_glProgramUniform2i = (PFNGLPROGRAMUNIFORM2IPROC)load("glProgramUniform2i");
+ glad_glProgramUniform2iv = (PFNGLPROGRAMUNIFORM2IVPROC)load("glProgramUniform2iv");
+ glad_glProgramUniform2f = (PFNGLPROGRAMUNIFORM2FPROC)load("glProgramUniform2f");
+ glad_glProgramUniform2fv = (PFNGLPROGRAMUNIFORM2FVPROC)load("glProgramUniform2fv");
+ glad_glProgramUniform2d = (PFNGLPROGRAMUNIFORM2DPROC)load("glProgramUniform2d");
+ glad_glProgramUniform2dv = (PFNGLPROGRAMUNIFORM2DVPROC)load("glProgramUniform2dv");
+ glad_glProgramUniform2ui = (PFNGLPROGRAMUNIFORM2UIPROC)load("glProgramUniform2ui");
+ glad_glProgramUniform2uiv = (PFNGLPROGRAMUNIFORM2UIVPROC)load("glProgramUniform2uiv");
+ glad_glProgramUniform3i = (PFNGLPROGRAMUNIFORM3IPROC)load("glProgramUniform3i");
+ glad_glProgramUniform3iv = (PFNGLPROGRAMUNIFORM3IVPROC)load("glProgramUniform3iv");
+ glad_glProgramUniform3f = (PFNGLPROGRAMUNIFORM3FPROC)load("glProgramUniform3f");
+ glad_glProgramUniform3fv = (PFNGLPROGRAMUNIFORM3FVPROC)load("glProgramUniform3fv");
+ glad_glProgramUniform3d = (PFNGLPROGRAMUNIFORM3DPROC)load("glProgramUniform3d");
+ glad_glProgramUniform3dv = (PFNGLPROGRAMUNIFORM3DVPROC)load("glProgramUniform3dv");
+ glad_glProgramUniform3ui = (PFNGLPROGRAMUNIFORM3UIPROC)load("glProgramUniform3ui");
+ glad_glProgramUniform3uiv = (PFNGLPROGRAMUNIFORM3UIVPROC)load("glProgramUniform3uiv");
+ glad_glProgramUniform4i = (PFNGLPROGRAMUNIFORM4IPROC)load("glProgramUniform4i");
+ glad_glProgramUniform4iv = (PFNGLPROGRAMUNIFORM4IVPROC)load("glProgramUniform4iv");
+ glad_glProgramUniform4f = (PFNGLPROGRAMUNIFORM4FPROC)load("glProgramUniform4f");
+ glad_glProgramUniform4fv = (PFNGLPROGRAMUNIFORM4FVPROC)load("glProgramUniform4fv");
+ glad_glProgramUniform4d = (PFNGLPROGRAMUNIFORM4DPROC)load("glProgramUniform4d");
+ glad_glProgramUniform4dv = (PFNGLPROGRAMUNIFORM4DVPROC)load("glProgramUniform4dv");
+ glad_glProgramUniform4ui = (PFNGLPROGRAMUNIFORM4UIPROC)load("glProgramUniform4ui");
+ glad_glProgramUniform4uiv = (PFNGLPROGRAMUNIFORM4UIVPROC)load("glProgramUniform4uiv");
+ glad_glProgramUniformMatrix2fv = (PFNGLPROGRAMUNIFORMMATRIX2FVPROC)load("glProgramUniformMatrix2fv");
+ glad_glProgramUniformMatrix3fv = (PFNGLPROGRAMUNIFORMMATRIX3FVPROC)load("glProgramUniformMatrix3fv");
+ glad_glProgramUniformMatrix4fv = (PFNGLPROGRAMUNIFORMMATRIX4FVPROC)load("glProgramUniformMatrix4fv");
+ glad_glProgramUniformMatrix2dv = (PFNGLPROGRAMUNIFORMMATRIX2DVPROC)load("glProgramUniformMatrix2dv");
+ glad_glProgramUniformMatrix3dv = (PFNGLPROGRAMUNIFORMMATRIX3DVPROC)load("glProgramUniformMatrix3dv");
+ glad_glProgramUniformMatrix4dv = (PFNGLPROGRAMUNIFORMMATRIX4DVPROC)load("glProgramUniformMatrix4dv");
+ glad_glProgramUniformMatrix2x3fv = (PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)load("glProgramUniformMatrix2x3fv");
+ glad_glProgramUniformMatrix3x2fv = (PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)load("glProgramUniformMatrix3x2fv");
+ glad_glProgramUniformMatrix2x4fv = (PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)load("glProgramUniformMatrix2x4fv");
+ glad_glProgramUniformMatrix4x2fv = (PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)load("glProgramUniformMatrix4x2fv");
+ glad_glProgramUniformMatrix3x4fv = (PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)load("glProgramUniformMatrix3x4fv");
+ glad_glProgramUniformMatrix4x3fv = (PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)load("glProgramUniformMatrix4x3fv");
+ glad_glProgramUniformMatrix2x3dv = (PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)load("glProgramUniformMatrix2x3dv");
+ glad_glProgramUniformMatrix3x2dv = (PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)load("glProgramUniformMatrix3x2dv");
+ glad_glProgramUniformMatrix2x4dv = (PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)load("glProgramUniformMatrix2x4dv");
+ glad_glProgramUniformMatrix4x2dv = (PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)load("glProgramUniformMatrix4x2dv");
+ glad_glProgramUniformMatrix3x4dv = (PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)load("glProgramUniformMatrix3x4dv");
+ glad_glProgramUniformMatrix4x3dv = (PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)load("glProgramUniformMatrix4x3dv");
+ glad_glValidateProgramPipeline = (PFNGLVALIDATEPROGRAMPIPELINEPROC)load("glValidateProgramPipeline");
+ glad_glGetProgramPipelineInfoLog = (PFNGLGETPROGRAMPIPELINEINFOLOGPROC)load("glGetProgramPipelineInfoLog");
+ glad_glVertexAttribL1d = (PFNGLVERTEXATTRIBL1DPROC)load("glVertexAttribL1d");
+ glad_glVertexAttribL2d = (PFNGLVERTEXATTRIBL2DPROC)load("glVertexAttribL2d");
+ glad_glVertexAttribL3d = (PFNGLVERTEXATTRIBL3DPROC)load("glVertexAttribL3d");
+ glad_glVertexAttribL4d = (PFNGLVERTEXATTRIBL4DPROC)load("glVertexAttribL4d");
+ glad_glVertexAttribL1dv = (PFNGLVERTEXATTRIBL1DVPROC)load("glVertexAttribL1dv");
+ glad_glVertexAttribL2dv = (PFNGLVERTEXATTRIBL2DVPROC)load("glVertexAttribL2dv");
+ glad_glVertexAttribL3dv = (PFNGLVERTEXATTRIBL3DVPROC)load("glVertexAttribL3dv");
+ glad_glVertexAttribL4dv = (PFNGLVERTEXATTRIBL4DVPROC)load("glVertexAttribL4dv");
+ glad_glVertexAttribLPointer = (PFNGLVERTEXATTRIBLPOINTERPROC)load("glVertexAttribLPointer");
+ glad_glGetVertexAttribLdv = (PFNGLGETVERTEXATTRIBLDVPROC)load("glGetVertexAttribLdv");
+ glad_glViewportArrayv = (PFNGLVIEWPORTARRAYVPROC)load("glViewportArrayv");
+ glad_glViewportIndexedf = (PFNGLVIEWPORTINDEXEDFPROC)load("glViewportIndexedf");
+ glad_glViewportIndexedfv = (PFNGLVIEWPORTINDEXEDFVPROC)load("glViewportIndexedfv");
+ glad_glScissorArrayv = (PFNGLSCISSORARRAYVPROC)load("glScissorArrayv");
+ glad_glScissorIndexed = (PFNGLSCISSORINDEXEDPROC)load("glScissorIndexed");
+ glad_glScissorIndexedv = (PFNGLSCISSORINDEXEDVPROC)load("glScissorIndexedv");
+ glad_glDepthRangeArrayv = (PFNGLDEPTHRANGEARRAYVPROC)load("glDepthRangeArrayv");
+ glad_glDepthRangeIndexed = (PFNGLDEPTHRANGEINDEXEDPROC)load("glDepthRangeIndexed");
+ glad_glGetFloati_v = (PFNGLGETFLOATI_VPROC)load("glGetFloati_v");
+ glad_glGetDoublei_v = (PFNGLGETDOUBLEI_VPROC)load("glGetDoublei_v");
+}
+static int find_extensionsGL(void) {
+ if (!get_exts()) return 0;
+ (void)&has_ext;
+ free_exts();
+ return 1;
+}
+
+static void find_coreGL(void) {
+
+ /* Thank you @elmindreda
+ * https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176
+ * https://github.com/glfw/glfw/blob/master/src/context.c#L36
+ */
+ int i, major, minor;
+
+ const char* version;
+ const char* prefixes[] = {
+ "OpenGL ES-CM ",
+ "OpenGL ES-CL ",
+ "OpenGL ES ",
+ NULL
+ };
+
+ version = (const char*) glGetString(GL_VERSION);
+ if (!version) return;
+
+ for (i = 0; prefixes[i]; i++) {
+ const size_t length = strlen(prefixes[i]);
+ if (strncmp(version, prefixes[i], length) == 0) {
+ version += length;
+ break;
+ }
+ }
+
+/* PR #18 */
+#ifdef _MSC_VER
+ sscanf_s(version, "%d.%d", &major, &minor);
+#else
+ sscanf(version, "%d.%d", &major, &minor);
+#endif
+
+ GLVersion.major = major; GLVersion.minor = minor;
+ max_loaded_major = major; max_loaded_minor = minor;
+ GLAD_GL_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1;
+ GLAD_GL_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1;
+ GLAD_GL_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1;
+ GLAD_GL_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1;
+ GLAD_GL_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1;
+ GLAD_GL_VERSION_1_5 = (major == 1 && minor >= 5) || major > 1;
+ GLAD_GL_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2;
+ GLAD_GL_VERSION_2_1 = (major == 2 && minor >= 1) || major > 2;
+ GLAD_GL_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3;
+ GLAD_GL_VERSION_3_1 = (major == 3 && minor >= 1) || major > 3;
+ GLAD_GL_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3;
+ GLAD_GL_VERSION_3_3 = (major == 3 && minor >= 3) || major > 3;
+ GLAD_GL_VERSION_4_0 = (major == 4 && minor >= 0) || major > 4;
+ GLAD_GL_VERSION_4_1 = (major == 4 && minor >= 1) || major > 4;
+ if (GLVersion.major > 4 || (GLVersion.major >= 4 && GLVersion.minor >= 1)) {
+ max_loaded_major = 4;
+ max_loaded_minor = 1;
+ }
+}
+
+int gladLoadGLLoader(GLADloadproc load) {
+ GLVersion.major = 0; GLVersion.minor = 0;
+ glGetString = (PFNGLGETSTRINGPROC)load("glGetString");
+ if(glGetString == NULL) return 0;
+ if(glGetString(GL_VERSION) == NULL) return 0;
+ find_coreGL();
+ load_GL_VERSION_1_0(load);
+ load_GL_VERSION_1_1(load);
+ load_GL_VERSION_1_2(load);
+ load_GL_VERSION_1_3(load);
+ load_GL_VERSION_1_4(load);
+ load_GL_VERSION_1_5(load);
+ load_GL_VERSION_2_0(load);
+ load_GL_VERSION_2_1(load);
+ load_GL_VERSION_3_0(load);
+ load_GL_VERSION_3_1(load);
+ load_GL_VERSION_3_2(load);
+ load_GL_VERSION_3_3(load);
+ load_GL_VERSION_4_0(load);
+ load_GL_VERSION_4_1(load);
+
+ if (!find_extensionsGL()) return 0;
+ return GLVersion.major != 0 || GLVersion.minor != 0;
+}
+
diff --git a/src/opengl/notes.md b/src/opengl/notes.md
new file mode 100644
index 0000000..3ea0171
--- /dev/null
+++ b/src/opengl/notes.md
@@ -0,0 +1,10 @@
+honey/gl
+--------
+
+only support 1 window, for simplicity
+
+want to be **as transparent as possible**! only hide things from the Lua layer when they are either performance-critical or when they are so C-level that wrapping them would be too clunky.
+
+**lua setup functions should do nothing except populate tables**
+
+`gl.init()` will create the window (because that's how we get the opengl context)
diff --git a/src/opengl/setup.c b/src/opengl/setup.c
new file mode 100644
index 0000000..b169660
--- /dev/null
+++ b/src/opengl/setup.c
@@ -0,0 +1,23 @@
+#include <lua.h>
+#include <lauxlib.h>
+#include <glad/glad.h>
+#include "util/util.h"
+#include "bind.h"
+
+
+void setup_gl(lua_State *L, int honey_tbl)
+{
+ struct honey_tbl_t tbl[] = {
+ #define X(name, func) H_FUNC(name, func),
+ GL_FUNCTIONS
+ #undef X
+
+ #define X(name, value) H_INT(name, value),
+ GL_ENUM
+ #undef X
+
+ H_END
+ };
+ create_table(L, tbl);
+ lua_setfield(L, honey_tbl, "gl");
+}
diff --git a/src/opengl/shader.c b/src/opengl/shader.c
new file mode 100644
index 0000000..d78b1ef
--- /dev/null
+++ b/src/opengl/shader.c
@@ -0,0 +1,201 @@
+#include <stdbool.h>
+#include <glad/glad.h>
+#include <GLFW/glfw3.h>
+#include <lua.h>
+#include <lauxlib.h>
+#include "util/util.h"
+
+int gl_create_shader(lua_State *L);
+int gl_shader_set_source(lua_State *L);
+int gl_shader_compile(lua_State *L);
+int gl_shader_delete(lua_State *L);
+
+int gl_program_create(lua_State *L);
+int gl_program_attach_shader(lua_State *L);
+int gl_program_link(lua_State *L);
+int gl_program_use(lua_State *L);
+
+int gl_uniform_get_location(lua_State *L);
+int gl_uniform_1i(lua_State *L);
+int gl_uniform_1f(lua_State *L);
+int gl_uniform_3f(lua_State *L);
+int gl_uniform_4f(lua_State *L);
+
+int gl_uniform_matrix_4fv(lua_State *L);
+
+
+void setup_shader(lua_State *L, int gl_index)
+{
+ struct honey_tbl_t tbl[] = {
+ /* functions */
+ H_FUNC("CreateShader", gl_create_shader),
+ H_FUNC("ShaderSource", gl_shader_set_source),
+ H_FUNC("CompileShader", gl_shader_compile),
+ H_FUNC("DeleteShader", gl_shader_delete),
+
+ H_FUNC("CreateProgram", gl_program_create),
+ H_FUNC("AttachShader", gl_program_attach_shader),
+ H_FUNC("LinkProgram", gl_program_link),
+ H_FUNC("UseProgram", gl_program_use),
+
+ H_FUNC("GetUniformLocation", gl_uniform_get_location),
+ H_FUNC("Uniform1i", gl_uniform_1i),
+ H_FUNC("Uniform1f", gl_uniform_1i),
+ H_FUNC("Uniform3f", gl_uniform_1i),
+ H_FUNC("Uniform4f", gl_uniform_4f),
+
+ H_FUNC("UniformMatrix4fv", gl_uniform_matrix_4fv),
+
+ /******** enums ********/
+ /* shader types */
+ H_INT("VERTEX_SHADER", GL_VERTEX_SHADER),
+ H_INT("FRAGMENT_SHADER", GL_FRAGMENT_SHADER),
+
+ H_END
+ };
+ create_table(L, tbl);
+ append_table(L, gl_index, lua_gettop(L));
+ lua_pop(L, 1);
+}
+
+
+int gl_create_shader(lua_State *L)
+{
+ lua_Integer type = luaL_checkinteger(L, 1);
+ lua_Integer shader = glCreateShader(type);
+ lua_pushinteger(L, shader);
+ return 1;
+}
+
+
+int gl_shader_set_source(lua_State *L)
+{
+ lua_Integer shader = luaL_checkinteger(L, 1);
+ const char *code = luaL_checkstring(L, 2);
+ glShaderSource(shader, 1, (const GLchar * const*)&code, NULL);
+ return 0;
+}
+
+
+int gl_shader_compile(lua_State *L)
+{
+ lua_Integer shader = luaL_checkinteger(L, 1);
+ glCompileShader(shader);
+ int success; char log[1024];
+ glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
+ if (!success) {
+ glGetShaderInfoLog(shader, 1024, NULL, log);
+ luaL_error(L, "shader compilation failed: %s", log);
+ }
+ return 0;
+}
+
+
+int gl_shader_delete(lua_State *L)
+{
+ lua_Integer shader = luaL_checkinteger(L, 1);
+ glDeleteShader(shader);
+ return 0;
+}
+
+
+int gl_program_create(lua_State *L)
+{
+ lua_Integer program = glCreateProgram();
+ lua_pushinteger(L, program);
+ return 1;
+}
+
+
+int gl_program_attach_shader(lua_State *L)
+{
+ lua_Integer program, shader;
+ program = luaL_checkinteger(L, 1);
+ shader = luaL_checkinteger(L, 2);
+ glAttachShader(program, shader);
+ return 0;
+}
+
+
+int gl_program_link(lua_State *L)
+{
+ lua_Integer program = luaL_checkinteger(L, 1);
+ glLinkProgram(program);
+ int success; char log[1024];
+ glGetProgramiv(program, GL_LINK_STATUS, &success);
+ if (!success) {
+ glGetProgramInfoLog(program, 1024, NULL, log);
+ luaL_error(L, "shader linking failed: %s", log);
+ }
+ return 0;
+}
+
+
+int gl_program_use(lua_State *L)
+{
+ lua_Integer program = luaL_checkinteger(L, 1);
+ glUseProgram(program);
+ return 0;
+}
+
+
+int gl_uniform_get_location(lua_State *L)
+{
+ lua_Integer program = luaL_checkinteger(L, 1);
+ const char *name = luaL_checkstring(L, 2);
+ int location = glGetUniformLocation(program, (const GLchar*)name);
+ lua_pushinteger(L, location);
+ return 1;
+}
+
+
+int gl_uniform_1i(lua_State *L)
+{
+ lua_Integer location, v0;
+ location = luaL_checkinteger(L, 1);
+ v0 = luaL_checkinteger(L, 2);
+ glUniform1i(location, v0);
+ return 0;
+}
+
+
+int gl_uniform_1f(lua_State *L)
+{
+ int location = luaL_checkinteger(L, 1);
+ double value = luaL_checknumber(L, 2);
+ glUniform1f(location, value);
+ return 0;
+}
+
+
+int gl_uniform_3f(lua_State *L)
+{
+ int location = luaL_checkinteger(L, 1);
+ double v0 = luaL_checknumber(L, 2);
+ double v1 = luaL_checknumber(L, 3);
+ double v2 = luaL_checknumber(L, 4);
+ glUniform3f(location, v0, v1, v2);
+ return 0;
+}
+
+
+int gl_uniform_4f(lua_State *L)
+{
+ lua_Integer location = luaL_checkinteger(L, 1);
+ lua_Number v0 = luaL_checknumber(L, 2);
+ lua_Number v1 = luaL_checknumber(L, 3);
+ lua_Number v2 = luaL_checknumber(L, 4);
+ lua_Number v3 = luaL_checknumber(L, 5);
+ glUniform4f(location, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int gl_uniform_matrix_4fv(lua_State *L)
+{
+ lua_Integer location = luaL_checkinteger(L, 1);
+ bool transpose = lua_toboolean(L, 2);
+ float *value = lua_touserdata(L, 3);
+ glUniformMatrix4fv(location, 1, transpose, value);
+ return 0;
+}
diff --git a/src/opengl/texture.c b/src/opengl/texture.c
new file mode 100644
index 0000000..13b23c0
--- /dev/null
+++ b/src/opengl/texture.c
@@ -0,0 +1,131 @@
+#include <glad/glad.h>
+#include <GLFW/glfw3.h>
+#include <lua.h>
+#include <lauxlib.h>
+#include "util/util.h"
+
+
+int gl_texture_create(lua_State *L);
+int gl_texture_bind(lua_State *L);
+int gl_texture_image_2d(lua_State *L);
+int gl_texture_generate_mipmaps(lua_State *L);
+int gl_texture_set_active(lua_State *L);
+int gl_tex_parameter_i(lua_State *L);
+
+
+void setup_texture(lua_State *L, int gl_index)
+{
+ struct honey_tbl_t tbl[] = {
+ /* functions */
+ H_FUNC("GenTextures", gl_texture_create),
+ H_FUNC("BindTexture", gl_texture_bind),
+ H_FUNC("TexImage2D", gl_texture_image_2d),
+ H_FUNC("GenerateMipmap", gl_texture_generate_mipmaps),
+ H_FUNC("ActiveTexture", gl_texture_set_active),
+ H_FUNC("TexParameteri", gl_tex_parameter_i),
+
+ /******** enums ********/
+ /* texture binding targets */
+ H_INT("TEXTURE_2D", GL_TEXTURE_2D),
+
+ /* texture data formats */
+ H_INT("RGB", GL_RGB),
+ H_INT("RGBA", GL_RGBA),
+
+ /* texture parameters */
+ H_INT("TEXTURE_WRAP_S", GL_TEXTURE_WRAP_S),
+ H_INT("TEXTURE_WRAP_T", GL_TEXTURE_WRAP_T),
+ H_INT("TEXTURE_MIN_FILTER", GL_TEXTURE_MIN_FILTER),
+ H_INT("TEXTURE_MAG_FILTER", GL_TEXTURE_MAG_FILTER),
+ H_INT("TEXTURE_SWIZZLE_R", GL_TEXTURE_SWIZZLE_R),
+ H_INT("TEXTURE_SWIZZLE_G", GL_TEXTURE_SWIZZLE_G),
+ H_INT("TEXTURE_SWIZZLE_B", GL_TEXTURE_SWIZZLE_B),
+ H_INT("TEXTURE_SWIZZLE_A", GL_TEXTURE_SWIZZLE_A),
+
+ /* wrapping types */
+ H_INT("REPEAT", GL_REPEAT),
+
+ /* filter types */
+ H_INT("NEAREST", GL_NEAREST),
+ H_INT("LINEAR", GL_LINEAR),
+
+ /* swizzle targets */
+ H_INT("RED", GL_RED),
+ H_INT("GREEN", GL_GREEN),
+ H_INT("BLUE", GL_BLUE),
+ H_INT("ALPHA", GL_ALPHA),
+ H_INT("ZERO", GL_ZERO),
+ H_INT("ONE", GL_ONE),
+
+ H_END
+ };
+ create_table(L, tbl);
+ append_table(L, gl_index, lua_gettop(L));
+ lua_pop(L, 1);
+}
+
+
+int gl_texture_create(lua_State *L)
+{
+ unsigned int texture;
+ glGenTextures(1, &texture);
+ lua_pushinteger(L, texture);
+ return 1;
+}
+
+
+int gl_texture_bind(lua_State *L)
+{
+ lua_Integer target, texture;
+ target = luaL_checkinteger(L, 1);
+ texture = luaL_checkinteger(L, 2);
+ glBindTexture(target, texture);
+ return 0;
+}
+
+
+int gl_texture_image_2d(lua_State *L)
+{
+ lua_Integer target, mipmap_level,
+ internal_format,
+ width, height,
+ format, type;
+ target = luaL_checkinteger(L, 1);
+ mipmap_level = luaL_checkinteger(L, 2);
+ internal_format = luaL_checkinteger(L, 3);
+ width = luaL_checkinteger(L, 4);
+ height = luaL_checkinteger(L, 5);
+ format = luaL_checkinteger(L, 6);
+ type = luaL_checkinteger(L, 7);
+ void *data = lua_touserdata(L, 8);
+
+ glTexImage2D(target, mipmap_level, internal_format, width, height, 0, format, type, data);
+ return 0;
+}
+
+
+int gl_texture_generate_mipmaps(lua_State *L)
+{
+ lua_Integer target = luaL_checkinteger(L, 1);
+ glGenerateMipmap(target);
+ return 0;
+}
+
+
+int gl_texture_set_active(lua_State *L)
+{
+ lua_Integer unit = luaL_checkinteger(L, 1);
+ glActiveTexture(GL_TEXTURE0 + unit);
+ return 0;
+}
+
+
+int gl_tex_parameter_i(lua_State *L)
+{
+ lua_Integer target, pname, param;
+ target = luaL_checkinteger(L, 1);
+ pname = luaL_checkinteger(L, 2);
+ param = luaL_checkinteger(L, 3);
+ glTexParameteri(target, pname, param);
+ return 0;
+}
diff --git a/src/opengl/window.c b/src/opengl/window.c
new file mode 100644
index 0000000..46bc2f5
--- /dev/null
+++ b/src/opengl/window.c
@@ -0,0 +1,369 @@
+#include <stdlib.h>
+#include <glad/glad.h>
+#include <GLFW/glfw3.h>
+#include <lua.h>
+#include <lauxlib.h>
+#include "util/util.h"
+
+struct window_data {
+ lua_State *L;
+ int framebuffer_size_callback;
+};
+
+struct window_data * create_window_data(lua_State *L)
+{
+ struct window_data *wdata = malloc(sizeof(struct window_data));
+ if (wdata == NULL)
+ return NULL;
+ wdata->L = L;
+ wdata->framebuffer_size_callback = LUA_NOREF;
+ return wdata;
+}
+
+int window_create(lua_State *L);
+int window_destroy(lua_State *L);
+int window_make_context_current(lua_State *L);
+int window_set_hint(lua_State *L);
+int window_should_close(lua_State *L);
+int window_set_should_close(lua_State *L);
+int window_poll_events(lua_State *L);
+int window_swap_buffers(lua_State *L);
+int window_set_framebuffer_size_callback(lua_State *L);
+int window_get_time(lua_State *L);
+int window_get_key(lua_State *L);
+int window_get_cursor_pos(lua_State *L);
+int window_set_input_mode(lua_State *L);
+
+
+static const char *window_tname = "window";
+
+
+void setup_window(lua_State *L, int honey_index)
+{
+ luaL_newmetatable(L, window_tname);
+ lua_pop(L, 1);
+
+ struct honey_tbl_t tbl[] = {
+ H_FUNC("create", window_create),
+ H_FUNC("destroy", window_destroy),
+ H_FUNC("makeContextCurrent", window_make_context_current),
+ H_FUNC("setHint", window_set_hint),
+ H_FUNC("shouldClose", window_should_close),
+ H_FUNC("setShouldClose", window_set_should_close),
+ H_FUNC("pollEvents", window_poll_events),
+ H_FUNC("swapBuffers", window_swap_buffers),
+ H_FUNC("setFramebufferSizeCallback", window_set_framebuffer_size_callback),
+ H_FUNC("getTime", window_get_time),
+ H_FUNC("getKey", window_get_key),
+ H_FUNC("getCursorPos", window_get_cursor_pos),
+ H_FUNC("setInputMode", window_set_input_mode),
+
+ /* input modes */
+ H_INT("CURSOR", GLFW_CURSOR),
+
+ /* cursor modes */
+ H_INT("CURSOR_NORMAL", GLFW_CURSOR_NORMAL),
+ H_INT("CURSOR_HIDDEN", GLFW_CURSOR_HIDDEN),
+ H_INT("CURSOR_DISABLED", GLFW_CURSOR_DISABLED),
+
+ /* key states */
+ H_INT("PRESS", GLFW_PRESS),
+ H_INT("RELEASE", GLFW_RELEASE),
+
+ /* key buttons */
+ H_INT("KEY_UNKNOWN", GLFW_KEY_UNKNOWN),
+ H_INT("KEY_SPACE", GLFW_KEY_SPACE),
+ H_INT("KEY_APOSTROPHE", GLFW_KEY_APOSTROPHE),
+ H_INT("KEY_COMMA", GLFW_KEY_COMMA),
+ H_INT("KEY_MINUS", GLFW_KEY_MINUS),
+ H_INT("KEY_PERIOD", GLFW_KEY_PERIOD),
+ H_INT("KEY_SLASH", GLFW_KEY_SLASH),
+ H_INT("KEY_0", GLFW_KEY_0),
+ H_INT("KEY_1", GLFW_KEY_1),
+ H_INT("KEY_2", GLFW_KEY_2),
+ H_INT("KEY_3", GLFW_KEY_3),
+ H_INT("KEY_4", GLFW_KEY_4),
+ H_INT("KEY_5", GLFW_KEY_5),
+ H_INT("KEY_6", GLFW_KEY_6),
+ H_INT("KEY_7", GLFW_KEY_7),
+ H_INT("KEY_8", GLFW_KEY_8),
+ H_INT("KEY_9", GLFW_KEY_9),
+ H_INT("KEY_SEMICOLON", GLFW_KEY_SEMICOLON),
+ H_INT("KEY_EQUAL", GLFW_KEY_EQUAL),
+ H_INT("KEY_A", GLFW_KEY_A),
+ H_INT("KEY_B", GLFW_KEY_B),
+ H_INT("KEY_C", GLFW_KEY_C),
+ H_INT("KEY_D", GLFW_KEY_D),
+ H_INT("KEY_E", GLFW_KEY_E),
+ H_INT("KEY_F", GLFW_KEY_F),
+ H_INT("KEY_G", GLFW_KEY_G),
+ H_INT("KEY_H", GLFW_KEY_H),
+ H_INT("KEY_I", GLFW_KEY_I),
+ H_INT("KEY_J", GLFW_KEY_J),
+ H_INT("KEY_K", GLFW_KEY_K),
+ H_INT("KEY_L", GLFW_KEY_L),
+ H_INT("KEY_M", GLFW_KEY_M),
+ H_INT("KEY_N", GLFW_KEY_N),
+ H_INT("KEY_O", GLFW_KEY_O),
+ H_INT("KEY_P", GLFW_KEY_P),
+ H_INT("KEY_Q", GLFW_KEY_Q),
+ H_INT("KEY_R", GLFW_KEY_R),
+ H_INT("KEY_S", GLFW_KEY_S),
+ H_INT("KEY_T", GLFW_KEY_T),
+ H_INT("KEY_U", GLFW_KEY_U),
+ H_INT("KEY_V", GLFW_KEY_V),
+ H_INT("KEY_W", GLFW_KEY_W),
+ H_INT("KEY_X", GLFW_KEY_X),
+ H_INT("KEY_Y", GLFW_KEY_Y),
+ H_INT("KEY_Z", GLFW_KEY_Z),
+ H_INT("KEY_LEFT_BRACKET", GLFW_KEY_LEFT_BRACKET),
+ H_INT("KEY_BACKSLASH", GLFW_KEY_BACKSLASH),
+ H_INT("KEY_RIGHT_BRACKET", GLFW_KEY_RIGHT_BRACKET),
+ H_INT("KEY_GRAVE_ACCENT", GLFW_KEY_GRAVE_ACCENT),
+ H_INT("KEY_WORLD_1", GLFW_KEY_WORLD_1),
+ H_INT("KEY_WORLD_2", GLFW_KEY_WORLD_2),
+ H_INT("KEY_ESCAPE", GLFW_KEY_ESCAPE),
+ H_INT("KEY_ENTER", GLFW_KEY_ENTER),
+ H_INT("KEY_TAB", GLFW_KEY_TAB),
+ H_INT("KEY_BACKSPACE", GLFW_KEY_BACKSPACE),
+ H_INT("KEY_INSERT", GLFW_KEY_INSERT),
+ H_INT("KEY_DELETE", GLFW_KEY_DELETE),
+ H_INT("KEY_RIGHT", GLFW_KEY_RIGHT),
+ H_INT("KEY_LEFT", GLFW_KEY_LEFT),
+ H_INT("KEY_DOWN", GLFW_KEY_DOWN),
+ H_INT("KEY_UP", GLFW_KEY_UP),
+ H_INT("KEY_PAGE_UP", GLFW_KEY_PAGE_UP),
+ H_INT("KEY_PAGE_DOWN", GLFW_KEY_PAGE_DOWN),
+ H_INT("KEY_HOME", GLFW_KEY_HOME),
+ H_INT("KEY_END", GLFW_KEY_END),
+ H_INT("KEY_CAPS_LOCK", GLFW_KEY_CAPS_LOCK),
+ H_INT("KEY_SCROLL_LOCK", GLFW_KEY_SCROLL_LOCK),
+ H_INT("KEY_NUM_LOCK", GLFW_KEY_NUM_LOCK),
+ H_INT("KEY_PRINT_SCREEN", GLFW_KEY_PRINT_SCREEN),
+ H_INT("KEY_PAUSE", GLFW_KEY_PAUSE),
+ H_INT("KEY_F1", GLFW_KEY_F1),
+ H_INT("KEY_F2", GLFW_KEY_F2),
+ H_INT("KEY_F3", GLFW_KEY_F3),
+ H_INT("KEY_F4", GLFW_KEY_F4),
+ H_INT("KEY_F5", GLFW_KEY_F5),
+ H_INT("KEY_F6", GLFW_KEY_F6),
+ H_INT("KEY_F7", GLFW_KEY_F7),
+ H_INT("KEY_F8", GLFW_KEY_F8),
+ H_INT("KEY_F9", GLFW_KEY_F9),
+ H_INT("KEY_F", GLFW_KEY_F),
+ H_INT("KEY_F", GLFW_KEY_F),
+ H_INT("KEY_F", GLFW_KEY_F),
+ H_INT("KEY_F", GLFW_KEY_F),
+ H_INT("KEY_F", GLFW_KEY_F),
+ H_INT("KEY_F", GLFW_KEY_F),
+ H_INT("KEY_F", GLFW_KEY_F),
+ H_INT("KEY_F", GLFW_KEY_F),
+ H_INT("KEY_F", GLFW_KEY_F),
+ H_INT("KEY_F", GLFW_KEY_F),
+ H_INT("KEY_F", GLFW_KEY_F),
+ H_INT("KEY_F", GLFW_KEY_F),
+ H_INT("KEY_F", GLFW_KEY_F),
+ H_INT("KEY_F", GLFW_KEY_F),
+ H_INT("KEY_F", GLFW_KEY_F),
+ H_INT("KEY_F", GLFW_KEY_F),
+ H_INT("KEY_KP_0", GLFW_KEY_KP_0),
+ H_INT("KEY_KP_1", GLFW_KEY_KP_1),
+ H_INT("KEY_KP_2", GLFW_KEY_KP_2),
+ H_INT("KEY_KP_3", GLFW_KEY_KP_3),
+ H_INT("KEY_KP_4", GLFW_KEY_KP_4),
+ H_INT("KEY_KP_5", GLFW_KEY_KP_5),
+ H_INT("KEY_KP_6", GLFW_KEY_KP_6),
+ H_INT("KEY_KP_7", GLFW_KEY_KP_7),
+ H_INT("KEY_KP_8", GLFW_KEY_KP_8),
+ H_INT("KEY_KP_9", GLFW_KEY_KP_9),
+ H_INT("KEY_KP_DECIMAL", GLFW_KEY_KP_DECIMAL),
+ H_INT("KEY_KP_DIVIDE", GLFW_KEY_KP_DIVIDE),
+ H_INT("KEY_KP_MULTIPLY", GLFW_KEY_KP_MULTIPLY),
+ H_INT("KEY_KP_SUBTRACT", GLFW_KEY_KP_SUBTRACT),
+ H_INT("KEY_KP_ADD", GLFW_KEY_KP_ADD),
+ H_INT("KEY_KP_ENTER", GLFW_KEY_KP_ENTER),
+ H_INT("KEY_KP_EQUAL", GLFW_KEY_KP_EQUAL),
+ H_INT("KEY_LEFT_SHIFT", GLFW_KEY_LEFT_SHIFT),
+ H_INT("KEY_LEFT_CONTROL", GLFW_KEY_LEFT_CONTROL),
+ H_INT("KEY_LEFT_ALT", GLFW_KEY_LEFT_ALT),
+ H_INT("KEY_LEFT_SUPER", GLFW_KEY_LEFT_SUPER),
+ H_INT("KEY_RIGHT_SHIFT", GLFW_KEY_RIGHT_SHIFT),
+ H_INT("KEY_RIGHT_CONTROL", GLFW_KEY_RIGHT_CONTROL),
+ H_INT("KEY_RIGHT_ALT", GLFW_KEY_RIGHT_ALT),
+ H_INT("KEY_RIGHT_SUPER", GLFW_KEY_RIGHT_SUPER),
+ H_INT("KEY_MENU", GLFW_KEY_MENU),
+
+ H_END
+ };
+ create_table(L, tbl);
+ int window_tbl = lua_gettop(L);
+
+ struct honey_tbl_t hint_types[] = {
+ H_INT("contextVersionMajor", GLFW_CONTEXT_VERSION_MAJOR),
+ H_INT("contextVersionMinor", GLFW_CONTEXT_VERSION_MINOR),
+ H_INT("openGlProfile", GLFW_OPENGL_PROFILE),
+ H_END
+ };
+ create_table(L, hint_types);
+ lua_setfield(L, window_tbl, "hintType");
+
+ struct honey_tbl_t profile_types[] = {
+ H_INT("openGlCoreProfile", GLFW_OPENGL_CORE_PROFILE),
+ H_END
+ };
+ create_table(L, profile_types);
+ lua_setfield(L, window_tbl, "profileType");
+
+ lua_setfield(L, honey_index, "window");
+}
+
+
+static void framebuffer_size_callback_(GLFWwindow *win, int width, int height)
+{
+ struct window_data *wdata = glfwGetWindowUserPointer(win);
+ lua_State *L = wdata->L;
+ if (wdata->framebuffer_size_callback != LUA_NOREF) {
+ lua_rawgeti(L, LUA_REGISTRYINDEX, wdata->framebuffer_size_callback);
+ lua_pushlightuserdata(L, win);
+ lua_pushinteger(L, width);
+ lua_pushinteger(L, height);
+ lua_call(L, 3, 0);
+ }
+}
+
+int window_create(lua_State *L)
+{
+ lua_Integer width, height;
+ width = luaL_checkinteger(L, 1);
+ height = luaL_checkinteger(L, 2);
+ const char *title = luaL_checkstring(L, 3);
+
+ GLFWwindow **win = lua_newuserdata(L, sizeof(GLFWwindow *));
+ *win = glfwCreateWindow(width, height, title, NULL, NULL);
+ if (*win == NULL)
+ luaL_error(L, "failed to create window");
+
+ struct window_data *wdata = create_window_data(L);
+ glfwSetWindowUserPointer(*win, wdata);
+
+ glfwSetFramebufferSizeCallback(*win, framebuffer_size_callback_);
+
+ luaL_getmetatable(L, window_tname);
+ lua_setmetatable(L, -2);
+ return 1;
+}
+
+
+int window_destroy(lua_State *L)
+{
+ GLFWwindow **win = luaL_checkudata(L, 1, window_tname);
+ void *wdata = glfwGetWindowUserPointer(*win);
+ if (wdata != NULL) {
+ free(wdata);
+ glfwSetWindowUserPointer(*win, NULL);
+ }
+ glfwDestroyWindow(*win);
+ return 0;
+}
+
+
+int window_make_context_current(lua_State *L)
+{
+ GLFWwindow **win = luaL_checkudata(L, 1, window_tname);
+ glfwMakeContextCurrent(*win);
+ return 0;
+}
+
+
+int window_set_hint(lua_State *L)
+{
+ int hint = luaL_checkinteger(L, 1);
+ int value = luaL_checkinteger(L, 2);
+ glfwWindowHint(hint, value);
+ return 0;
+}
+
+
+int window_should_close(lua_State *L)
+{
+ GLFWwindow **win = luaL_checkudata(L, 1, window_tname);
+ lua_pushboolean(L, glfwWindowShouldClose(*win));
+ return 1;
+}
+
+
+int window_set_should_close(lua_State *L)
+{
+ GLFWwindow **win = luaL_checkudata(L, 1, window_tname);
+ int value = lua_toboolean(L, 2);
+
+ glfwSetWindowShouldClose(*win, value);
+ return 0;
+}
+
+
+int window_poll_events(lua_State *L)
+{
+ glfwPollEvents();
+ return 0;
+}
+
+
+int window_swap_buffers(lua_State *L)
+{
+ GLFWwindow **win = luaL_checkudata(L, 1, window_tname);
+ glfwSwapBuffers(*win);
+ return 0;
+}
+
+
+int window_set_framebuffer_size_callback(lua_State *L)
+{
+ GLFWwindow **win = luaL_checkudata(L, 1, window_tname);
+ luaL_checktype(L, 2, LUA_TFUNCTION);
+ int func = 2;
+
+ struct window_data *wdata = glfwGetWindowUserPointer(*win);
+
+ lua_pushvalue(L, func);
+ wdata->framebuffer_size_callback = luaL_ref(L, LUA_REGISTRYINDEX);
+ return 0;
+}
+
+
+int window_get_time(lua_State *L)
+{
+ lua_pushnumber(L, glfwGetTime());
+ return 1;
+}
+
+
+int window_get_key(lua_State *L)
+{
+ GLFWwindow **win = luaL_checkudata(L, 1, window_tname);
+ int key = luaL_checkinteger(L, 2);
+ lua_pushinteger(L, glfwGetKey(*win, key));
+ return 1;
+}
+
+
+int window_get_cursor_pos(lua_State *L)
+{
+ GLFWwindow **win = luaL_checkudata(L, 1, window_tname);
+ double x, y;
+ glfwGetCursorPos(*win, &x, &y);
+ lua_pushnumber(L, x);
+ lua_pushnumber(L, y);
+ return 2;
+}
+
+
+int window_set_input_mode(lua_State *L)
+{
+ GLFWwindow **win = luaL_checkudata(L, 1, window_tname);
+ int mode = luaL_checkinteger(L, 2);
+ int value = luaL_checkinteger(L, 3);
+
+ glfwSetInputMode(*win, mode, value);
+ return 0;
+}
diff --git a/src/opengl/window.test.c b/src/opengl/window.test.c
new file mode 100644
index 0000000..505c876
--- /dev/null
+++ b/src/opengl/window.test.c
@@ -0,0 +1,24 @@
+#include <stdlib.h>
+#include <lua.h>
+#include <honeysuckle.h>
+#include "test/honey-test.h"
+
+#include "window.c"
+
+
+void create_window_data_works()
+{
+ lua_State *L = luaL_newstate();
+ struct window_data *wdata = create_window_data(L);
+
+ lily_assert_ptr_equal(L, wdata->L);
+ lily_assert_int_equal(wdata->framebuffer_size_callback, LUA_NOREF);
+ lua_close(L);
+ free(wdata);
+}
+
+
+void suite_window()
+{
+ lily_run_test(create_window_data_works);
+}