@@ -453,7 +453,6 @@ PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui = NULL;
453453PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv = NULL ;
454454PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui = NULL ;
455455PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv = NULL ;
456- PFNGLNAMEDFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC glad_glNamedFramebufferTextureMultiviewOVR = NULL ;
457456PFNGLNEWLISTPROC glad_glNewList = NULL ;
458457PFNGLNORMAL3BPROC glad_glNormal3b = NULL ;
459458PFNGLNORMAL3BVPROC glad_glNormal3bv = NULL ;
@@ -2109,29 +2108,40 @@ static void glad_gl_load_GL_EXT_framebuffer_object( GLADuserptrloadfunc load, vo
21092108static void glad_gl_load_GL_OVR_multiview ( GLADuserptrloadfunc load , void * userptr ) {
21102109 if (!GLAD_GL_OVR_multiview ) return ;
21112110 glad_glFramebufferTextureMultiviewOVR = (PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC ) load (userptr , "glFramebufferTextureMultiviewOVR" );
2112- glad_glNamedFramebufferTextureMultiviewOVR = (PFNGLNAMEDFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC ) load (userptr , "glNamedFramebufferTextureMultiviewOVR" );
21132111}
21142112
21152113
21162114
2117- static void glad_gl_free_extensions (char * * exts_i ) {
2118- if (exts_i != NULL ) {
2119- unsigned int index ;
2120- for (index = 0 ; exts_i [index ]; index ++ ) {
2121- free ((void * ) (exts_i [index ]));
2122- }
2123- free ((void * )exts_i );
2124- exts_i = NULL ;
2125- }
2126- }
2127- static int glad_gl_get_extensions ( const char * * out_exts , char * * * out_exts_i ) {
21282115#if defined(GL_ES_VERSION_3_0 ) || defined(GL_VERSION_3_0 )
2129- if (glad_glGetStringi != NULL && glad_glGetIntegerv != NULL ) {
2116+ #define GLAD_GL_IS_SOME_NEW_VERSION 1
2117+ #else
2118+ #define GLAD_GL_IS_SOME_NEW_VERSION 0
2119+ #endif
2120+
2121+ static int glad_gl_get_extensions ( int version , const char * * out_exts , unsigned int * out_num_exts_i , char * * * out_exts_i ) {
2122+ #if GLAD_GL_IS_SOME_NEW_VERSION
2123+ if (GLAD_VERSION_MAJOR (version ) < 3 ) {
2124+ #else
2125+ GLAD_UNUSED (version );
2126+ GLAD_UNUSED (out_num_exts_i );
2127+ GLAD_UNUSED (out_exts_i );
2128+ #endif
2129+ if (glad_glGetString == NULL ) {
2130+ return 0 ;
2131+ }
2132+ * out_exts = (const char * )glad_glGetString (GL_EXTENSIONS );
2133+ #if GLAD_GL_IS_SOME_NEW_VERSION
2134+ } else {
21302135 unsigned int index = 0 ;
21312136 unsigned int num_exts_i = 0 ;
21322137 char * * exts_i = NULL ;
2138+ if (glad_glGetStringi == NULL || glad_glGetIntegerv == NULL ) {
2139+ return 0 ;
2140+ }
21332141 glad_glGetIntegerv (GL_NUM_EXTENSIONS , (int * ) & num_exts_i );
2134- exts_i = (char * * ) malloc ((num_exts_i + 1 ) * (sizeof * exts_i ));
2142+ if (num_exts_i > 0 ) {
2143+ exts_i = (char * * ) malloc (num_exts_i * (sizeof * exts_i ));
2144+ }
21352145 if (exts_i == NULL ) {
21362146 return 0 ;
21372147 }
@@ -2140,40 +2150,31 @@ static int glad_gl_get_extensions( const char **out_exts, char ***out_exts_i) {
21402150 size_t len = strlen (gl_str_tmp ) + 1 ;
21412151
21422152 char * local_str = (char * ) malloc (len * sizeof (char ));
2143- if (local_str == NULL ) {
2144- exts_i [index ] = NULL ;
2145- glad_gl_free_extensions (exts_i );
2146- return 0 ;
2153+ if (local_str != NULL ) {
2154+ memcpy (local_str , gl_str_tmp , len * sizeof (char ));
21472155 }
21482156
2149- memcpy (local_str , gl_str_tmp , len * sizeof (char ));
21502157 exts_i [index ] = local_str ;
21512158 }
2152- exts_i [index ] = NULL ;
21532159
2160+ * out_num_exts_i = num_exts_i ;
21542161 * out_exts_i = exts_i ;
2155-
2156- return 1 ;
21572162 }
2158- #else
2159- GLAD_UNUSED (out_exts_i );
21602163#endif
2161- if (glad_glGetString == NULL ) {
2162- return 0 ;
2163- }
2164- * out_exts = (const char * )glad_glGetString (GL_EXTENSIONS );
21652164 return 1 ;
21662165}
2167- static int glad_gl_has_extension ( const char * exts , char * * exts_i , const char * ext ) {
2168- if (exts_i ) {
2166+ static void glad_gl_free_extensions ( char * * exts_i , unsigned int num_exts_i ) {
2167+ if (exts_i != NULL ) {
21692168 unsigned int index ;
2170- for (index = 0 ; exts_i [index ]; index ++ ) {
2171- const char * e = exts_i [index ];
2172- if (strcmp (e , ext ) == 0 ) {
2173- return 1 ;
2174- }
2169+ for (index = 0 ; index < num_exts_i ; index ++ ) {
2170+ free ((void * ) (exts_i [index ]));
21752171 }
2176- } else {
2172+ free ((void * )exts_i );
2173+ exts_i = NULL ;
2174+ }
2175+ }
2176+ static int glad_gl_has_extension (int version , const char * exts , unsigned int num_exts_i , char * * exts_i , const char * ext ) {
2177+ if (GLAD_VERSION_MAJOR (version ) < 3 || !GLAD_GL_IS_SOME_NEW_VERSION ) {
21772178 const char * extensions ;
21782179 const char * loc ;
21792180 const char * terminator ;
@@ -2193,6 +2194,14 @@ static int glad_gl_has_extension(const char *exts, char **exts_i, const char *ex
21932194 }
21942195 extensions = terminator ;
21952196 }
2197+ } else {
2198+ unsigned int index ;
2199+ for (index = 0 ; index < num_exts_i ; index ++ ) {
2200+ const char * e = exts_i [index ];
2201+ if (strcmp (e , ext ) == 0 ) {
2202+ return 1 ;
2203+ }
2204+ }
21962205 }
21972206 return 0 ;
21982207}
@@ -2201,21 +2210,22 @@ static GLADapiproc glad_gl_get_proc_from_userptr(void *userptr, const char* name
22012210 return (GLAD_GNUC_EXTENSION (GLADapiproc (* )(const char * name )) userptr )(name );
22022211}
22032212
2204- static int glad_gl_find_extensions_gl (void ) {
2213+ static int glad_gl_find_extensions_gl ( int version ) {
22052214 const char * exts = NULL ;
2215+ unsigned int num_exts_i = 0 ;
22062216 char * * exts_i = NULL ;
2207- if (!glad_gl_get_extensions (& exts , & exts_i )) return 0 ;
2217+ if (!glad_gl_get_extensions (version , & exts , & num_exts_i , & exts_i )) return 0 ;
22082218
2209- GLAD_GL_ARB_debug_output = glad_gl_has_extension (exts , exts_i , "GL_ARB_debug_output" );
2210- GLAD_GL_ARB_framebuffer_object = glad_gl_has_extension (exts , exts_i , "GL_ARB_framebuffer_object" );
2211- GLAD_GL_ARB_get_program_binary = glad_gl_has_extension (exts , exts_i , "GL_ARB_get_program_binary" );
2212- GLAD_GL_EXT_framebuffer_blit = glad_gl_has_extension (exts , exts_i , "GL_EXT_framebuffer_blit" );
2213- GLAD_GL_EXT_framebuffer_multisample = glad_gl_has_extension (exts , exts_i , "GL_EXT_framebuffer_multisample" );
2214- GLAD_GL_EXT_framebuffer_object = glad_gl_has_extension (exts , exts_i , "GL_EXT_framebuffer_object" );
2215- GLAD_GL_OVR_multiview = glad_gl_has_extension (exts , exts_i , "GL_OVR_multiview" );
2216- GLAD_GL_OVR_multiview2 = glad_gl_has_extension (exts , exts_i , "GL_OVR_multiview2" );
2219+ GLAD_GL_ARB_debug_output = glad_gl_has_extension (version , exts , num_exts_i , exts_i , "GL_ARB_debug_output" );
2220+ GLAD_GL_ARB_framebuffer_object = glad_gl_has_extension (version , exts , num_exts_i , exts_i , "GL_ARB_framebuffer_object" );
2221+ GLAD_GL_ARB_get_program_binary = glad_gl_has_extension (version , exts , num_exts_i , exts_i , "GL_ARB_get_program_binary" );
2222+ GLAD_GL_EXT_framebuffer_blit = glad_gl_has_extension (version , exts , num_exts_i , exts_i , "GL_EXT_framebuffer_blit" );
2223+ GLAD_GL_EXT_framebuffer_multisample = glad_gl_has_extension (version , exts , num_exts_i , exts_i , "GL_EXT_framebuffer_multisample" );
2224+ GLAD_GL_EXT_framebuffer_object = glad_gl_has_extension (version , exts , num_exts_i , exts_i , "GL_EXT_framebuffer_object" );
2225+ GLAD_GL_OVR_multiview = glad_gl_has_extension (version , exts , num_exts_i , exts_i , "GL_OVR_multiview" );
2226+ GLAD_GL_OVR_multiview2 = glad_gl_has_extension (version , exts , num_exts_i , exts_i , "GL_OVR_multiview2" );
22172227
2218- glad_gl_free_extensions (exts_i );
2228+ glad_gl_free_extensions (exts_i , num_exts_i );
22192229
22202230 return 1 ;
22212231}
@@ -2265,6 +2275,7 @@ int gladLoadGLUserPtr( GLADuserptrloadfunc load, void *userptr) {
22652275
22662276 glad_glGetString = (PFNGLGETSTRINGPROC ) load (userptr , "glGetString" );
22672277 if (glad_glGetString == NULL ) return 0 ;
2278+ if (glad_glGetString (GL_VERSION ) == NULL ) return 0 ;
22682279 version = glad_gl_find_core_gl ();
22692280
22702281 glad_gl_load_GL_VERSION_1_0 (load , userptr );
@@ -2280,7 +2291,7 @@ int gladLoadGLUserPtr( GLADuserptrloadfunc load, void *userptr) {
22802291 glad_gl_load_GL_VERSION_3_2 (load , userptr );
22812292 glad_gl_load_GL_VERSION_3_3 (load , userptr );
22822293
2283- if (!glad_gl_find_extensions_gl ()) return 0 ;
2294+ if (!glad_gl_find_extensions_gl (version )) return 0 ;
22842295 glad_gl_load_GL_ARB_debug_output (load , userptr );
22852296 glad_gl_load_GL_ARB_framebuffer_object (load , userptr );
22862297 glad_gl_load_GL_ARB_get_program_binary (load , userptr );
@@ -2299,15 +2310,16 @@ int gladLoadGL( GLADloadfunc load) {
22992310 return gladLoadGLUserPtr ( glad_gl_get_proc_from_userptr , GLAD_GNUC_EXTENSION (void * ) load );
23002311}
23012312
2302- static int glad_gl_find_extensions_gles2 (void ) {
2313+ static int glad_gl_find_extensions_gles2 ( int version ) {
23032314 const char * exts = NULL ;
2315+ unsigned int num_exts_i = 0 ;
23042316 char * * exts_i = NULL ;
2305- if (!glad_gl_get_extensions (& exts , & exts_i )) return 0 ;
2317+ if (!glad_gl_get_extensions (version , & exts , & num_exts_i , & exts_i )) return 0 ;
23062318
2307- GLAD_GL_OVR_multiview = glad_gl_has_extension (exts , exts_i , "GL_OVR_multiview" );
2308- GLAD_GL_OVR_multiview2 = glad_gl_has_extension (exts , exts_i , "GL_OVR_multiview2" );
2319+ GLAD_GL_OVR_multiview = glad_gl_has_extension (version , exts , num_exts_i , exts_i , "GL_OVR_multiview" );
2320+ GLAD_GL_OVR_multiview2 = glad_gl_has_extension (version , exts , num_exts_i , exts_i , "GL_OVR_multiview2" );
23092321
2310- glad_gl_free_extensions (exts_i );
2322+ glad_gl_free_extensions (exts_i , num_exts_i );
23112323
23122324 return 1 ;
23132325}
@@ -2349,14 +2361,15 @@ int gladLoadGLES2UserPtr( GLADuserptrloadfunc load, void *userptr) {
23492361
23502362 glad_glGetString = (PFNGLGETSTRINGPROC ) load (userptr , "glGetString" );
23512363 if (glad_glGetString == NULL ) return 0 ;
2364+ if (glad_glGetString (GL_VERSION ) == NULL ) return 0 ;
23522365 version = glad_gl_find_core_gles2 ();
23532366
23542367 glad_gl_load_GL_ES_VERSION_2_0 (load , userptr );
23552368 glad_gl_load_GL_ES_VERSION_3_0 (load , userptr );
23562369 glad_gl_load_GL_ES_VERSION_3_1 (load , userptr );
23572370 glad_gl_load_GL_ES_VERSION_3_2 (load , userptr );
23582371
2359- if (!glad_gl_find_extensions_gles2 ()) return 0 ;
2372+ if (!glad_gl_find_extensions_gles2 (version )) return 0 ;
23602373 glad_gl_load_GL_OVR_multiview (load , userptr );
23612374
23622375
@@ -2614,9 +2627,10 @@ static GLADapiproc glad_dlsym_handle(void* handle, const char *name) {
26142627 typedef __eglMustCastToProperFunctionPointerType (GLAD_API_PTR * PFNEGLGETPROCADDRESSPROC )(const char * name );
26152628#endif
26162629 extern __eglMustCastToProperFunctionPointerType emscripten_GetProcAddress (const char * name );
2617- #elif defined( GLAD_GLES2_USE_SYSTEM_EGL )
2618- #include <EGL/egl.h>
2630+ #elif EGL_STATIC
2631+ typedef void ( * __eglMustCastToProperFunctionPointerType )( void );
26192632 typedef __eglMustCastToProperFunctionPointerType (GLAD_API_PTR * PFNEGLGETPROCADDRESSPROC )(const char * name );
2633+ extern __eglMustCastToProperFunctionPointerType GLAD_API_PTR eglGetProcAddress (const char * name );
26202634#else
26212635 #include <glad/egl.h>
26222636#endif
@@ -2644,7 +2658,7 @@ static GLADapiproc glad_gles2_get_proc(void *vuserptr, const char* name) {
26442658 return result ;
26452659}
26462660
2647- static void * _glad_GLES2_loader_handle = NULL ;
2661+ static void * _glad_GL_loader_handle = NULL ;
26482662
26492663static void * glad_gles2_dlopen_handle (void ) {
26502664#if GLAD_PLATFORM_EMSCRIPTEN
@@ -2660,11 +2674,11 @@ static void* glad_gles2_dlopen_handle(void) {
26602674 GLAD_UNUSED (glad_get_dlopen_handle );
26612675 return NULL ;
26622676#else
2663- if (_glad_GLES2_loader_handle == NULL ) {
2664- _glad_GLES2_loader_handle = glad_get_dlopen_handle (NAMES , sizeof (NAMES ) / sizeof (NAMES [0 ]));
2677+ if (_glad_GL_loader_handle == NULL ) {
2678+ _glad_GL_loader_handle = glad_get_dlopen_handle (NAMES , sizeof (NAMES ) / sizeof (NAMES [0 ]));
26652679 }
26662680
2667- return _glad_GLES2_loader_handle ;
2681+ return _glad_GL_loader_handle ;
26682682#endif
26692683}
26702684
@@ -2694,12 +2708,11 @@ int gladLoaderLoadGLES2(void) {
26942708 userptr .get_proc_address_ptr = emscripten_GetProcAddress ;
26952709 version = gladLoadGLES2UserPtr (glad_gles2_get_proc , & userptr );
26962710#else
2697- #ifndef GLAD_GLES2_USE_SYSTEM_EGL
26982711 if (eglGetProcAddress == NULL ) {
26992712 return 0 ;
27002713 }
2701- #endif
2702- did_load = _glad_GLES2_loader_handle == NULL ;
2714+
2715+ did_load = _glad_GL_loader_handle == NULL ;
27032716 handle = glad_gles2_dlopen_handle ();
27042717 if (handle != NULL ) {
27052718 userptr = glad_gles2_build_userptr (handle );
@@ -2718,9 +2731,9 @@ int gladLoaderLoadGLES2(void) {
27182731
27192732
27202733void gladLoaderUnloadGLES2 (void ) {
2721- if (_glad_GLES2_loader_handle != NULL ) {
2722- glad_close_dlopen_handle (_glad_GLES2_loader_handle );
2723- _glad_GLES2_loader_handle = NULL ;
2734+ if (_glad_GL_loader_handle != NULL ) {
2735+ glad_close_dlopen_handle (_glad_GL_loader_handle );
2736+ _glad_GL_loader_handle = NULL ;
27242737 }
27252738}
27262739
0 commit comments