/* * This file was generated with gl3w_gen.py, part of gl3w * (hosted at https://github.com/skaslev/gl3w) * * This is free and unencumbered software released into the public domain. * * Anyone is free to copy, modify, publish, use, compile, sell, or * distribute this software, either in source code form or as a compiled * binary, for any purpose, commercial or non-commercial, and by any * means. * * In jurisdictions that recognize copyright laws, the author or authors * of this software dedicate any and all copyright interest in the * software to the public domain. We make this dedication for the benefit * of the public at large and to the detriment of our heirs and * successors. We intend this dedication to be an overt act of * relinquishment in perpetuity of all present and future rights to this * software under copyright law. * * THE SOFTWARE IS 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 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 SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ #include "gl3w.h" #include #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) #if defined(_WIN32) #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 #endif #include static HMODULE libgl; typedef PROC(__stdcall* GL3WglGetProcAddr)(LPCSTR); static GL3WglGetProcAddr wgl_get_proc_address; static int open_libgl(void) { libgl = LoadLibraryA("opengl32.dll"); if (!libgl) return GL3W_ERROR_LIBRARY_OPEN; wgl_get_proc_address = (GL3WglGetProcAddr)GetProcAddress(libgl, "wglGetProcAddress"); return GL3W_OK; } static void close_libgl(void) { FreeLibrary(libgl); } static GL3WglProc get_proc(const char* proc) { GL3WglProc res; res = (GL3WglProc)wgl_get_proc_address(proc); if (!res) res = (GL3WglProc)GetProcAddress(libgl, proc); return res; } #elif defined(__APPLE__) #include static void* libgl; static int open_libgl(void) { libgl = dlopen("/System/Library/Frameworks/OpenGL.framework/OpenGL", RTLD_LAZY | RTLD_LOCAL); if (!libgl) return GL3W_ERROR_LIBRARY_OPEN; return GL3W_OK; } static void close_libgl(void) { dlclose(libgl); } static GL3WglProc get_proc(const char* proc) { GL3WglProc res; *(void**)(&res) = dlsym(libgl, proc); return res; } #else #include static void* libgl; /* OpenGL library */ static void* libglx; /* GLX library */ static void* libegl; /* EGL library */ static GL3WGetProcAddressProc gl_get_proc_address; static void close_libgl(void) { if (libgl) { dlclose(libgl); libgl = NULL; } if (libegl) { dlclose(libegl); libegl = NULL; } if (libglx) { dlclose(libglx); libglx = NULL; } } static int is_library_loaded(const char* name, void** lib) { *lib = dlopen(name, RTLD_LAZY | RTLD_LOCAL | RTLD_NOLOAD); return *lib != NULL; } static int open_libs(void) { /* On Linux we have two APIs to get process addresses: EGL and GLX. * EGL is supported under both X11 and Wayland, whereas GLX is X11-specific. * First check what's already loaded, the windowing library might have * already loaded either EGL or GLX and we want to use the same one. */ if (is_library_loaded("libEGL.so.1", &libegl) || is_library_loaded("libGLX.so.0", &libglx)) { libgl = dlopen("libOpenGL.so.0", RTLD_LAZY | RTLD_LOCAL); if (libgl) return GL3W_OK; else close_libgl(); } if (is_library_loaded("libGL.so.1", &libgl)) return GL3W_OK; /* Neither is already loaded, so we have to load one. Try EGL first * because it is supported under both X11 and Wayland. */ /* Load OpenGL + EGL */ libgl = dlopen("libOpenGL.so.0", RTLD_LAZY | RTLD_LOCAL); libegl = dlopen("libEGL.so.1", RTLD_LAZY | RTLD_LOCAL); if (libgl && libegl) return GL3W_OK; /* Fall back to legacy libGL, which includes GLX */ close_libgl(); libgl = dlopen("libGL.so.1", RTLD_LAZY | RTLD_LOCAL); if (libgl) return GL3W_OK; return GL3W_ERROR_LIBRARY_OPEN; } static int open_libgl(void) { int res = open_libs(); if (res) return res; if (libegl) *(void**)(&gl_get_proc_address) = dlsym(libegl, "eglGetProcAddress"); else if (libglx) *(void**)(&gl_get_proc_address) = dlsym(libglx, "glXGetProcAddressARB"); else *(void**)(&gl_get_proc_address) = dlsym(libgl, "glXGetProcAddressARB"); if (!gl_get_proc_address) { close_libgl(); return GL3W_ERROR_LIBRARY_OPEN; } return GL3W_OK; } static GL3WglProc get_proc(const char* proc) { GL3WglProc res = NULL; /* Before EGL version 1.5, eglGetProcAddress doesn't support querying core * functions and may return a dummy function if we try, so try to load the * function from the GL library directly first. */ if (libegl) *(void**)(&res) = dlsym(libgl, proc); if (!res) res = gl_get_proc_address(proc); if (!libegl && !res) *(void**)(&res) = dlsym(libgl, proc); return res; } #endif static struct { int major, minor; } version; static int parse_version(void) { if (!glGetIntegerv) return GL3W_ERROR_INIT; glGetIntegerv(GL_MAJOR_VERSION, &version.major); glGetIntegerv(GL_MINOR_VERSION, &version.minor); if (version.major < 3) return GL3W_ERROR_OPENGL_VERSION; return GL3W_OK; } static void load_procs(GL3WGetProcAddressProc proc); int gl3wInit(void) { int res; res = open_libgl(); if (res) return res; atexit(close_libgl); return gl3wInit2(get_proc); } int gl3wInit2(GL3WGetProcAddressProc proc) { load_procs(proc); return parse_version(); } int gl3wIsSupported(int major, int minor) { if (major < 3) return 0; if (version.major == major) return version.minor >= minor; return version.major >= major; } GL3WglProc gl3wGetProcAddress(const char* proc) { return get_proc(proc); } static const char* proc_names[] = { "glActiveProgramEXT", "glActiveShaderProgram", "glActiveTexture", "glApplyFramebufferAttachmentCMAAINTEL", "glAttachShader", "glBeginConditionalRender", "glBeginConditionalRenderNV", "glBeginPerfMonitorAMD", "glBeginPerfQueryINTEL", "glBeginQuery", "glBeginQueryIndexed", "glBeginTransformFeedback", "glBindAttribLocation", "glBindBuffer", "glBindBufferBase", "glBindBufferRange", "glBindBuffersBase", "glBindBuffersRange", "glBindFragDataLocation", "glBindFragDataLocationIndexed", "glBindFramebuffer", "glBindImageTexture", "glBindImageTextures", "glBindMultiTextureEXT", "glBindProgramPipeline", "glBindRenderbuffer", "glBindSampler", "glBindSamplers", "glBindShadingRateImageNV", "glBindTexture", "glBindTextureUnit", "glBindTextures", "glBindTransformFeedback", "glBindVertexArray", "glBindVertexBuffer", "glBindVertexBuffers", "glBlendBarrierKHR", "glBlendBarrierNV", "glBlendColor", "glBlendEquation", "glBlendEquationSeparate", "glBlendEquationSeparatei", "glBlendEquationSeparateiARB", "glBlendEquationi", "glBlendEquationiARB", "glBlendFunc", "glBlendFuncSeparate", "glBlendFuncSeparatei", "glBlendFuncSeparateiARB", "glBlendFunci", "glBlendFunciARB", "glBlendParameteriNV", "glBlitFramebuffer", "glBlitNamedFramebuffer", "glBufferAddressRangeNV", "glBufferAttachMemoryNV", "glBufferData", "glBufferPageCommitmentARB", "glBufferPageCommitmentMemNV", "glBufferStorage", "glBufferSubData", "glCallCommandListNV", "glCheckFramebufferStatus", "glCheckNamedFramebufferStatus", "glCheckNamedFramebufferStatusEXT", "glClampColor", "glClear", "glClearBufferData", "glClearBufferSubData", "glClearBufferfi", "glClearBufferfv", "glClearBufferiv", "glClearBufferuiv", "glClearColor", "glClearDepth", "glClearDepthdNV", "glClearDepthf", "glClearNamedBufferData", "glClearNamedBufferDataEXT", "glClearNamedBufferSubData", "glClearNamedBufferSubDataEXT", "glClearNamedFramebufferfi", "glClearNamedFramebufferfv", "glClearNamedFramebufferiv", "glClearNamedFramebufferuiv", "glClearStencil", "glClearTexImage", "glClearTexSubImage", "glClientAttribDefaultEXT", "glClientWaitSync", "glClipControl", "glColorFormatNV", "glColorMask", "glColorMaski", "glCommandListSegmentsNV", "glCompileCommandListNV", "glCompileShader", "glCompileShaderIncludeARB", "glCompressedMultiTexImage1DEXT", "glCompressedMultiTexImage2DEXT", "glCompressedMultiTexImage3DEXT", "glCompressedMultiTexSubImage1DEXT", "glCompressedMultiTexSubImage2DEXT", "glCompressedMultiTexSubImage3DEXT", "glCompressedTexImage1D", "glCompressedTexImage2D", "glCompressedTexImage3D", "glCompressedTexSubImage1D", "glCompressedTexSubImage2D", "glCompressedTexSubImage3D", "glCompressedTextureImage1DEXT", "glCompressedTextureImage2DEXT", "glCompressedTextureImage3DEXT", "glCompressedTextureSubImage1D", "glCompressedTextureSubImage1DEXT", "glCompressedTextureSubImage2D", "glCompressedTextureSubImage2DEXT", "glCompressedTextureSubImage3D", "glCompressedTextureSubImage3DEXT", "glConservativeRasterParameterfNV", "glConservativeRasterParameteriNV", "glCopyBufferSubData", "glCopyImageSubData", "glCopyMultiTexImage1DEXT", "glCopyMultiTexImage2DEXT", "glCopyMultiTexSubImage1DEXT", "glCopyMultiTexSubImage2DEXT", "glCopyMultiTexSubImage3DEXT", "glCopyNamedBufferSubData", "glCopyPathNV", "glCopyTexImage1D", "glCopyTexImage2D", "glCopyTexSubImage1D", "glCopyTexSubImage2D", "glCopyTexSubImage3D", "glCopyTextureImage1DEXT", "glCopyTextureImage2DEXT", "glCopyTextureSubImage1D", "glCopyTextureSubImage1DEXT", "glCopyTextureSubImage2D", "glCopyTextureSubImage2DEXT", "glCopyTextureSubImage3D", "glCopyTextureSubImage3DEXT", "glCoverFillPathInstancedNV", "glCoverFillPathNV", "glCoverStrokePathInstancedNV", "glCoverStrokePathNV", "glCoverageModulationNV", "glCoverageModulationTableNV", "glCreateBuffers", "glCreateCommandListsNV", "glCreateFramebuffers", "glCreatePerfQueryINTEL", "glCreateProgram", "glCreateProgramPipelines", "glCreateQueries", "glCreateRenderbuffers", "glCreateSamplers", "glCreateShader", "glCreateShaderProgramEXT", "glCreateShaderProgramv", "glCreateStatesNV", "glCreateSyncFromCLeventARB", "glCreateTextures", "glCreateTransformFeedbacks", "glCreateVertexArrays", "glCullFace", "glDebugMessageCallback", "glDebugMessageCallbackARB", "glDebugMessageControl", "glDebugMessageControlARB", "glDebugMessageInsert", "glDebugMessageInsertARB", "glDeleteBuffers", "glDeleteCommandListsNV", "glDeleteFramebuffers", "glDeleteNamedStringARB", "glDeletePathsNV", "glDeletePerfMonitorsAMD", "glDeletePerfQueryINTEL", "glDeleteProgram", "glDeleteProgramPipelines", "glDeleteQueries", "glDeleteRenderbuffers", "glDeleteSamplers", "glDeleteShader", "glDeleteStatesNV", "glDeleteSync", "glDeleteTextures", "glDeleteTransformFeedbacks", "glDeleteVertexArrays", "glDepthBoundsdNV", "glDepthFunc", "glDepthMask", "glDepthRange", "glDepthRangeArraydvNV", "glDepthRangeArrayv", "glDepthRangeIndexed", "glDepthRangeIndexeddNV", "glDepthRangedNV", "glDepthRangef", "glDetachShader", "glDisable", "glDisableClientStateIndexedEXT", "glDisableClientStateiEXT", "glDisableIndexedEXT", "glDisableVertexArrayAttrib", "glDisableVertexArrayAttribEXT", "glDisableVertexArrayEXT", "glDisableVertexAttribArray", "glDisablei", "glDispatchCompute", "glDispatchComputeGroupSizeARB", "glDispatchComputeIndirect", "glDrawArrays", "glDrawArraysIndirect", "glDrawArraysInstanced", "glDrawArraysInstancedARB", "glDrawArraysInstancedBaseInstance", "glDrawArraysInstancedEXT", "glDrawBuffer", "glDrawBuffers", "glDrawCommandsAddressNV", "glDrawCommandsNV", "glDrawCommandsStatesAddressNV", "glDrawCommandsStatesNV", "glDrawElements", "glDrawElementsBaseVertex", "glDrawElementsIndirect", "glDrawElementsInstanced", "glDrawElementsInstancedARB", "glDrawElementsInstancedBaseInstance", "glDrawElementsInstancedBaseVertex", "glDrawElementsInstancedBaseVertexBaseInstance", "glDrawElementsInstancedEXT", "glDrawMeshTasksIndirectNV", "glDrawMeshTasksNV", "glDrawRangeElements", "glDrawRangeElementsBaseVertex", "glDrawTransformFeedback", "glDrawTransformFeedbackInstanced", "glDrawTransformFeedbackStream", "glDrawTransformFeedbackStreamInstanced", "glDrawVkImageNV", "glEGLImageTargetTexStorageEXT", "glEGLImageTargetTextureStorageEXT", "glEdgeFlagFormatNV", "glEnable", "glEnableClientStateIndexedEXT", "glEnableClientStateiEXT", "glEnableIndexedEXT", "glEnableVertexArrayAttrib", "glEnableVertexArrayAttribEXT", "glEnableVertexArrayEXT", "glEnableVertexAttribArray", "glEnablei", "glEndConditionalRender", "glEndConditionalRenderNV", "glEndPerfMonitorAMD", "glEndPerfQueryINTEL", "glEndQuery", "glEndQueryIndexed", "glEndTransformFeedback", "glEvaluateDepthValuesARB", "glFenceSync", "glFinish", "glFlush", "glFlushMappedBufferRange", "glFlushMappedNamedBufferRange", "glFlushMappedNamedBufferRangeEXT", "glFogCoordFormatNV", "glFragmentCoverageColorNV", "glFramebufferDrawBufferEXT", "glFramebufferDrawBuffersEXT", "glFramebufferFetchBarrierEXT", "glFramebufferParameteri", "glFramebufferParameteriMESA", "glFramebufferReadBufferEXT", "glFramebufferRenderbuffer", "glFramebufferSampleLocationsfvARB", "glFramebufferSampleLocationsfvNV", "glFramebufferTexture", "glFramebufferTexture1D", "glFramebufferTexture2D", "glFramebufferTexture3D", "glFramebufferTextureARB", "glFramebufferTextureFaceARB", "glFramebufferTextureLayer", "glFramebufferTextureLayerARB", "glFramebufferTextureMultiviewOVR", "glFrontFace", "glGenBuffers", "glGenFramebuffers", "glGenPathsNV", "glGenPerfMonitorsAMD", "glGenProgramPipelines", "glGenQueries", "glGenRenderbuffers", "glGenSamplers", "glGenTextures", "glGenTransformFeedbacks", "glGenVertexArrays", "glGenerateMipmap", "glGenerateMultiTexMipmapEXT", "glGenerateTextureMipmap", "glGenerateTextureMipmapEXT", "glGetActiveAtomicCounterBufferiv", "glGetActiveAttrib", "glGetActiveSubroutineName", "glGetActiveSubroutineUniformName", "glGetActiveSubroutineUniformiv", "glGetActiveUniform", "glGetActiveUniformBlockName", "glGetActiveUniformBlockiv", "glGetActiveUniformName", "glGetActiveUniformsiv", "glGetAttachedShaders", "glGetAttribLocation", "glGetBooleanIndexedvEXT", "glGetBooleani_v", "glGetBooleanv", "glGetBufferParameteri64v", "glGetBufferParameteriv", "glGetBufferParameterui64vNV", "glGetBufferPointerv", "glGetBufferSubData", "glGetCommandHeaderNV", "glGetCompressedMultiTexImageEXT", "glGetCompressedTexImage", "glGetCompressedTextureImage", "glGetCompressedTextureImageEXT", "glGetCompressedTextureSubImage", "glGetCoverageModulationTableNV", "glGetDebugMessageLog", "glGetDebugMessageLogARB", "glGetDoubleIndexedvEXT", "glGetDoublei_v", "glGetDoublei_vEXT", "glGetDoublev", "glGetError", "glGetFirstPerfQueryIdINTEL", "glGetFloatIndexedvEXT", "glGetFloati_v", "glGetFloati_vEXT", "glGetFloatv", "glGetFragDataIndex", "glGetFragDataLocation", "glGetFramebufferAttachmentParameteriv", "glGetFramebufferParameteriv", "glGetFramebufferParameterivEXT", "glGetFramebufferParameterivMESA", "glGetGraphicsResetStatus", "glGetGraphicsResetStatusARB", "glGetImageHandleARB", "glGetImageHandleNV", "glGetInteger64i_v", "glGetInteger64v", "glGetIntegerIndexedvEXT", "glGetIntegeri_v", "glGetIntegerui64i_vNV", "glGetIntegerui64vNV", "glGetIntegerv", "glGetInternalformatSampleivNV", "glGetInternalformati64v", "glGetInternalformativ", "glGetMemoryObjectDetachedResourcesuivNV", "glGetMultiTexEnvfvEXT", "glGetMultiTexEnvivEXT", "glGetMultiTexGendvEXT", "glGetMultiTexGenfvEXT", "glGetMultiTexGenivEXT", "glGetMultiTexImageEXT", "glGetMultiTexLevelParameterfvEXT", "glGetMultiTexLevelParameterivEXT", "glGetMultiTexParameterIivEXT", "glGetMultiTexParameterIuivEXT", "glGetMultiTexParameterfvEXT", "glGetMultiTexParameterivEXT", "glGetMultisamplefv", "glGetNamedBufferParameteri64v", "glGetNamedBufferParameteriv", "glGetNamedBufferParameterivEXT", "glGetNamedBufferParameterui64vNV", "glGetNamedBufferPointerv", "glGetNamedBufferPointervEXT", "glGetNamedBufferSubData", "glGetNamedBufferSubDataEXT", "glGetNamedFramebufferAttachmentParameteriv", "glGetNamedFramebufferAttachmentParameterivEXT", "glGetNamedFramebufferParameteriv", "glGetNamedFramebufferParameterivEXT", "glGetNamedProgramLocalParameterIivEXT", "glGetNamedProgramLocalParameterIuivEXT", "glGetNamedProgramLocalParameterdvEXT", "glGetNamedProgramLocalParameterfvEXT", "glGetNamedProgramStringEXT", "glGetNamedProgramivEXT", "glGetNamedRenderbufferParameteriv", "glGetNamedRenderbufferParameterivEXT", "glGetNamedStringARB", "glGetNamedStringivARB", "glGetNextPerfQueryIdINTEL", "glGetObjectLabel", "glGetObjectLabelEXT", "glGetObjectPtrLabel", "glGetPathCommandsNV", "glGetPathCoordsNV", "glGetPathDashArrayNV", "glGetPathLengthNV", "glGetPathMetricRangeNV", "glGetPathMetricsNV", "glGetPathParameterfvNV", "glGetPathParameterivNV", "glGetPathSpacingNV", "glGetPerfCounterInfoINTEL", "glGetPerfMonitorCounterDataAMD", "glGetPerfMonitorCounterInfoAMD", "glGetPerfMonitorCounterStringAMD", "glGetPerfMonitorCountersAMD", "glGetPerfMonitorGroupStringAMD", "glGetPerfMonitorGroupsAMD", "glGetPerfQueryDataINTEL", "glGetPerfQueryIdByNameINTEL", "glGetPerfQueryInfoINTEL", "glGetPointerIndexedvEXT", "glGetPointeri_vEXT", "glGetPointerv", "glGetProgramBinary", "glGetProgramInfoLog", "glGetProgramInterfaceiv", "glGetProgramPipelineInfoLog", "glGetProgramPipelineiv", "glGetProgramResourceIndex", "glGetProgramResourceLocation", "glGetProgramResourceLocationIndex", "glGetProgramResourceName", "glGetProgramResourcefvNV", "glGetProgramResourceiv", "glGetProgramStageiv", "glGetProgramiv", "glGetQueryBufferObjecti64v", "glGetQueryBufferObjectiv", "glGetQueryBufferObjectui64v", "glGetQueryBufferObjectuiv", "glGetQueryIndexediv", "glGetQueryObjecti64v", "glGetQueryObjectiv", "glGetQueryObjectui64v", "glGetQueryObjectuiv", "glGetQueryiv", "glGetRenderbufferParameteriv", "glGetSamplerParameterIiv", "glGetSamplerParameterIuiv", "glGetSamplerParameterfv", "glGetSamplerParameteriv", "glGetShaderInfoLog", "glGetShaderPrecisionFormat", "glGetShaderSource", "glGetShaderiv", "glGetShadingRateImagePaletteNV", "glGetShadingRateSampleLocationivNV", "glGetStageIndexNV", "glGetString", "glGetStringi", "glGetSubroutineIndex", "glGetSubroutineUniformLocation", "glGetSynciv", "glGetTexImage", "glGetTexLevelParameterfv", "glGetTexLevelParameteriv", "glGetTexParameterIiv", "glGetTexParameterIuiv", "glGetTexParameterfv", "glGetTexParameteriv", "glGetTextureHandleARB", "glGetTextureHandleNV", "glGetTextureImage", "glGetTextureImageEXT", "glGetTextureLevelParameterfv", "glGetTextureLevelParameterfvEXT", "glGetTextureLevelParameteriv", "glGetTextureLevelParameterivEXT", "glGetTextureParameterIiv", "glGetTextureParameterIivEXT", "glGetTextureParameterIuiv", "glGetTextureParameterIuivEXT", "glGetTextureParameterfv", "glGetTextureParameterfvEXT", "glGetTextureParameteriv", "glGetTextureParameterivEXT", "glGetTextureSamplerHandleARB", "glGetTextureSamplerHandleNV", "glGetTextureSubImage", "glGetTransformFeedbackVarying", "glGetTransformFeedbacki64_v", "glGetTransformFeedbacki_v", "glGetTransformFeedbackiv", "glGetUniformBlockIndex", "glGetUniformIndices", "glGetUniformLocation", "glGetUniformSubroutineuiv", "glGetUniformdv", "glGetUniformfv", "glGetUniformi64vARB", "glGetUniformi64vNV", "glGetUniformiv", "glGetUniformui64vARB", "glGetUniformui64vNV", "glGetUniformuiv", "glGetVertexArrayIndexed64iv", "glGetVertexArrayIndexediv", "glGetVertexArrayIntegeri_vEXT", "glGetVertexArrayIntegervEXT", "glGetVertexArrayPointeri_vEXT", "glGetVertexArrayPointervEXT", "glGetVertexArrayiv", "glGetVertexAttribIiv", "glGetVertexAttribIuiv", "glGetVertexAttribLdv", "glGetVertexAttribLi64vNV", "glGetVertexAttribLui64vARB", "glGetVertexAttribLui64vNV", "glGetVertexAttribPointerv", "glGetVertexAttribdv", "glGetVertexAttribfv", "glGetVertexAttribiv", "glGetVkProcAddrNV", "glGetnCompressedTexImage", "glGetnCompressedTexImageARB", "glGetnTexImage", "glGetnTexImageARB", "glGetnUniformdv", "glGetnUniformdvARB", "glGetnUniformfv", "glGetnUniformfvARB", "glGetnUniformi64vARB", "glGetnUniformiv", "glGetnUniformivARB", "glGetnUniformui64vARB", "glGetnUniformuiv", "glGetnUniformuivARB", "glHint", "glIndexFormatNV", "glInsertEventMarkerEXT", "glInterpolatePathsNV", "glInvalidateBufferData", "glInvalidateBufferSubData", "glInvalidateFramebuffer", "glInvalidateNamedFramebufferData", "glInvalidateNamedFramebufferSubData", "glInvalidateSubFramebuffer", "glInvalidateTexImage", "glInvalidateTexSubImage", "glIsBuffer", "glIsBufferResidentNV", "glIsCommandListNV", "glIsEnabled", "glIsEnabledIndexedEXT", "glIsEnabledi", "glIsFramebuffer", "glIsImageHandleResidentARB", "glIsImageHandleResidentNV", "glIsNamedBufferResidentNV", "glIsNamedStringARB", "glIsPathNV", "glIsPointInFillPathNV", "glIsPointInStrokePathNV", "glIsProgram", "glIsProgramPipeline", "glIsQuery", "glIsRenderbuffer", "glIsSampler", "glIsShader", "glIsStateNV", "glIsSync", "glIsTexture", "glIsTextureHandleResidentARB", "glIsTextureHandleResidentNV", "glIsTransformFeedback", "glIsVertexArray", "glLabelObjectEXT", "glLineWidth", "glLinkProgram", "glListDrawCommandsStatesClientNV", "glLogicOp", "glMakeBufferNonResidentNV", "glMakeBufferResidentNV", "glMakeImageHandleNonResidentARB", "glMakeImageHandleNonResidentNV", "glMakeImageHandleResidentARB", "glMakeImageHandleResidentNV", "glMakeNamedBufferNonResidentNV", "glMakeNamedBufferResidentNV", "glMakeTextureHandleNonResidentARB", "glMakeTextureHandleNonResidentNV", "glMakeTextureHandleResidentARB", "glMakeTextureHandleResidentNV", "glMapBuffer", "glMapBufferRange", "glMapNamedBuffer", "glMapNamedBufferEXT", "glMapNamedBufferRange", "glMapNamedBufferRangeEXT", "glMatrixFrustumEXT", "glMatrixLoad3x2fNV", "glMatrixLoad3x3fNV", "glMatrixLoadIdentityEXT", "glMatrixLoadTranspose3x3fNV", "glMatrixLoadTransposedEXT", "glMatrixLoadTransposefEXT", "glMatrixLoaddEXT", "glMatrixLoadfEXT", "glMatrixMult3x2fNV", "glMatrixMult3x3fNV", "glMatrixMultTranspose3x3fNV", "glMatrixMultTransposedEXT", "glMatrixMultTransposefEXT", "glMatrixMultdEXT", "glMatrixMultfEXT", "glMatrixOrthoEXT", "glMatrixPopEXT", "glMatrixPushEXT", "glMatrixRotatedEXT", "glMatrixRotatefEXT", "glMatrixScaledEXT", "glMatrixScalefEXT", "glMatrixTranslatedEXT", "glMatrixTranslatefEXT", "glMaxShaderCompilerThreadsARB", "glMaxShaderCompilerThreadsKHR", "glMemoryBarrier", "glMemoryBarrierByRegion", "glMinSampleShading", "glMinSampleShadingARB", "glMultiDrawArrays", "glMultiDrawArraysIndirect", "glMultiDrawArraysIndirectBindlessCountNV", "glMultiDrawArraysIndirectBindlessNV", "glMultiDrawArraysIndirectCount", "glMultiDrawArraysIndirectCountARB", "glMultiDrawElements", "glMultiDrawElementsBaseVertex", "glMultiDrawElementsIndirect", "glMultiDrawElementsIndirectBindlessCountNV", "glMultiDrawElementsIndirectBindlessNV", "glMultiDrawElementsIndirectCount", "glMultiDrawElementsIndirectCountARB", "glMultiDrawMeshTasksIndirectCountNV", "glMultiDrawMeshTasksIndirectNV", "glMultiTexBufferEXT", "glMultiTexCoordPointerEXT", "glMultiTexEnvfEXT", "glMultiTexEnvfvEXT", "glMultiTexEnviEXT", "glMultiTexEnvivEXT", "glMultiTexGendEXT", "glMultiTexGendvEXT", "glMultiTexGenfEXT", "glMultiTexGenfvEXT", "glMultiTexGeniEXT", "glMultiTexGenivEXT", "glMultiTexImage1DEXT", "glMultiTexImage2DEXT", "glMultiTexImage3DEXT", "glMultiTexParameterIivEXT", "glMultiTexParameterIuivEXT", "glMultiTexParameterfEXT", "glMultiTexParameterfvEXT", "glMultiTexParameteriEXT", "glMultiTexParameterivEXT", "glMultiTexRenderbufferEXT", "glMultiTexSubImage1DEXT", "glMultiTexSubImage2DEXT", "glMultiTexSubImage3DEXT", "glNamedBufferAttachMemoryNV", "glNamedBufferData", "glNamedBufferDataEXT", "glNamedBufferPageCommitmentARB", "glNamedBufferPageCommitmentEXT", "glNamedBufferPageCommitmentMemNV", "glNamedBufferStorage", "glNamedBufferStorageEXT", "glNamedBufferSubData", "glNamedBufferSubDataEXT", "glNamedCopyBufferSubDataEXT", "glNamedFramebufferDrawBuffer", "glNamedFramebufferDrawBuffers", "glNamedFramebufferParameteri", "glNamedFramebufferParameteriEXT", "glNamedFramebufferReadBuffer", "glNamedFramebufferRenderbuffer", "glNamedFramebufferRenderbufferEXT", "glNamedFramebufferSampleLocationsfvARB", "glNamedFramebufferSampleLocationsfvNV", "glNamedFramebufferTexture", "glNamedFramebufferTexture1DEXT", "glNamedFramebufferTexture2DEXT", "glNamedFramebufferTexture3DEXT", "glNamedFramebufferTextureEXT", "glNamedFramebufferTextureFaceEXT", "glNamedFramebufferTextureLayer", "glNamedFramebufferTextureLayerEXT", "glNamedProgramLocalParameter4dEXT", "glNamedProgramLocalParameter4dvEXT", "glNamedProgramLocalParameter4fEXT", "glNamedProgramLocalParameter4fvEXT", "glNamedProgramLocalParameterI4iEXT", "glNamedProgramLocalParameterI4ivEXT", "glNamedProgramLocalParameterI4uiEXT", "glNamedProgramLocalParameterI4uivEXT", "glNamedProgramLocalParameters4fvEXT", "glNamedProgramLocalParametersI4ivEXT", "glNamedProgramLocalParametersI4uivEXT", "glNamedProgramStringEXT", "glNamedRenderbufferStorage", "glNamedRenderbufferStorageEXT", "glNamedRenderbufferStorageMultisample", "glNamedRenderbufferStorageMultisampleAdvancedAMD", "glNamedRenderbufferStorageMultisampleCoverageEXT", "glNamedRenderbufferStorageMultisampleEXT", "glNamedStringARB", "glNormalFormatNV", "glObjectLabel", "glObjectPtrLabel", "glPatchParameterfv", "glPatchParameteri", "glPathCommandsNV", "glPathCoordsNV", "glPathCoverDepthFuncNV", "glPathDashArrayNV", "glPathGlyphIndexArrayNV", "glPathGlyphIndexRangeNV", "glPathGlyphRangeNV", "glPathGlyphsNV", "glPathMemoryGlyphIndexArrayNV", "glPathParameterfNV", "glPathParameterfvNV", "glPathParameteriNV", "glPathParameterivNV", "glPathStencilDepthOffsetNV", "glPathStencilFuncNV", "glPathStringNV", "glPathSubCommandsNV", "glPathSubCoordsNV", "glPauseTransformFeedback", "glPixelStoref", "glPixelStorei", "glPointAlongPathNV", "glPointParameterf", "glPointParameterfv", "glPointParameteri", "glPointParameteriv", "glPointSize", "glPolygonMode", "glPolygonOffset", "glPolygonOffsetClamp", "glPolygonOffsetClampEXT", "glPopDebugGroup", "glPopGroupMarkerEXT", "glPrimitiveBoundingBoxARB", "glPrimitiveRestartIndex", "glProgramBinary", "glProgramParameteri", "glProgramParameteriARB", "glProgramPathFragmentInputGenNV", "glProgramUniform1d", "glProgramUniform1dEXT", "glProgramUniform1dv", "glProgramUniform1dvEXT", "glProgramUniform1f", "glProgramUniform1fEXT", "glProgramUniform1fv", "glProgramUniform1fvEXT", "glProgramUniform1i", "glProgramUniform1i64ARB", "glProgramUniform1i64NV", "glProgramUniform1i64vARB", "glProgramUniform1i64vNV", "glProgramUniform1iEXT", "glProgramUniform1iv", "glProgramUniform1ivEXT", "glProgramUniform1ui", "glProgramUniform1ui64ARB", "glProgramUniform1ui64NV", "glProgramUniform1ui64vARB", "glProgramUniform1ui64vNV", "glProgramUniform1uiEXT", "glProgramUniform1uiv", "glProgramUniform1uivEXT", "glProgramUniform2d", "glProgramUniform2dEXT", "glProgramUniform2dv", "glProgramUniform2dvEXT", "glProgramUniform2f", "glProgramUniform2fEXT", "glProgramUniform2fv", "glProgramUniform2fvEXT", "glProgramUniform2i", "glProgramUniform2i64ARB", "glProgramUniform2i64NV", "glProgramUniform2i64vARB", "glProgramUniform2i64vNV", "glProgramUniform2iEXT", "glProgramUniform2iv", "glProgramUniform2ivEXT", "glProgramUniform2ui", "glProgramUniform2ui64ARB", "glProgramUniform2ui64NV", "glProgramUniform2ui64vARB", "glProgramUniform2ui64vNV", "glProgramUniform2uiEXT", "glProgramUniform2uiv", "glProgramUniform2uivEXT", "glProgramUniform3d", "glProgramUniform3dEXT", "glProgramUniform3dv", "glProgramUniform3dvEXT", "glProgramUniform3f", "glProgramUniform3fEXT", "glProgramUniform3fv", "glProgramUniform3fvEXT", "glProgramUniform3i", "glProgramUniform3i64ARB", "glProgramUniform3i64NV", "glProgramUniform3i64vARB", "glProgramUniform3i64vNV", "glProgramUniform3iEXT", "glProgramUniform3iv", "glProgramUniform3ivEXT", "glProgramUniform3ui", "glProgramUniform3ui64ARB", "glProgramUniform3ui64NV", "glProgramUniform3ui64vARB", "glProgramUniform3ui64vNV", "glProgramUniform3uiEXT", "glProgramUniform3uiv", "glProgramUniform3uivEXT", "glProgramUniform4d", "glProgramUniform4dEXT", "glProgramUniform4dv", "glProgramUniform4dvEXT", "glProgramUniform4f", "glProgramUniform4fEXT", "glProgramUniform4fv", "glProgramUniform4fvEXT", "glProgramUniform4i", "glProgramUniform4i64ARB", "glProgramUniform4i64NV", "glProgramUniform4i64vARB", "glProgramUniform4i64vNV", "glProgramUniform4iEXT", "glProgramUniform4iv", "glProgramUniform4ivEXT", "glProgramUniform4ui", "glProgramUniform4ui64ARB", "glProgramUniform4ui64NV", "glProgramUniform4ui64vARB", "glProgramUniform4ui64vNV", "glProgramUniform4uiEXT", "glProgramUniform4uiv", "glProgramUniform4uivEXT", "glProgramUniformHandleui64ARB", "glProgramUniformHandleui64NV", "glProgramUniformHandleui64vARB", "glProgramUniformHandleui64vNV", "glProgramUniformMatrix2dv", "glProgramUniformMatrix2dvEXT", "glProgramUniformMatrix2fv", "glProgramUniformMatrix2fvEXT", "glProgramUniformMatrix2x3dv", "glProgramUniformMatrix2x3dvEXT", "glProgramUniformMatrix2x3fv", "glProgramUniformMatrix2x3fvEXT", "glProgramUniformMatrix2x4dv", "glProgramUniformMatrix2x4dvEXT", "glProgramUniformMatrix2x4fv", "glProgramUniformMatrix2x4fvEXT", "glProgramUniformMatrix3dv", "glProgramUniformMatrix3dvEXT", "glProgramUniformMatrix3fv", "glProgramUniformMatrix3fvEXT", "glProgramUniformMatrix3x2dv", "glProgramUniformMatrix3x2dvEXT", "glProgramUniformMatrix3x2fv", "glProgramUniformMatrix3x2fvEXT", "glProgramUniformMatrix3x4dv", "glProgramUniformMatrix3x4dvEXT", "glProgramUniformMatrix3x4fv", "glProgramUniformMatrix3x4fvEXT", "glProgramUniformMatrix4dv", "glProgramUniformMatrix4dvEXT", "glProgramUniformMatrix4fv", "glProgramUniformMatrix4fvEXT", "glProgramUniformMatrix4x2dv", "glProgramUniformMatrix4x2dvEXT", "glProgramUniformMatrix4x2fv", "glProgramUniformMatrix4x2fvEXT", "glProgramUniformMatrix4x3dv", "glProgramUniformMatrix4x3dvEXT", "glProgramUniformMatrix4x3fv", "glProgramUniformMatrix4x3fvEXT", "glProgramUniformui64NV", "glProgramUniformui64vNV", "glProvokingVertex", "glPushClientAttribDefaultEXT", "glPushDebugGroup", "glPushGroupMarkerEXT", "glQueryCounter", "glRasterSamplesEXT", "glReadBuffer", "glReadPixels", "glReadnPixels", "glReadnPixelsARB", "glReleaseShaderCompiler", "glRenderbufferStorage", "glRenderbufferStorageMultisample", "glRenderbufferStorageMultisampleAdvancedAMD", "glRenderbufferStorageMultisampleCoverageNV", "glResetMemoryObjectParameterNV", "glResolveDepthValuesNV", "glResumeTransformFeedback", "glSampleCoverage", "glSampleMaski", "glSamplerParameterIiv", "glSamplerParameterIuiv", "glSamplerParameterf", "glSamplerParameterfv", "glSamplerParameteri", "glSamplerParameteriv", "glScissor", "glScissorArrayv", "glScissorExclusiveArrayvNV", "glScissorExclusiveNV", "glScissorIndexed", "glScissorIndexedv", "glSecondaryColorFormatNV", "glSelectPerfMonitorCountersAMD", "glShaderBinary", "glShaderSource", "glShaderStorageBlockBinding", "glShadingRateImageBarrierNV", "glShadingRateImagePaletteNV", "glShadingRateSampleOrderCustomNV", "glShadingRateSampleOrderNV", "glSignalVkFenceNV", "glSignalVkSemaphoreNV", "glSpecializeShader", "glSpecializeShaderARB", "glStateCaptureNV", "glStencilFillPathInstancedNV", "glStencilFillPathNV", "glStencilFunc", "glStencilFuncSeparate", "glStencilMask", "glStencilMaskSeparate", "glStencilOp", "glStencilOpSeparate", "glStencilStrokePathInstancedNV", "glStencilStrokePathNV", "glStencilThenCoverFillPathInstancedNV", "glStencilThenCoverFillPathNV", "glStencilThenCoverStrokePathInstancedNV", "glStencilThenCoverStrokePathNV", "glSubpixelPrecisionBiasNV", "glTexAttachMemoryNV", "glTexBuffer", "glTexBufferARB", "glTexBufferRange", "glTexCoordFormatNV", "glTexImage1D", "glTexImage2D", "glTexImage2DMultisample", "glTexImage3D", "glTexImage3DMultisample", "glTexPageCommitmentARB", "glTexPageCommitmentMemNV", "glTexParameterIiv", "glTexParameterIuiv", "glTexParameterf", "glTexParameterfv", "glTexParameteri", "glTexParameteriv", "glTexStorage1D", "glTexStorage1DEXT", "glTexStorage2D", "glTexStorage2DEXT", "glTexStorage2DMultisample", "glTexStorage3D", "glTexStorage3DEXT", "glTexStorage3DMultisample", "glTexSubImage1D", "glTexSubImage2D", "glTexSubImage3D", "glTextureAttachMemoryNV", "glTextureBarrier", "glTextureBarrierNV", "glTextureBuffer", "glTextureBufferEXT", "glTextureBufferRange", "glTextureBufferRangeEXT", "glTextureImage1DEXT", "glTextureImage2DEXT", "glTextureImage3DEXT", "glTexturePageCommitmentEXT", "glTexturePageCommitmentMemNV", "glTextureParameterIiv", "glTextureParameterIivEXT", "glTextureParameterIuiv", "glTextureParameterIuivEXT", "glTextureParameterf", "glTextureParameterfEXT", "glTextureParameterfv", "glTextureParameterfvEXT", "glTextureParameteri", "glTextureParameteriEXT", "glTextureParameteriv", "glTextureParameterivEXT", "glTextureRenderbufferEXT", "glTextureStorage1D", "glTextureStorage1DEXT", "glTextureStorage2D", "glTextureStorage2DEXT", "glTextureStorage2DMultisample", "glTextureStorage2DMultisampleEXT", "glTextureStorage3D", "glTextureStorage3DEXT", "glTextureStorage3DMultisample", "glTextureStorage3DMultisampleEXT", "glTextureSubImage1D", "glTextureSubImage1DEXT", "glTextureSubImage2D", "glTextureSubImage2DEXT", "glTextureSubImage3D", "glTextureSubImage3DEXT", "glTextureView", "glTransformFeedbackBufferBase", "glTransformFeedbackBufferRange", "glTransformFeedbackVaryings", "glTransformPathNV", "glUniform1d", "glUniform1dv", "glUniform1f", "glUniform1fv", "glUniform1i", "glUniform1i64ARB", "glUniform1i64NV", "glUniform1i64vARB", "glUniform1i64vNV", "glUniform1iv", "glUniform1ui", "glUniform1ui64ARB", "glUniform1ui64NV", "glUniform1ui64vARB", "glUniform1ui64vNV", "glUniform1uiv", "glUniform2d", "glUniform2dv", "glUniform2f", "glUniform2fv", "glUniform2i", "glUniform2i64ARB", "glUniform2i64NV", "glUniform2i64vARB", "glUniform2i64vNV", "glUniform2iv", "glUniform2ui", "glUniform2ui64ARB", "glUniform2ui64NV", "glUniform2ui64vARB", "glUniform2ui64vNV", "glUniform2uiv", "glUniform3d", "glUniform3dv", "glUniform3f", "glUniform3fv", "glUniform3i", "glUniform3i64ARB", "glUniform3i64NV", "glUniform3i64vARB", "glUniform3i64vNV", "glUniform3iv", "glUniform3ui", "glUniform3ui64ARB", "glUniform3ui64NV", "glUniform3ui64vARB", "glUniform3ui64vNV", "glUniform3uiv", "glUniform4d", "glUniform4dv", "glUniform4f", "glUniform4fv", "glUniform4i", "glUniform4i64ARB", "glUniform4i64NV", "glUniform4i64vARB", "glUniform4i64vNV", "glUniform4iv", "glUniform4ui", "glUniform4ui64ARB", "glUniform4ui64NV", "glUniform4ui64vARB", "glUniform4ui64vNV", "glUniform4uiv", "glUniformBlockBinding", "glUniformHandleui64ARB", "glUniformHandleui64NV", "glUniformHandleui64vARB", "glUniformHandleui64vNV", "glUniformMatrix2dv", "glUniformMatrix2fv", "glUniformMatrix2x3dv", "glUniformMatrix2x3fv", "glUniformMatrix2x4dv", "glUniformMatrix2x4fv", "glUniformMatrix3dv", "glUniformMatrix3fv", "glUniformMatrix3x2dv", "glUniformMatrix3x2fv", "glUniformMatrix3x4dv", "glUniformMatrix3x4fv", "glUniformMatrix4dv", "glUniformMatrix4fv", "glUniformMatrix4x2dv", "glUniformMatrix4x2fv", "glUniformMatrix4x3dv", "glUniformMatrix4x3fv", "glUniformSubroutinesuiv", "glUniformui64NV", "glUniformui64vNV", "glUnmapBuffer", "glUnmapNamedBuffer", "glUnmapNamedBufferEXT", "glUseProgram", "glUseProgramStages", "glUseShaderProgramEXT", "glValidateProgram", "glValidateProgramPipeline", "glVertexArrayAttribBinding", "glVertexArrayAttribFormat", "glVertexArrayAttribIFormat", "glVertexArrayAttribLFormat", "glVertexArrayBindVertexBufferEXT", "glVertexArrayBindingDivisor", "glVertexArrayColorOffsetEXT", "glVertexArrayEdgeFlagOffsetEXT", "glVertexArrayElementBuffer", "glVertexArrayFogCoordOffsetEXT", "glVertexArrayIndexOffsetEXT", "glVertexArrayMultiTexCoordOffsetEXT", "glVertexArrayNormalOffsetEXT", "glVertexArraySecondaryColorOffsetEXT", "glVertexArrayTexCoordOffsetEXT", "glVertexArrayVertexAttribBindingEXT", "glVertexArrayVertexAttribDivisorEXT", "glVertexArrayVertexAttribFormatEXT", "glVertexArrayVertexAttribIFormatEXT", "glVertexArrayVertexAttribIOffsetEXT", "glVertexArrayVertexAttribLFormatEXT", "glVertexArrayVertexAttribLOffsetEXT", "glVertexArrayVertexAttribOffsetEXT", "glVertexArrayVertexBindingDivisorEXT", "glVertexArrayVertexBuffer", "glVertexArrayVertexBuffers", "glVertexArrayVertexOffsetEXT", "glVertexAttrib1d", "glVertexAttrib1dv", "glVertexAttrib1f", "glVertexAttrib1fv", "glVertexAttrib1s", "glVertexAttrib1sv", "glVertexAttrib2d", "glVertexAttrib2dv", "glVertexAttrib2f", "glVertexAttrib2fv", "glVertexAttrib2s", "glVertexAttrib2sv", "glVertexAttrib3d", "glVertexAttrib3dv", "glVertexAttrib3f", "glVertexAttrib3fv", "glVertexAttrib3s", "glVertexAttrib3sv", "glVertexAttrib4Nbv", "glVertexAttrib4Niv", "glVertexAttrib4Nsv", "glVertexAttrib4Nub", "glVertexAttrib4Nubv", "glVertexAttrib4Nuiv", "glVertexAttrib4Nusv", "glVertexAttrib4bv", "glVertexAttrib4d", "glVertexAttrib4dv", "glVertexAttrib4f", "glVertexAttrib4fv", "glVertexAttrib4iv", "glVertexAttrib4s", "glVertexAttrib4sv", "glVertexAttrib4ubv", "glVertexAttrib4uiv", "glVertexAttrib4usv", "glVertexAttribBinding", "glVertexAttribDivisor", "glVertexAttribDivisorARB", "glVertexAttribFormat", "glVertexAttribFormatNV", "glVertexAttribI1i", "glVertexAttribI1iv", "glVertexAttribI1ui", "glVertexAttribI1uiv", "glVertexAttribI2i", "glVertexAttribI2iv", "glVertexAttribI2ui", "glVertexAttribI2uiv", "glVertexAttribI3i", "glVertexAttribI3iv", "glVertexAttribI3ui", "glVertexAttribI3uiv", "glVertexAttribI4bv", "glVertexAttribI4i", "glVertexAttribI4iv", "glVertexAttribI4sv", "glVertexAttribI4ubv", "glVertexAttribI4ui", "glVertexAttribI4uiv", "glVertexAttribI4usv", "glVertexAttribIFormat", "glVertexAttribIFormatNV", "glVertexAttribIPointer", "glVertexAttribL1d", "glVertexAttribL1dv", "glVertexAttribL1i64NV", "glVertexAttribL1i64vNV", "glVertexAttribL1ui64ARB", "glVertexAttribL1ui64NV", "glVertexAttribL1ui64vARB", "glVertexAttribL1ui64vNV", "glVertexAttribL2d", "glVertexAttribL2dv", "glVertexAttribL2i64NV", "glVertexAttribL2i64vNV", "glVertexAttribL2ui64NV", "glVertexAttribL2ui64vNV", "glVertexAttribL3d", "glVertexAttribL3dv", "glVertexAttribL3i64NV", "glVertexAttribL3i64vNV", "glVertexAttribL3ui64NV", "glVertexAttribL3ui64vNV", "glVertexAttribL4d", "glVertexAttribL4dv", "glVertexAttribL4i64NV", "glVertexAttribL4i64vNV", "glVertexAttribL4ui64NV", "glVertexAttribL4ui64vNV", "glVertexAttribLFormat", "glVertexAttribLFormatNV", "glVertexAttribLPointer", "glVertexAttribP1ui", "glVertexAttribP1uiv", "glVertexAttribP2ui", "glVertexAttribP2uiv", "glVertexAttribP3ui", "glVertexAttribP3uiv", "glVertexAttribP4ui", "glVertexAttribP4uiv", "glVertexAttribPointer", "glVertexBindingDivisor", "glVertexFormatNV", "glViewport", "glViewportArrayv", "glViewportIndexedf", "glViewportIndexedfv", "glViewportPositionWScaleNV", "glViewportSwizzleNV", "glWaitSync", "glWaitVkSemaphoreNV", "glWeightPathsNV", "glWindowRectanglesEXT", }; GL3W_API union GL3WProcs gl3wProcs; static void load_procs(GL3WGetProcAddressProc proc) { size_t i; for (i = 0; i < ARRAY_SIZE(proc_names); i++) gl3wProcs.ptr[i] = proc(proc_names[i]); }