From 76438fa098458dc34efb778f39fe6389ac7a59a6 Mon Sep 17 00:00:00 2001 From: LazyBumHorse Date: Mon, 17 Jun 2019 18:26:41 +0200 Subject: [PATCH] workaround for crash due to glcore not always using at least OpenGL 3.2 --- gfx/drivers/gl_core.c | 2 +- gfx/drivers_shader/shader_gl_core.cpp | 38 ++++++++++++++++++++++----- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/gfx/drivers/gl_core.c b/gfx/drivers/gl_core.c index d5ce9299bf..4b42f59971 100644 --- a/gfx/drivers/gl_core.c +++ b/gfx/drivers/gl_core.c @@ -1028,7 +1028,7 @@ static void *gl_core_init(const video_info_t *video, } if (!string_is_empty(version)) - sscanf(version, "%d.%d", &gl->version_major, &gl->version_minor); + sscanf(version, "%u.%u", &gl->version_major, &gl->version_minor); { char device_str[128]; diff --git a/gfx/drivers_shader/shader_gl_core.cpp b/gfx/drivers_shader/shader_gl_core.cpp index 74f4b9d6d1..93e865f58a 100644 --- a/gfx/drivers_shader/shader_gl_core.cpp +++ b/gfx/drivers_shader/shader_gl_core.cpp @@ -94,15 +94,39 @@ static uint32_t gl_core_get_cross_compiler_target_version() #ifdef HAVE_OPENGLES3 if (!version || sscanf(version, "OpenGL ES %u.%u", &major, &minor) != 2) - return 300u; + return 300; + + if (major == 2 && minor == 0) + return 100; #else if (!version || sscanf(version, "%u.%u", &major, &minor) != 2) - return 150u; -#endif - if (major == 3u && minor == 2u) - return 150u; + return 150; - return 100u * major + 10u * minor; + if (major == 3) + { + switch (minor) + { + case 2: + return 150; + case 1: + return 140; + case 0: + return 130; + } + } + else if (major == 2) + { + switch (minor) + { + case 1: + return 120; + case 0: + return 110; + } + } +#endif + + return 100 * major + 10 * minor; } GLuint gl_core_cross_compile_program( @@ -719,7 +743,7 @@ void Framebuffer::init() levels = num_miplevels(size.width, size.height); if (max_levels < levels) - levels = max_levels; + levels = max_levels; if (levels == 0) levels = 1;