diff --git a/deps/glad.c b/deps/glad.c index da75d08d..e5b643f7 100644 --- a/deps/glad.c +++ b/deps/glad.c @@ -1,3 +1,4 @@ +#include #include #include @@ -687,10 +688,34 @@ static void find_extensionsGL(void) { } static void find_coreGL(void) { - const char *v = (const char *)glGetString(GL_VERSION); - int major = v[0] - '0'; - int minor = v[2] - '0'; - GLVersion.major = major; GLVersion.minor = minor; + + /* 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; + } + } + + sscanf(version, "%d.%d", &major, &minor); + GLVersion.major = major; GLVersion.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; @@ -704,10 +729,11 @@ static void find_coreGL(void) { GLAD_GL_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3; } -void gladLoadGLLoader(GLADloadproc load) { +int gladLoadGLLoader(GLADloadproc load) { GLVersion.major = 0; GLVersion.minor = 0; glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); - if(glGetString == NULL) return; + 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); @@ -722,7 +748,6 @@ void gladLoadGLLoader(GLADloadproc load) { load_GL_VERSION_3_2(load); find_extensionsGL(); - - return; + return GLVersion.major != 0 || GLVersion.minor != 0; } diff --git a/deps/glad/glad.h b/deps/glad/glad.h index e5de4efc..8ede0522 100644 --- a/deps/glad/glad.h +++ b/deps/glad/glad.h @@ -22,15 +22,17 @@ #define APIENTRYP APIENTRY * #endif -extern struct gladGLversionStruct { - int major; - int minor; -} GLVersion; - #ifdef __cplusplus extern "C" { #endif +struct gladGLversionStruct { + int major; + int minor; +}; + +extern struct gladGLversionStruct GLVersion; + typedef void* (* GLADloadproc)(const char *name); #ifndef GLAPI @@ -58,7 +60,7 @@ typedef void* (* GLADloadproc)(const char *name); # define GLAPI extern # endif #endif -GLAPI void gladLoadGLLoader(GLADloadproc); +GLAPI int gladLoadGLLoader(GLADloadproc); #include #include @@ -836,11 +838,13 @@ typedef GLintptr GLvdpauSurfaceNV; #define GL_UNIFORM_BUFFER_START 0x8A29 #define GL_UNIFORM_BUFFER_SIZE 0x8A2A #define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C #define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D #define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E #define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F #define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 #define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 #define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 #define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 #define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 @@ -859,6 +863,7 @@ typedef GLintptr GLvdpauSurfaceNV; #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 #define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 #define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 #define GL_INVALID_INDEX 0xFFFFFFFF #define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001