// clang-format off
/*

    OpenGL loader generated by glad 0.1.36 on Fri Dec 13 11:09:40 2024.

    Language/Generator: C/C++
    Specification: gl
    APIs: gl=3.3
    Profile: core
    Extensions:
        GL_ARB_shader_subroutine,
        GL_ARB_texture_filter_anisotropic,
        GL_KHR_debug
    Loader: True
    Local files: True
    Omit khrplatform: False
    Reproducible: False

    Commandline:
        --profile="core" --api="gl=3.3" --generator="c" --spec="gl"
   --local-files
   --extensions="GL_ARB_shader_subroutine,GL_ARB_texture_filter_anisotropic,GL_KHR_debug"
    Online:
        https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D3.3&extensions=GL_ARB_shader_subroutine&extensions=GL_ARB_texture_filter_anisotropic&extensions=GL_KHR_debug
*/

#include "glad.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static void *get_proc( const char *namez );

#if defined( _WIN32 ) || defined( __CYGWIN__ )
#ifndef _WINDOWS_
#undef APIENTRY
#endif
#include <windows.h>
static HMODULE libGL;

typedef void *(APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)( const char * );
static PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr;

#ifdef _MSC_VER
#ifdef __has_include
#if __has_include( <winapifamily.h>)
#define HAVE_WINAPIFAMILY 1
#endif
#elif _MSC_VER >= 1700 && !_USING_V110_SDK71_
#define HAVE_WINAPIFAMILY 1
#endif
#endif

#ifdef HAVE_WINAPIFAMILY
#include <winapifamily.h>
#if !WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP ) &&                    \
   WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
#define IS_UWP 1
#endif
#endif

static int open_gl( void )
{
#ifndef IS_UWP
   libGL = LoadLibraryW( L"opengl32.dll" );
   if ( libGL != NULL ) {
      void ( *tmp )( void );
      tmp = (void ( * )( void ))GetProcAddress( libGL, "wglGetProcAddress" );
      gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE)tmp;
      return gladGetProcAddressPtr != NULL;
   }
#endif

   return 0;
}

static void close_gl( void )
{
   if ( libGL != NULL ) {
      FreeLibrary( (HMODULE)libGL );
      libGL = NULL;
   }
}
#else
#include <dlfcn.h>
static void *libGL;

#if !defined( SDL_PLATFORM_APPLE ) && !defined( SDL_PLATFORM_HAIKU )
typedef void *(APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)( const char * );
static PFNGLXGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr;
#endif

static int open_gl( void )
{
#ifdef SDL_PLATFORM_APPLE
   static const char *NAMES[] = {
      "../Frameworks/OpenGL.framework/OpenGL",
      "/Library/Frameworks/OpenGL.framework/OpenGL",
      "/System/Library/Frameworks/OpenGL.framework/OpenGL",
      "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL" };
#else
   static const char *NAMES[] = { "libGL.so.1", "libGL.so" };
#endif

   unsigned int index = 0;
   for ( index = 0; index < ( sizeof( NAMES ) / sizeof( NAMES[0] ) );
         index++ ) {
      libGL = dlopen( NAMES[index], RTLD_NOW | RTLD_GLOBAL );

      if ( libGL != NULL ) {
#if defined( SDL_PLATFORM_APPLE ) || defined( SDL_PLATFORM_HAIKU )
         return 1;
#else
         gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(
            libGL, "glXGetProcAddressARB" );
         return gladGetProcAddressPtr != NULL;
#endif
      }
   }

   return 0;
}

static void close_gl( void )
{
   if ( libGL != NULL ) {
      dlclose( libGL );
      libGL = NULL;
   }
}
#endif

static void *get_proc( const char *namez )
{
   void *result = NULL;
   if ( libGL == NULL )
      return NULL;

#if !defined( SDL_PLATFORM_APPLE ) && !defined( SDL_PLATFORM_HAIKU )
   if ( gladGetProcAddressPtr != NULL ) {
      result = gladGetProcAddressPtr( namez );
   }
#endif
   if ( result == NULL ) {
#if defined( _WIN32 ) || defined( __CYGWIN__ )
      result = (void *)GetProcAddress( (HMODULE)libGL, namez );
#else
      result = dlsym( libGL, namez );
#endif
   }

   return result;
}

int gladLoadGL( void )
{
   int status = 0;

   if ( open_gl() ) {
      status = gladLoadGLLoader( &get_proc );
      close_gl();
   }

   return status;
}

struct gladGLversionStruct GLVersion = { 0, 0 };

#if defined( GL_ES_VERSION_3_0 ) || defined( GL_VERSION_3_0 )
#define _GLAD_IS_SOME_NEW_VERSION 1
#endif

static int max_loaded_major;
static int max_loaded_minor;

static const char *exts       = NULL;
static int         num_exts_i = 0;
static char      **exts_i     = NULL;

static int get_exts( void )
{
#ifdef _GLAD_IS_SOME_NEW_VERSION
   if ( max_loaded_major < 3 ) {
#endif
      exts = (const char *)glGetString( GL_EXTENSIONS );
#ifdef _GLAD_IS_SOME_NEW_VERSION
   } else {
      int index;

      num_exts_i = 0;
      glGetIntegerv( GL_NUM_EXTENSIONS, &num_exts_i );
      if ( num_exts_i > 0 ) {
         exts_i = (char **)malloc( (size_t)num_exts_i * ( sizeof *exts_i ) );
      }

      if ( exts_i == NULL ) {
         return 0;
      }

      for ( index = 0; index < num_exts_i; index++ ) {
         const char *gl_str_tmp =
            (const char *)glGetStringi( GL_EXTENSIONS, index );
         size_t len = strlen( gl_str_tmp );

         char *local_str = (char *)malloc( ( len + 1 ) * sizeof( char ) );
         if ( local_str != NULL ) {
            memcpy( local_str, gl_str_tmp, ( len + 1 ) * sizeof( char ) );
         }
         exts_i[index] = local_str;
      }
   }
#endif
   return 1;
}

static void free_exts( void )
{
   if ( exts_i != NULL ) {
      int index;
      for ( index = 0; index < num_exts_i; index++ ) {
         free( (char *)exts_i[index] );
      }
      free( (void *)exts_i );
      exts_i = NULL;
   }
}

static int has_ext( const char *ext )
{
#ifdef _GLAD_IS_SOME_NEW_VERSION
   if ( max_loaded_major < 3 ) {
#endif
      const char *extensions;
      const char *loc;
      const char *terminator;
      extensions = exts;
      if ( extensions == NULL || ext == NULL ) {
         return 0;
      }

      while ( 1 ) {
         loc = strstr( extensions, ext );
         if ( loc == NULL ) {
            return 0;
         }

         terminator = loc + strlen( ext );
         if ( ( loc == extensions || *( loc - 1 ) == ' ' ) &&
              ( *terminator == ' ' || *terminator == '\0' ) ) {
            return 1;
         }
         extensions = terminator;
      }
#ifdef _GLAD_IS_SOME_NEW_VERSION
   } else {
      int index;
      if ( exts_i == NULL )
         return 0;
      for ( index = 0; index < num_exts_i; index++ ) {
         const char *e = exts_i[index];

         if ( exts_i[index] != NULL && strcmp( e, ext ) == 0 ) {
            return 1;
         }
      }
   }
#endif

   return 0;
}
int                                  GLAD_GL_VERSION_1_0                = 0;
int                                  GLAD_GL_VERSION_1_1                = 0;
int                                  GLAD_GL_VERSION_1_2                = 0;
int                                  GLAD_GL_VERSION_1_3                = 0;
int                                  GLAD_GL_VERSION_1_4                = 0;
int                                  GLAD_GL_VERSION_1_5                = 0;
int                                  GLAD_GL_VERSION_2_0                = 0;
int                                  GLAD_GL_VERSION_2_1                = 0;
int                                  GLAD_GL_VERSION_3_0                = 0;
int                                  GLAD_GL_VERSION_3_1                = 0;
int                                  GLAD_GL_VERSION_3_2                = 0;
int                                  GLAD_GL_VERSION_3_3                = 0;
PFNGLACTIVETEXTUREPROC               glad_glActiveTexture               = NULL;
PFNGLATTACHSHADERPROC                glad_glAttachShader                = NULL;
PFNGLBEGINCONDITIONALRENDERPROC      glad_glBeginConditionalRender      = NULL;
PFNGLBEGINQUERYPROC                  glad_glBeginQuery                  = NULL;
PFNGLBEGINTRANSFORMFEEDBACKPROC      glad_glBeginTransformFeedback      = NULL;
PFNGLBINDATTRIBLOCATIONPROC          glad_glBindAttribLocation          = NULL;
PFNGLBINDBUFFERPROC                  glad_glBindBuffer                  = NULL;
PFNGLBINDBUFFERBASEPROC              glad_glBindBufferBase              = NULL;
PFNGLBINDBUFFERRANGEPROC             glad_glBindBufferRange             = NULL;
PFNGLBINDFRAGDATALOCATIONPROC        glad_glBindFragDataLocation        = NULL;
PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed = NULL;
PFNGLBINDFRAMEBUFFERPROC             glad_glBindFramebuffer             = NULL;
PFNGLBINDRENDERBUFFERPROC            glad_glBindRenderbuffer            = NULL;
PFNGLBINDSAMPLERPROC                 glad_glBindSampler                 = NULL;
PFNGLBINDTEXTUREPROC                 glad_glBindTexture                 = NULL;
PFNGLBINDVERTEXARRAYPROC             glad_glBindVertexArray             = NULL;
PFNGLBLENDCOLORPROC                  glad_glBlendColor                  = NULL;
PFNGLBLENDEQUATIONPROC               glad_glBlendEquation               = NULL;
PFNGLBLENDEQUATIONSEPARATEPROC       glad_glBlendEquationSeparate       = NULL;
PFNGLBLENDFUNCPROC                   glad_glBlendFunc                   = NULL;
PFNGLBLENDFUNCSEPARATEPROC           glad_glBlendFuncSeparate           = NULL;
PFNGLBLITFRAMEBUFFERPROC             glad_glBlitFramebuffer             = NULL;
PFNGLBUFFERDATAPROC                  glad_glBufferData                  = NULL;
PFNGLBUFFERSUBDATAPROC               glad_glBufferSubData               = NULL;
PFNGLCHECKFRAMEBUFFERSTATUSPROC      glad_glCheckFramebufferStatus      = NULL;
PFNGLCLAMPCOLORPROC                  glad_glClampColor                  = NULL;
PFNGLCLEARPROC                       glad_glClear                       = NULL;
PFNGLCLEARBUFFERFIPROC               glad_glClearBufferfi               = NULL;
PFNGLCLEARBUFFERFVPROC               glad_glClearBufferfv               = NULL;
PFNGLCLEARBUFFERIVPROC               glad_glClearBufferiv               = NULL;
PFNGLCLEARBUFFERUIVPROC              glad_glClearBufferuiv              = NULL;
PFNGLCLEARCOLORPROC                  glad_glClearColor                  = NULL;
PFNGLCLEARDEPTHPROC                  glad_glClearDepth                  = NULL;
PFNGLCLEARSTENCILPROC                glad_glClearStencil                = NULL;
PFNGLCLIENTWAITSYNCPROC              glad_glClientWaitSync              = NULL;
PFNGLCOLORMASKPROC                   glad_glColorMask                   = NULL;
PFNGLCOLORMASKIPROC                  glad_glColorMaski                  = NULL;
PFNGLCOLORP3UIPROC                   glad_glColorP3ui                   = NULL;
PFNGLCOLORP3UIVPROC                  glad_glColorP3uiv                  = NULL;
PFNGLCOLORP4UIPROC                   glad_glColorP4ui                   = NULL;
PFNGLCOLORP4UIVPROC                  glad_glColorP4uiv                  = NULL;
PFNGLCOMPILESHADERPROC               glad_glCompileShader               = NULL;
PFNGLCOMPRESSEDTEXIMAGE1DPROC        glad_glCompressedTexImage1D        = NULL;
PFNGLCOMPRESSEDTEXIMAGE2DPROC        glad_glCompressedTexImage2D        = NULL;
PFNGLCOMPRESSEDTEXIMAGE3DPROC        glad_glCompressedTexImage3D        = NULL;
PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC     glad_glCompressedTexSubImage1D     = NULL;
PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC     glad_glCompressedTexSubImage2D     = NULL;
PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC     glad_glCompressedTexSubImage3D     = NULL;
PFNGLCOPYBUFFERSUBDATAPROC           glad_glCopyBufferSubData           = NULL;
PFNGLCOPYTEXIMAGE1DPROC              glad_glCopyTexImage1D              = NULL;
PFNGLCOPYTEXIMAGE2DPROC              glad_glCopyTexImage2D              = NULL;
PFNGLCOPYTEXSUBIMAGE1DPROC           glad_glCopyTexSubImage1D           = NULL;
PFNGLCOPYTEXSUBIMAGE2DPROC           glad_glCopyTexSubImage2D           = NULL;
PFNGLCOPYTEXSUBIMAGE3DPROC           glad_glCopyTexSubImage3D           = NULL;
PFNGLCREATEPROGRAMPROC               glad_glCreateProgram               = NULL;
PFNGLCREATESHADERPROC                glad_glCreateShader                = NULL;
PFNGLCULLFACEPROC                    glad_glCullFace                    = NULL;
PFNGLDELETEBUFFERSPROC               glad_glDeleteBuffers               = NULL;
PFNGLDELETEFRAMEBUFFERSPROC          glad_glDeleteFramebuffers          = NULL;
PFNGLDELETEPROGRAMPROC               glad_glDeleteProgram               = NULL;
PFNGLDELETEQUERIESPROC               glad_glDeleteQueries               = NULL;
PFNGLDELETERENDERBUFFERSPROC         glad_glDeleteRenderbuffers         = NULL;
PFNGLDELETESAMPLERSPROC              glad_glDeleteSamplers              = NULL;
PFNGLDELETESHADERPROC                glad_glDeleteShader                = NULL;
PFNGLDELETESYNCPROC                  glad_glDeleteSync                  = NULL;
PFNGLDELETETEXTURESPROC              glad_glDeleteTextures              = NULL;
PFNGLDELETEVERTEXARRAYSPROC          glad_glDeleteVertexArrays          = NULL;
PFNGLDEPTHFUNCPROC                   glad_glDepthFunc                   = NULL;
PFNGLDEPTHMASKPROC                   glad_glDepthMask                   = NULL;
PFNGLDEPTHRANGEPROC                  glad_glDepthRange                  = NULL;
PFNGLDETACHSHADERPROC                glad_glDetachShader                = NULL;
PFNGLDISABLEPROC                     glad_glDisable                     = NULL;
PFNGLDISABLEVERTEXATTRIBARRAYPROC    glad_glDisableVertexAttribArray    = NULL;
PFNGLDISABLEIPROC                    glad_glDisablei                    = NULL;
PFNGLDRAWARRAYSPROC                  glad_glDrawArrays                  = NULL;
PFNGLDRAWARRAYSINSTANCEDPROC         glad_glDrawArraysInstanced         = NULL;
PFNGLDRAWBUFFERPROC                  glad_glDrawBuffer                  = NULL;
PFNGLDRAWBUFFERSPROC                 glad_glDrawBuffers                 = NULL;
PFNGLDRAWELEMENTSPROC                glad_glDrawElements                = NULL;
PFNGLDRAWELEMENTSBASEVERTEXPROC      glad_glDrawElementsBaseVertex      = NULL;
PFNGLDRAWELEMENTSINSTANCEDPROC       glad_glDrawElementsInstanced       = NULL;
PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC
glad_glDrawElementsInstancedBaseVertex                                  = NULL;
PFNGLDRAWRANGEELEMENTSPROC           glad_glDrawRangeElements           = NULL;
PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex = NULL;
PFNGLENABLEPROC                      glad_glEnable                      = NULL;
PFNGLENABLEVERTEXATTRIBARRAYPROC     glad_glEnableVertexAttribArray     = NULL;
PFNGLENABLEIPROC                     glad_glEnablei                     = NULL;
PFNGLENDCONDITIONALRENDERPROC        glad_glEndConditionalRender        = NULL;
PFNGLENDQUERYPROC                    glad_glEndQuery                    = NULL;
PFNGLENDTRANSFORMFEEDBACKPROC        glad_glEndTransformFeedback        = NULL;
PFNGLFENCESYNCPROC                   glad_glFenceSync                   = NULL;
PFNGLFINISHPROC                      glad_glFinish                      = NULL;
PFNGLFLUSHPROC                       glad_glFlush                       = NULL;
PFNGLFLUSHMAPPEDBUFFERRANGEPROC      glad_glFlushMappedBufferRange      = NULL;
PFNGLFRAMEBUFFERRENDERBUFFERPROC     glad_glFramebufferRenderbuffer     = NULL;
PFNGLFRAMEBUFFERTEXTUREPROC          glad_glFramebufferTexture          = NULL;
PFNGLFRAMEBUFFERTEXTURE1DPROC        glad_glFramebufferTexture1D        = NULL;
PFNGLFRAMEBUFFERTEXTURE2DPROC        glad_glFramebufferTexture2D        = NULL;
PFNGLFRAMEBUFFERTEXTURE3DPROC        glad_glFramebufferTexture3D        = NULL;
PFNGLFRAMEBUFFERTEXTURELAYERPROC     glad_glFramebufferTextureLayer     = NULL;
PFNGLFRONTFACEPROC                   glad_glFrontFace                   = NULL;
PFNGLGENBUFFERSPROC                  glad_glGenBuffers                  = NULL;
PFNGLGENFRAMEBUFFERSPROC             glad_glGenFramebuffers             = NULL;
PFNGLGENQUERIESPROC                  glad_glGenQueries                  = NULL;
PFNGLGENRENDERBUFFERSPROC            glad_glGenRenderbuffers            = NULL;
PFNGLGENSAMPLERSPROC                 glad_glGenSamplers                 = NULL;
PFNGLGENTEXTURESPROC                 glad_glGenTextures                 = NULL;
PFNGLGENVERTEXARRAYSPROC             glad_glGenVertexArrays             = NULL;
PFNGLGENERATEMIPMAPPROC              glad_glGenerateMipmap              = NULL;
PFNGLGETACTIVEATTRIBPROC             glad_glGetActiveAttrib             = NULL;
PFNGLGETACTIVEUNIFORMPROC            glad_glGetActiveUniform            = NULL;
PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC   glad_glGetActiveUniformBlockName   = NULL;
PFNGLGETACTIVEUNIFORMBLOCKIVPROC     glad_glGetActiveUniformBlockiv     = NULL;
PFNGLGETACTIVEUNIFORMNAMEPROC        glad_glGetActiveUniformName        = NULL;
PFNGLGETACTIVEUNIFORMSIVPROC         glad_glGetActiveUniformsiv         = NULL;
PFNGLGETATTACHEDSHADERSPROC          glad_glGetAttachedShaders          = NULL;
PFNGLGETATTRIBLOCATIONPROC           glad_glGetAttribLocation           = NULL;
PFNGLGETBOOLEANI_VPROC               glad_glGetBooleani_v               = NULL;
PFNGLGETBOOLEANVPROC                 glad_glGetBooleanv                 = NULL;
PFNGLGETBUFFERPARAMETERI64VPROC      glad_glGetBufferParameteri64v      = NULL;
PFNGLGETBUFFERPARAMETERIVPROC        glad_glGetBufferParameteriv        = NULL;
PFNGLGETBUFFERPOINTERVPROC           glad_glGetBufferPointerv           = NULL;
PFNGLGETBUFFERSUBDATAPROC            glad_glGetBufferSubData            = NULL;
PFNGLGETCOMPRESSEDTEXIMAGEPROC       glad_glGetCompressedTexImage       = NULL;
PFNGLGETDOUBLEVPROC                  glad_glGetDoublev                  = NULL;
PFNGLGETERRORPROC                    glad_glGetError                    = NULL;
PFNGLGETFLOATVPROC                   glad_glGetFloatv                   = NULL;
PFNGLGETFRAGDATAINDEXPROC            glad_glGetFragDataIndex            = NULL;
PFNGLGETFRAGDATALOCATIONPROC         glad_glGetFragDataLocation         = NULL;
PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC
glad_glGetFramebufferAttachmentParameteriv                              = NULL;
PFNGLGETINTEGER64I_VPROC             glad_glGetInteger64i_v             = NULL;
PFNGLGETINTEGER64VPROC               glad_glGetInteger64v               = NULL;
PFNGLGETINTEGERI_VPROC               glad_glGetIntegeri_v               = NULL;
PFNGLGETINTEGERVPROC                 glad_glGetIntegerv                 = NULL;
PFNGLGETMULTISAMPLEFVPROC            glad_glGetMultisamplefv            = NULL;
PFNGLGETPROGRAMINFOLOGPROC           glad_glGetProgramInfoLog           = NULL;
PFNGLGETPROGRAMIVPROC                glad_glGetProgramiv                = NULL;
PFNGLGETQUERYOBJECTI64VPROC          glad_glGetQueryObjecti64v          = NULL;
PFNGLGETQUERYOBJECTIVPROC            glad_glGetQueryObjectiv            = NULL;
PFNGLGETQUERYOBJECTUI64VPROC         glad_glGetQueryObjectui64v         = NULL;
PFNGLGETQUERYOBJECTUIVPROC           glad_glGetQueryObjectuiv           = NULL;
PFNGLGETQUERYIVPROC                  glad_glGetQueryiv                  = NULL;
PFNGLGETRENDERBUFFERPARAMETERIVPROC  glad_glGetRenderbufferParameteriv  = NULL;
PFNGLGETSAMPLERPARAMETERIIVPROC      glad_glGetSamplerParameterIiv      = NULL;
PFNGLGETSAMPLERPARAMETERIUIVPROC     glad_glGetSamplerParameterIuiv     = NULL;
PFNGLGETSAMPLERPARAMETERFVPROC       glad_glGetSamplerParameterfv       = NULL;
PFNGLGETSAMPLERPARAMETERIVPROC       glad_glGetSamplerParameteriv       = NULL;
PFNGLGETSHADERINFOLOGPROC            glad_glGetShaderInfoLog            = NULL;
PFNGLGETSHADERSOURCEPROC             glad_glGetShaderSource             = NULL;
PFNGLGETSHADERIVPROC                 glad_glGetShaderiv                 = NULL;
PFNGLGETSTRINGPROC                   glad_glGetString                   = NULL;
PFNGLGETSTRINGIPROC                  glad_glGetStringi                  = NULL;
PFNGLGETSYNCIVPROC                   glad_glGetSynciv                   = NULL;
PFNGLGETTEXIMAGEPROC                 glad_glGetTexImage                 = NULL;
PFNGLGETTEXLEVELPARAMETERFVPROC      glad_glGetTexLevelParameterfv      = NULL;
PFNGLGETTEXLEVELPARAMETERIVPROC      glad_glGetTexLevelParameteriv      = NULL;
PFNGLGETTEXPARAMETERIIVPROC          glad_glGetTexParameterIiv          = NULL;
PFNGLGETTEXPARAMETERIUIVPROC         glad_glGetTexParameterIuiv         = NULL;
PFNGLGETTEXPARAMETERFVPROC           glad_glGetTexParameterfv           = NULL;
PFNGLGETTEXPARAMETERIVPROC           glad_glGetTexParameteriv           = NULL;
PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying = NULL;
PFNGLGETUNIFORMBLOCKINDEXPROC        glad_glGetUniformBlockIndex        = NULL;
PFNGLGETUNIFORMINDICESPROC           glad_glGetUniformIndices           = NULL;
PFNGLGETUNIFORMLOCATIONPROC          glad_glGetUniformLocation          = NULL;
PFNGLGETUNIFORMFVPROC                glad_glGetUniformfv                = NULL;
PFNGLGETUNIFORMIVPROC                glad_glGetUniformiv                = NULL;
PFNGLGETUNIFORMUIVPROC               glad_glGetUniformuiv               = NULL;
PFNGLGETVERTEXATTRIBIIVPROC          glad_glGetVertexAttribIiv          = NULL;
PFNGLGETVERTEXATTRIBIUIVPROC         glad_glGetVertexAttribIuiv         = NULL;
PFNGLGETVERTEXATTRIBPOINTERVPROC     glad_glGetVertexAttribPointerv     = NULL;
PFNGLGETVERTEXATTRIBDVPROC           glad_glGetVertexAttribdv           = NULL;
PFNGLGETVERTEXATTRIBFVPROC           glad_glGetVertexAttribfv           = NULL;
PFNGLGETVERTEXATTRIBIVPROC           glad_glGetVertexAttribiv           = NULL;
PFNGLHINTPROC                        glad_glHint                        = NULL;
PFNGLISBUFFERPROC                    glad_glIsBuffer                    = NULL;
PFNGLISENABLEDPROC                   glad_glIsEnabled                   = NULL;
PFNGLISENABLEDIPROC                  glad_glIsEnabledi                  = NULL;
PFNGLISFRAMEBUFFERPROC               glad_glIsFramebuffer               = NULL;
PFNGLISPROGRAMPROC                   glad_glIsProgram                   = NULL;
PFNGLISQUERYPROC                     glad_glIsQuery                     = NULL;
PFNGLISRENDERBUFFERPROC              glad_glIsRenderbuffer              = NULL;
PFNGLISSAMPLERPROC                   glad_glIsSampler                   = NULL;
PFNGLISSHADERPROC                    glad_glIsShader                    = NULL;
PFNGLISSYNCPROC                      glad_glIsSync                      = NULL;
PFNGLISTEXTUREPROC                   glad_glIsTexture                   = NULL;
PFNGLISVERTEXARRAYPROC               glad_glIsVertexArray               = NULL;
PFNGLLINEWIDTHPROC                   glad_glLineWidth                   = NULL;
PFNGLLINKPROGRAMPROC                 glad_glLinkProgram                 = NULL;
PFNGLLOGICOPPROC                     glad_glLogicOp                     = NULL;
PFNGLMAPBUFFERPROC                   glad_glMapBuffer                   = NULL;
PFNGLMAPBUFFERRANGEPROC              glad_glMapBufferRange              = NULL;
PFNGLMULTIDRAWARRAYSPROC             glad_glMultiDrawArrays             = NULL;
PFNGLMULTIDRAWELEMENTSPROC           glad_glMultiDrawElements           = NULL;
PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex = NULL;
PFNGLMULTITEXCOORDP1UIPROC           glad_glMultiTexCoordP1ui           = NULL;
PFNGLMULTITEXCOORDP1UIVPROC          glad_glMultiTexCoordP1uiv          = NULL;
PFNGLMULTITEXCOORDP2UIPROC           glad_glMultiTexCoordP2ui           = NULL;
PFNGLMULTITEXCOORDP2UIVPROC          glad_glMultiTexCoordP2uiv          = NULL;
PFNGLMULTITEXCOORDP3UIPROC           glad_glMultiTexCoordP3ui           = NULL;
PFNGLMULTITEXCOORDP3UIVPROC          glad_glMultiTexCoordP3uiv          = NULL;
PFNGLMULTITEXCOORDP4UIPROC           glad_glMultiTexCoordP4ui           = NULL;
PFNGLMULTITEXCOORDP4UIVPROC          glad_glMultiTexCoordP4uiv          = NULL;
PFNGLNORMALP3UIPROC                  glad_glNormalP3ui                  = NULL;
PFNGLNORMALP3UIVPROC                 glad_glNormalP3uiv                 = NULL;
PFNGLPIXELSTOREFPROC                 glad_glPixelStoref                 = NULL;
PFNGLPIXELSTOREIPROC                 glad_glPixelStorei                 = NULL;
PFNGLPOINTPARAMETERFPROC             glad_glPointParameterf             = NULL;
PFNGLPOINTPARAMETERFVPROC            glad_glPointParameterfv            = NULL;
PFNGLPOINTPARAMETERIPROC             glad_glPointParameteri             = NULL;
PFNGLPOINTPARAMETERIVPROC            glad_glPointParameteriv            = NULL;
PFNGLPOINTSIZEPROC                   glad_glPointSize                   = NULL;
PFNGLPOLYGONMODEPROC                 glad_glPolygonMode                 = NULL;
PFNGLPOLYGONOFFSETPROC               glad_glPolygonOffset               = NULL;
PFNGLPRIMITIVERESTARTINDEXPROC       glad_glPrimitiveRestartIndex       = NULL;
PFNGLPROVOKINGVERTEXPROC             glad_glProvokingVertex             = NULL;
PFNGLQUERYCOUNTERPROC                glad_glQueryCounter                = NULL;
PFNGLREADBUFFERPROC                  glad_glReadBuffer                  = NULL;
PFNGLREADPIXELSPROC                  glad_glReadPixels                  = NULL;
PFNGLRENDERBUFFERSTORAGEPROC         glad_glRenderbufferStorage         = NULL;
PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample =
   NULL;
PFNGLSAMPLECOVERAGEPROC            glad_glSampleCoverage            = NULL;
PFNGLSAMPLEMASKIPROC               glad_glSampleMaski               = NULL;
PFNGLSAMPLERPARAMETERIIVPROC       glad_glSamplerParameterIiv       = NULL;
PFNGLSAMPLERPARAMETERIUIVPROC      glad_glSamplerParameterIuiv      = NULL;
PFNGLSAMPLERPARAMETERFPROC         glad_glSamplerParameterf         = NULL;
PFNGLSAMPLERPARAMETERFVPROC        glad_glSamplerParameterfv        = NULL;
PFNGLSAMPLERPARAMETERIPROC         glad_glSamplerParameteri         = NULL;
PFNGLSAMPLERPARAMETERIVPROC        glad_glSamplerParameteriv        = NULL;
PFNGLSCISSORPROC                   glad_glScissor                   = NULL;
PFNGLSECONDARYCOLORP3UIPROC        glad_glSecondaryColorP3ui        = NULL;
PFNGLSECONDARYCOLORP3UIVPROC       glad_glSecondaryColorP3uiv       = NULL;
PFNGLSHADERSOURCEPROC              glad_glShaderSource              = NULL;
PFNGLSTENCILFUNCPROC               glad_glStencilFunc               = NULL;
PFNGLSTENCILFUNCSEPARATEPROC       glad_glStencilFuncSeparate       = NULL;
PFNGLSTENCILMASKPROC               glad_glStencilMask               = NULL;
PFNGLSTENCILMASKSEPARATEPROC       glad_glStencilMaskSeparate       = NULL;
PFNGLSTENCILOPPROC                 glad_glStencilOp                 = NULL;
PFNGLSTENCILOPSEPARATEPROC         glad_glStencilOpSeparate         = NULL;
PFNGLTEXBUFFERPROC                 glad_glTexBuffer                 = NULL;
PFNGLTEXCOORDP1UIPROC              glad_glTexCoordP1ui              = NULL;
PFNGLTEXCOORDP1UIVPROC             glad_glTexCoordP1uiv             = NULL;
PFNGLTEXCOORDP2UIPROC              glad_glTexCoordP2ui              = NULL;
PFNGLTEXCOORDP2UIVPROC             glad_glTexCoordP2uiv             = NULL;
PFNGLTEXCOORDP3UIPROC              glad_glTexCoordP3ui              = NULL;
PFNGLTEXCOORDP3UIVPROC             glad_glTexCoordP3uiv             = NULL;
PFNGLTEXCOORDP4UIPROC              glad_glTexCoordP4ui              = NULL;
PFNGLTEXCOORDP4UIVPROC             glad_glTexCoordP4uiv             = NULL;
PFNGLTEXIMAGE1DPROC                glad_glTexImage1D                = NULL;
PFNGLTEXIMAGE2DPROC                glad_glTexImage2D                = NULL;
PFNGLTEXIMAGE2DMULTISAMPLEPROC     glad_glTexImage2DMultisample     = NULL;
PFNGLTEXIMAGE3DPROC                glad_glTexImage3D                = NULL;
PFNGLTEXIMAGE3DMULTISAMPLEPROC     glad_glTexImage3DMultisample     = NULL;
PFNGLTEXPARAMETERIIVPROC           glad_glTexParameterIiv           = NULL;
PFNGLTEXPARAMETERIUIVPROC          glad_glTexParameterIuiv          = NULL;
PFNGLTEXPARAMETERFPROC             glad_glTexParameterf             = NULL;
PFNGLTEXPARAMETERFVPROC            glad_glTexParameterfv            = NULL;
PFNGLTEXPARAMETERIPROC             glad_glTexParameteri             = NULL;
PFNGLTEXPARAMETERIVPROC            glad_glTexParameteriv            = NULL;
PFNGLTEXSUBIMAGE1DPROC             glad_glTexSubImage1D             = NULL;
PFNGLTEXSUBIMAGE2DPROC             glad_glTexSubImage2D             = NULL;
PFNGLTEXSUBIMAGE3DPROC             glad_glTexSubImage3D             = NULL;
PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings = NULL;
PFNGLUNIFORM1FPROC                 glad_glUniform1f                 = NULL;
PFNGLUNIFORM1FVPROC                glad_glUniform1fv                = NULL;
PFNGLUNIFORM1IPROC                 glad_glUniform1i                 = NULL;
PFNGLUNIFORM1IVPROC                glad_glUniform1iv                = NULL;
PFNGLUNIFORM1UIPROC                glad_glUniform1ui                = NULL;
PFNGLUNIFORM1UIVPROC               glad_glUniform1uiv               = NULL;
PFNGLUNIFORM2FPROC                 glad_glUniform2f                 = NULL;
PFNGLUNIFORM2FVPROC                glad_glUniform2fv                = NULL;
PFNGLUNIFORM2IPROC                 glad_glUniform2i                 = NULL;
PFNGLUNIFORM2IVPROC                glad_glUniform2iv                = NULL;
PFNGLUNIFORM2UIPROC                glad_glUniform2ui                = NULL;
PFNGLUNIFORM2UIVPROC               glad_glUniform2uiv               = NULL;
PFNGLUNIFORM3FPROC                 glad_glUniform3f                 = NULL;
PFNGLUNIFORM3FVPROC                glad_glUniform3fv                = NULL;
PFNGLUNIFORM3IPROC                 glad_glUniform3i                 = NULL;
PFNGLUNIFORM3IVPROC                glad_glUniform3iv                = NULL;
PFNGLUNIFORM3UIPROC                glad_glUniform3ui                = NULL;
PFNGLUNIFORM3UIVPROC               glad_glUniform3uiv               = NULL;
PFNGLUNIFORM4FPROC                 glad_glUniform4f                 = NULL;
PFNGLUNIFORM4FVPROC                glad_glUniform4fv                = NULL;
PFNGLUNIFORM4IPROC                 glad_glUniform4i                 = NULL;
PFNGLUNIFORM4IVPROC                glad_glUniform4iv                = NULL;
PFNGLUNIFORM4UIPROC                glad_glUniform4ui                = NULL;
PFNGLUNIFORM4UIVPROC               glad_glUniform4uiv               = NULL;
PFNGLUNIFORMBLOCKBINDINGPROC       glad_glUniformBlockBinding       = NULL;
PFNGLUNIFORMMATRIX2FVPROC          glad_glUniformMatrix2fv          = NULL;
PFNGLUNIFORMMATRIX2X3FVPROC        glad_glUniformMatrix2x3fv        = NULL;
PFNGLUNIFORMMATRIX2X4FVPROC        glad_glUniformMatrix2x4fv        = NULL;
PFNGLUNIFORMMATRIX3FVPROC          glad_glUniformMatrix3fv          = NULL;
PFNGLUNIFORMMATRIX3X2FVPROC        glad_glUniformMatrix3x2fv        = NULL;
PFNGLUNIFORMMATRIX3X4FVPROC        glad_glUniformMatrix3x4fv        = NULL;
PFNGLUNIFORMMATRIX4FVPROC          glad_glUniformMatrix4fv          = NULL;
PFNGLUNIFORMMATRIX4X2FVPROC        glad_glUniformMatrix4x2fv        = NULL;
PFNGLUNIFORMMATRIX4X3FVPROC        glad_glUniformMatrix4x3fv        = NULL;
PFNGLUNMAPBUFFERPROC               glad_glUnmapBuffer               = NULL;
PFNGLUSEPROGRAMPROC                glad_glUseProgram                = NULL;
PFNGLVALIDATEPROGRAMPROC           glad_glValidateProgram           = NULL;
PFNGLVERTEXATTRIB1DPROC            glad_glVertexAttrib1d            = NULL;
PFNGLVERTEXATTRIB1DVPROC           glad_glVertexAttrib1dv           = NULL;
PFNGLVERTEXATTRIB1FPROC            glad_glVertexAttrib1f            = NULL;
PFNGLVERTEXATTRIB1FVPROC           glad_glVertexAttrib1fv           = NULL;
PFNGLVERTEXATTRIB1SPROC            glad_glVertexAttrib1s            = NULL;
PFNGLVERTEXATTRIB1SVPROC           glad_glVertexAttrib1sv           = NULL;
PFNGLVERTEXATTRIB2DPROC            glad_glVertexAttrib2d            = NULL;
PFNGLVERTEXATTRIB2DVPROC           glad_glVertexAttrib2dv           = NULL;
PFNGLVERTEXATTRIB2FPROC            glad_glVertexAttrib2f            = NULL;
PFNGLVERTEXATTRIB2FVPROC           glad_glVertexAttrib2fv           = NULL;
PFNGLVERTEXATTRIB2SPROC            glad_glVertexAttrib2s            = NULL;
PFNGLVERTEXATTRIB2SVPROC           glad_glVertexAttrib2sv           = NULL;
PFNGLVERTEXATTRIB3DPROC            glad_glVertexAttrib3d            = NULL;
PFNGLVERTEXATTRIB3DVPROC           glad_glVertexAttrib3dv           = NULL;
PFNGLVERTEXATTRIB3FPROC            glad_glVertexAttrib3f            = NULL;
PFNGLVERTEXATTRIB3FVPROC           glad_glVertexAttrib3fv           = NULL;
PFNGLVERTEXATTRIB3SPROC            glad_glVertexAttrib3s            = NULL;
PFNGLVERTEXATTRIB3SVPROC           glad_glVertexAttrib3sv           = NULL;
PFNGLVERTEXATTRIB4NBVPROC          glad_glVertexAttrib4Nbv          = NULL;
PFNGLVERTEXATTRIB4NIVPROC          glad_glVertexAttrib4Niv          = NULL;
PFNGLVERTEXATTRIB4NSVPROC          glad_glVertexAttrib4Nsv          = NULL;
PFNGLVERTEXATTRIB4NUBPROC          glad_glVertexAttrib4Nub          = NULL;
PFNGLVERTEXATTRIB4NUBVPROC         glad_glVertexAttrib4Nubv         = NULL;
PFNGLVERTEXATTRIB4NUIVPROC         glad_glVertexAttrib4Nuiv         = NULL;
PFNGLVERTEXATTRIB4NUSVPROC         glad_glVertexAttrib4Nusv         = NULL;
PFNGLVERTEXATTRIB4BVPROC           glad_glVertexAttrib4bv           = NULL;
PFNGLVERTEXATTRIB4DPROC            glad_glVertexAttrib4d            = NULL;
PFNGLVERTEXATTRIB4DVPROC           glad_glVertexAttrib4dv           = NULL;
PFNGLVERTEXATTRIB4FPROC            glad_glVertexAttrib4f            = NULL;
PFNGLVERTEXATTRIB4FVPROC           glad_glVertexAttrib4fv           = NULL;
PFNGLVERTEXATTRIB4IVPROC           glad_glVertexAttrib4iv           = NULL;
PFNGLVERTEXATTRIB4SPROC            glad_glVertexAttrib4s            = NULL;
PFNGLVERTEXATTRIB4SVPROC           glad_glVertexAttrib4sv           = NULL;
PFNGLVERTEXATTRIB4UBVPROC          glad_glVertexAttrib4ubv          = NULL;
PFNGLVERTEXATTRIB4UIVPROC          glad_glVertexAttrib4uiv          = NULL;
PFNGLVERTEXATTRIB4USVPROC          glad_glVertexAttrib4usv          = NULL;
PFNGLVERTEXATTRIBDIVISORPROC       glad_glVertexAttribDivisor       = NULL;
PFNGLVERTEXATTRIBI1IPROC           glad_glVertexAttribI1i           = NULL;
PFNGLVERTEXATTRIBI1IVPROC          glad_glVertexAttribI1iv          = NULL;
PFNGLVERTEXATTRIBI1UIPROC          glad_glVertexAttribI1ui          = NULL;
PFNGLVERTEXATTRIBI1UIVPROC         glad_glVertexAttribI1uiv         = NULL;
PFNGLVERTEXATTRIBI2IPROC           glad_glVertexAttribI2i           = NULL;
PFNGLVERTEXATTRIBI2IVPROC          glad_glVertexAttribI2iv          = NULL;
PFNGLVERTEXATTRIBI2UIPROC          glad_glVertexAttribI2ui          = NULL;
PFNGLVERTEXATTRIBI2UIVPROC         glad_glVertexAttribI2uiv         = NULL;
PFNGLVERTEXATTRIBI3IPROC           glad_glVertexAttribI3i           = NULL;
PFNGLVERTEXATTRIBI3IVPROC          glad_glVertexAttribI3iv          = NULL;
PFNGLVERTEXATTRIBI3UIPROC          glad_glVertexAttribI3ui          = NULL;
PFNGLVERTEXATTRIBI3UIVPROC         glad_glVertexAttribI3uiv         = NULL;
PFNGLVERTEXATTRIBI4BVPROC          glad_glVertexAttribI4bv          = NULL;
PFNGLVERTEXATTRIBI4IPROC           glad_glVertexAttribI4i           = NULL;
PFNGLVERTEXATTRIBI4IVPROC          glad_glVertexAttribI4iv          = NULL;
PFNGLVERTEXATTRIBI4SVPROC          glad_glVertexAttribI4sv          = NULL;
PFNGLVERTEXATTRIBI4UBVPROC         glad_glVertexAttribI4ubv         = NULL;
PFNGLVERTEXATTRIBI4UIPROC          glad_glVertexAttribI4ui          = NULL;
PFNGLVERTEXATTRIBI4UIVPROC         glad_glVertexAttribI4uiv         = NULL;
PFNGLVERTEXATTRIBI4USVPROC         glad_glVertexAttribI4usv         = NULL;
PFNGLVERTEXATTRIBIPOINTERPROC      glad_glVertexAttribIPointer      = NULL;
PFNGLVERTEXATTRIBP1UIPROC          glad_glVertexAttribP1ui          = NULL;
PFNGLVERTEXATTRIBP1UIVPROC         glad_glVertexAttribP1uiv         = NULL;
PFNGLVERTEXATTRIBP2UIPROC          glad_glVertexAttribP2ui          = NULL;
PFNGLVERTEXATTRIBP2UIVPROC         glad_glVertexAttribP2uiv         = NULL;
PFNGLVERTEXATTRIBP3UIPROC          glad_glVertexAttribP3ui          = NULL;
PFNGLVERTEXATTRIBP3UIVPROC         glad_glVertexAttribP3uiv         = NULL;
PFNGLVERTEXATTRIBP4UIPROC          glad_glVertexAttribP4ui          = NULL;
PFNGLVERTEXATTRIBP4UIVPROC         glad_glVertexAttribP4uiv         = NULL;
PFNGLVERTEXATTRIBPOINTERPROC       glad_glVertexAttribPointer       = NULL;
PFNGLVERTEXP2UIPROC                glad_glVertexP2ui                = NULL;
PFNGLVERTEXP2UIVPROC               glad_glVertexP2uiv               = NULL;
PFNGLVERTEXP3UIPROC                glad_glVertexP3ui                = NULL;
PFNGLVERTEXP3UIVPROC               glad_glVertexP3uiv               = NULL;
PFNGLVERTEXP4UIPROC                glad_glVertexP4ui                = NULL;
PFNGLVERTEXP4UIVPROC               glad_glVertexP4uiv               = NULL;
PFNGLVIEWPORTPROC                  glad_glViewport                  = NULL;
PFNGLWAITSYNCPROC                  glad_glWaitSync                  = NULL;
int                                GLAD_GL_ARB_shader_subroutine    = 0;
int                                GLAD_GL_ARB_texture_filter_anisotropic = 0;
int                                GLAD_GL_KHR_debug                      = 0;
PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glad_glGetSubroutineUniformLocation =
   NULL;
PFNGLGETSUBROUTINEINDEXPROC           glad_glGetSubroutineIndex = NULL;
PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glad_glGetActiveSubroutineUniformiv =
   NULL;
PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glad_glGetActiveSubroutineUniformName =
   NULL;
PFNGLGETACTIVESUBROUTINENAMEPROC glad_glGetActiveSubroutineName = NULL;
PFNGLUNIFORMSUBROUTINESUIVPROC   glad_glUniformSubroutinesuiv   = NULL;
PFNGLGETUNIFORMSUBROUTINEUIVPROC glad_glGetUniformSubroutineuiv = NULL;
PFNGLGETPROGRAMSTAGEIVPROC       glad_glGetProgramStageiv       = NULL;
PFNGLDEBUGMESSAGECONTROLPROC     glad_glDebugMessageControl     = NULL;
PFNGLDEBUGMESSAGEINSERTPROC      glad_glDebugMessageInsert      = NULL;
PFNGLDEBUGMESSAGECALLBACKPROC    glad_glDebugMessageCallback    = NULL;
PFNGLGETDEBUGMESSAGELOGPROC      glad_glGetDebugMessageLog      = NULL;
PFNGLPUSHDEBUGGROUPPROC          glad_glPushDebugGroup          = NULL;
PFNGLPOPDEBUGGROUPPROC           glad_glPopDebugGroup           = NULL;
PFNGLOBJECTLABELPROC             glad_glObjectLabel             = NULL;
PFNGLGETOBJECTLABELPROC          glad_glGetObjectLabel          = NULL;
PFNGLOBJECTPTRLABELPROC          glad_glObjectPtrLabel          = NULL;
PFNGLGETOBJECTPTRLABELPROC       glad_glGetObjectPtrLabel       = NULL;
PFNGLGETPOINTERVPROC             glad_glGetPointerv             = NULL;
PFNGLDEBUGMESSAGECONTROLKHRPROC  glad_glDebugMessageControlKHR  = NULL;
PFNGLDEBUGMESSAGEINSERTKHRPROC   glad_glDebugMessageInsertKHR   = NULL;
PFNGLDEBUGMESSAGECALLBACKKHRPROC glad_glDebugMessageCallbackKHR = NULL;
PFNGLGETDEBUGMESSAGELOGKHRPROC   glad_glGetDebugMessageLogKHR   = NULL;
PFNGLPUSHDEBUGGROUPKHRPROC       glad_glPushDebugGroupKHR       = NULL;
PFNGLPOPDEBUGGROUPKHRPROC        glad_glPopDebugGroupKHR        = NULL;
PFNGLOBJECTLABELKHRPROC          glad_glObjectLabelKHR          = NULL;
PFNGLGETOBJECTLABELKHRPROC       glad_glGetObjectLabelKHR       = NULL;
PFNGLOBJECTPTRLABELKHRPROC       glad_glObjectPtrLabelKHR       = NULL;
PFNGLGETOBJECTPTRLABELKHRPROC    glad_glGetObjectPtrLabelKHR    = NULL;
PFNGLGETPOINTERVKHRPROC          glad_glGetPointervKHR          = NULL;
static void                      load_GL_VERSION_1_0( GLADloadproc load )
{
   if ( !GLAD_GL_VERSION_1_0 )
      return;
   glad_glCullFace       = (PFNGLCULLFACEPROC)load( "glCullFace" );
   glad_glFrontFace      = (PFNGLFRONTFACEPROC)load( "glFrontFace" );
   glad_glHint           = (PFNGLHINTPROC)load( "glHint" );
   glad_glLineWidth      = (PFNGLLINEWIDTHPROC)load( "glLineWidth" );
   glad_glPointSize      = (PFNGLPOINTSIZEPROC)load( "glPointSize" );
   glad_glPolygonMode    = (PFNGLPOLYGONMODEPROC)load( "glPolygonMode" );
   glad_glScissor        = (PFNGLSCISSORPROC)load( "glScissor" );
   glad_glTexParameterf  = (PFNGLTEXPARAMETERFPROC)load( "glTexParameterf" );
   glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC)load( "glTexParameterfv" );
   glad_glTexParameteri  = (PFNGLTEXPARAMETERIPROC)load( "glTexParameteri" );
   glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC)load( "glTexParameteriv" );
   glad_glTexImage1D     = (PFNGLTEXIMAGE1DPROC)load( "glTexImage1D" );
   glad_glTexImage2D     = (PFNGLTEXIMAGE2DPROC)load( "glTexImage2D" );
   glad_glDrawBuffer     = (PFNGLDRAWBUFFERPROC)load( "glDrawBuffer" );
   glad_glClear          = (PFNGLCLEARPROC)load( "glClear" );
   glad_glClearColor     = (PFNGLCLEARCOLORPROC)load( "glClearColor" );
   glad_glClearStencil   = (PFNGLCLEARSTENCILPROC)load( "glClearStencil" );
   glad_glClearDepth     = (PFNGLCLEARDEPTHPROC)load( "glClearDepth" );
   glad_glStencilMask    = (PFNGLSTENCILMASKPROC)load( "glStencilMask" );
   glad_glColorMask      = (PFNGLCOLORMASKPROC)load( "glColorMask" );
   glad_glDepthMask      = (PFNGLDEPTHMASKPROC)load( "glDepthMask" );
   glad_glDisable        = (PFNGLDISABLEPROC)load( "glDisable" );
   glad_glEnable         = (PFNGLENABLEPROC)load( "glEnable" );
   glad_glFinish         = (PFNGLFINISHPROC)load( "glFinish" );
   glad_glFlush          = (PFNGLFLUSHPROC)load( "glFlush" );
   glad_glBlendFunc      = (PFNGLBLENDFUNCPROC)load( "glBlendFunc" );
   glad_glLogicOp        = (PFNGLLOGICOPPROC)load( "glLogicOp" );
   glad_glStencilFunc    = (PFNGLSTENCILFUNCPROC)load( "glStencilFunc" );
   glad_glStencilOp      = (PFNGLSTENCILOPPROC)load( "glStencilOp" );
   glad_glDepthFunc      = (PFNGLDEPTHFUNCPROC)load( "glDepthFunc" );
   glad_glPixelStoref    = (PFNGLPIXELSTOREFPROC)load( "glPixelStoref" );
   glad_glPixelStorei    = (PFNGLPIXELSTOREIPROC)load( "glPixelStorei" );
   glad_glReadBuffer     = (PFNGLREADBUFFERPROC)load( "glReadBuffer" );
   glad_glReadPixels     = (PFNGLREADPIXELSPROC)load( "glReadPixels" );
   glad_glGetBooleanv    = (PFNGLGETBOOLEANVPROC)load( "glGetBooleanv" );
   glad_glGetDoublev     = (PFNGLGETDOUBLEVPROC)load( "glGetDoublev" );
   glad_glGetError       = (PFNGLGETERRORPROC)load( "glGetError" );
   glad_glGetFloatv      = (PFNGLGETFLOATVPROC)load( "glGetFloatv" );
   glad_glGetIntegerv    = (PFNGLGETINTEGERVPROC)load( "glGetIntegerv" );
   glad_glGetString      = (PFNGLGETSTRINGPROC)load( "glGetString" );
   glad_glGetTexImage    = (PFNGLGETTEXIMAGEPROC)load( "glGetTexImage" );
   glad_glGetTexParameterfv =
      (PFNGLGETTEXPARAMETERFVPROC)load( "glGetTexParameterfv" );
   glad_glGetTexParameteriv =
      (PFNGLGETTEXPARAMETERIVPROC)load( "glGetTexParameteriv" );
   glad_glGetTexLevelParameterfv =
      (PFNGLGETTEXLEVELPARAMETERFVPROC)load( "glGetTexLevelParameterfv" );
   glad_glGetTexLevelParameteriv =
      (PFNGLGETTEXLEVELPARAMETERIVPROC)load( "glGetTexLevelParameteriv" );
   glad_glIsEnabled  = (PFNGLISENABLEDPROC)load( "glIsEnabled" );
   glad_glDepthRange = (PFNGLDEPTHRANGEPROC)load( "glDepthRange" );
   glad_glViewport   = (PFNGLVIEWPORTPROC)load( "glViewport" );
}
static void load_GL_VERSION_1_1( GLADloadproc load )
{
   if ( !GLAD_GL_VERSION_1_1 )
      return;
   glad_glDrawArrays     = (PFNGLDRAWARRAYSPROC)load( "glDrawArrays" );
   glad_glDrawElements   = (PFNGLDRAWELEMENTSPROC)load( "glDrawElements" );
   glad_glPolygonOffset  = (PFNGLPOLYGONOFFSETPROC)load( "glPolygonOffset" );
   glad_glCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC)load( "glCopyTexImage1D" );
   glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC)load( "glCopyTexImage2D" );
   glad_glCopyTexSubImage1D =
      (PFNGLCOPYTEXSUBIMAGE1DPROC)load( "glCopyTexSubImage1D" );
   glad_glCopyTexSubImage2D =
      (PFNGLCOPYTEXSUBIMAGE2DPROC)load( "glCopyTexSubImage2D" );
   glad_glTexSubImage1D  = (PFNGLTEXSUBIMAGE1DPROC)load( "glTexSubImage1D" );
   glad_glTexSubImage2D  = (PFNGLTEXSUBIMAGE2DPROC)load( "glTexSubImage2D" );
   glad_glBindTexture    = (PFNGLBINDTEXTUREPROC)load( "glBindTexture" );
   glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC)load( "glDeleteTextures" );
   glad_glGenTextures    = (PFNGLGENTEXTURESPROC)load( "glGenTextures" );
   glad_glIsTexture      = (PFNGLISTEXTUREPROC)load( "glIsTexture" );
}
static void load_GL_VERSION_1_2( GLADloadproc load )
{
   if ( !GLAD_GL_VERSION_1_2 )
      return;
   glad_glDrawRangeElements =
      (PFNGLDRAWRANGEELEMENTSPROC)load( "glDrawRangeElements" );
   glad_glTexImage3D    = (PFNGLTEXIMAGE3DPROC)load( "glTexImage3D" );
   glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)load( "glTexSubImage3D" );
   glad_glCopyTexSubImage3D =
      (PFNGLCOPYTEXSUBIMAGE3DPROC)load( "glCopyTexSubImage3D" );
}
static void load_GL_VERSION_1_3( GLADloadproc load )
{
   if ( !GLAD_GL_VERSION_1_3 )
      return;
   glad_glActiveTexture  = (PFNGLACTIVETEXTUREPROC)load( "glActiveTexture" );
   glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)load( "glSampleCoverage" );
   glad_glCompressedTexImage3D =
      (PFNGLCOMPRESSEDTEXIMAGE3DPROC)load( "glCompressedTexImage3D" );
   glad_glCompressedTexImage2D =
      (PFNGLCOMPRESSEDTEXIMAGE2DPROC)load( "glCompressedTexImage2D" );
   glad_glCompressedTexImage1D =
      (PFNGLCOMPRESSEDTEXIMAGE1DPROC)load( "glCompressedTexImage1D" );
   glad_glCompressedTexSubImage3D =
      (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)load( "glCompressedTexSubImage3D" );
   glad_glCompressedTexSubImage2D =
      (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)load( "glCompressedTexSubImage2D" );
   glad_glCompressedTexSubImage1D =
      (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)load( "glCompressedTexSubImage1D" );
   glad_glGetCompressedTexImage =
      (PFNGLGETCOMPRESSEDTEXIMAGEPROC)load( "glGetCompressedTexImage" );
}
static void load_GL_VERSION_1_4( GLADloadproc load )
{
   if ( !GLAD_GL_VERSION_1_4 )
      return;
   glad_glBlendFuncSeparate =
      (PFNGLBLENDFUNCSEPARATEPROC)load( "glBlendFuncSeparate" );
   glad_glMultiDrawArrays =
      (PFNGLMULTIDRAWARRAYSPROC)load( "glMultiDrawArrays" );
   glad_glMultiDrawElements =
      (PFNGLMULTIDRAWELEMENTSPROC)load( "glMultiDrawElements" );
   glad_glPointParameterf =
      (PFNGLPOINTPARAMETERFPROC)load( "glPointParameterf" );
   glad_glPointParameterfv =
      (PFNGLPOINTPARAMETERFVPROC)load( "glPointParameterfv" );
   glad_glPointParameteri =
      (PFNGLPOINTPARAMETERIPROC)load( "glPointParameteri" );
   glad_glPointParameteriv =
      (PFNGLPOINTPARAMETERIVPROC)load( "glPointParameteriv" );
   glad_glBlendColor    = (PFNGLBLENDCOLORPROC)load( "glBlendColor" );
   glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load( "glBlendEquation" );
}
static void load_GL_VERSION_1_5( GLADloadproc load )
{
   if ( !GLAD_GL_VERSION_1_5 )
      return;
   glad_glGenQueries    = (PFNGLGENQUERIESPROC)load( "glGenQueries" );
   glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC)load( "glDeleteQueries" );
   glad_glIsQuery       = (PFNGLISQUERYPROC)load( "glIsQuery" );
   glad_glBeginQuery    = (PFNGLBEGINQUERYPROC)load( "glBeginQuery" );
   glad_glEndQuery      = (PFNGLENDQUERYPROC)load( "glEndQuery" );
   glad_glGetQueryiv    = (PFNGLGETQUERYIVPROC)load( "glGetQueryiv" );
   glad_glGetQueryObjectiv =
      (PFNGLGETQUERYOBJECTIVPROC)load( "glGetQueryObjectiv" );
   glad_glGetQueryObjectuiv =
      (PFNGLGETQUERYOBJECTUIVPROC)load( "glGetQueryObjectuiv" );
   glad_glBindBuffer    = (PFNGLBINDBUFFERPROC)load( "glBindBuffer" );
   glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)load( "glDeleteBuffers" );
   glad_glGenBuffers    = (PFNGLGENBUFFERSPROC)load( "glGenBuffers" );
   glad_glIsBuffer      = (PFNGLISBUFFERPROC)load( "glIsBuffer" );
   glad_glBufferData    = (PFNGLBUFFERDATAPROC)load( "glBufferData" );
   glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC)load( "glBufferSubData" );
   glad_glGetBufferSubData =
      (PFNGLGETBUFFERSUBDATAPROC)load( "glGetBufferSubData" );
   glad_glMapBuffer   = (PFNGLMAPBUFFERPROC)load( "glMapBuffer" );
   glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)load( "glUnmapBuffer" );
   glad_glGetBufferParameteriv =
      (PFNGLGETBUFFERPARAMETERIVPROC)load( "glGetBufferParameteriv" );
   glad_glGetBufferPointerv =
      (PFNGLGETBUFFERPOINTERVPROC)load( "glGetBufferPointerv" );
}
static void load_GL_VERSION_2_0( GLADloadproc load )
{
   if ( !GLAD_GL_VERSION_2_0 )
      return;
   glad_glBlendEquationSeparate =
      (PFNGLBLENDEQUATIONSEPARATEPROC)load( "glBlendEquationSeparate" );
   glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC)load( "glDrawBuffers" );
   glad_glStencilOpSeparate =
      (PFNGLSTENCILOPSEPARATEPROC)load( "glStencilOpSeparate" );
   glad_glStencilFuncSeparate =
      (PFNGLSTENCILFUNCSEPARATEPROC)load( "glStencilFuncSeparate" );
   glad_glStencilMaskSeparate =
      (PFNGLSTENCILMASKSEPARATEPROC)load( "glStencilMaskSeparate" );
   glad_glAttachShader = (PFNGLATTACHSHADERPROC)load( "glAttachShader" );
   glad_glBindAttribLocation =
      (PFNGLBINDATTRIBLOCATIONPROC)load( "glBindAttribLocation" );
   glad_glCompileShader = (PFNGLCOMPILESHADERPROC)load( "glCompileShader" );
   glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC)load( "glCreateProgram" );
   glad_glCreateShader  = (PFNGLCREATESHADERPROC)load( "glCreateShader" );
   glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC)load( "glDeleteProgram" );
   glad_glDeleteShader  = (PFNGLDELETESHADERPROC)load( "glDeleteShader" );
   glad_glDetachShader  = (PFNGLDETACHSHADERPROC)load( "glDetachShader" );
   glad_glDisableVertexAttribArray =
      (PFNGLDISABLEVERTEXATTRIBARRAYPROC)load( "glDisableVertexAttribArray" );
   glad_glEnableVertexAttribArray =
      (PFNGLENABLEVERTEXATTRIBARRAYPROC)load( "glEnableVertexAttribArray" );
   glad_glGetActiveAttrib =
      (PFNGLGETACTIVEATTRIBPROC)load( "glGetActiveAttrib" );
   glad_glGetActiveUniform =
      (PFNGLGETACTIVEUNIFORMPROC)load( "glGetActiveUniform" );
   glad_glGetAttachedShaders =
      (PFNGLGETATTACHEDSHADERSPROC)load( "glGetAttachedShaders" );
   glad_glGetAttribLocation =
      (PFNGLGETATTRIBLOCATIONPROC)load( "glGetAttribLocation" );
   glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC)load( "glGetProgramiv" );
   glad_glGetProgramInfoLog =
      (PFNGLGETPROGRAMINFOLOGPROC)load( "glGetProgramInfoLog" );
   glad_glGetShaderiv = (PFNGLGETSHADERIVPROC)load( "glGetShaderiv" );
   glad_glGetShaderInfoLog =
      (PFNGLGETSHADERINFOLOGPROC)load( "glGetShaderInfoLog" );
   glad_glGetShaderSource =
      (PFNGLGETSHADERSOURCEPROC)load( "glGetShaderSource" );
   glad_glGetUniformLocation =
      (PFNGLGETUNIFORMLOCATIONPROC)load( "glGetUniformLocation" );
   glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC)load( "glGetUniformfv" );
   glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC)load( "glGetUniformiv" );
   glad_glGetVertexAttribdv =
      (PFNGLGETVERTEXATTRIBDVPROC)load( "glGetVertexAttribdv" );
   glad_glGetVertexAttribfv =
      (PFNGLGETVERTEXATTRIBFVPROC)load( "glGetVertexAttribfv" );
   glad_glGetVertexAttribiv =
      (PFNGLGETVERTEXATTRIBIVPROC)load( "glGetVertexAttribiv" );
   glad_glGetVertexAttribPointerv =
      (PFNGLGETVERTEXATTRIBPOINTERVPROC)load( "glGetVertexAttribPointerv" );
   glad_glIsProgram    = (PFNGLISPROGRAMPROC)load( "glIsProgram" );
   glad_glIsShader     = (PFNGLISSHADERPROC)load( "glIsShader" );
   glad_glLinkProgram  = (PFNGLLINKPROGRAMPROC)load( "glLinkProgram" );
   glad_glShaderSource = (PFNGLSHADERSOURCEPROC)load( "glShaderSource" );
   glad_glUseProgram   = (PFNGLUSEPROGRAMPROC)load( "glUseProgram" );
   glad_glUniform1f    = (PFNGLUNIFORM1FPROC)load( "glUniform1f" );
   glad_glUniform2f    = (PFNGLUNIFORM2FPROC)load( "glUniform2f" );
   glad_glUniform3f    = (PFNGLUNIFORM3FPROC)load( "glUniform3f" );
   glad_glUniform4f    = (PFNGLUNIFORM4FPROC)load( "glUniform4f" );
   glad_glUniform1i    = (PFNGLUNIFORM1IPROC)load( "glUniform1i" );
   glad_glUniform2i    = (PFNGLUNIFORM2IPROC)load( "glUniform2i" );
   glad_glUniform3i    = (PFNGLUNIFORM3IPROC)load( "glUniform3i" );
   glad_glUniform4i    = (PFNGLUNIFORM4IPROC)load( "glUniform4i" );
   glad_glUniform1fv   = (PFNGLUNIFORM1FVPROC)load( "glUniform1fv" );
   glad_glUniform2fv   = (PFNGLUNIFORM2FVPROC)load( "glUniform2fv" );
   glad_glUniform3fv   = (PFNGLUNIFORM3FVPROC)load( "glUniform3fv" );
   glad_glUniform4fv   = (PFNGLUNIFORM4FVPROC)load( "glUniform4fv" );
   glad_glUniform1iv   = (PFNGLUNIFORM1IVPROC)load( "glUniform1iv" );
   glad_glUniform2iv   = (PFNGLUNIFORM2IVPROC)load( "glUniform2iv" );
   glad_glUniform3iv   = (PFNGLUNIFORM3IVPROC)load( "glUniform3iv" );
   glad_glUniform4iv   = (PFNGLUNIFORM4IVPROC)load( "glUniform4iv" );
   glad_glUniformMatrix2fv =
      (PFNGLUNIFORMMATRIX2FVPROC)load( "glUniformMatrix2fv" );
   glad_glUniformMatrix3fv =
      (PFNGLUNIFORMMATRIX3FVPROC)load( "glUniformMatrix3fv" );
   glad_glUniformMatrix4fv =
      (PFNGLUNIFORMMATRIX4FVPROC)load( "glUniformMatrix4fv" );
   glad_glValidateProgram =
      (PFNGLVALIDATEPROGRAMPROC)load( "glValidateProgram" );
   glad_glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)load( "glVertexAttrib1d" );
   glad_glVertexAttrib1dv =
      (PFNGLVERTEXATTRIB1DVPROC)load( "glVertexAttrib1dv" );
   glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)load( "glVertexAttrib1f" );
   glad_glVertexAttrib1fv =
      (PFNGLVERTEXATTRIB1FVPROC)load( "glVertexAttrib1fv" );
   glad_glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)load( "glVertexAttrib1s" );
   glad_glVertexAttrib1sv =
      (PFNGLVERTEXATTRIB1SVPROC)load( "glVertexAttrib1sv" );
   glad_glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)load( "glVertexAttrib2d" );
   glad_glVertexAttrib2dv =
      (PFNGLVERTEXATTRIB2DVPROC)load( "glVertexAttrib2dv" );
   glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)load( "glVertexAttrib2f" );
   glad_glVertexAttrib2fv =
      (PFNGLVERTEXATTRIB2FVPROC)load( "glVertexAttrib2fv" );
   glad_glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)load( "glVertexAttrib2s" );
   glad_glVertexAttrib2sv =
      (PFNGLVERTEXATTRIB2SVPROC)load( "glVertexAttrib2sv" );
   glad_glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)load( "glVertexAttrib3d" );
   glad_glVertexAttrib3dv =
      (PFNGLVERTEXATTRIB3DVPROC)load( "glVertexAttrib3dv" );
   glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)load( "glVertexAttrib3f" );
   glad_glVertexAttrib3fv =
      (PFNGLVERTEXATTRIB3FVPROC)load( "glVertexAttrib3fv" );
   glad_glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)load( "glVertexAttrib3s" );
   glad_glVertexAttrib3sv =
      (PFNGLVERTEXATTRIB3SVPROC)load( "glVertexAttrib3sv" );
   glad_glVertexAttrib4Nbv =
      (PFNGLVERTEXATTRIB4NBVPROC)load( "glVertexAttrib4Nbv" );
   glad_glVertexAttrib4Niv =
      (PFNGLVERTEXATTRIB4NIVPROC)load( "glVertexAttrib4Niv" );
   glad_glVertexAttrib4Nsv =
      (PFNGLVERTEXATTRIB4NSVPROC)load( "glVertexAttrib4Nsv" );
   glad_glVertexAttrib4Nub =
      (PFNGLVERTEXATTRIB4NUBPROC)load( "glVertexAttrib4Nub" );
   glad_glVertexAttrib4Nubv =
      (PFNGLVERTEXATTRIB4NUBVPROC)load( "glVertexAttrib4Nubv" );
   glad_glVertexAttrib4Nuiv =
      (PFNGLVERTEXATTRIB4NUIVPROC)load( "glVertexAttrib4Nuiv" );
   glad_glVertexAttrib4Nusv =
      (PFNGLVERTEXATTRIB4NUSVPROC)load( "glVertexAttrib4Nusv" );
   glad_glVertexAttrib4bv =
      (PFNGLVERTEXATTRIB4BVPROC)load( "glVertexAttrib4bv" );
   glad_glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)load( "glVertexAttrib4d" );
   glad_glVertexAttrib4dv =
      (PFNGLVERTEXATTRIB4DVPROC)load( "glVertexAttrib4dv" );
   glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)load( "glVertexAttrib4f" );
   glad_glVertexAttrib4fv =
      (PFNGLVERTEXATTRIB4FVPROC)load( "glVertexAttrib4fv" );
   glad_glVertexAttrib4iv =
      (PFNGLVERTEXATTRIB4IVPROC)load( "glVertexAttrib4iv" );
   glad_glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)load( "glVertexAttrib4s" );
   glad_glVertexAttrib4sv =
      (PFNGLVERTEXATTRIB4SVPROC)load( "glVertexAttrib4sv" );
   glad_glVertexAttrib4ubv =
      (PFNGLVERTEXATTRIB4UBVPROC)load( "glVertexAttrib4ubv" );
   glad_glVertexAttrib4uiv =
      (PFNGLVERTEXATTRIB4UIVPROC)load( "glVertexAttrib4uiv" );
   glad_glVertexAttrib4usv =
      (PFNGLVERTEXATTRIB4USVPROC)load( "glVertexAttrib4usv" );
   glad_glVertexAttribPointer =
      (PFNGLVERTEXATTRIBPOINTERPROC)load( "glVertexAttribPointer" );
}
static void load_GL_VERSION_2_1( GLADloadproc load )
{
   if ( !GLAD_GL_VERSION_2_1 )
      return;
   glad_glUniformMatrix2x3fv =
      (PFNGLUNIFORMMATRIX2X3FVPROC)load( "glUniformMatrix2x3fv" );
   glad_glUniformMatrix3x2fv =
      (PFNGLUNIFORMMATRIX3X2FVPROC)load( "glUniformMatrix3x2fv" );
   glad_glUniformMatrix2x4fv =
      (PFNGLUNIFORMMATRIX2X4FVPROC)load( "glUniformMatrix2x4fv" );
   glad_glUniformMatrix4x2fv =
      (PFNGLUNIFORMMATRIX4X2FVPROC)load( "glUniformMatrix4x2fv" );
   glad_glUniformMatrix3x4fv =
      (PFNGLUNIFORMMATRIX3X4FVPROC)load( "glUniformMatrix3x4fv" );
   glad_glUniformMatrix4x3fv =
      (PFNGLUNIFORMMATRIX4X3FVPROC)load( "glUniformMatrix4x3fv" );
}
static void load_GL_VERSION_3_0( GLADloadproc load )
{
   if ( !GLAD_GL_VERSION_3_0 )
      return;
   glad_glColorMaski    = (PFNGLCOLORMASKIPROC)load( "glColorMaski" );
   glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)load( "glGetBooleani_v" );
   glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load( "glGetIntegeri_v" );
   glad_glEnablei       = (PFNGLENABLEIPROC)load( "glEnablei" );
   glad_glDisablei      = (PFNGLDISABLEIPROC)load( "glDisablei" );
   glad_glIsEnabledi    = (PFNGLISENABLEDIPROC)load( "glIsEnabledi" );
   glad_glBeginTransformFeedback =
      (PFNGLBEGINTRANSFORMFEEDBACKPROC)load( "glBeginTransformFeedback" );
   glad_glEndTransformFeedback =
      (PFNGLENDTRANSFORMFEEDBACKPROC)load( "glEndTransformFeedback" );
   glad_glBindBufferRange =
      (PFNGLBINDBUFFERRANGEPROC)load( "glBindBufferRange" );
   glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load( "glBindBufferBase" );
   glad_glTransformFeedbackVaryings =
      (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)load( "glTransformFeedbackVaryings" );
   glad_glGetTransformFeedbackVarying =
      (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)load(
         "glGetTransformFeedbackVarying" );
   glad_glClampColor = (PFNGLCLAMPCOLORPROC)load( "glClampColor" );
   glad_glBeginConditionalRender =
      (PFNGLBEGINCONDITIONALRENDERPROC)load( "glBeginConditionalRender" );
   glad_glEndConditionalRender =
      (PFNGLENDCONDITIONALRENDERPROC)load( "glEndConditionalRender" );
   glad_glVertexAttribIPointer =
      (PFNGLVERTEXATTRIBIPOINTERPROC)load( "glVertexAttribIPointer" );
   glad_glGetVertexAttribIiv =
      (PFNGLGETVERTEXATTRIBIIVPROC)load( "glGetVertexAttribIiv" );
   glad_glGetVertexAttribIuiv =
      (PFNGLGETVERTEXATTRIBIUIVPROC)load( "glGetVertexAttribIuiv" );
   glad_glVertexAttribI1i =
      (PFNGLVERTEXATTRIBI1IPROC)load( "glVertexAttribI1i" );
   glad_glVertexAttribI2i =
      (PFNGLVERTEXATTRIBI2IPROC)load( "glVertexAttribI2i" );
   glad_glVertexAttribI3i =
      (PFNGLVERTEXATTRIBI3IPROC)load( "glVertexAttribI3i" );
   glad_glVertexAttribI4i =
      (PFNGLVERTEXATTRIBI4IPROC)load( "glVertexAttribI4i" );
   glad_glVertexAttribI1ui =
      (PFNGLVERTEXATTRIBI1UIPROC)load( "glVertexAttribI1ui" );
   glad_glVertexAttribI2ui =
      (PFNGLVERTEXATTRIBI2UIPROC)load( "glVertexAttribI2ui" );
   glad_glVertexAttribI3ui =
      (PFNGLVERTEXATTRIBI3UIPROC)load( "glVertexAttribI3ui" );
   glad_glVertexAttribI4ui =
      (PFNGLVERTEXATTRIBI4UIPROC)load( "glVertexAttribI4ui" );
   glad_glVertexAttribI1iv =
      (PFNGLVERTEXATTRIBI1IVPROC)load( "glVertexAttribI1iv" );
   glad_glVertexAttribI2iv =
      (PFNGLVERTEXATTRIBI2IVPROC)load( "glVertexAttribI2iv" );
   glad_glVertexAttribI3iv =
      (PFNGLVERTEXATTRIBI3IVPROC)load( "glVertexAttribI3iv" );
   glad_glVertexAttribI4iv =
      (PFNGLVERTEXATTRIBI4IVPROC)load( "glVertexAttribI4iv" );
   glad_glVertexAttribI1uiv =
      (PFNGLVERTEXATTRIBI1UIVPROC)load( "glVertexAttribI1uiv" );
   glad_glVertexAttribI2uiv =
      (PFNGLVERTEXATTRIBI2UIVPROC)load( "glVertexAttribI2uiv" );
   glad_glVertexAttribI3uiv =
      (PFNGLVERTEXATTRIBI3UIVPROC)load( "glVertexAttribI3uiv" );
   glad_glVertexAttribI4uiv =
      (PFNGLVERTEXATTRIBI4UIVPROC)load( "glVertexAttribI4uiv" );
   glad_glVertexAttribI4bv =
      (PFNGLVERTEXATTRIBI4BVPROC)load( "glVertexAttribI4bv" );
   glad_glVertexAttribI4sv =
      (PFNGLVERTEXATTRIBI4SVPROC)load( "glVertexAttribI4sv" );
   glad_glVertexAttribI4ubv =
      (PFNGLVERTEXATTRIBI4UBVPROC)load( "glVertexAttribI4ubv" );
   glad_glVertexAttribI4usv =
      (PFNGLVERTEXATTRIBI4USVPROC)load( "glVertexAttribI4usv" );
   glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)load( "glGetUniformuiv" );
   glad_glBindFragDataLocation =
      (PFNGLBINDFRAGDATALOCATIONPROC)load( "glBindFragDataLocation" );
   glad_glGetFragDataLocation =
      (PFNGLGETFRAGDATALOCATIONPROC)load( "glGetFragDataLocation" );
   glad_glUniform1ui  = (PFNGLUNIFORM1UIPROC)load( "glUniform1ui" );
   glad_glUniform2ui  = (PFNGLUNIFORM2UIPROC)load( "glUniform2ui" );
   glad_glUniform3ui  = (PFNGLUNIFORM3UIPROC)load( "glUniform3ui" );
   glad_glUniform4ui  = (PFNGLUNIFORM4UIPROC)load( "glUniform4ui" );
   glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC)load( "glUniform1uiv" );
   glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC)load( "glUniform2uiv" );
   glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC)load( "glUniform3uiv" );
   glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC)load( "glUniform4uiv" );
   glad_glTexParameterIiv =
      (PFNGLTEXPARAMETERIIVPROC)load( "glTexParameterIiv" );
   glad_glTexParameterIuiv =
      (PFNGLTEXPARAMETERIUIVPROC)load( "glTexParameterIuiv" );
   glad_glGetTexParameterIiv =
      (PFNGLGETTEXPARAMETERIIVPROC)load( "glGetTexParameterIiv" );
   glad_glGetTexParameterIuiv =
      (PFNGLGETTEXPARAMETERIUIVPROC)load( "glGetTexParameterIuiv" );
   glad_glClearBufferiv  = (PFNGLCLEARBUFFERIVPROC)load( "glClearBufferiv" );
   glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)load( "glClearBufferuiv" );
   glad_glClearBufferfv  = (PFNGLCLEARBUFFERFVPROC)load( "glClearBufferfv" );
   glad_glClearBufferfi  = (PFNGLCLEARBUFFERFIPROC)load( "glClearBufferfi" );
   glad_glGetStringi     = (PFNGLGETSTRINGIPROC)load( "glGetStringi" );
   glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load( "glIsRenderbuffer" );
   glad_glBindRenderbuffer =
      (PFNGLBINDRENDERBUFFERPROC)load( "glBindRenderbuffer" );
   glad_glDeleteRenderbuffers =
      (PFNGLDELETERENDERBUFFERSPROC)load( "glDeleteRenderbuffers" );
   glad_glGenRenderbuffers =
      (PFNGLGENRENDERBUFFERSPROC)load( "glGenRenderbuffers" );
   glad_glRenderbufferStorage =
      (PFNGLRENDERBUFFERSTORAGEPROC)load( "glRenderbufferStorage" );
   glad_glGetRenderbufferParameteriv =
      (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load(
         "glGetRenderbufferParameteriv" );
   glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load( "glIsFramebuffer" );
   glad_glBindFramebuffer =
      (PFNGLBINDFRAMEBUFFERPROC)load( "glBindFramebuffer" );
   glad_glDeleteFramebuffers =
      (PFNGLDELETEFRAMEBUFFERSPROC)load( "glDeleteFramebuffers" );
   glad_glGenFramebuffers =
      (PFNGLGENFRAMEBUFFERSPROC)load( "glGenFramebuffers" );
   glad_glCheckFramebufferStatus =
      (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load( "glCheckFramebufferStatus" );
   glad_glFramebufferTexture1D =
      (PFNGLFRAMEBUFFERTEXTURE1DPROC)load( "glFramebufferTexture1D" );
   glad_glFramebufferTexture2D =
      (PFNGLFRAMEBUFFERTEXTURE2DPROC)load( "glFramebufferTexture2D" );
   glad_glFramebufferTexture3D =
      (PFNGLFRAMEBUFFERTEXTURE3DPROC)load( "glFramebufferTexture3D" );
   glad_glFramebufferRenderbuffer =
      (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load( "glFramebufferRenderbuffer" );
   glad_glGetFramebufferAttachmentParameteriv =
      (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load(
         "glGetFramebufferAttachmentParameteriv" );
   glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load( "glGenerateMipmap" );
   glad_glBlitFramebuffer =
      (PFNGLBLITFRAMEBUFFERPROC)load( "glBlitFramebuffer" );
   glad_glRenderbufferStorageMultisample =
      (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load(
         "glRenderbufferStorageMultisample" );
   glad_glFramebufferTextureLayer =
      (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load( "glFramebufferTextureLayer" );
   glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load( "glMapBufferRange" );
   glad_glFlushMappedBufferRange =
      (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load( "glFlushMappedBufferRange" );
   glad_glBindVertexArray =
      (PFNGLBINDVERTEXARRAYPROC)load( "glBindVertexArray" );
   glad_glDeleteVertexArrays =
      (PFNGLDELETEVERTEXARRAYSPROC)load( "glDeleteVertexArrays" );
   glad_glGenVertexArrays =
      (PFNGLGENVERTEXARRAYSPROC)load( "glGenVertexArrays" );
   glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load( "glIsVertexArray" );
}
static void load_GL_VERSION_3_1( GLADloadproc load )
{
   if ( !GLAD_GL_VERSION_3_1 )
      return;
   glad_glDrawArraysInstanced =
      (PFNGLDRAWARRAYSINSTANCEDPROC)load( "glDrawArraysInstanced" );
   glad_glDrawElementsInstanced =
      (PFNGLDRAWELEMENTSINSTANCEDPROC)load( "glDrawElementsInstanced" );
   glad_glTexBuffer = (PFNGLTEXBUFFERPROC)load( "glTexBuffer" );
   glad_glPrimitiveRestartIndex =
      (PFNGLPRIMITIVERESTARTINDEXPROC)load( "glPrimitiveRestartIndex" );
   glad_glCopyBufferSubData =
      (PFNGLCOPYBUFFERSUBDATAPROC)load( "glCopyBufferSubData" );
   glad_glGetUniformIndices =
      (PFNGLGETUNIFORMINDICESPROC)load( "glGetUniformIndices" );
   glad_glGetActiveUniformsiv =
      (PFNGLGETACTIVEUNIFORMSIVPROC)load( "glGetActiveUniformsiv" );
   glad_glGetActiveUniformName =
      (PFNGLGETACTIVEUNIFORMNAMEPROC)load( "glGetActiveUniformName" );
   glad_glGetUniformBlockIndex =
      (PFNGLGETUNIFORMBLOCKINDEXPROC)load( "glGetUniformBlockIndex" );
   glad_glGetActiveUniformBlockiv =
      (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load( "glGetActiveUniformBlockiv" );
   glad_glGetActiveUniformBlockName =
      (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load( "glGetActiveUniformBlockName" );
   glad_glUniformBlockBinding =
      (PFNGLUNIFORMBLOCKBINDINGPROC)load( "glUniformBlockBinding" );
   glad_glBindBufferRange =
      (PFNGLBINDBUFFERRANGEPROC)load( "glBindBufferRange" );
   glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load( "glBindBufferBase" );
   glad_glGetIntegeri_v  = (PFNGLGETINTEGERI_VPROC)load( "glGetIntegeri_v" );
}
static void load_GL_VERSION_3_2( GLADloadproc load )
{
   if ( !GLAD_GL_VERSION_3_2 )
      return;
   glad_glDrawElementsBaseVertex =
      (PFNGLDRAWELEMENTSBASEVERTEXPROC)load( "glDrawElementsBaseVertex" );
   glad_glDrawRangeElementsBaseVertex =
      (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load(
         "glDrawRangeElementsBaseVertex" );
   glad_glDrawElementsInstancedBaseVertex =
      (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load(
         "glDrawElementsInstancedBaseVertex" );
   glad_glMultiDrawElementsBaseVertex =
      (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)load(
         "glMultiDrawElementsBaseVertex" );
   glad_glProvokingVertex =
      (PFNGLPROVOKINGVERTEXPROC)load( "glProvokingVertex" );
   glad_glFenceSync      = (PFNGLFENCESYNCPROC)load( "glFenceSync" );
   glad_glIsSync         = (PFNGLISSYNCPROC)load( "glIsSync" );
   glad_glDeleteSync     = (PFNGLDELETESYNCPROC)load( "glDeleteSync" );
   glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load( "glClientWaitSync" );
   glad_glWaitSync       = (PFNGLWAITSYNCPROC)load( "glWaitSync" );
   glad_glGetInteger64v  = (PFNGLGETINTEGER64VPROC)load( "glGetInteger64v" );
   glad_glGetSynciv      = (PFNGLGETSYNCIVPROC)load( "glGetSynciv" );
   glad_glGetInteger64i_v =
      (PFNGLGETINTEGER64I_VPROC)load( "glGetInteger64i_v" );
   glad_glGetBufferParameteri64v =
      (PFNGLGETBUFFERPARAMETERI64VPROC)load( "glGetBufferParameteri64v" );
   glad_glFramebufferTexture =
      (PFNGLFRAMEBUFFERTEXTUREPROC)load( "glFramebufferTexture" );
   glad_glTexImage2DMultisample =
      (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load( "glTexImage2DMultisample" );
   glad_glTexImage3DMultisample =
      (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load( "glTexImage3DMultisample" );
   glad_glGetMultisamplefv =
      (PFNGLGETMULTISAMPLEFVPROC)load( "glGetMultisamplefv" );
   glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load( "glSampleMaski" );
}
static void load_GL_VERSION_3_3( GLADloadproc load )
{
   if ( !GLAD_GL_VERSION_3_3 )
      return;
   glad_glBindFragDataLocationIndexed =
      (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)load(
         "glBindFragDataLocationIndexed" );
   glad_glGetFragDataIndex =
      (PFNGLGETFRAGDATAINDEXPROC)load( "glGetFragDataIndex" );
   glad_glGenSamplers    = (PFNGLGENSAMPLERSPROC)load( "glGenSamplers" );
   glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load( "glDeleteSamplers" );
   glad_glIsSampler      = (PFNGLISSAMPLERPROC)load( "glIsSampler" );
   glad_glBindSampler    = (PFNGLBINDSAMPLERPROC)load( "glBindSampler" );
   glad_glSamplerParameteri =
      (PFNGLSAMPLERPARAMETERIPROC)load( "glSamplerParameteri" );
   glad_glSamplerParameteriv =
      (PFNGLSAMPLERPARAMETERIVPROC)load( "glSamplerParameteriv" );
   glad_glSamplerParameterf =
      (PFNGLSAMPLERPARAMETERFPROC)load( "glSamplerParameterf" );
   glad_glSamplerParameterfv =
      (PFNGLSAMPLERPARAMETERFVPROC)load( "glSamplerParameterfv" );
   glad_glSamplerParameterIiv =
      (PFNGLSAMPLERPARAMETERIIVPROC)load( "glSamplerParameterIiv" );
   glad_glSamplerParameterIuiv =
      (PFNGLSAMPLERPARAMETERIUIVPROC)load( "glSamplerParameterIuiv" );
   glad_glGetSamplerParameteriv =
      (PFNGLGETSAMPLERPARAMETERIVPROC)load( "glGetSamplerParameteriv" );
   glad_glGetSamplerParameterIiv =
      (PFNGLGETSAMPLERPARAMETERIIVPROC)load( "glGetSamplerParameterIiv" );
   glad_glGetSamplerParameterfv =
      (PFNGLGETSAMPLERPARAMETERFVPROC)load( "glGetSamplerParameterfv" );
   glad_glGetSamplerParameterIuiv =
      (PFNGLGETSAMPLERPARAMETERIUIVPROC)load( "glGetSamplerParameterIuiv" );
   glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC)load( "glQueryCounter" );
   glad_glGetQueryObjecti64v =
      (PFNGLGETQUERYOBJECTI64VPROC)load( "glGetQueryObjecti64v" );
   glad_glGetQueryObjectui64v =
      (PFNGLGETQUERYOBJECTUI64VPROC)load( "glGetQueryObjectui64v" );
   glad_glVertexAttribDivisor =
      (PFNGLVERTEXATTRIBDIVISORPROC)load( "glVertexAttribDivisor" );
   glad_glVertexAttribP1ui =
      (PFNGLVERTEXATTRIBP1UIPROC)load( "glVertexAttribP1ui" );
   glad_glVertexAttribP1uiv =
      (PFNGLVERTEXATTRIBP1UIVPROC)load( "glVertexAttribP1uiv" );
   glad_glVertexAttribP2ui =
      (PFNGLVERTEXATTRIBP2UIPROC)load( "glVertexAttribP2ui" );
   glad_glVertexAttribP2uiv =
      (PFNGLVERTEXATTRIBP2UIVPROC)load( "glVertexAttribP2uiv" );
   glad_glVertexAttribP3ui =
      (PFNGLVERTEXATTRIBP3UIPROC)load( "glVertexAttribP3ui" );
   glad_glVertexAttribP3uiv =
      (PFNGLVERTEXATTRIBP3UIVPROC)load( "glVertexAttribP3uiv" );
   glad_glVertexAttribP4ui =
      (PFNGLVERTEXATTRIBP4UIPROC)load( "glVertexAttribP4ui" );
   glad_glVertexAttribP4uiv =
      (PFNGLVERTEXATTRIBP4UIVPROC)load( "glVertexAttribP4uiv" );
   glad_glVertexP2ui    = (PFNGLVERTEXP2UIPROC)load( "glVertexP2ui" );
   glad_glVertexP2uiv   = (PFNGLVERTEXP2UIVPROC)load( "glVertexP2uiv" );
   glad_glVertexP3ui    = (PFNGLVERTEXP3UIPROC)load( "glVertexP3ui" );
   glad_glVertexP3uiv   = (PFNGLVERTEXP3UIVPROC)load( "glVertexP3uiv" );
   glad_glVertexP4ui    = (PFNGLVERTEXP4UIPROC)load( "glVertexP4ui" );
   glad_glVertexP4uiv   = (PFNGLVERTEXP4UIVPROC)load( "glVertexP4uiv" );
   glad_glTexCoordP1ui  = (PFNGLTEXCOORDP1UIPROC)load( "glTexCoordP1ui" );
   glad_glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)load( "glTexCoordP1uiv" );
   glad_glTexCoordP2ui  = (PFNGLTEXCOORDP2UIPROC)load( "glTexCoordP2ui" );
   glad_glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)load( "glTexCoordP2uiv" );
   glad_glTexCoordP3ui  = (PFNGLTEXCOORDP3UIPROC)load( "glTexCoordP3ui" );
   glad_glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)load( "glTexCoordP3uiv" );
   glad_glTexCoordP4ui  = (PFNGLTEXCOORDP4UIPROC)load( "glTexCoordP4ui" );
   glad_glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)load( "glTexCoordP4uiv" );
   glad_glMultiTexCoordP1ui =
      (PFNGLMULTITEXCOORDP1UIPROC)load( "glMultiTexCoordP1ui" );
   glad_glMultiTexCoordP1uiv =
      (PFNGLMULTITEXCOORDP1UIVPROC)load( "glMultiTexCoordP1uiv" );
   glad_glMultiTexCoordP2ui =
      (PFNGLMULTITEXCOORDP2UIPROC)load( "glMultiTexCoordP2ui" );
   glad_glMultiTexCoordP2uiv =
      (PFNGLMULTITEXCOORDP2UIVPROC)load( "glMultiTexCoordP2uiv" );
   glad_glMultiTexCoordP3ui =
      (PFNGLMULTITEXCOORDP3UIPROC)load( "glMultiTexCoordP3ui" );
   glad_glMultiTexCoordP3uiv =
      (PFNGLMULTITEXCOORDP3UIVPROC)load( "glMultiTexCoordP3uiv" );
   glad_glMultiTexCoordP4ui =
      (PFNGLMULTITEXCOORDP4UIPROC)load( "glMultiTexCoordP4ui" );
   glad_glMultiTexCoordP4uiv =
      (PFNGLMULTITEXCOORDP4UIVPROC)load( "glMultiTexCoordP4uiv" );
   glad_glNormalP3ui  = (PFNGLNORMALP3UIPROC)load( "glNormalP3ui" );
   glad_glNormalP3uiv = (PFNGLNORMALP3UIVPROC)load( "glNormalP3uiv" );
   glad_glColorP3ui   = (PFNGLCOLORP3UIPROC)load( "glColorP3ui" );
   glad_glColorP3uiv  = (PFNGLCOLORP3UIVPROC)load( "glColorP3uiv" );
   glad_glColorP4ui   = (PFNGLCOLORP4UIPROC)load( "glColorP4ui" );
   glad_glColorP4uiv  = (PFNGLCOLORP4UIVPROC)load( "glColorP4uiv" );
   glad_glSecondaryColorP3ui =
      (PFNGLSECONDARYCOLORP3UIPROC)load( "glSecondaryColorP3ui" );
   glad_glSecondaryColorP3uiv =
      (PFNGLSECONDARYCOLORP3UIVPROC)load( "glSecondaryColorP3uiv" );
}
static void load_GL_ARB_shader_subroutine( GLADloadproc load )
{
   if ( !GLAD_GL_ARB_shader_subroutine )
      return;
   glad_glGetSubroutineUniformLocation =
      (PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)load(
         "glGetSubroutineUniformLocation" );
   glad_glGetSubroutineIndex =
      (PFNGLGETSUBROUTINEINDEXPROC)load( "glGetSubroutineIndex" );
   glad_glGetActiveSubroutineUniformiv =
      (PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)load(
         "glGetActiveSubroutineUniformiv" );
   glad_glGetActiveSubroutineUniformName =
      (PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)load(
         "glGetActiveSubroutineUniformName" );
   glad_glGetActiveSubroutineName =
      (PFNGLGETACTIVESUBROUTINENAMEPROC)load( "glGetActiveSubroutineName" );
   glad_glUniformSubroutinesuiv =
      (PFNGLUNIFORMSUBROUTINESUIVPROC)load( "glUniformSubroutinesuiv" );
   glad_glGetUniformSubroutineuiv =
      (PFNGLGETUNIFORMSUBROUTINEUIVPROC)load( "glGetUniformSubroutineuiv" );
   glad_glGetProgramStageiv =
      (PFNGLGETPROGRAMSTAGEIVPROC)load( "glGetProgramStageiv" );
}
static void load_GL_KHR_debug( GLADloadproc load )
{
   if ( !GLAD_GL_KHR_debug )
      return;
   glad_glDebugMessageControl =
      (PFNGLDEBUGMESSAGECONTROLPROC)load( "glDebugMessageControl" );
   glad_glDebugMessageInsert =
      (PFNGLDEBUGMESSAGEINSERTPROC)load( "glDebugMessageInsert" );
   glad_glDebugMessageCallback =
      (PFNGLDEBUGMESSAGECALLBACKPROC)load( "glDebugMessageCallback" );
   glad_glGetDebugMessageLog =
      (PFNGLGETDEBUGMESSAGELOGPROC)load( "glGetDebugMessageLog" );
   glad_glPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC)load( "glPushDebugGroup" );
   glad_glPopDebugGroup  = (PFNGLPOPDEBUGGROUPPROC)load( "glPopDebugGroup" );
   glad_glObjectLabel    = (PFNGLOBJECTLABELPROC)load( "glObjectLabel" );
   glad_glGetObjectLabel = (PFNGLGETOBJECTLABELPROC)load( "glGetObjectLabel" );
   glad_glObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC)load( "glObjectPtrLabel" );
   glad_glGetObjectPtrLabel =
      (PFNGLGETOBJECTPTRLABELPROC)load( "glGetObjectPtrLabel" );
   glad_glGetPointerv = (PFNGLGETPOINTERVPROC)load( "glGetPointerv" );
   glad_glDebugMessageControlKHR =
      (PFNGLDEBUGMESSAGECONTROLKHRPROC)load( "glDebugMessageControlKHR" );
   glad_glDebugMessageInsertKHR =
      (PFNGLDEBUGMESSAGEINSERTKHRPROC)load( "glDebugMessageInsertKHR" );
   glad_glDebugMessageCallbackKHR =
      (PFNGLDEBUGMESSAGECALLBACKKHRPROC)load( "glDebugMessageCallbackKHR" );
   glad_glGetDebugMessageLogKHR =
      (PFNGLGETDEBUGMESSAGELOGKHRPROC)load( "glGetDebugMessageLogKHR" );
   glad_glPushDebugGroupKHR =
      (PFNGLPUSHDEBUGGROUPKHRPROC)load( "glPushDebugGroupKHR" );
   glad_glPopDebugGroupKHR =
      (PFNGLPOPDEBUGGROUPKHRPROC)load( "glPopDebugGroupKHR" );
   glad_glObjectLabelKHR = (PFNGLOBJECTLABELKHRPROC)load( "glObjectLabelKHR" );
   glad_glGetObjectLabelKHR =
      (PFNGLGETOBJECTLABELKHRPROC)load( "glGetObjectLabelKHR" );
   glad_glObjectPtrLabelKHR =
      (PFNGLOBJECTPTRLABELKHRPROC)load( "glObjectPtrLabelKHR" );
   glad_glGetObjectPtrLabelKHR =
      (PFNGLGETOBJECTPTRLABELKHRPROC)load( "glGetObjectPtrLabelKHR" );
   glad_glGetPointervKHR = (PFNGLGETPOINTERVKHRPROC)load( "glGetPointervKHR" );
}
static int find_extensionsGL( void )
{
   if ( !get_exts() )
      return 0;
   GLAD_GL_ARB_shader_subroutine = has_ext( "GL_ARB_shader_subroutine" );
   GLAD_GL_ARB_texture_filter_anisotropic =
      has_ext( "GL_ARB_texture_filter_anisotropic" );
   GLAD_GL_KHR_debug = has_ext( "GL_KHR_debug" );
   free_exts();
   return 1;
}

static void find_coreGL( void )
{

   /* Thank you @elmindreda
    * https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176
    * https://github.com/glfw/glfw/blob/master/src/context.c#L36
    */
   int i, major, minor;

   const char *version;
   const char *prefixes[] = { "OpenGL ES-CM ", "OpenGL ES-CL ", "OpenGL ES ",
                              NULL };

   version = (const char *)glGetString( GL_VERSION );
   if ( !version )
      return;

   for ( i = 0; prefixes[i]; i++ ) {
      const size_t length = strlen( prefixes[i] );
      if ( strncmp( version, prefixes[i], length ) == 0 ) {
         version += length;
         break;
      }
   }

/* PR #18 */
#ifdef _MSC_VER
   sscanf_s( version, "%d.%d", &major, &minor );
#else
   sscanf( version, "%d.%d", &major, &minor );
#endif

   GLVersion.major     = major;
   GLVersion.minor     = minor;
   max_loaded_major    = major;
   max_loaded_minor    = minor;
   GLAD_GL_VERSION_1_0 = ( major == 1 && minor >= 0 ) || major > 1;
   GLAD_GL_VERSION_1_1 = ( major == 1 && minor >= 1 ) || major > 1;
   GLAD_GL_VERSION_1_2 = ( major == 1 && minor >= 2 ) || major > 1;
   GLAD_GL_VERSION_1_3 = ( major == 1 && minor >= 3 ) || major > 1;
   GLAD_GL_VERSION_1_4 = ( major == 1 && minor >= 4 ) || major > 1;
   GLAD_GL_VERSION_1_5 = ( major == 1 && minor >= 5 ) || major > 1;
   GLAD_GL_VERSION_2_0 = ( major == 2 && minor >= 0 ) || major > 2;
   GLAD_GL_VERSION_2_1 = ( major == 2 && minor >= 1 ) || major > 2;
   GLAD_GL_VERSION_3_0 = ( major == 3 && minor >= 0 ) || major > 3;
   GLAD_GL_VERSION_3_1 = ( major == 3 && minor >= 1 ) || major > 3;
   GLAD_GL_VERSION_3_2 = ( major == 3 && minor >= 2 ) || major > 3;
   GLAD_GL_VERSION_3_3 = ( major == 3 && minor >= 3 ) || major > 3;
   if ( GLVersion.major > 3 ||
        ( GLVersion.major >= 3 && GLVersion.minor >= 3 ) ) {
      max_loaded_major = 3;
      max_loaded_minor = 3;
   }
}

int gladLoadGLLoader( GLADloadproc load )
{
   GLVersion.major = 0;
   GLVersion.minor = 0;
   glGetString     = (PFNGLGETSTRINGPROC)load( "glGetString" );
   if ( glGetString == NULL )
      return 0;
   if ( glGetString( GL_VERSION ) == NULL )
      return 0;
   find_coreGL();
   load_GL_VERSION_1_0( load );
   load_GL_VERSION_1_1( load );
   load_GL_VERSION_1_2( load );
   load_GL_VERSION_1_3( load );
   load_GL_VERSION_1_4( load );
   load_GL_VERSION_1_5( load );
   load_GL_VERSION_2_0( load );
   load_GL_VERSION_2_1( load );
   load_GL_VERSION_3_0( load );
   load_GL_VERSION_3_1( load );
   load_GL_VERSION_3_2( load );
   load_GL_VERSION_3_3( load );

   if ( !find_extensionsGL() )
      return 0;
   load_GL_ARB_shader_subroutine( load );
   load_GL_KHR_debug( load );
   return GLVersion.major != 0 || GLVersion.minor != 0;
}
