Преглед изворни кода

Validate the output colorspace before setting up a renderer

Sam Lantinga пре 3 месеци
родитељ
комит
dde7fa3b17

+ 17 - 11
src/render/opengl/SDL_render_gl.c

@@ -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_GL_GetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, &major);
-    SDL_GL_GetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, &minor);
+    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)) {
+        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;

+ 8 - 8
src/render/opengles2/SDL_render_gles2.c

@@ -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;

+ 6 - 6
src/render/software/SDL_render_sw.c

@@ -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;
 }
 }