| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include "glad_custom.h" |
| |
| int GLAD_GL_version_es = 1; |
| int GLAD_GL_version_major = 1; |
| int GLAD_GL_version_minor = 0; |
| |
| static void load_Desktop_GL(GLADloadfunc load) { |
| if (GLAD_GL_version_es) return; |
| |
| GLAD_GL_ANGLE_polygon_mode = 1; |
| glad_glPolygonModeANGLE = (PFNGLPOLYGONMODEANGLEPROC)load("glPolygonMode"); |
| |
| if (GLAD_IS_GL_VERSION_AT_LEAST(4, 2)) { |
| GLAD_GL_EXT_base_instance = 1; |
| glad_glDrawArraysInstancedBaseInstanceEXT = (PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC)load("glDrawArraysInstancedBaseInstance"); |
| glad_glDrawElementsInstancedBaseInstanceEXT = (PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC)load("glDrawElementsInstancedBaseInstance"); |
| glad_glDrawElementsInstancedBaseVertexBaseInstanceEXT = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC)load("glDrawElementsInstancedBaseVertexBaseInstance"); |
| } |
| |
| if (GLAD_IS_GL_VERSION_AT_LEAST(4, 6)) |
| { |
| GLAD_GL_ANGLE_base_vertex_base_instance_shader_builtin = 1; |
| } |
| } |
| |
| PFNGLFRAMEBUFFERMEMORYLESSPIXELLOCALSTORAGEANGLEPROC glad_glFramebufferMemorylessPixelLocalStorageANGLE = NULL; |
| PFNGLFRAMEBUFFERTEXTUREPIXELLOCALSTORAGEANGLEPROC glad_glFramebufferTexturePixelLocalStorageANGLE = NULL; |
| PFNGLFRAMEBUFFERPIXELLOCALCLEARVALUEFVANGLEPROC glad_glFramebufferPixelLocalClearValuefvANGLE = NULL; |
| PFNGLFRAMEBUFFERPIXELLOCALCLEARVALUEIVANGLEPROC glad_glFramebufferPixelLocalClearValueivANGLE = NULL; |
| PFNGLFRAMEBUFFERPIXELLOCALCLEARVALUEUIVANGLEPROC glad_glFramebufferPixelLocalClearValueuivANGLE = NULL; |
| PFNGLBEGINPIXELLOCALSTORAGEANGLEPROC glad_glBeginPixelLocalStorageANGLE = NULL; |
| PFNGLENDPIXELLOCALSTORAGEANGLEPROC glad_glEndPixelLocalStorageANGLE = NULL; |
| PFNGLPIXELLOCALSTORAGEBARRIERANGLEPROC glad_glPixelLocalStorageBarrierANGLE = NULL; |
| PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGEPARAMETERFVANGLEPROC glad_glGetFramebufferPixelLocalStorageParameterfvANGLE = NULL; |
| PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGEPARAMETERIVANGLEPROC glad_glGetFramebufferPixelLocalStorageParameterivANGLE = NULL; |
| PFNGLPOLYGONMODEANGLEPROC glad_glPolygonModeANGLE = NULL; |
| PFNGLPROVOKINGVERTEXANGLEPROC glad_glProvokingVertexANGLE = NULL; |
| /* #ifdef RIVE_DESKTOP_GL */ |
| /* #endif */ |
| int GLAD_GL_ANGLE_base_vertex_base_instance_shader_builtin = 0; |
| int GLAD_GL_ANGLE_shader_pixel_local_storage = 0; |
| int GLAD_GL_ANGLE_shader_pixel_local_storage_coherent = 0; |
| int GLAD_GL_ANGLE_polygon_mode = 0; |
| int GLAD_GL_ANGLE_provoking_vertex = 0; |
| static void load_GL_ANGLE_shader_pixel_local_storage(GLADloadfunc load) { |
| if(!GLAD_GL_ANGLE_shader_pixel_local_storage) return; |
| glad_glFramebufferMemorylessPixelLocalStorageANGLE = (PFNGLFRAMEBUFFERMEMORYLESSPIXELLOCALSTORAGEANGLEPROC)load("glFramebufferMemorylessPixelLocalStorageANGLE"); |
| glad_glFramebufferTexturePixelLocalStorageANGLE = (PFNGLFRAMEBUFFERTEXTUREPIXELLOCALSTORAGEANGLEPROC)load("glFramebufferTexturePixelLocalStorageANGLE"); |
| glad_glFramebufferPixelLocalClearValuefvANGLE = (PFNGLFRAMEBUFFERPIXELLOCALCLEARVALUEFVANGLEPROC)load("glFramebufferPixelLocalClearValuefvANGLE"); |
| glad_glFramebufferPixelLocalClearValueivANGLE = (PFNGLFRAMEBUFFERPIXELLOCALCLEARVALUEIVANGLEPROC)load("glFramebufferPixelLocalClearValueivANGLE"); |
| glad_glFramebufferPixelLocalClearValueuivANGLE = (PFNGLFRAMEBUFFERPIXELLOCALCLEARVALUEUIVANGLEPROC)load("glFramebufferPixelLocalClearValueuivANGLE"); |
| glad_glBeginPixelLocalStorageANGLE = (PFNGLBEGINPIXELLOCALSTORAGEANGLEPROC)load("glBeginPixelLocalStorageANGLE"); |
| glad_glEndPixelLocalStorageANGLE = (PFNGLENDPIXELLOCALSTORAGEANGLEPROC)load("glEndPixelLocalStorageANGLE"); |
| glad_glPixelLocalStorageBarrierANGLE = (PFNGLPIXELLOCALSTORAGEBARRIERANGLEPROC)load("glPixelLocalStorageBarrierANGLE"); |
| glad_glGetFramebufferPixelLocalStorageParameterfvANGLE = (PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGEPARAMETERFVANGLEPROC)load("glGetFramebufferPixelLocalStorageParameterfvANGLE"); |
| glad_glGetFramebufferPixelLocalStorageParameterivANGLE = (PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGEPARAMETERIVANGLEPROC)load("glGetFramebufferPixelLocalStorageParameterivANGLE"); |
| } |
| static void load_GL_ANGLE_polygon_mode(GLADloadfunc load) { |
| if(!GLAD_GL_ANGLE_polygon_mode) return; |
| glad_glPolygonModeANGLE = (PFNGLPOLYGONMODEANGLEPROC)load("glPolygonModeANGLE"); |
| } |
| static void load_GL_ANGLE_provoking_vertex(GLADloadfunc load) { |
| if(!GLAD_GL_ANGLE_provoking_vertex) return; |
| glad_glProvokingVertexANGLE = (PFNGLPROVOKINGVERTEXANGLEPROC)load("glProvokingVertexANGLE"); |
| } |
| int gladLoadCustomLoader(GLADloadfunc load) { |
| int ret = gladLoadGLES2(load); |
| |
| const char* version = (const char*)glGetString(GL_VERSION); |
| GLAD_GL_version_es = strstr(version, "OpenGL ES") != NULL; |
| if (GLAD_GL_version_es) |
| { |
| #ifdef _MSC_VER |
| sscanf_s(version, "OpenGL ES %d.%d", &GLAD_GL_version_major, &GLAD_GL_version_minor); |
| #else |
| sscanf(version, "OpenGL ES %d.%d", &GLAD_GL_version_major, &GLAD_GL_version_minor); |
| #endif |
| } |
| else |
| { |
| #ifdef _MSC_VER |
| sscanf_s(version, "%d.%d", &GLAD_GL_version_major, &GLAD_GL_version_minor); |
| #else |
| sscanf(version, "%d.%d", &GLAD_GL_version_major, &GLAD_GL_version_minor); |
| #endif |
| } |
| |
| GLint extensionCount; |
| glGetIntegerv(GL_NUM_EXTENSIONS, &extensionCount); |
| for (int i = 0; i < extensionCount; ++i) |
| { |
| const char* ext = (const char*)glGetStringi(GL_EXTENSIONS, i); |
| if (strcmp(ext, "GL_ANGLE_base_vertex_base_instance_shader_builtin") == 0) |
| { |
| GLAD_GL_ANGLE_base_vertex_base_instance_shader_builtin = 1; |
| } |
| if (strcmp(ext, "GL_ANGLE_shader_pixel_local_storage") == 0) |
| { |
| GLAD_GL_ANGLE_shader_pixel_local_storage = 1; |
| } |
| else if (strcmp(ext, "GL_ANGLE_shader_pixel_local_storage_coherent") == 0) |
| { |
| GLAD_GL_ANGLE_shader_pixel_local_storage_coherent = 1; |
| } |
| else if (strcmp(ext, "GL_ANGLE_polygon_mode") == 0) |
| { |
| GLAD_GL_ANGLE_polygon_mode = 1; |
| } |
| else if (strcmp(ext, "GL_ANGLE_provoking_vertex") == 0) |
| { |
| GLAD_GL_ANGLE_provoking_vertex = 1; |
| } |
| } |
| load_GL_ANGLE_shader_pixel_local_storage(load); |
| load_GL_ANGLE_polygon_mode(load); |
| load_GL_ANGLE_provoking_vertex(load); |
| load_Desktop_GL(load); |
| return ret; |
| } |