
#include "Meta_Maps.h"

#include <glbinding/gl/extension.h>


using namespace gl; // ToDo: multiple APIs?

namespace glbinding
{

const std::unordered_map<GLextension, std::set<std::string>> Meta_FunctionStringsByExtension
{
#ifdef STRINGS_BY_GL
    { GLextension::GL_3DFX_tbuffer, { "glTbufferMask3DFX" } },
    { GLextension::GL_AMD_debug_output, { "glDebugMessageEnableAMD", "glDebugMessageInsertAMD", "glDebugMessageCallbackAMD", "glGetDebugMessageLogAMD" } },
    { GLextension::GL_AMD_draw_buffers_blend, { "glBlendFuncIndexedAMD", "glBlendFuncSeparateIndexedAMD", "glBlendEquationIndexedAMD", "glBlendEquationSeparateIndexedAMD" } },
    { GLextension::GL_AMD_gpu_shader_int64, { "glUniform1i64NV", "glUniform2i64NV", "glUniform3i64NV", "glUniform4i64NV", "glUniform1i64vNV", "glUniform2i64vNV", "glUniform3i64vNV", "glUniform4i64vNV", "glUniform1ui64NV", "glUniform2ui64NV", "glUniform3ui64NV", "glUniform4ui64NV", "glUniform1ui64vNV", "glUniform2ui64vNV", "glUniform3ui64vNV", "glUniform4ui64vNV", "glGetUniformi64vNV", "glGetUniformui64vNV", "glProgramUniform1i64NV", "glProgramUniform2i64NV", "glProgramUniform3i64NV", "glProgramUniform4i64NV", "glProgramUniform1i64vNV", "glProgramUniform2i64vNV", "glProgramUniform3i64vNV", "glProgramUniform4i64vNV", "glProgramUniform1ui64NV", "glProgramUniform2ui64NV", "glProgramUniform3ui64NV", "glProgramUniform4ui64NV", "glProgramUniform1ui64vNV", "glProgramUniform2ui64vNV", "glProgramUniform3ui64vNV", "glProgramUniform4ui64vNV" } },
    { GLextension::GL_AMD_interleaved_elements, { "glVertexAttribParameteriAMD" } },
    { GLextension::GL_AMD_multi_draw_indirect, { "glMultiDrawArraysIndirectAMD", "glMultiDrawElementsIndirectAMD" } },
    { GLextension::GL_AMD_name_gen_delete, { "glGenNamesAMD", "glDeleteNamesAMD", "glIsNameAMD" } },
    { GLextension::GL_AMD_occlusion_query_event, { "glQueryObjectParameteruiAMD" } },
    { GLextension::GL_AMD_performance_monitor, { "glGetPerfMonitorGroupsAMD", "glGetPerfMonitorCountersAMD", "glGetPerfMonitorGroupStringAMD", "glGetPerfMonitorCounterStringAMD", "glGetPerfMonitorCounterInfoAMD", "glGenPerfMonitorsAMD", "glDeletePerfMonitorsAMD", "glSelectPerfMonitorCountersAMD", "glBeginPerfMonitorAMD", "glEndPerfMonitorAMD", "glGetPerfMonitorCounterDataAMD" } },
    { GLextension::GL_AMD_sample_positions, { "glSetMultisamplefvAMD" } },
    { GLextension::GL_AMD_sparse_texture, { "glTexStorageSparseAMD", "glTextureStorageSparseAMD" } },
    { GLextension::GL_AMD_stencil_operation_extended, { "glStencilOpValueAMD" } },
    { GLextension::GL_AMD_vertex_shader_tessellator, { "glTessellationFactorAMD", "glTessellationModeAMD" } },
    { GLextension::GL_APPLE_element_array, { "glElementPointerAPPLE", "glDrawElementArrayAPPLE", "glDrawRangeElementArrayAPPLE", "glMultiDrawElementArrayAPPLE", "glMultiDrawRangeElementArrayAPPLE" } },
    { GLextension::GL_APPLE_fence, { "glGenFencesAPPLE", "glDeleteFencesAPPLE", "glSetFenceAPPLE", "glIsFenceAPPLE", "glTestFenceAPPLE", "glFinishFenceAPPLE", "glTestObjectAPPLE", "glFinishObjectAPPLE" } },
    { GLextension::GL_APPLE_flush_buffer_range, { "glBufferParameteriAPPLE", "glFlushMappedBufferRangeAPPLE" } },
    { GLextension::GL_APPLE_object_purgeable, { "glObjectPurgeableAPPLE", "glObjectUnpurgeableAPPLE", "glGetObjectParameterivAPPLE" } },
    { GLextension::GL_APPLE_texture_range, { "glTextureRangeAPPLE", "glGetTexParameterPointervAPPLE" } },
    { GLextension::GL_APPLE_vertex_array_object, { "glBindVertexArrayAPPLE", "glDeleteVertexArraysAPPLE", "glGenVertexArraysAPPLE", "glIsVertexArrayAPPLE" } },
    { GLextension::GL_APPLE_vertex_array_range, { "glVertexArrayRangeAPPLE", "glFlushVertexArrayRangeAPPLE", "glVertexArrayParameteriAPPLE" } },
    { GLextension::GL_APPLE_vertex_program_evaluators, { "glEnableVertexAttribAPPLE", "glDisableVertexAttribAPPLE", "glIsVertexAttribEnabledAPPLE", "glMapVertexAttrib1dAPPLE", "glMapVertexAttrib1fAPPLE", "glMapVertexAttrib2dAPPLE", "glMapVertexAttrib2fAPPLE" } },
    { GLextension::GL_ARB_ES2_compatibility, { "glReleaseShaderCompiler", "glShaderBinary", "glGetShaderPrecisionFormat", "glDepthRangef", "glClearDepthf" } },
    { GLextension::GL_ARB_ES3_1_compatibility, { "glMemoryBarrierByRegion" } },
    { GLextension::GL_ARB_ES3_2_compatibility, { "glPrimitiveBoundingBoxARB" } },
    { GLextension::GL_ARB_base_instance, { "glDrawArraysInstancedBaseInstance", "glDrawElementsInstancedBaseInstance", "glDrawElementsInstancedBaseVertexBaseInstance" } },
    { GLextension::GL_ARB_bindless_texture, { "glGetTextureHandleARB", "glGetTextureSamplerHandleARB", "glMakeTextureHandleResidentARB", "glMakeTextureHandleNonResidentARB", "glGetImageHandleARB", "glMakeImageHandleResidentARB", "glMakeImageHandleNonResidentARB", "glUniformHandleui64ARB", "glUniformHandleui64vARB", "glProgramUniformHandleui64ARB", "glProgramUniformHandleui64vARB", "glIsTextureHandleResidentARB", "glIsImageHandleResidentARB", "glVertexAttribL1ui64ARB", "glVertexAttribL1ui64vARB", "glGetVertexAttribLui64vARB" } },
    { GLextension::GL_ARB_blend_func_extended, { "glBindFragDataLocationIndexed", "glGetFragDataIndex" } },
    { GLextension::GL_ARB_buffer_storage, { "glBufferStorage" } },
    { GLextension::GL_ARB_cl_event, { "glCreateSyncFromCLeventARB" } },
    { GLextension::GL_ARB_clear_buffer_object, { "glClearBufferData", "glClearBufferSubData" } },
    { GLextension::GL_ARB_clear_texture, { "glClearTexImage", "glClearTexSubImage" } },
    { GLextension::GL_ARB_clip_control, { "glClipControl" } },
    { GLextension::GL_ARB_color_buffer_float, { "glClampColorARB" } },
    { GLextension::GL_ARB_compute_shader, { "glDispatchCompute", "glDispatchComputeIndirect" } },
    { GLextension::GL_ARB_compute_variable_group_size, { "glDispatchComputeGroupSizeARB" } },
    { GLextension::GL_ARB_copy_buffer, { "glCopyBufferSubData" } },
    { GLextension::GL_ARB_copy_image, { "glCopyImageSubData" } },
    { GLextension::GL_ARB_debug_output, { "glDebugMessageControlARB", "glDebugMessageInsertARB", "glDebugMessageCallbackARB", "glGetDebugMessageLogARB" } },
    { GLextension::GL_ARB_direct_state_access, { "glCreateTransformFeedbacks", "glTransformFeedbackBufferBase", "glTransformFeedbackBufferRange", "glGetTransformFeedbackiv", "glGetTransformFeedbacki_v", "glGetTransformFeedbacki64_v", "glCreateBuffers", "glNamedBufferStorage", "glNamedBufferData", "glNamedBufferSubData", "glCopyNamedBufferSubData", "glClearNamedBufferData", "glClearNamedBufferSubData", "glMapNamedBuffer", "glMapNamedBufferRange", "glUnmapNamedBuffer", "glFlushMappedNamedBufferRange", "glGetNamedBufferParameteriv", "glGetNamedBufferParameteri64v", "glGetNamedBufferPointerv", "glGetNamedBufferSubData", "glCreateFramebuffers", "glNamedFramebufferRenderbuffer", "glNamedFramebufferParameteri", "glNamedFramebufferTexture", "glNamedFramebufferTextureLayer", "glNamedFramebufferDrawBuffer", "glNamedFramebufferDrawBuffers", "glNamedFramebufferReadBuffer", "glInvalidateNamedFramebufferData", "glInvalidateNamedFramebufferSubData", "glClearNamedFramebufferiv", "glClearNamedFramebufferuiv", "glClearNamedFramebufferfv", "glClearNamedFramebufferfi", "glBlitNamedFramebuffer", "glCheckNamedFramebufferStatus", "glGetNamedFramebufferParameteriv", "glGetNamedFramebufferAttachmentParameteriv", "glCreateRenderbuffers", "glNamedRenderbufferStorage", "glNamedRenderbufferStorageMultisample", "glGetNamedRenderbufferParameteriv", "glCreateTextures", "glTextureBuffer", "glTextureBufferRange", "glTextureStorage1D", "glTextureStorage2D", "glTextureStorage3D", "glTextureStorage2DMultisample", "glTextureStorage3DMultisample", "glTextureSubImage1D", "glTextureSubImage2D", "glTextureSubImage3D", "glCompressedTextureSubImage1D", "glCompressedTextureSubImage2D", "glCompressedTextureSubImage3D", "glCopyTextureSubImage1D", "glCopyTextureSubImage2D", "glCopyTextureSubImage3D", "glTextureParameterf", "glTextureParameterfv", "glTextureParameteri", "glTextureParameterIiv", "glTextureParameterIuiv", "glTextureParameteriv", "glGenerateTextureMipmap", "glBindTextureUnit", "glGetTextureImage", "glGetCompressedTextureImage", "glGetTextureLevelParameterfv", "glGetTextureLevelParameteriv", "glGetTextureParameterfv", "glGetTextureParameterIiv", "glGetTextureParameterIuiv", "glGetTextureParameteriv", "glCreateVertexArrays", "glDisableVertexArrayAttrib", "glEnableVertexArrayAttrib", "glVertexArrayElementBuffer", "glVertexArrayVertexBuffer", "glVertexArrayVertexBuffers", "glVertexArrayAttribBinding", "glVertexArrayAttribFormat", "glVertexArrayAttribIFormat", "glVertexArrayAttribLFormat", "glVertexArrayBindingDivisor", "glGetVertexArrayiv", "glGetVertexArrayIndexediv", "glGetVertexArrayIndexed64iv", "glCreateSamplers", "glCreateProgramPipelines", "glCreateQueries", "glGetQueryBufferObjecti64v", "glGetQueryBufferObjectiv", "glGetQueryBufferObjectui64v", "glGetQueryBufferObjectuiv" } },
    { GLextension::GL_ARB_draw_buffers, { "glDrawBuffersARB" } },
    { GLextension::GL_ARB_draw_buffers_blend, { "glBlendEquationiARB", "glBlendEquationSeparateiARB", "glBlendFunciARB", "glBlendFuncSeparateiARB" } },
    { GLextension::GL_ARB_draw_elements_base_vertex, { "glDrawElementsBaseVertex", "glDrawRangeElementsBaseVertex", "glDrawElementsInstancedBaseVertex", "glMultiDrawElementsBaseVertex" } },
    { GLextension::GL_ARB_draw_indirect, { "glDrawArraysIndirect", "glDrawElementsIndirect" } },
    { GLextension::GL_ARB_draw_instanced, { "glDrawArraysInstancedARB", "glDrawElementsInstancedARB" } },
    { GLextension::GL_ARB_fragment_program, { "glProgramStringARB", "glBindProgramARB", "glDeleteProgramsARB", "glGenProgramsARB", "glProgramEnvParameter4dARB", "glProgramEnvParameter4dvARB", "glProgramEnvParameter4fARB", "glProgramEnvParameter4fvARB", "glProgramLocalParameter4dARB", "glProgramLocalParameter4dvARB", "glProgramLocalParameter4fARB", "glProgramLocalParameter4fvARB", "glGetProgramEnvParameterdvARB", "glGetProgramEnvParameterfvARB", "glGetProgramLocalParameterdvARB", "glGetProgramLocalParameterfvARB", "glGetProgramivARB", "glGetProgramStringARB", "glIsProgramARB" } },
    { GLextension::GL_ARB_framebuffer_no_attachments, { "glFramebufferParameteri", "glGetFramebufferParameteriv" } },
    { GLextension::GL_ARB_framebuffer_object, { "glIsRenderbuffer", "glBindRenderbuffer", "glDeleteRenderbuffers", "glGenRenderbuffers", "glRenderbufferStorage", "glGetRenderbufferParameteriv", "glIsFramebuffer", "glBindFramebuffer", "glDeleteFramebuffers", "glGenFramebuffers", "glCheckFramebufferStatus", "glFramebufferTexture1D", "glFramebufferTexture2D", "glFramebufferTexture3D", "glFramebufferRenderbuffer", "glGetFramebufferAttachmentParameteriv", "glGenerateMipmap", "glBlitFramebuffer", "glRenderbufferStorageMultisample", "glFramebufferTextureLayer" } },
    { GLextension::GL_ARB_geometry_shader4, { "glProgramParameteriARB", "glFramebufferTextureARB", "glFramebufferTextureLayerARB", "glFramebufferTextureFaceARB" } },
    { GLextension::GL_ARB_get_program_binary, { "glGetProgramBinary", "glProgramBinary", "glProgramParameteri" } },
    { GLextension::GL_ARB_get_texture_sub_image, { "glGetTextureSubImage", "glGetCompressedTextureSubImage" } },
    { GLextension::GL_ARB_gpu_shader_fp64, { "glUniform1d", "glUniform2d", "glUniform3d", "glUniform4d", "glUniform1dv", "glUniform2dv", "glUniform3dv", "glUniform4dv", "glUniformMatrix2dv", "glUniformMatrix3dv", "glUniformMatrix4dv", "glUniformMatrix2x3dv", "glUniformMatrix2x4dv", "glUniformMatrix3x2dv", "glUniformMatrix3x4dv", "glUniformMatrix4x2dv", "glUniformMatrix4x3dv", "glGetUniformdv" } },
    { GLextension::GL_ARB_gpu_shader_int64, { "glUniform1i64ARB", "glUniform2i64ARB", "glUniform3i64ARB", "glUniform4i64ARB", "glUniform1i64vARB", "glUniform2i64vARB", "glUniform3i64vARB", "glUniform4i64vARB", "glUniform1ui64ARB", "glUniform2ui64ARB", "glUniform3ui64ARB", "glUniform4ui64ARB", "glUniform1ui64vARB", "glUniform2ui64vARB", "glUniform3ui64vARB", "glUniform4ui64vARB", "glGetUniformi64vARB", "glGetUniformui64vARB", "glGetnUniformi64vARB", "glGetnUniformui64vARB", "glProgramUniform1i64ARB", "glProgramUniform2i64ARB", "glProgramUniform3i64ARB", "glProgramUniform4i64ARB", "glProgramUniform1i64vARB", "glProgramUniform2i64vARB", "glProgramUniform3i64vARB", "glProgramUniform4i64vARB", "glProgramUniform1ui64ARB", "glProgramUniform2ui64ARB", "glProgramUniform3ui64ARB", "glProgramUniform4ui64ARB", "glProgramUniform1ui64vARB", "glProgramUniform2ui64vARB", "glProgramUniform3ui64vARB", "glProgramUniform4ui64vARB" } },
    { GLextension::GL_ARB_imaging, { "glBlendColor", "glBlendEquation", "glColorTable", "glColorTableParameterfv", "glColorTableParameteriv", "glCopyColorTable", "glGetColorTable", "glGetColorTableParameterfv", "glGetColorTableParameteriv", "glColorSubTable", "glCopyColorSubTable", "glConvolutionFilter1D", "glConvolutionFilter2D", "glConvolutionParameterf", "glConvolutionParameterfv", "glConvolutionParameteri", "glConvolutionParameteriv", "glCopyConvolutionFilter1D", "glCopyConvolutionFilter2D", "glGetConvolutionFilter", "glGetConvolutionParameterfv", "glGetConvolutionParameteriv", "glGetSeparableFilter", "glSeparableFilter2D", "glGetHistogram", "glGetHistogramParameterfv", "glGetHistogramParameteriv", "glGetMinmax", "glGetMinmaxParameterfv", "glGetMinmaxParameteriv", "glHistogram", "glMinmax", "glResetHistogram", "glResetMinmax" } },
    { GLextension::GL_ARB_indirect_parameters, { "glMultiDrawArraysIndirectCountARB", "glMultiDrawElementsIndirectCountARB" } },
    { GLextension::GL_ARB_instanced_arrays, { "glVertexAttribDivisorARB" } },
    { GLextension::GL_ARB_internalformat_query, { "glGetInternalformativ" } },
    { GLextension::GL_ARB_internalformat_query2, { "glGetInternalformati64v" } },
    { GLextension::GL_ARB_invalidate_subdata, { "glInvalidateTexSubImage", "glInvalidateTexImage", "glInvalidateBufferSubData", "glInvalidateBufferData", "glInvalidateFramebuffer", "glInvalidateSubFramebuffer" } },
    { GLextension::GL_ARB_map_buffer_range, { "glMapBufferRange", "glFlushMappedBufferRange" } },
    { GLextension::GL_ARB_matrix_palette, { "glCurrentPaletteMatrixARB", "glMatrixIndexubvARB", "glMatrixIndexusvARB", "glMatrixIndexuivARB", "glMatrixIndexPointerARB" } },
    { GLextension::GL_ARB_multi_bind, { "glBindBuffersBase", "glBindBuffersRange", "glBindTextures", "glBindSamplers", "glBindImageTextures", "glBindVertexBuffers" } },
    { GLextension::GL_ARB_multi_draw_indirect, { "glMultiDrawArraysIndirect", "glMultiDrawElementsIndirect" } },
    { GLextension::GL_ARB_multisample, { "glSampleCoverageARB" } },
    { GLextension::GL_ARB_multitexture, { "glActiveTextureARB", "glClientActiveTextureARB", "glMultiTexCoord1dARB", "glMultiTexCoord1dvARB", "glMultiTexCoord1fARB", "glMultiTexCoord1fvARB", "glMultiTexCoord1iARB", "glMultiTexCoord1ivARB", "glMultiTexCoord1sARB", "glMultiTexCoord1svARB", "glMultiTexCoord2dARB", "glMultiTexCoord2dvARB", "glMultiTexCoord2fARB", "glMultiTexCoord2fvARB", "glMultiTexCoord2iARB", "glMultiTexCoord2ivARB", "glMultiTexCoord2sARB", "glMultiTexCoord2svARB", "glMultiTexCoord3dARB", "glMultiTexCoord3dvARB", "glMultiTexCoord3fARB", "glMultiTexCoord3fvARB", "glMultiTexCoord3iARB", "glMultiTexCoord3ivARB", "glMultiTexCoord3sARB", "glMultiTexCoord3svARB", "glMultiTexCoord4dARB", "glMultiTexCoord4dvARB", "glMultiTexCoord4fARB", "glMultiTexCoord4fvARB", "glMultiTexCoord4iARB", "glMultiTexCoord4ivARB", "glMultiTexCoord4sARB", "glMultiTexCoord4svARB" } },
    { GLextension::GL_ARB_occlusion_query, { "glGenQueriesARB", "glDeleteQueriesARB", "glIsQueryARB", "glBeginQueryARB", "glEndQueryARB", "glGetQueryivARB", "glGetQueryObjectivARB", "glGetQueryObjectuivARB" } },
    { GLextension::GL_ARB_parallel_shader_compile, { "glMaxShaderCompilerThreadsARB" } },
    { GLextension::GL_ARB_point_parameters, { "glPointParameterfARB", "glPointParameterfvARB" } },
    { GLextension::GL_ARB_program_interface_query, { "glGetProgramInterfaceiv", "glGetProgramResourceIndex", "glGetProgramResourceName", "glGetProgramResourceiv", "glGetProgramResourceLocation", "glGetProgramResourceLocationIndex" } },
    { GLextension::GL_ARB_provoking_vertex, { "glProvokingVertex" } },
    { GLextension::GL_ARB_robustness, { "glGetGraphicsResetStatusARB", "glGetnTexImageARB", "glReadnPixelsARB", "glGetnCompressedTexImageARB", "glGetnUniformfvARB", "glGetnUniformivARB", "glGetnUniformuivARB", "glGetnUniformdvARB", "glGetnMapdvARB", "glGetnMapfvARB", "glGetnMapivARB", "glGetnPixelMapfvARB", "glGetnPixelMapuivARB", "glGetnPixelMapusvARB", "glGetnPolygonStippleARB", "glGetnColorTableARB", "glGetnConvolutionFilterARB", "glGetnSeparableFilterARB", "glGetnHistogramARB", "glGetnMinmaxARB" } },
    { GLextension::GL_ARB_sample_locations, { "glFramebufferSampleLocationsfvARB", "glNamedFramebufferSampleLocationsfvARB", "glEvaluateDepthValuesARB" } },
    { GLextension::GL_ARB_sample_shading, { "glMinSampleShadingARB" } },
    { GLextension::GL_ARB_sampler_objects, { "glGenSamplers", "glDeleteSamplers", "glIsSampler", "glBindSampler", "glSamplerParameteri", "glSamplerParameteriv", "glSamplerParameterf", "glSamplerParameterfv", "glSamplerParameterIiv", "glSamplerParameterIuiv", "glGetSamplerParameteriv", "glGetSamplerParameterIiv", "glGetSamplerParameterfv", "glGetSamplerParameterIuiv" } },
    { GLextension::GL_ARB_separate_shader_objects, { "glUseProgramStages", "glActiveShaderProgram", "glCreateShaderProgramv", "glBindProgramPipeline", "glDeleteProgramPipelines", "glGenProgramPipelines", "glIsProgramPipeline", "glGetProgramPipelineiv", "glProgramUniform1i", "glProgramUniform1iv", "glProgramUniform1f", "glProgramUniform1fv", "glProgramUniform1d", "glProgramUniform1dv", "glProgramUniform1ui", "glProgramUniform1uiv", "glProgramUniform2i", "glProgramUniform2iv", "glProgramUniform2f", "glProgramUniform2fv", "glProgramUniform2d", "glProgramUniform2dv", "glProgramUniform2ui", "glProgramUniform2uiv", "glProgramUniform3i", "glProgramUniform3iv", "glProgramUniform3f", "glProgramUniform3fv", "glProgramUniform3d", "glProgramUniform3dv", "glProgramUniform3ui", "glProgramUniform3uiv", "glProgramUniform4i", "glProgramUniform4iv", "glProgramUniform4f", "glProgramUniform4fv", "glProgramUniform4d", "glProgramUniform4dv", "glProgramUniform4ui", "glProgramUniform4uiv", "glProgramUniformMatrix2fv", "glProgramUniformMatrix3fv", "glProgramUniformMatrix4fv", "glProgramUniformMatrix2dv", "glProgramUniformMatrix3dv", "glProgramUniformMatrix4dv", "glProgramUniformMatrix2x3fv", "glProgramUniformMatrix3x2fv", "glProgramUniformMatrix2x4fv", "glProgramUniformMatrix4x2fv", "glProgramUniformMatrix3x4fv", "glProgramUniformMatrix4x3fv", "glProgramUniformMatrix2x3dv", "glProgramUniformMatrix3x2dv", "glProgramUniformMatrix2x4dv", "glProgramUniformMatrix4x2dv", "glProgramUniformMatrix3x4dv", "glProgramUniformMatrix4x3dv", "glValidateProgramPipeline", "glGetProgramPipelineInfoLog" } },
    { GLextension::GL_ARB_shader_atomic_counters, { "glGetActiveAtomicCounterBufferiv" } },
    { GLextension::GL_ARB_shader_image_load_store, { "glBindImageTexture", "glMemoryBarrier" } },
    { GLextension::GL_ARB_shader_objects, { "glDeleteObjectARB", "glGetHandleARB", "glDetachObjectARB", "glCreateShaderObjectARB", "glShaderSourceARB", "glCompileShaderARB", "glCreateProgramObjectARB", "glAttachObjectARB", "glLinkProgramARB", "glUseProgramObjectARB", "glValidateProgramARB", "glUniform1fARB", "glUniform2fARB", "glUniform3fARB", "glUniform4fARB", "glUniform1iARB", "glUniform2iARB", "glUniform3iARB", "glUniform4iARB", "glUniform1fvARB", "glUniform2fvARB", "glUniform3fvARB", "glUniform4fvARB", "glUniform1ivARB", "glUniform2ivARB", "glUniform3ivARB", "glUniform4ivARB", "glUniformMatrix2fvARB", "glUniformMatrix3fvARB", "glUniformMatrix4fvARB", "glGetObjectParameterfvARB", "glGetObjectParameterivARB", "glGetInfoLogARB", "glGetAttachedObjectsARB", "glGetUniformLocationARB", "glGetActiveUniformARB", "glGetUniformfvARB", "glGetUniformivARB", "glGetShaderSourceARB" } },
    { GLextension::GL_ARB_shader_storage_buffer_object, { "glShaderStorageBlockBinding" } },
    { GLextension::GL_ARB_shader_subroutine, { "glGetSubroutineUniformLocation", "glGetSubroutineIndex", "glGetActiveSubroutineUniformiv", "glGetActiveSubroutineUniformName", "glGetActiveSubroutineName", "glUniformSubroutinesuiv", "glGetUniformSubroutineuiv", "glGetProgramStageiv" } },
    { GLextension::GL_ARB_shading_language_include, { "glNamedStringARB", "glDeleteNamedStringARB", "glCompileShaderIncludeARB", "glIsNamedStringARB", "glGetNamedStringARB", "glGetNamedStringivARB" } },
    { GLextension::GL_ARB_sparse_buffer, { "glBufferPageCommitmentARB", "glNamedBufferPageCommitmentEXT", "glNamedBufferPageCommitmentARB" } },
    { GLextension::GL_ARB_sparse_texture, { "glTexPageCommitmentARB" } },
    { GLextension::GL_ARB_sync, { "glFenceSync", "glIsSync", "glDeleteSync", "glClientWaitSync", "glWaitSync", "glGetInteger64v", "glGetSynciv" } },
    { GLextension::GL_ARB_tessellation_shader, { "glPatchParameteri", "glPatchParameterfv" } },
    { GLextension::GL_ARB_texture_barrier, { "glTextureBarrier" } },
    { GLextension::GL_ARB_texture_buffer_object, { "glTexBufferARB" } },
    { GLextension::GL_ARB_texture_buffer_range, { "glTexBufferRange" } },
    { GLextension::GL_ARB_texture_compression, { "glCompressedTexImage3DARB", "glCompressedTexImage2DARB", "glCompressedTexImage1DARB", "glCompressedTexSubImage3DARB", "glCompressedTexSubImage2DARB", "glCompressedTexSubImage1DARB", "glGetCompressedTexImageARB" } },
    { GLextension::GL_ARB_texture_multisample, { "glTexImage2DMultisample", "glTexImage3DMultisample", "glGetMultisamplefv", "glSampleMaski" } },
    { GLextension::GL_ARB_texture_storage, { "glTexStorage1D", "glTexStorage2D", "glTexStorage3D" } },
    { GLextension::GL_ARB_texture_storage_multisample, { "glTexStorage2DMultisample", "glTexStorage3DMultisample" } },
    { GLextension::GL_ARB_texture_view, { "glTextureView" } },
    { GLextension::GL_ARB_timer_query, { "glQueryCounter", "glGetQueryObjecti64v", "glGetQueryObjectui64v" } },
    { GLextension::GL_ARB_transform_feedback2, { "glBindTransformFeedback", "glDeleteTransformFeedbacks", "glGenTransformFeedbacks", "glIsTransformFeedback", "glPauseTransformFeedback", "glResumeTransformFeedback", "glDrawTransformFeedback" } },
    { GLextension::GL_ARB_transform_feedback3, { "glDrawTransformFeedbackStream", "glBeginQueryIndexed", "glEndQueryIndexed", "glGetQueryIndexediv" } },
    { GLextension::GL_ARB_transform_feedback_instanced, { "glDrawTransformFeedbackInstanced", "glDrawTransformFeedbackStreamInstanced" } },
    { GLextension::GL_ARB_transpose_matrix, { "glLoadTransposeMatrixfARB", "glLoadTransposeMatrixdARB", "glMultTransposeMatrixfARB", "glMultTransposeMatrixdARB" } },
    { GLextension::GL_ARB_uniform_buffer_object, { "glGetUniformIndices", "glGetActiveUniformsiv", "glGetActiveUniformName", "glGetUniformBlockIndex", "glGetActiveUniformBlockiv", "glGetActiveUniformBlockName", "glUniformBlockBinding", "glBindBufferRange", "glBindBufferBase", "glGetIntegeri_v" } },
    { GLextension::GL_ARB_vertex_array_object, { "glBindVertexArray", "glDeleteVertexArrays", "glGenVertexArrays", "glIsVertexArray" } },
    { GLextension::GL_ARB_vertex_attrib_64bit, { "glVertexAttribL1d", "glVertexAttribL2d", "glVertexAttribL3d", "glVertexAttribL4d", "glVertexAttribL1dv", "glVertexAttribL2dv", "glVertexAttribL3dv", "glVertexAttribL4dv", "glVertexAttribLPointer", "glGetVertexAttribLdv" } },
    { GLextension::GL_ARB_vertex_attrib_binding, { "glBindVertexBuffer", "glVertexAttribFormat", "glVertexAttribIFormat", "glVertexAttribLFormat", "glVertexAttribBinding", "glVertexBindingDivisor" } },
    { GLextension::GL_ARB_vertex_blend, { "glWeightbvARB", "glWeightsvARB", "glWeightivARB", "glWeightfvARB", "glWeightdvARB", "glWeightubvARB", "glWeightusvARB", "glWeightuivARB", "glWeightPointerARB", "glVertexBlendARB" } },
    { GLextension::GL_ARB_vertex_buffer_object, { "glBindBufferARB", "glDeleteBuffersARB", "glGenBuffersARB", "glIsBufferARB", "glBufferDataARB", "glBufferSubDataARB", "glGetBufferSubDataARB", "glMapBufferARB", "glUnmapBufferARB", "glGetBufferParameterivARB", "glGetBufferPointervARB" } },
    { GLextension::GL_ARB_vertex_program, { "glVertexAttrib1dARB", "glVertexAttrib1dvARB", "glVertexAttrib1fARB", "glVertexAttrib1fvARB", "glVertexAttrib1sARB", "glVertexAttrib1svARB", "glVertexAttrib2dARB", "glVertexAttrib2dvARB", "glVertexAttrib2fARB", "glVertexAttrib2fvARB", "glVertexAttrib2sARB", "glVertexAttrib2svARB", "glVertexAttrib3dARB", "glVertexAttrib3dvARB", "glVertexAttrib3fARB", "glVertexAttrib3fvARB", "glVertexAttrib3sARB", "glVertexAttrib3svARB", "glVertexAttrib4NbvARB", "glVertexAttrib4NivARB", "glVertexAttrib4NsvARB", "glVertexAttrib4NubARB", "glVertexAttrib4NubvARB", "glVertexAttrib4NuivARB", "glVertexAttrib4NusvARB", "glVertexAttrib4bvARB", "glVertexAttrib4dARB", "glVertexAttrib4dvARB", "glVertexAttrib4fARB", "glVertexAttrib4fvARB", "glVertexAttrib4ivARB", "glVertexAttrib4sARB", "glVertexAttrib4svARB", "glVertexAttrib4ubvARB", "glVertexAttrib4uivARB", "glVertexAttrib4usvARB", "glVertexAttribPointerARB", "glEnableVertexAttribArrayARB", "glDisableVertexAttribArrayARB", "glProgramStringARB", "glBindProgramARB", "glDeleteProgramsARB", "glGenProgramsARB", "glProgramEnvParameter4dARB", "glProgramEnvParameter4dvARB", "glProgramEnvParameter4fARB", "glProgramEnvParameter4fvARB", "glProgramLocalParameter4dARB", "glProgramLocalParameter4dvARB", "glProgramLocalParameter4fARB", "glProgramLocalParameter4fvARB", "glGetProgramEnvParameterdvARB", "glGetProgramEnvParameterfvARB", "glGetProgramLocalParameterdvARB", "glGetProgramLocalParameterfvARB", "glGetProgramivARB", "glGetProgramStringARB", "glGetVertexAttribdvARB", "glGetVertexAttribfvARB", "glGetVertexAttribivARB", "glGetVertexAttribPointervARB", "glIsProgramARB" } },
    { GLextension::GL_ARB_vertex_shader, { "glVertexAttrib1fARB", "glVertexAttrib1sARB", "glVertexAttrib1dARB", "glVertexAttrib2fARB", "glVertexAttrib2sARB", "glVertexAttrib2dARB", "glVertexAttrib3fARB", "glVertexAttrib3sARB", "glVertexAttrib3dARB", "glVertexAttrib4fARB", "glVertexAttrib4sARB", "glVertexAttrib4dARB", "glVertexAttrib4NubARB", "glVertexAttrib1fvARB", "glVertexAttrib1svARB", "glVertexAttrib1dvARB", "glVertexAttrib2fvARB", "glVertexAttrib2svARB", "glVertexAttrib2dvARB", "glVertexAttrib3fvARB", "glVertexAttrib3svARB", "glVertexAttrib3dvARB", "glVertexAttrib4fvARB", "glVertexAttrib4svARB", "glVertexAttrib4dvARB", "glVertexAttrib4ivARB", "glVertexAttrib4bvARB", "glVertexAttrib4ubvARB", "glVertexAttrib4usvARB", "glVertexAttrib4uivARB", "glVertexAttrib4NbvARB", "glVertexAttrib4NsvARB", "glVertexAttrib4NivARB", "glVertexAttrib4NubvARB", "glVertexAttrib4NusvARB", "glVertexAttrib4NuivARB", "glVertexAttribPointerARB", "glEnableVertexAttribArrayARB", "glDisableVertexAttribArrayARB", "glBindAttribLocationARB", "glGetActiveAttribARB", "glGetAttribLocationARB", "glGetVertexAttribdvARB", "glGetVertexAttribfvARB", "glGetVertexAttribivARB", "glGetVertexAttribPointervARB" } },
    { GLextension::GL_ARB_vertex_type_2_10_10_10_rev, { "glVertexAttribP1ui", "glVertexAttribP1uiv", "glVertexAttribP2ui", "glVertexAttribP2uiv", "glVertexAttribP3ui", "glVertexAttribP3uiv", "glVertexAttribP4ui", "glVertexAttribP4uiv", "glVertexP2ui", "glVertexP2uiv", "glVertexP3ui", "glVertexP3uiv", "glVertexP4ui", "glVertexP4uiv", "glTexCoordP1ui", "glTexCoordP1uiv", "glTexCoordP2ui", "glTexCoordP2uiv", "glTexCoordP3ui", "glTexCoordP3uiv", "glTexCoordP4ui", "glTexCoordP4uiv", "glMultiTexCoordP1ui", "glMultiTexCoordP1uiv", "glMultiTexCoordP2ui", "glMultiTexCoordP2uiv", "glMultiTexCoordP3ui", "glMultiTexCoordP3uiv", "glMultiTexCoordP4ui", "glMultiTexCoordP4uiv", "glNormalP3ui", "glNormalP3uiv", "glColorP3ui", "glColorP3uiv", "glColorP4ui", "glColorP4uiv", "glSecondaryColorP3ui", "glSecondaryColorP3uiv" } },
    { GLextension::GL_ARB_viewport_array, { "glViewportArrayv", "glViewportIndexedf", "glViewportIndexedfv", "glScissorArrayv", "glScissorIndexed", "glScissorIndexedv", "glDepthRangeArrayv", "glDepthRangeIndexed", "glGetFloati_v", "glGetDoublei_v" } },
    { GLextension::GL_ARB_window_pos, { "glWindowPos2dARB", "glWindowPos2dvARB", "glWindowPos2fARB", "glWindowPos2fvARB", "glWindowPos2iARB", "glWindowPos2ivARB", "glWindowPos2sARB", "glWindowPos2svARB", "glWindowPos3dARB", "glWindowPos3dvARB", "glWindowPos3fARB", "glWindowPos3fvARB", "glWindowPos3iARB", "glWindowPos3ivARB", "glWindowPos3sARB", "glWindowPos3svARB" } },
    { GLextension::GL_ATI_draw_buffers, { "glDrawBuffersATI" } },
    { GLextension::GL_ATI_element_array, { "glElementPointerATI", "glDrawElementArrayATI", "glDrawRangeElementArrayATI" } },
    { GLextension::GL_ATI_envmap_bumpmap, { "glTexBumpParameterivATI", "glTexBumpParameterfvATI", "glGetTexBumpParameterivATI", "glGetTexBumpParameterfvATI" } },
    { GLextension::GL_ATI_fragment_shader, { "glGenFragmentShadersATI", "glBindFragmentShaderATI", "glDeleteFragmentShaderATI", "glBeginFragmentShaderATI", "glEndFragmentShaderATI", "glPassTexCoordATI", "glSampleMapATI", "glColorFragmentOp1ATI", "glColorFragmentOp2ATI", "glColorFragmentOp3ATI", "glAlphaFragmentOp1ATI", "glAlphaFragmentOp2ATI", "glAlphaFragmentOp3ATI", "glSetFragmentShaderConstantATI" } },
    { GLextension::GL_ATI_map_object_buffer, { "glMapObjectBufferATI", "glUnmapObjectBufferATI" } },
    { GLextension::GL_ATI_pn_triangles, { "glPNTrianglesiATI", "glPNTrianglesfATI" } },
    { GLextension::GL_ATI_separate_stencil, { "glStencilOpSeparateATI", "glStencilFuncSeparateATI" } },
    { GLextension::GL_ATI_vertex_array_object, { "glNewObjectBufferATI", "glIsObjectBufferATI", "glUpdateObjectBufferATI", "glGetObjectBufferfvATI", "glGetObjectBufferivATI", "glFreeObjectBufferATI", "glArrayObjectATI", "glGetArrayObjectfvATI", "glGetArrayObjectivATI", "glVariantArrayObjectATI", "glGetVariantArrayObjectfvATI", "glGetVariantArrayObjectivATI" } },
    { GLextension::GL_ATI_vertex_attrib_array_object, { "glVertexAttribArrayObjectATI", "glGetVertexAttribArrayObjectfvATI", "glGetVertexAttribArrayObjectivATI" } },
    { GLextension::GL_ATI_vertex_streams, { "glVertexStream1sATI", "glVertexStream1svATI", "glVertexStream1iATI", "glVertexStream1ivATI", "glVertexStream1fATI", "glVertexStream1fvATI", "glVertexStream1dATI", "glVertexStream1dvATI", "glVertexStream2sATI", "glVertexStream2svATI", "glVertexStream2iATI", "glVertexStream2ivATI", "glVertexStream2fATI", "glVertexStream2fvATI", "glVertexStream2dATI", "glVertexStream2dvATI", "glVertexStream3sATI", "glVertexStream3svATI", "glVertexStream3iATI", "glVertexStream3ivATI", "glVertexStream3fATI", "glVertexStream3fvATI", "glVertexStream3dATI", "glVertexStream3dvATI", "glVertexStream4sATI", "glVertexStream4svATI", "glVertexStream4iATI", "glVertexStream4ivATI", "glVertexStream4fATI", "glVertexStream4fvATI", "glVertexStream4dATI", "glVertexStream4dvATI", "glNormalStream3bATI", "glNormalStream3bvATI", "glNormalStream3sATI", "glNormalStream3svATI", "glNormalStream3iATI", "glNormalStream3ivATI", "glNormalStream3fATI", "glNormalStream3fvATI", "glNormalStream3dATI", "glNormalStream3dvATI", "glClientActiveVertexStreamATI", "glVertexBlendEnviATI", "glVertexBlendEnvfATI" } },
    { GLextension::GL_EXT_bindable_uniform, { "glUniformBufferEXT", "glGetUniformBufferSizeEXT", "glGetUniformOffsetEXT" } },
    { GLextension::GL_EXT_blend_color, { "glBlendColorEXT" } },
    { GLextension::GL_EXT_blend_equation_separate, { "glBlendEquationSeparateEXT" } },
    { GLextension::GL_EXT_blend_func_separate, { "glBlendFuncSeparateEXT" } },
    { GLextension::GL_EXT_blend_minmax, { "glBlendEquationEXT" } },
    { GLextension::GL_EXT_color_subtable, { "glColorSubTableEXT", "glCopyColorSubTableEXT" } },
    { GLextension::GL_EXT_compiled_vertex_array, { "glLockArraysEXT", "glUnlockArraysEXT" } },
    { GLextension::GL_EXT_convolution, { "glConvolutionFilter1DEXT", "glConvolutionFilter2DEXT", "glConvolutionParameterfEXT", "glConvolutionParameterfvEXT", "glConvolutionParameteriEXT", "glConvolutionParameterivEXT", "glCopyConvolutionFilter1DEXT", "glCopyConvolutionFilter2DEXT", "glGetConvolutionFilterEXT", "glGetConvolutionParameterfvEXT", "glGetConvolutionParameterivEXT", "glGetSeparableFilterEXT", "glSeparableFilter2DEXT" } },
    { GLextension::GL_EXT_coordinate_frame, { "glTangent3bEXT", "glTangent3bvEXT", "glTangent3dEXT", "glTangent3dvEXT", "glTangent3fEXT", "glTangent3fvEXT", "glTangent3iEXT", "glTangent3ivEXT", "glTangent3sEXT", "glTangent3svEXT", "glBinormal3bEXT", "glBinormal3bvEXT", "glBinormal3dEXT", "glBinormal3dvEXT", "glBinormal3fEXT", "glBinormal3fvEXT", "glBinormal3iEXT", "glBinormal3ivEXT", "glBinormal3sEXT", "glBinormal3svEXT", "glTangentPointerEXT", "glBinormalPointerEXT" } },
    { GLextension::GL_EXT_copy_texture, { "glCopyTexImage1DEXT", "glCopyTexImage2DEXT", "glCopyTexSubImage1DEXT", "glCopyTexSubImage2DEXT", "glCopyTexSubImage3DEXT" } },
    { GLextension::GL_EXT_cull_vertex, { "glCullParameterdvEXT", "glCullParameterfvEXT" } },
    { GLextension::GL_EXT_debug_label, { "glLabelObjectEXT", "glGetObjectLabelEXT" } },
    { GLextension::GL_EXT_debug_marker, { "glInsertEventMarkerEXT", "glPushGroupMarkerEXT", "glPopGroupMarkerEXT" } },
    { GLextension::GL_EXT_depth_bounds_test, { "glDepthBoundsEXT" } },
    { GLextension::GL_EXT_direct_state_access, { "glMatrixLoadfEXT", "glMatrixLoaddEXT", "glMatrixMultfEXT", "glMatrixMultdEXT", "glMatrixLoadIdentityEXT", "glMatrixRotatefEXT", "glMatrixRotatedEXT", "glMatrixScalefEXT", "glMatrixScaledEXT", "glMatrixTranslatefEXT", "glMatrixTranslatedEXT", "glMatrixFrustumEXT", "glMatrixOrthoEXT", "glMatrixPopEXT", "glMatrixPushEXT", "glClientAttribDefaultEXT", "glPushClientAttribDefaultEXT", "glTextureParameterfEXT", "glTextureParameterfvEXT", "glTextureParameteriEXT", "glTextureParameterivEXT", "glTextureImage1DEXT", "glTextureImage2DEXT", "glTextureSubImage1DEXT", "glTextureSubImage2DEXT", "glCopyTextureImage1DEXT", "glCopyTextureImage2DEXT", "glCopyTextureSubImage1DEXT", "glCopyTextureSubImage2DEXT", "glGetTextureImageEXT", "glGetTextureParameterfvEXT", "glGetTextureParameterivEXT", "glGetTextureLevelParameterfvEXT", "glGetTextureLevelParameterivEXT", "glTextureImage3DEXT", "glTextureSubImage3DEXT", "glCopyTextureSubImage3DEXT", "glBindMultiTextureEXT", "glMultiTexCoordPointerEXT", "glMultiTexEnvfEXT", "glMultiTexEnvfvEXT", "glMultiTexEnviEXT", "glMultiTexEnvivEXT", "glMultiTexGendEXT", "glMultiTexGendvEXT", "glMultiTexGenfEXT", "glMultiTexGenfvEXT", "glMultiTexGeniEXT", "glMultiTexGenivEXT", "glGetMultiTexEnvfvEXT", "glGetMultiTexEnvivEXT", "glGetMultiTexGendvEXT", "glGetMultiTexGenfvEXT", "glGetMultiTexGenivEXT", "glMultiTexParameteriEXT", "glMultiTexParameterivEXT", "glMultiTexParameterfEXT", "glMultiTexParameterfvEXT", "glMultiTexImage1DEXT", "glMultiTexImage2DEXT", "glMultiTexSubImage1DEXT", "glMultiTexSubImage2DEXT", "glCopyMultiTexImage1DEXT", "glCopyMultiTexImage2DEXT", "glCopyMultiTexSubImage1DEXT", "glCopyMultiTexSubImage2DEXT", "glGetMultiTexImageEXT", "glGetMultiTexParameterfvEXT", "glGetMultiTexParameterivEXT", "glGetMultiTexLevelParameterfvEXT", "glGetMultiTexLevelParameterivEXT", "glMultiTexImage3DEXT", "glMultiTexSubImage3DEXT", "glCopyMultiTexSubImage3DEXT", "glEnableClientStateIndexedEXT", "glDisableClientStateIndexedEXT", "glGetFloatIndexedvEXT", "glGetDoubleIndexedvEXT", "glGetPointerIndexedvEXT", "glEnableIndexedEXT", "glDisableIndexedEXT", "glIsEnabledIndexedEXT", "glGetIntegerIndexedvEXT", "glGetBooleanIndexedvEXT", "glCompressedTextureImage3DEXT", "glCompressedTextureImage2DEXT", "glCompressedTextureImage1DEXT", "glCompressedTextureSubImage3DEXT", "glCompressedTextureSubImage2DEXT", "glCompressedTextureSubImage1DEXT", "glGetCompressedTextureImageEXT", "glCompressedMultiTexImage3DEXT", "glCompressedMultiTexImage2DEXT", "glCompressedMultiTexImage1DEXT", "glCompressedMultiTexSubImage3DEXT", "glCompressedMultiTexSubImage2DEXT", "glCompressedMultiTexSubImage1DEXT", "glGetCompressedMultiTexImageEXT", "glMatrixLoadTransposefEXT", "glMatrixLoadTransposedEXT", "glMatrixMultTransposefEXT", "glMatrixMultTransposedEXT", "glNamedBufferDataEXT", "glNamedBufferSubDataEXT", "glMapNamedBufferEXT", "glUnmapNamedBufferEXT", "glGetNamedBufferParameterivEXT", "glGetNamedBufferPointervEXT", "glGetNamedBufferSubDataEXT", "glProgramUniform1fEXT", "glProgramUniform2fEXT", "glProgramUniform3fEXT", "glProgramUniform4fEXT", "glProgramUniform1iEXT", "glProgramUniform2iEXT", "glProgramUniform3iEXT", "glProgramUniform4iEXT", "glProgramUniform1fvEXT", "glProgramUniform2fvEXT", "glProgramUniform3fvEXT", "glProgramUniform4fvEXT", "glProgramUniform1ivEXT", "glProgramUniform2ivEXT", "glProgramUniform3ivEXT", "glProgramUniform4ivEXT", "glProgramUniformMatrix2fvEXT", "glProgramUniformMatrix3fvEXT", "glProgramUniformMatrix4fvEXT", "glProgramUniformMatrix2x3fvEXT", "glProgramUniformMatrix3x2fvEXT", "glProgramUniformMatrix2x4fvEXT", "glProgramUniformMatrix4x2fvEXT", "glProgramUniformMatrix3x4fvEXT", "glProgramUniformMatrix4x3fvEXT", "glTextureBufferEXT", "glMultiTexBufferEXT", "glTextureParameterIivEXT", "glTextureParameterIuivEXT", "glGetTextureParameterIivEXT", "glGetTextureParameterIuivEXT", "glMultiTexParameterIivEXT", "glMultiTexParameterIuivEXT", "glGetMultiTexParameterIivEXT", "glGetMultiTexParameterIuivEXT", "glProgramUniform1uiEXT", "glProgramUniform2uiEXT", "glProgramUniform3uiEXT", "glProgramUniform4uiEXT", "glProgramUniform1uivEXT", "glProgramUniform2uivEXT", "glProgramUniform3uivEXT", "glProgramUniform4uivEXT", "glNamedProgramLocalParameters4fvEXT", "glNamedProgramLocalParameterI4iEXT", "glNamedProgramLocalParameterI4ivEXT", "glNamedProgramLocalParametersI4ivEXT", "glNamedProgramLocalParameterI4uiEXT", "glNamedProgramLocalParameterI4uivEXT", "glNamedProgramLocalParametersI4uivEXT", "glGetNamedProgramLocalParameterIivEXT", "glGetNamedProgramLocalParameterIuivEXT", "glEnableClientStateiEXT", "glDisableClientStateiEXT", "glGetFloati_vEXT", "glGetDoublei_vEXT", "glGetPointeri_vEXT", "glNamedProgramStringEXT", "glNamedProgramLocalParameter4dEXT", "glNamedProgramLocalParameter4dvEXT", "glNamedProgramLocalParameter4fEXT", "glNamedProgramLocalParameter4fvEXT", "glGetNamedProgramLocalParameterdvEXT", "glGetNamedProgramLocalParameterfvEXT", "glGetNamedProgramivEXT", "glGetNamedProgramStringEXT", "glNamedRenderbufferStorageEXT", "glGetNamedRenderbufferParameterivEXT", "glNamedRenderbufferStorageMultisampleEXT", "glNamedRenderbufferStorageMultisampleCoverageEXT", "glCheckNamedFramebufferStatusEXT", "glNamedFramebufferTexture1DEXT", "glNamedFramebufferTexture2DEXT", "glNamedFramebufferTexture3DEXT", "glNamedFramebufferRenderbufferEXT", "glGetNamedFramebufferAttachmentParameterivEXT", "glGenerateTextureMipmapEXT", "glGenerateMultiTexMipmapEXT", "glFramebufferDrawBufferEXT", "glFramebufferDrawBuffersEXT", "glFramebufferReadBufferEXT", "glGetFramebufferParameterivEXT", "glNamedCopyBufferSubDataEXT", "glNamedFramebufferTextureEXT", "glNamedFramebufferTextureLayerEXT", "glNamedFramebufferTextureFaceEXT", "glTextureRenderbufferEXT", "glMultiTexRenderbufferEXT", "glVertexArrayVertexOffsetEXT", "glVertexArrayColorOffsetEXT", "glVertexArrayEdgeFlagOffsetEXT", "glVertexArrayIndexOffsetEXT", "glVertexArrayNormalOffsetEXT", "glVertexArrayTexCoordOffsetEXT", "glVertexArrayMultiTexCoordOffsetEXT", "glVertexArrayFogCoordOffsetEXT", "glVertexArraySecondaryColorOffsetEXT", "glVertexArrayVertexAttribOffsetEXT", "glVertexArrayVertexAttribIOffsetEXT", "glEnableVertexArrayEXT", "glDisableVertexArrayEXT", "glEnableVertexArrayAttribEXT", "glDisableVertexArrayAttribEXT", "glGetVertexArrayIntegervEXT", "glGetVertexArrayPointervEXT", "glGetVertexArrayIntegeri_vEXT", "glGetVertexArrayPointeri_vEXT", "glMapNamedBufferRangeEXT", "glFlushMappedNamedBufferRangeEXT", "glNamedBufferStorageEXT", "glClearNamedBufferDataEXT", "glClearNamedBufferSubDataEXT", "glNamedFramebufferParameteriEXT", "glGetNamedFramebufferParameterivEXT", "glProgramUniform1dEXT", "glProgramUniform2dEXT", "glProgramUniform3dEXT", "glProgramUniform4dEXT", "glProgramUniform1dvEXT", "glProgramUniform2dvEXT", "glProgramUniform3dvEXT", "glProgramUniform4dvEXT", "glProgramUniformMatrix2dvEXT", "glProgramUniformMatrix3dvEXT", "glProgramUniformMatrix4dvEXT", "glProgramUniformMatrix2x3dvEXT", "glProgramUniformMatrix2x4dvEXT", "glProgramUniformMatrix3x2dvEXT", "glProgramUniformMatrix3x4dvEXT", "glProgramUniformMatrix4x2dvEXT", "glProgramUniformMatrix4x3dvEXT", "glTextureBufferRangeEXT", "glTextureStorage1DEXT", "glTextureStorage2DEXT", "glTextureStorage3DEXT", "glTextureStorage2DMultisampleEXT", "glTextureStorage3DMultisampleEXT", "glVertexArrayBindVertexBufferEXT", "glVertexArrayVertexAttribFormatEXT", "glVertexArrayVertexAttribIFormatEXT", "glVertexArrayVertexAttribLFormatEXT", "glVertexArrayVertexAttribBindingEXT", "glVertexArrayVertexBindingDivisorEXT", "glVertexArrayVertexAttribLOffsetEXT", "glTexturePageCommitmentEXT", "glVertexArrayVertexAttribDivisorEXT" } },
    { GLextension::GL_EXT_draw_buffers2, { "glColorMaskIndexedEXT", "glGetBooleanIndexedvEXT", "glGetIntegerIndexedvEXT", "glEnableIndexedEXT", "glDisableIndexedEXT", "glIsEnabledIndexedEXT" } },
    { GLextension::GL_EXT_draw_instanced, { "glDrawArraysInstancedEXT", "glDrawElementsInstancedEXT" } },
    { GLextension::GL_EXT_draw_range_elements, { "glDrawRangeElementsEXT" } },
    { GLextension::GL_EXT_fog_coord, { "glFogCoordfEXT", "glFogCoordfvEXT", "glFogCoorddEXT", "glFogCoorddvEXT", "glFogCoordPointerEXT" } },
    { GLextension::GL_EXT_framebuffer_blit, { "glBlitFramebufferEXT" } },
    { GLextension::GL_EXT_framebuffer_multisample, { "glRenderbufferStorageMultisampleEXT" } },
    { GLextension::GL_EXT_framebuffer_object, { "glIsRenderbufferEXT", "glBindRenderbufferEXT", "glDeleteRenderbuffersEXT", "glGenRenderbuffersEXT", "glRenderbufferStorageEXT", "glGetRenderbufferParameterivEXT", "glIsFramebufferEXT", "glBindFramebufferEXT", "glDeleteFramebuffersEXT", "glGenFramebuffersEXT", "glCheckFramebufferStatusEXT", "glFramebufferTexture1DEXT", "glFramebufferTexture2DEXT", "glFramebufferTexture3DEXT", "glFramebufferRenderbufferEXT", "glGetFramebufferAttachmentParameterivEXT", "glGenerateMipmapEXT" } },
    { GLextension::GL_EXT_geometry_shader4, { "glProgramParameteriEXT" } },
    { GLextension::GL_EXT_gpu_program_parameters, { "glProgramEnvParameters4fvEXT", "glProgramLocalParameters4fvEXT" } },
    { GLextension::GL_EXT_gpu_shader4, { "glGetUniformuivEXT", "glBindFragDataLocationEXT", "glGetFragDataLocationEXT", "glUniform1uiEXT", "glUniform2uiEXT", "glUniform3uiEXT", "glUniform4uiEXT", "glUniform1uivEXT", "glUniform2uivEXT", "glUniform3uivEXT", "glUniform4uivEXT" } },
    { GLextension::GL_EXT_histogram, { "glGetHistogramEXT", "glGetHistogramParameterfvEXT", "glGetHistogramParameterivEXT", "glGetMinmaxEXT", "glGetMinmaxParameterfvEXT", "glGetMinmaxParameterivEXT", "glHistogramEXT", "glMinmaxEXT", "glResetHistogramEXT", "glResetMinmaxEXT" } },
    { GLextension::GL_EXT_index_func, { "glIndexFuncEXT" } },
    { GLextension::GL_EXT_index_material, { "glIndexMaterialEXT" } },
    { GLextension::GL_EXT_light_texture, { "glApplyTextureEXT", "glTextureLightEXT", "glTextureMaterialEXT" } },
    { GLextension::GL_EXT_multi_draw_arrays, { "glMultiDrawArraysEXT", "glMultiDrawElementsEXT" } },
    { GLextension::GL_EXT_multisample, { "glSampleMaskEXT", "glSamplePatternEXT" } },
    { GLextension::GL_EXT_paletted_texture, { "glColorTableEXT", "glGetColorTableEXT", "glGetColorTableParameterivEXT", "glGetColorTableParameterfvEXT" } },
    { GLextension::GL_EXT_pixel_transform, { "glPixelTransformParameteriEXT", "glPixelTransformParameterfEXT", "glPixelTransformParameterivEXT", "glPixelTransformParameterfvEXT", "glGetPixelTransformParameterivEXT", "glGetPixelTransformParameterfvEXT" } },
    { GLextension::GL_EXT_point_parameters, { "glPointParameterfEXT", "glPointParameterfvEXT" } },
    { GLextension::GL_EXT_polygon_offset, { "glPolygonOffsetEXT" } },
    { GLextension::GL_EXT_polygon_offset_clamp, { "glPolygonOffsetClampEXT" } },
    { GLextension::GL_EXT_provoking_vertex, { "glProvokingVertexEXT" } },
    { GLextension::GL_EXT_raster_multisample, { "glRasterSamplesEXT" } },
    { GLextension::GL_EXT_secondary_color, { "glSecondaryColor3bEXT", "glSecondaryColor3bvEXT", "glSecondaryColor3dEXT", "glSecondaryColor3dvEXT", "glSecondaryColor3fEXT", "glSecondaryColor3fvEXT", "glSecondaryColor3iEXT", "glSecondaryColor3ivEXT", "glSecondaryColor3sEXT", "glSecondaryColor3svEXT", "glSecondaryColor3ubEXT", "glSecondaryColor3ubvEXT", "glSecondaryColor3uiEXT", "glSecondaryColor3uivEXT", "glSecondaryColor3usEXT", "glSecondaryColor3usvEXT", "glSecondaryColorPointerEXT" } },
    { GLextension::GL_EXT_separate_shader_objects, { "glUseShaderProgramEXT", "glActiveProgramEXT", "glCreateShaderProgramEXT" } },
    { GLextension::GL_EXT_shader_image_load_store, { "glBindImageTextureEXT", "glMemoryBarrierEXT" } },
    { GLextension::GL_EXT_stencil_clear_tag, { "glStencilClearTagEXT" } },
    { GLextension::GL_EXT_stencil_two_side, { "glActiveStencilFaceEXT" } },
    { GLextension::GL_EXT_subtexture, { "glTexSubImage1DEXT", "glTexSubImage2DEXT" } },
    { GLextension::GL_EXT_texture3D, { "glTexImage3DEXT", "glTexSubImage3DEXT" } },
    { GLextension::GL_EXT_texture_array, { "glFramebufferTextureLayerEXT" } },
    { GLextension::GL_EXT_texture_buffer_object, { "glTexBufferEXT" } },
    { GLextension::GL_EXT_texture_filter_minmax, { "glRasterSamplesEXT" } },
    { GLextension::GL_EXT_texture_integer, { "glTexParameterIivEXT", "glTexParameterIuivEXT", "glGetTexParameterIivEXT", "glGetTexParameterIuivEXT", "glClearColorIiEXT", "glClearColorIuiEXT" } },
    { GLextension::GL_EXT_texture_object, { "glAreTexturesResidentEXT", "glBindTextureEXT", "glDeleteTexturesEXT", "glGenTexturesEXT", "glIsTextureEXT", "glPrioritizeTexturesEXT" } },
    { GLextension::GL_EXT_texture_perturb_normal, { "glTextureNormalEXT" } },
    { GLextension::GL_EXT_timer_query, { "glGetQueryObjecti64vEXT", "glGetQueryObjectui64vEXT" } },
    { GLextension::GL_EXT_transform_feedback, { "glBeginTransformFeedbackEXT", "glEndTransformFeedbackEXT", "glBindBufferRangeEXT", "glBindBufferOffsetEXT", "glBindBufferBaseEXT", "glTransformFeedbackVaryingsEXT", "glGetTransformFeedbackVaryingEXT" } },
    { GLextension::GL_EXT_vertex_array, { "glArrayElementEXT", "glColorPointerEXT", "glDrawArraysEXT", "glEdgeFlagPointerEXT", "glGetPointervEXT", "glIndexPointerEXT", "glNormalPointerEXT", "glTexCoordPointerEXT", "glVertexPointerEXT" } },
    { GLextension::GL_EXT_vertex_attrib_64bit, { "glVertexAttribL1dEXT", "glVertexAttribL2dEXT", "glVertexAttribL3dEXT", "glVertexAttribL4dEXT", "glVertexAttribL1dvEXT", "glVertexAttribL2dvEXT", "glVertexAttribL3dvEXT", "glVertexAttribL4dvEXT", "glVertexAttribLPointerEXT", "glGetVertexAttribLdvEXT" } },
    { GLextension::GL_EXT_vertex_shader, { "glBeginVertexShaderEXT", "glEndVertexShaderEXT", "glBindVertexShaderEXT", "glGenVertexShadersEXT", "glDeleteVertexShaderEXT", "glShaderOp1EXT", "glShaderOp2EXT", "glShaderOp3EXT", "glSwizzleEXT", "glWriteMaskEXT", "glInsertComponentEXT", "glExtractComponentEXT", "glGenSymbolsEXT", "glSetInvariantEXT", "glSetLocalConstantEXT", "glVariantbvEXT", "glVariantsvEXT", "glVariantivEXT", "glVariantfvEXT", "glVariantdvEXT", "glVariantubvEXT", "glVariantusvEXT", "glVariantuivEXT", "glVariantPointerEXT", "glEnableVariantClientStateEXT", "glDisableVariantClientStateEXT", "glBindLightParameterEXT", "glBindMaterialParameterEXT", "glBindTexGenParameterEXT", "glBindTextureUnitParameterEXT", "glBindParameterEXT", "glIsVariantEnabledEXT", "glGetVariantBooleanvEXT", "glGetVariantIntegervEXT", "glGetVariantFloatvEXT", "glGetVariantPointervEXT", "glGetInvariantBooleanvEXT", "glGetInvariantIntegervEXT", "glGetInvariantFloatvEXT", "glGetLocalConstantBooleanvEXT", "glGetLocalConstantIntegervEXT", "glGetLocalConstantFloatvEXT" } },
    { GLextension::GL_EXT_vertex_weighting, { "glVertexWeightfEXT", "glVertexWeightfvEXT", "glVertexWeightPointerEXT" } },
    { GLextension::GL_EXT_x11_sync_object, { "glImportSyncEXT" } },
    { GLextension::GL_GREMEDY_frame_terminator, { "glFrameTerminatorGREMEDY" } },
    { GLextension::GL_GREMEDY_string_marker, { "glStringMarkerGREMEDY" } },
    { GLextension::GL_HP_image_transform, { "glImageTransformParameteriHP", "glImageTransformParameterfHP", "glImageTransformParameterivHP", "glImageTransformParameterfvHP", "glGetImageTransformParameterivHP", "glGetImageTransformParameterfvHP" } },
    { GLextension::GL_IBM_multimode_draw_arrays, { "glMultiModeDrawArraysIBM", "glMultiModeDrawElementsIBM" } },
    { GLextension::GL_IBM_static_data, { "glFlushStaticDataIBM" } },
    { GLextension::GL_IBM_vertex_array_lists, { "glColorPointerListIBM", "glSecondaryColorPointerListIBM", "glEdgeFlagPointerListIBM", "glFogCoordPointerListIBM", "glIndexPointerListIBM", "glNormalPointerListIBM", "glTexCoordPointerListIBM", "glVertexPointerListIBM" } },
    { GLextension::GL_INGR_blend_func_separate, { "glBlendFuncSeparateINGR" } },
    { GLextension::GL_INTEL_framebuffer_CMAA, { "glApplyFramebufferAttachmentCMAAINTEL" } },
    { GLextension::GL_INTEL_map_texture, { "glSyncTextureINTEL", "glUnmapTexture2DINTEL", "glMapTexture2DINTEL" } },
    { GLextension::GL_INTEL_parallel_arrays, { "glVertexPointervINTEL", "glNormalPointervINTEL", "glColorPointervINTEL", "glTexCoordPointervINTEL" } },
    { GLextension::GL_INTEL_performance_query, { "glBeginPerfQueryINTEL", "glCreatePerfQueryINTEL", "glDeletePerfQueryINTEL", "glEndPerfQueryINTEL", "glGetFirstPerfQueryIdINTEL", "glGetNextPerfQueryIdINTEL", "glGetPerfCounterInfoINTEL", "glGetPerfQueryDataINTEL", "glGetPerfQueryIdByNameINTEL", "glGetPerfQueryInfoINTEL" } },
    { GLextension::GL_KHR_blend_equation_advanced, { "glBlendBarrierKHR" } },
    { GLextension::GL_KHR_debug, { "glDebugMessageControl", "glDebugMessageInsert", "glDebugMessageCallback", "glGetDebugMessageLog", "glPushDebugGroup", "glPopDebugGroup", "glObjectLabel", "glGetObjectLabel", "glObjectPtrLabel", "glGetObjectPtrLabel", "glGetPointerv" } },
    { GLextension::GL_KHR_robustness, { "glGetGraphicsResetStatus", "glReadnPixels", "glGetnUniformfv", "glGetnUniformiv", "glGetnUniformuiv" } },
    { GLextension::GL_MESA_resize_buffers, { "glResizeBuffersMESA" } },
    { GLextension::GL_MESA_window_pos, { "glWindowPos2dMESA", "glWindowPos2dvMESA", "glWindowPos2fMESA", "glWindowPos2fvMESA", "glWindowPos2iMESA", "glWindowPos2ivMESA", "glWindowPos2sMESA", "glWindowPos2svMESA", "glWindowPos3dMESA", "glWindowPos3dvMESA", "glWindowPos3fMESA", "glWindowPos3fvMESA", "glWindowPos3iMESA", "glWindowPos3ivMESA", "glWindowPos3sMESA", "glWindowPos3svMESA", "glWindowPos4dMESA", "glWindowPos4dvMESA", "glWindowPos4fMESA", "glWindowPos4fvMESA", "glWindowPos4iMESA", "glWindowPos4ivMESA", "glWindowPos4sMESA", "glWindowPos4svMESA" } },
    { GLextension::GL_NVX_conditional_render, { "glBeginConditionalRenderNVX", "glEndConditionalRenderNVX" } },
    { GLextension::GL_NV_bindless_multi_draw_indirect, { "glMultiDrawArraysIndirectBindlessNV", "glMultiDrawElementsIndirectBindlessNV" } },
    { GLextension::GL_NV_bindless_multi_draw_indirect_count, { "glMultiDrawArraysIndirectBindlessCountNV", "glMultiDrawElementsIndirectBindlessCountNV" } },
    { GLextension::GL_NV_bindless_texture, { "glGetTextureHandleNV", "glGetTextureSamplerHandleNV", "glMakeTextureHandleResidentNV", "glMakeTextureHandleNonResidentNV", "glGetImageHandleNV", "glMakeImageHandleResidentNV", "glMakeImageHandleNonResidentNV", "glUniformHandleui64NV", "glUniformHandleui64vNV", "glProgramUniformHandleui64NV", "glProgramUniformHandleui64vNV", "glIsTextureHandleResidentNV", "glIsImageHandleResidentNV" } },
    { GLextension::GL_NV_blend_equation_advanced, { "glBlendParameteriNV", "glBlendBarrierNV" } },
    { GLextension::GL_NV_command_list, { "glCreateStatesNV", "glDeleteStatesNV", "glIsStateNV", "glStateCaptureNV", "glGetCommandHeaderNV", "glGetStageIndexNV", "glDrawCommandsNV", "glDrawCommandsAddressNV", "glDrawCommandsStatesNV", "glDrawCommandsStatesAddressNV", "glCreateCommandListsNV", "glDeleteCommandListsNV", "glIsCommandListNV", "glListDrawCommandsStatesClientNV", "glCommandListSegmentsNV", "glCompileCommandListNV", "glCallCommandListNV" } },
    { GLextension::GL_NV_conditional_render, { "glBeginConditionalRenderNV", "glEndConditionalRenderNV" } },
    { GLextension::GL_NV_conservative_raster, { "glSubpixelPrecisionBiasNV" } },
    { GLextension::GL_NV_conservative_raster_dilate, { "glConservativeRasterParameterfNV" } },
    { GLextension::GL_NV_copy_image, { "glCopyImageSubDataNV" } },
    { GLextension::GL_NV_depth_buffer_float, { "glDepthRangedNV", "glClearDepthdNV", "glDepthBoundsdNV" } },
    { GLextension::GL_NV_draw_texture, { "glDrawTextureNV" } },
    { GLextension::GL_NV_evaluators, { "glMapControlPointsNV", "glMapParameterivNV", "glMapParameterfvNV", "glGetMapControlPointsNV", "glGetMapParameterivNV", "glGetMapParameterfvNV", "glGetMapAttribParameterivNV", "glGetMapAttribParameterfvNV", "glEvalMapsNV" } },
    { GLextension::GL_NV_explicit_multisample, { "glGetMultisamplefvNV", "glSampleMaskIndexedNV", "glTexRenderbufferNV" } },
    { GLextension::GL_NV_fence, { "glDeleteFencesNV", "glGenFencesNV", "glIsFenceNV", "glTestFenceNV", "glGetFenceivNV", "glFinishFenceNV", "glSetFenceNV" } },
    { GLextension::GL_NV_fragment_coverage_to_color, { "glFragmentCoverageColorNV" } },
    { GLextension::GL_NV_fragment_program, { "glProgramNamedParameter4fNV", "glProgramNamedParameter4fvNV", "glProgramNamedParameter4dNV", "glProgramNamedParameter4dvNV", "glGetProgramNamedParameterfvNV", "glGetProgramNamedParameterdvNV" } },
    { GLextension::GL_NV_framebuffer_mixed_samples, { "glRasterSamplesEXT", "glCoverageModulationTableNV", "glGetCoverageModulationTableNV", "glCoverageModulationNV" } },
    { GLextension::GL_NV_framebuffer_multisample_coverage, { "glRenderbufferStorageMultisampleCoverageNV" } },
    { GLextension::GL_NV_geometry_program4, { "glProgramVertexLimitNV", "glFramebufferTextureEXT", "glFramebufferTextureLayerEXT", "glFramebufferTextureFaceEXT" } },
    { GLextension::GL_NV_gpu_program4, { "glProgramLocalParameterI4iNV", "glProgramLocalParameterI4ivNV", "glProgramLocalParametersI4ivNV", "glProgramLocalParameterI4uiNV", "glProgramLocalParameterI4uivNV", "glProgramLocalParametersI4uivNV", "glProgramEnvParameterI4iNV", "glProgramEnvParameterI4ivNV", "glProgramEnvParametersI4ivNV", "glProgramEnvParameterI4uiNV", "glProgramEnvParameterI4uivNV", "glProgramEnvParametersI4uivNV", "glGetProgramLocalParameterIivNV", "glGetProgramLocalParameterIuivNV", "glGetProgramEnvParameterIivNV", "glGetProgramEnvParameterIuivNV" } },
    { GLextension::GL_NV_gpu_program5, { "glProgramSubroutineParametersuivNV", "glGetProgramSubroutineParameteruivNV" } },
    { GLextension::GL_NV_gpu_shader5, { "glUniform1i64NV", "glUniform2i64NV", "glUniform3i64NV", "glUniform4i64NV", "glUniform1i64vNV", "glUniform2i64vNV", "glUniform3i64vNV", "glUniform4i64vNV", "glUniform1ui64NV", "glUniform2ui64NV", "glUniform3ui64NV", "glUniform4ui64NV", "glUniform1ui64vNV", "glUniform2ui64vNV", "glUniform3ui64vNV", "glUniform4ui64vNV", "glGetUniformi64vNV", "glProgramUniform1i64NV", "glProgramUniform2i64NV", "glProgramUniform3i64NV", "glProgramUniform4i64NV", "glProgramUniform1i64vNV", "glProgramUniform2i64vNV", "glProgramUniform3i64vNV", "glProgramUniform4i64vNV", "glProgramUniform1ui64NV", "glProgramUniform2ui64NV", "glProgramUniform3ui64NV", "glProgramUniform4ui64NV", "glProgramUniform1ui64vNV", "glProgramUniform2ui64vNV", "glProgramUniform3ui64vNV", "glProgramUniform4ui64vNV" } },
    { GLextension::GL_NV_half_float, { "glVertex2hNV", "glVertex2hvNV", "glVertex3hNV", "glVertex3hvNV", "glVertex4hNV", "glVertex4hvNV", "glNormal3hNV", "glNormal3hvNV", "glColor3hNV", "glColor3hvNV", "glColor4hNV", "glColor4hvNV", "glTexCoord1hNV", "glTexCoord1hvNV", "glTexCoord2hNV", "glTexCoord2hvNV", "glTexCoord3hNV", "glTexCoord3hvNV", "glTexCoord4hNV", "glTexCoord4hvNV", "glMultiTexCoord1hNV", "glMultiTexCoord1hvNV", "glMultiTexCoord2hNV", "glMultiTexCoord2hvNV", "glMultiTexCoord3hNV", "glMultiTexCoord3hvNV", "glMultiTexCoord4hNV", "glMultiTexCoord4hvNV", "glFogCoordhNV", "glFogCoordhvNV", "glSecondaryColor3hNV", "glSecondaryColor3hvNV", "glVertexWeighthNV", "glVertexWeighthvNV", "glVertexAttrib1hNV", "glVertexAttrib1hvNV", "glVertexAttrib2hNV", "glVertexAttrib2hvNV", "glVertexAttrib3hNV", "glVertexAttrib3hvNV", "glVertexAttrib4hNV", "glVertexAttrib4hvNV", "glVertexAttribs1hvNV", "glVertexAttribs2hvNV", "glVertexAttribs3hvNV", "glVertexAttribs4hvNV" } },
    { GLextension::GL_NV_internalformat_sample_query, { "glGetInternalformatSampleivNV" } },
    { GLextension::GL_NV_occlusion_query, { "glGenOcclusionQueriesNV", "glDeleteOcclusionQueriesNV", "glIsOcclusionQueryNV", "glBeginOcclusionQueryNV", "glEndOcclusionQueryNV", "glGetOcclusionQueryivNV", "glGetOcclusionQueryuivNV" } },
    { GLextension::GL_NV_parameter_buffer_object, { "glProgramBufferParametersfvNV", "glProgramBufferParametersIivNV", "glProgramBufferParametersIuivNV" } },
    { GLextension::GL_NV_path_rendering, { "glGenPathsNV", "glDeletePathsNV", "glIsPathNV", "glPathCommandsNV", "glPathCoordsNV", "glPathSubCommandsNV", "glPathSubCoordsNV", "glPathStringNV", "glPathGlyphsNV", "glPathGlyphRangeNV", "glWeightPathsNV", "glCopyPathNV", "glInterpolatePathsNV", "glTransformPathNV", "glPathParameterivNV", "glPathParameteriNV", "glPathParameterfvNV", "glPathParameterfNV", "glPathDashArrayNV", "glPathStencilFuncNV", "glPathStencilDepthOffsetNV", "glStencilFillPathNV", "glStencilStrokePathNV", "glStencilFillPathInstancedNV", "glStencilStrokePathInstancedNV", "glPathCoverDepthFuncNV", "glCoverFillPathNV", "glCoverStrokePathNV", "glCoverFillPathInstancedNV", "glCoverStrokePathInstancedNV", "glGetPathParameterivNV", "glGetPathParameterfvNV", "glGetPathCommandsNV", "glGetPathCoordsNV", "glGetPathDashArrayNV", "glGetPathMetricsNV", "glGetPathMetricRangeNV", "glGetPathSpacingNV", "glIsPointInFillPathNV", "glIsPointInStrokePathNV", "glGetPathLengthNV", "glPointAlongPathNV", "glMatrixLoad3x2fNV", "glMatrixLoad3x3fNV", "glMatrixLoadTranspose3x3fNV", "glMatrixMult3x2fNV", "glMatrixMult3x3fNV", "glMatrixMultTranspose3x3fNV", "glStencilThenCoverFillPathNV", "glStencilThenCoverStrokePathNV", "glStencilThenCoverFillPathInstancedNV", "glStencilThenCoverStrokePathInstancedNV", "glPathGlyphIndexRangeNV", "glPathGlyphIndexArrayNV", "glPathMemoryGlyphIndexArrayNV", "glProgramPathFragmentInputGenNV", "glGetProgramResourcefvNV", "glPathColorGenNV", "glPathTexGenNV", "glPathFogGenNV", "glGetPathColorGenivNV", "glGetPathColorGenfvNV", "glGetPathTexGenivNV", "glGetPathTexGenfvNV" } },
    { GLextension::GL_NV_pixel_data_range, { "glPixelDataRangeNV", "glFlushPixelDataRangeNV" } },
    { GLextension::GL_NV_point_sprite, { "glPointParameteriNV", "glPointParameterivNV" } },
    { GLextension::GL_NV_present_video, { "glPresentFrameKeyedNV", "glPresentFrameDualFillNV", "glGetVideoivNV", "glGetVideouivNV", "glGetVideoi64vNV", "glGetVideoui64vNV" } },
    { GLextension::GL_NV_primitive_restart, { "glPrimitiveRestartNV", "glPrimitiveRestartIndexNV" } },
    { GLextension::GL_NV_register_combiners, { "glCombinerParameterfvNV", "glCombinerParameterfNV", "glCombinerParameterivNV", "glCombinerParameteriNV", "glCombinerInputNV", "glCombinerOutputNV", "glFinalCombinerInputNV", "glGetCombinerInputParameterfvNV", "glGetCombinerInputParameterivNV", "glGetCombinerOutputParameterfvNV", "glGetCombinerOutputParameterivNV", "glGetFinalCombinerInputParameterfvNV", "glGetFinalCombinerInputParameterivNV" } },
    { GLextension::GL_NV_register_combiners2, { "glCombinerStageParameterfvNV", "glGetCombinerStageParameterfvNV" } },
    { GLextension::GL_NV_sample_locations, { "glFramebufferSampleLocationsfvNV", "glNamedFramebufferSampleLocationsfvNV", "glResolveDepthValuesNV" } },
    { GLextension::GL_NV_shader_buffer_load, { "glMakeBufferResidentNV", "glMakeBufferNonResidentNV", "glIsBufferResidentNV", "glMakeNamedBufferResidentNV", "glMakeNamedBufferNonResidentNV", "glIsNamedBufferResidentNV", "glGetBufferParameterui64vNV", "glGetNamedBufferParameterui64vNV", "glGetIntegerui64vNV", "glUniformui64NV", "glUniformui64vNV", "glGetUniformui64vNV", "glProgramUniformui64NV", "glProgramUniformui64vNV" } },
    { GLextension::GL_NV_texture_barrier, { "glTextureBarrierNV" } },
    { GLextension::GL_NV_texture_multisample, { "glTexImage2DMultisampleCoverageNV", "glTexImage3DMultisampleCoverageNV", "glTextureImage2DMultisampleNV", "glTextureImage3DMultisampleNV", "glTextureImage2DMultisampleCoverageNV", "glTextureImage3DMultisampleCoverageNV" } },
    { GLextension::GL_NV_transform_feedback, { "glBeginTransformFeedbackNV", "glEndTransformFeedbackNV", "glTransformFeedbackAttribsNV", "glBindBufferRangeNV", "glBindBufferOffsetNV", "glBindBufferBaseNV", "glTransformFeedbackVaryingsNV", "glActiveVaryingNV", "glGetVaryingLocationNV", "glGetActiveVaryingNV", "glGetTransformFeedbackVaryingNV", "glTransformFeedbackStreamAttribsNV" } },
    { GLextension::GL_NV_transform_feedback2, { "glBindTransformFeedbackNV", "glDeleteTransformFeedbacksNV", "glGenTransformFeedbacksNV", "glIsTransformFeedbackNV", "glPauseTransformFeedbackNV", "glResumeTransformFeedbackNV", "glDrawTransformFeedbackNV" } },
    { GLextension::GL_NV_vdpau_interop, { "glVDPAUInitNV", "glVDPAUFiniNV", "glVDPAURegisterVideoSurfaceNV", "glVDPAURegisterOutputSurfaceNV", "glVDPAUIsSurfaceNV", "glVDPAUUnregisterSurfaceNV", "glVDPAUGetSurfaceivNV", "glVDPAUSurfaceAccessNV", "glVDPAUMapSurfacesNV", "glVDPAUUnmapSurfacesNV" } },
    { GLextension::GL_NV_vertex_array_range, { "glFlushVertexArrayRangeNV", "glVertexArrayRangeNV" } },
    { GLextension::GL_NV_vertex_attrib_integer_64bit, { "glVertexAttribL1i64NV", "glVertexAttribL2i64NV", "glVertexAttribL3i64NV", "glVertexAttribL4i64NV", "glVertexAttribL1i64vNV", "glVertexAttribL2i64vNV", "glVertexAttribL3i64vNV", "glVertexAttribL4i64vNV", "glVertexAttribL1ui64NV", "glVertexAttribL2ui64NV", "glVertexAttribL3ui64NV", "glVertexAttribL4ui64NV", "glVertexAttribL1ui64vNV", "glVertexAttribL2ui64vNV", "glVertexAttribL3ui64vNV", "glVertexAttribL4ui64vNV", "glGetVertexAttribLi64vNV", "glGetVertexAttribLui64vNV", "glVertexAttribLFormatNV" } },
    { GLextension::GL_NV_vertex_buffer_unified_memory, { "glBufferAddressRangeNV", "glVertexFormatNV", "glNormalFormatNV", "glColorFormatNV", "glIndexFormatNV", "glTexCoordFormatNV", "glEdgeFlagFormatNV", "glSecondaryColorFormatNV", "glFogCoordFormatNV", "glVertexAttribFormatNV", "glVertexAttribIFormatNV", "glGetIntegerui64i_vNV" } },
    { GLextension::GL_NV_vertex_program, { "glAreProgramsResidentNV", "glBindProgramNV", "glDeleteProgramsNV", "glExecuteProgramNV", "glGenProgramsNV", "glGetProgramParameterdvNV", "glGetProgramParameterfvNV", "glGetProgramivNV", "glGetProgramStringNV", "glGetTrackMatrixivNV", "glGetVertexAttribdvNV", "glGetVertexAttribfvNV", "glGetVertexAttribivNV", "glGetVertexAttribPointervNV", "glIsProgramNV", "glLoadProgramNV", "glProgramParameter4dNV", "glProgramParameter4dvNV", "glProgramParameter4fNV", "glProgramParameter4fvNV", "glProgramParameters4dvNV", "glProgramParameters4fvNV", "glRequestResidentProgramsNV", "glTrackMatrixNV", "glVertexAttribPointerNV", "glVertexAttrib1dNV", "glVertexAttrib1dvNV", "glVertexAttrib1fNV", "glVertexAttrib1fvNV", "glVertexAttrib1sNV", "glVertexAttrib1svNV", "glVertexAttrib2dNV", "glVertexAttrib2dvNV", "glVertexAttrib2fNV", "glVertexAttrib2fvNV", "glVertexAttrib2sNV", "glVertexAttrib2svNV", "glVertexAttrib3dNV", "glVertexAttrib3dvNV", "glVertexAttrib3fNV", "glVertexAttrib3fvNV", "glVertexAttrib3sNV", "glVertexAttrib3svNV", "glVertexAttrib4dNV", "glVertexAttrib4dvNV", "glVertexAttrib4fNV", "glVertexAttrib4fvNV", "glVertexAttrib4sNV", "glVertexAttrib4svNV", "glVertexAttrib4ubNV", "glVertexAttrib4ubvNV", "glVertexAttribs1dvNV", "glVertexAttribs1fvNV", "glVertexAttribs1svNV", "glVertexAttribs2dvNV", "glVertexAttribs2fvNV", "glVertexAttribs2svNV", "glVertexAttribs3dvNV", "glVertexAttribs3fvNV", "glVertexAttribs3svNV", "glVertexAttribs4dvNV", "glVertexAttribs4fvNV", "glVertexAttribs4svNV", "glVertexAttribs4ubvNV" } },
    { GLextension::GL_NV_vertex_program4, { "glVertexAttribI1iEXT", "glVertexAttribI2iEXT", "glVertexAttribI3iEXT", "glVertexAttribI4iEXT", "glVertexAttribI1uiEXT", "glVertexAttribI2uiEXT", "glVertexAttribI3uiEXT", "glVertexAttribI4uiEXT", "glVertexAttribI1ivEXT", "glVertexAttribI2ivEXT", "glVertexAttribI3ivEXT", "glVertexAttribI4ivEXT", "glVertexAttribI1uivEXT", "glVertexAttribI2uivEXT", "glVertexAttribI3uivEXT", "glVertexAttribI4uivEXT", "glVertexAttribI4bvEXT", "glVertexAttribI4svEXT", "glVertexAttribI4ubvEXT", "glVertexAttribI4usvEXT", "glVertexAttribIPointerEXT", "glGetVertexAttribIivEXT", "glGetVertexAttribIuivEXT" } },
    { GLextension::GL_NV_video_capture, { "glBeginVideoCaptureNV", "glBindVideoCaptureStreamBufferNV", "glBindVideoCaptureStreamTextureNV", "glEndVideoCaptureNV", "glGetVideoCaptureivNV", "glGetVideoCaptureStreamivNV", "glGetVideoCaptureStreamfvNV", "glGetVideoCaptureStreamdvNV", "glVideoCaptureNV", "glVideoCaptureStreamParameterivNV", "glVideoCaptureStreamParameterfvNV", "glVideoCaptureStreamParameterdvNV" } },
    { GLextension::GL_OES_byte_coordinates, { "glMultiTexCoord1bOES", "glMultiTexCoord1bvOES", "glMultiTexCoord2bOES", "glMultiTexCoord2bvOES", "glMultiTexCoord3bOES", "glMultiTexCoord3bvOES", "glMultiTexCoord4bOES", "glMultiTexCoord4bvOES", "glTexCoord1bOES", "glTexCoord1bvOES", "glTexCoord2bOES", "glTexCoord2bvOES", "glTexCoord3bOES", "glTexCoord3bvOES", "glTexCoord4bOES", "glTexCoord4bvOES", "glVertex2bOES", "glVertex2bvOES", "glVertex3bOES", "glVertex3bvOES", "glVertex4bOES", "glVertex4bvOES" } },
    { GLextension::GL_OES_fixed_point, { "glAlphaFuncxOES", "glClearColorxOES", "glClearDepthxOES", "glClipPlanexOES", "glColor4xOES", "glDepthRangexOES", "glFogxOES", "glFogxvOES", "glFrustumxOES", "glGetClipPlanexOES", "glGetFixedvOES", "glGetTexEnvxvOES", "glGetTexParameterxvOES", "glLightModelxOES", "glLightModelxvOES", "glLightxOES", "glLightxvOES", "glLineWidthxOES", "glLoadMatrixxOES", "glMaterialxOES", "glMaterialxvOES", "glMultMatrixxOES", "glMultiTexCoord4xOES", "glNormal3xOES", "glOrthoxOES", "glPointParameterxvOES", "glPointSizexOES", "glPolygonOffsetxOES", "glRotatexOES", "glScalexOES", "glTexEnvxOES", "glTexEnvxvOES", "glTexParameterxOES", "glTexParameterxvOES", "glTranslatexOES", "glAccumxOES", "glBitmapxOES", "glBlendColorxOES", "glClearAccumxOES", "glColor3xOES", "glColor3xvOES", "glColor4xvOES", "glConvolutionParameterxOES", "glConvolutionParameterxvOES", "glEvalCoord1xOES", "glEvalCoord1xvOES", "glEvalCoord2xOES", "glEvalCoord2xvOES", "glFeedbackBufferxOES", "glGetConvolutionParameterxvOES", "glGetHistogramParameterxvOES", "glGetLightxOES", "glGetMapxvOES", "glGetMaterialxOES", "glGetPixelMapxv", "glGetTexGenxvOES", "glGetTexLevelParameterxvOES", "glIndexxOES", "glIndexxvOES", "glLoadTransposeMatrixxOES", "glMap1xOES", "glMap2xOES", "glMapGrid1xOES", "glMapGrid2xOES", "glMultTransposeMatrixxOES", "glMultiTexCoord1xOES", "glMultiTexCoord1xvOES", "glMultiTexCoord2xOES", "glMultiTexCoord2xvOES", "glMultiTexCoord3xOES", "glMultiTexCoord3xvOES", "glMultiTexCoord4xvOES", "glNormal3xvOES", "glPassThroughxOES", "glPixelMapx", "glPixelStorex", "glPixelTransferxOES", "glPixelZoomxOES", "glPrioritizeTexturesxOES", "glRasterPos2xOES", "glRasterPos2xvOES", "glRasterPos3xOES", "glRasterPos3xvOES", "glRasterPos4xOES", "glRasterPos4xvOES", "glRectxOES", "glRectxvOES", "glTexCoord1xOES", "glTexCoord1xvOES", "glTexCoord2xOES", "glTexCoord2xvOES", "glTexCoord3xOES", "glTexCoord3xvOES", "glTexCoord4xOES", "glTexCoord4xvOES", "glTexGenxOES", "glTexGenxvOES", "glVertex2xOES", "glVertex2xvOES", "glVertex3xOES", "glVertex3xvOES", "glVertex4xOES", "glVertex4xvOES" } },
    { GLextension::GL_OES_query_matrix, { "glQueryMatrixxOES" } },
    { GLextension::GL_OES_single_precision, { "glClearDepthfOES", "glClipPlanefOES", "glDepthRangefOES", "glFrustumfOES", "glGetClipPlanefOES", "glOrthofOES" } },
    { GLextension::GL_OVR_multiview, { "glFramebufferTextureMultiviewOVR" } },
    { GLextension::GL_PGI_misc_hints, { "glHintPGI" } },
    { GLextension::GL_SGIS_detail_texture, { "glDetailTexFuncSGIS", "glGetDetailTexFuncSGIS" } },
    { GLextension::GL_SGIS_fog_function, { "glFogFuncSGIS", "glGetFogFuncSGIS" } },
    { GLextension::GL_SGIS_multisample, { "glSampleMaskSGIS", "glSamplePatternSGIS" } },
    { GLextension::GL_SGIS_pixel_texture, { "glPixelTexGenParameteriSGIS", "glPixelTexGenParameterivSGIS", "glPixelTexGenParameterfSGIS", "glPixelTexGenParameterfvSGIS", "glGetPixelTexGenParameterivSGIS", "glGetPixelTexGenParameterfvSGIS" } },
    { GLextension::GL_SGIS_point_parameters, { "glPointParameterfSGIS", "glPointParameterfvSGIS" } },
    { GLextension::GL_SGIS_sharpen_texture, { "glSharpenTexFuncSGIS", "glGetSharpenTexFuncSGIS" } },
    { GLextension::GL_SGIS_texture4D, { "glTexImage4DSGIS", "glTexSubImage4DSGIS" } },
    { GLextension::GL_SGIS_texture_color_mask, { "glTextureColorMaskSGIS" } },
    { GLextension::GL_SGIS_texture_filter4, { "glGetTexFilterFuncSGIS", "glTexFilterFuncSGIS" } },
    { GLextension::GL_SGIX_async, { "glAsyncMarkerSGIX", "glFinishAsyncSGIX", "glPollAsyncSGIX", "glGenAsyncMarkersSGIX", "glDeleteAsyncMarkersSGIX", "glIsAsyncMarkerSGIX" } },
    { GLextension::GL_SGIX_flush_raster, { "glFlushRasterSGIX" } },
    { GLextension::GL_SGIX_fragment_lighting, { "glFragmentColorMaterialSGIX", "glFragmentLightfSGIX", "glFragmentLightfvSGIX", "glFragmentLightiSGIX", "glFragmentLightivSGIX", "glFragmentLightModelfSGIX", "glFragmentLightModelfvSGIX", "glFragmentLightModeliSGIX", "glFragmentLightModelivSGIX", "glFragmentMaterialfSGIX", "glFragmentMaterialfvSGIX", "glFragmentMaterialiSGIX", "glFragmentMaterialivSGIX", "glGetFragmentLightfvSGIX", "glGetFragmentLightivSGIX", "glGetFragmentMaterialfvSGIX", "glGetFragmentMaterialivSGIX", "glLightEnviSGIX" } },
    { GLextension::GL_SGIX_framezoom, { "glFrameZoomSGIX" } },
    { GLextension::GL_SGIX_igloo_interface, { "glIglooInterfaceSGIX" } },
    { GLextension::GL_SGIX_instruments, { "glGetInstrumentsSGIX", "glInstrumentsBufferSGIX", "glPollInstrumentsSGIX", "glReadInstrumentsSGIX", "glStartInstrumentsSGIX", "glStopInstrumentsSGIX" } },
    { GLextension::GL_SGIX_list_priority, { "glGetListParameterfvSGIX", "glGetListParameterivSGIX", "glListParameterfSGIX", "glListParameterfvSGIX", "glListParameteriSGIX", "glListParameterivSGIX" } },
    { GLextension::GL_SGIX_pixel_texture, { "glPixelTexGenSGIX" } },
    { GLextension::GL_SGIX_polynomial_ffd, { "glDeformationMap3dSGIX", "glDeformationMap3fSGIX", "glDeformSGIX", "glLoadIdentityDeformationMapSGIX" } },
    { GLextension::GL_SGIX_reference_plane, { "glReferencePlaneSGIX" } },
    { GLextension::GL_SGIX_sprite, { "glSpriteParameterfSGIX", "glSpriteParameterfvSGIX", "glSpriteParameteriSGIX", "glSpriteParameterivSGIX" } },
    { GLextension::GL_SGIX_tag_sample_buffer, { "glTagSampleBufferSGIX" } },
    { GLextension::GL_SGI_color_table, { "glColorTableSGI", "glColorTableParameterfvSGI", "glColorTableParameterivSGI", "glCopyColorTableSGI", "glGetColorTableSGI", "glGetColorTableParameterfvSGI", "glGetColorTableParameterivSGI" } },
    { GLextension::GL_SUNX_constant_data, { "glFinishTextureSUNX" } },
    { GLextension::GL_SUN_global_alpha, { "glGlobalAlphaFactorbSUN", "glGlobalAlphaFactorsSUN", "glGlobalAlphaFactoriSUN", "glGlobalAlphaFactorfSUN", "glGlobalAlphaFactordSUN", "glGlobalAlphaFactorubSUN", "glGlobalAlphaFactorusSUN", "glGlobalAlphaFactoruiSUN" } },
    { GLextension::GL_SUN_mesh_array, { "glDrawMeshArraysSUN" } },
    { GLextension::GL_SUN_triangle_list, { "glReplacementCodeuiSUN", "glReplacementCodeusSUN", "glReplacementCodeubSUN", "glReplacementCodeuivSUN", "glReplacementCodeusvSUN", "glReplacementCodeubvSUN", "glReplacementCodePointerSUN" } },
    { GLextension::GL_SUN_vertex, { "glColor4ubVertex2fSUN", "glColor4ubVertex2fvSUN", "glColor4ubVertex3fSUN", "glColor4ubVertex3fvSUN", "glColor3fVertex3fSUN", "glColor3fVertex3fvSUN", "glNormal3fVertex3fSUN", "glNormal3fVertex3fvSUN", "glColor4fNormal3fVertex3fSUN", "glColor4fNormal3fVertex3fvSUN", "glTexCoord2fVertex3fSUN", "glTexCoord2fVertex3fvSUN", "glTexCoord4fVertex4fSUN", "glTexCoord4fVertex4fvSUN", "glTexCoord2fColor4ubVertex3fSUN", "glTexCoord2fColor4ubVertex3fvSUN", "glTexCoord2fColor3fVertex3fSUN", "glTexCoord2fColor3fVertex3fvSUN", "glTexCoord2fNormal3fVertex3fSUN", "glTexCoord2fNormal3fVertex3fvSUN", "glTexCoord2fColor4fNormal3fVertex3fSUN", "glTexCoord2fColor4fNormal3fVertex3fvSUN", "glTexCoord4fColor4fNormal3fVertex4fSUN", "glTexCoord4fColor4fNormal3fVertex4fvSUN", "glReplacementCodeuiVertex3fSUN", "glReplacementCodeuiVertex3fvSUN", "glReplacementCodeuiColor4ubVertex3fSUN", "glReplacementCodeuiColor4ubVertex3fvSUN", "glReplacementCodeuiColor3fVertex3fSUN", "glReplacementCodeuiColor3fVertex3fvSUN", "glReplacementCodeuiNormal3fVertex3fSUN", "glReplacementCodeuiNormal3fVertex3fvSUN", "glReplacementCodeuiColor4fNormal3fVertex3fSUN", "glReplacementCodeuiColor4fNormal3fVertex3fvSUN", "glReplacementCodeuiTexCoord2fVertex3fSUN", "glReplacementCodeuiTexCoord2fVertex3fvSUN", "glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN", "glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN", "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN", "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN" } }
#endif
};

} // namespace glbinding
