Validate the output colorspace before setting up a renderer

This commit is contained in:
Sam Lantinga
2025-11-10 16:30:17 -08:00
parent 6baaa0fe87
commit dde7fa3b17
3 changed files with 31 additions and 25 deletions

View File

@@ -1759,7 +1759,7 @@ static bool GL_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_Pr
{ {
GL_RenderData *data = NULL; GL_RenderData *data = NULL;
GLint value; GLint value;
SDL_WindowFlags window_flags; SDL_WindowFlags window_flags = 0;
int profile_mask = 0, major = 0, minor = 0; int profile_mask = 0, major = 0, minor = 0;
int real_major = 0, real_minor = 0; int real_major = 0, real_minor = 0;
bool changed_window = false; bool changed_window = false;
@@ -1767,9 +1767,22 @@ static bool GL_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_Pr
bool non_power_of_two_supported = false; bool non_power_of_two_supported = false;
bool bgra_supported = false; bool bgra_supported = false;
SDL_GL_GetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, &profile_mask); SDL_SetupRendererColorspace(renderer, create_props);
SDL_GL_GetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, &major);
SDL_GL_GetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, &minor); if (renderer->output_colorspace != SDL_COLORSPACE_SRGB) {
SDL_SetError("Unsupported output colorspace");
goto error;
}
if (!SDL_GL_GetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, &profile_mask)) {
goto error;
}
if (!SDL_GL_GetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, &major)) {
goto error;
}
if (!SDL_GL_GetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, &minor)) {
goto error;
}
#ifndef SDL_VIDEO_VITA_PVR_OGL #ifndef SDL_VIDEO_VITA_PVR_OGL
SDL_SyncWindow(window); SDL_SyncWindow(window);
@@ -1788,13 +1801,6 @@ static bool GL_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_Pr
} }
#endif #endif
SDL_SetupRendererColorspace(renderer, create_props);
if (renderer->output_colorspace != SDL_COLORSPACE_SRGB) {
SDL_SetError("Unsupported output colorspace");
goto error;
}
data = (GL_RenderData *)SDL_calloc(1, sizeof(*data)); data = (GL_RenderData *)SDL_calloc(1, sizeof(*data));
if (!data) { if (!data) {
goto error; goto error;

View File

@@ -2304,12 +2304,19 @@ static bool GLES2_SetVSync(SDL_Renderer *renderer, const int vsync)
static bool GLES2_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_PropertiesID create_props) static bool GLES2_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_PropertiesID create_props)
{ {
GLES2_RenderData *data = NULL; GLES2_RenderData *data = NULL;
SDL_WindowFlags window_flags = 0; // -Wconditional-uninitialized SDL_WindowFlags window_flags = 0;
GLint window_framebuffer; GLint window_framebuffer;
GLint value; GLint value;
int profile_mask = 0, major = 0, minor = 0; int profile_mask = 0, major = 0, minor = 0;
bool changed_window = false; bool changed_window = false;
SDL_SetupRendererColorspace(renderer, create_props);
if (renderer->output_colorspace != SDL_COLORSPACE_SRGB) {
SDL_SetError("Unsupported output colorspace");
goto error;
}
if (!SDL_GL_GetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, &profile_mask)) { if (!SDL_GL_GetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, &profile_mask)) {
goto error; goto error;
} }
@@ -2337,13 +2344,6 @@ static bool GLES2_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL
} }
} }
SDL_SetupRendererColorspace(renderer, create_props);
if (renderer->output_colorspace != SDL_COLORSPACE_SRGB) {
SDL_SetError("Unsupported output colorspace");
goto error;
}
data = (GLES2_RenderData *)SDL_calloc(1, sizeof(GLES2_RenderData)); data = (GLES2_RenderData *)SDL_calloc(1, sizeof(GLES2_RenderData));
if (!data) { if (!data) {
goto error; goto error;

View File

@@ -1161,6 +1161,12 @@ bool SW_CreateRendererForSurface(SDL_Renderer *renderer, SDL_Surface *surface, S
return SDL_SetError("Unsupported surface format"); return SDL_SetError("Unsupported surface format");
} }
SDL_SetupRendererColorspace(renderer, create_props);
if (renderer->output_colorspace != SDL_COLORSPACE_SRGB) {
return SDL_SetError("Unsupported output colorspace");
}
renderer->software = true; renderer->software = true;
data = (SW_RenderData *)SDL_calloc(1, sizeof(*data)); data = (SW_RenderData *)SDL_calloc(1, sizeof(*data));
@@ -1202,12 +1208,6 @@ bool SW_CreateRendererForSurface(SDL_Renderer *renderer, SDL_Surface *surface, S
SW_SelectBestFormats(renderer, surface->format); SW_SelectBestFormats(renderer, surface->format);
SDL_SetupRendererColorspace(renderer, create_props);
if (renderer->output_colorspace != SDL_COLORSPACE_SRGB) {
return SDL_SetError("Unsupported output colorspace");
}
return true; return true;
} }