Selaa lähdekoodia

render: opengl and opengles2 renderers try to disable GL_FRAMEBUFFER_SRGB.

Reference Issue #14898.

(cherry picked from commit fc570a1a1c12dcc484ad72c35ae2c585c63e7c72)
Ryan C. Gordon 2 viikkoa sitten
vanhempi
commit
febe5dd3bc
2 muutettua tiedostoa jossa 18 lisäystä ja 0 poistoa
  1. 9 0
      src/render/opengl/SDL_render_gl.c
  2. 9 0
      src/render/opengles2/SDL_render_gles2.c

+ 9 - 0
src/render/opengl/SDL_render_gl.c

@@ -43,6 +43,11 @@
 #define RENDERER_CONTEXT_MAJOR 2
 #define RENDERER_CONTEXT_MINOR 1
 
+// This is always the same number between the various EXT/ARB/GLES extensions.
+#ifndef GL_FRAMEBUFFER_SRGB
+#define GL_FRAMEBUFFER_SRGB 0x8DB9
+#endif
+
 // OpenGL renderer implementation
 
 /* Details on optimizing the texture path on macOS:
@@ -2009,6 +2014,10 @@ static bool GL_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_Pr
         goto error;
     }
 
+    if ((real_major >= 3) || SDL_GL_ExtensionSupported("GL_EXT_framebuffer_sRGB") || SDL_GL_ExtensionSupported("GL_ARB_framebuffer_sRGB")) {
+        data->glDisable(GL_FRAMEBUFFER_SRGB);
+    }
+
     // Set up parameters for rendering
     data->glMatrixMode(GL_MODELVIEW);
     data->glLoadIdentity();

+ 9 - 0
src/render/opengles2/SDL_render_gles2.c

@@ -45,6 +45,11 @@
 #define RENDERER_CONTEXT_MAJOR 2
 #define RENDERER_CONTEXT_MINOR 0
 
+// This is always the same number between the various EXT/ARB/GLES extensions.
+#ifndef GL_FRAMEBUFFER_SRGB
+#define GL_FRAMEBUFFER_SRGB 0x8DB9
+#endif
+
 /*************************************************************************************************
  * Context structures                                                                            *
  *************************************************************************************************/
@@ -2463,6 +2468,10 @@ static bool GLES2_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL
         renderer->npot_texture_wrap_unsupported = true;
     }
 
+    if (SDL_GL_ExtensionSupported("GL_EXT_sRGB_write_control")) {
+        data->glDisable(GL_FRAMEBUFFER_SRGB);
+    }
+
     // Set up parameters for rendering
     data->glDisable(GL_DEPTH_TEST);
     data->glDisable(GL_CULL_FACE);