From b064ad6ac50dcf96d43e8fb2408c1ba93d291987 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 8 Mar 2022 18:14:10 -0800 Subject: [PATCH] Allow GL_ARB_texture_non_power_of_two environment variable to override OpenGL 2.0 check --- src/render/opengl/SDL_render_gl.c | 33 +++++++++++++++++++------------ 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/render/opengl/SDL_render_gl.c b/src/render/opengl/SDL_render_gl.c index aac3893b5f..9e5f2b5e43 100644 --- a/src/render/opengl/SDL_render_gl.c +++ b/src/render/opengl/SDL_render_gl.c @@ -1726,8 +1726,8 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) Uint32 window_flags; int profile_mask = 0, major = 0, minor = 0; SDL_bool changed_window = SDL_FALSE; - SDL_bool isGL2 = SDL_FALSE; - const char *verstr = NULL; + const char *hint; + SDL_bool non_power_of_two_supported = SDL_FALSE; SDL_GL_GetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, &profile_mask); SDL_GL_GetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, &major); @@ -1847,22 +1847,29 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) data->glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB); } - verstr = (const char *) data->glGetString(GL_VERSION); - if (verstr) { - char verbuf[16]; - char *ptr; - SDL_strlcpy(verbuf, verstr, sizeof (verbuf)); - ptr = SDL_strchr(verbuf, '.'); - if (ptr) { - *ptr = '\0'; - if (SDL_atoi(verbuf) >= 2) { - isGL2 = SDL_TRUE; + hint = SDL_getenv("GL_ARB_texture_non_power_of_two"); + if (!hint || *hint != '0') { + SDL_bool isGL2 = SDL_FALSE; + const char *verstr = (const char *)data->glGetString(GL_VERSION); + if (verstr) { + char verbuf[16]; + char *ptr; + SDL_strlcpy(verbuf, verstr, sizeof (verbuf)); + ptr = SDL_strchr(verbuf, '.'); + if (ptr) { + *ptr = '\0'; + if (SDL_atoi(verbuf) >= 2) { + isGL2 = SDL_TRUE; + } } } + if (isGL2 || SDL_GL_ExtensionSupported("GL_ARB_texture_non_power_of_two")) { + non_power_of_two_supported = SDL_TRUE; + } } data->textype = GL_TEXTURE_2D; - if (isGL2 || SDL_GL_ExtensionSupported("GL_ARB_texture_non_power_of_two")) { + if (non_power_of_two_supported) { data->GL_ARB_texture_non_power_of_two_supported = SDL_TRUE; data->glGetIntegerv(GL_MAX_TEXTURE_SIZE, &value); renderer->info.max_texture_width = value;