Validate the output colorspace before setting up a renderer
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user