video: Only set GL_FRAMEBUFFER_SRGB state if the hint requests it.

Reference Issue #14898.
This commit is contained in:
Ryan C. Gordon
2026-02-13 14:14:40 -05:00
parent c381b2bdfa
commit ead67481c0
2 changed files with 21 additions and 15 deletions

View File

@@ -3059,6 +3059,10 @@ extern "C" {
* Note that some platforms cannot make this request at all, and on all * Note that some platforms cannot make this request at all, and on all
* platforms this request can be denied by the operating system. * platforms this request can be denied by the operating system.
* *
* In addition to attempting to obtain the type of sRGB-capable OpenGL context
* requested by this hint, SDL will try to force the state of
* GL_FRAMEBUFFER_SRGB on the new context, if appropriate.
*
* The variable can be set to the following values: * The variable can be set to the following values:
* *
* - "0": Force a request for an OpenGL context that is _not_ sRGB-capable. * - "0": Force a request for an OpenGL context that is _not_ sRGB-capable.

View File

@@ -5395,10 +5395,10 @@ SDL_GLContext SDL_GL_CreateContext(SDL_Window *window)
} }
#if defined(SDL_VIDEO_OPENGL) || defined(SDL_VIDEO_OPENGL_ES) || defined(SDL_VIDEO_OPENGL_ES2) #if defined(SDL_VIDEO_OPENGL) || defined(SDL_VIDEO_OPENGL_ES) || defined(SDL_VIDEO_OPENGL_ES2)
bool srgb_requested = (_this->gl_config.framebuffer_srgb_capable > 0); int srgb_requested = -1;
const char *srgbhint = SDL_GetHint(SDL_HINT_OPENGL_FORCE_SRGB_CAPABLE); const char *srgbhint = SDL_GetHint(SDL_HINT_OPENGL_FORCE_SRGB_CAPABLE);
if (srgbhint && *srgbhint) { if (srgbhint && *srgbhint) {
srgb_requested = SDL_GetStringBoolean(srgbhint, false); srgb_requested = SDL_GetStringBoolean(srgbhint, false) ? 1 : 0;
} }
#endif #endif
@@ -5415,6 +5415,7 @@ SDL_GLContext SDL_GL_CreateContext(SDL_Window *window)
#if defined(SDL_VIDEO_OPENGL) || defined(SDL_VIDEO_OPENGL_ES) || defined(SDL_VIDEO_OPENGL_ES2) #if defined(SDL_VIDEO_OPENGL) || defined(SDL_VIDEO_OPENGL_ES) || defined(SDL_VIDEO_OPENGL_ES2)
// try to force the window framebuffer to the requested sRGB state. // try to force the window framebuffer to the requested sRGB state.
if (srgb_requested != -1) {
PFNGLENABLEPROC glToggleFunc = (PFNGLENABLEPROC) SDL_GL_GetProcAddress(srgb_requested ? "glEnable" : "glDisable"); PFNGLENABLEPROC glToggleFunc = (PFNGLENABLEPROC) SDL_GL_GetProcAddress(srgb_requested ? "glEnable" : "glDisable");
PFNGLGETSTRINGPROC glGetStringFunc = (PFNGLGETSTRINGPROC)SDL_GL_GetProcAddress("glGetString"); PFNGLGETSTRINGPROC glGetStringFunc = (PFNGLGETSTRINGPROC)SDL_GL_GetProcAddress("glGetString");
if (glToggleFunc && glGetStringFunc) { if (glToggleFunc && glGetStringFunc) {
@@ -5431,6 +5432,7 @@ SDL_GLContext SDL_GL_CreateContext(SDL_Window *window)
glToggleFunc(GL_FRAMEBUFFER_SRGB); glToggleFunc(GL_FRAMEBUFFER_SRGB);
} }
} }
}
#endif #endif
return ctx; return ctx;