# HG changeset patch # User David Gow # Date 1374753490 -28800 # Node ID 1ee00bb1ef755aa31eee18c54d4185a8341626ac # Parent 4a98853e8e4cacb97072be68b1ebe9f1c81d3aa1 Add support for SDL_GL_FRAMEBUFFER_SRGB_CAPABLE This allows users to request sRGB capable visuals using the GLX_ARB_framebuffer_sRGB extension on X11 and the WGL_ARB_framebuffer_sRGB extension on Win32. diff -r 4a98853e8e4c -r 1ee00bb1ef75 include/SDL_video.h --- a/include/SDL_video.h Wed Jul 24 22:25:17 2013 +0200 +++ b/include/SDL_video.h Thu Jul 25 19:58:10 2013 +0800 @@ -186,7 +186,8 @@ SDL_GL_CONTEXT_EGL, SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_PROFILE_MASK, - SDL_GL_SHARE_WITH_CURRENT_CONTEXT + SDL_GL_SHARE_WITH_CURRENT_CONTEXT, + SDL_GL_FRAMEBUFFER_SRGB_CAPABLE } SDL_GLattr; typedef enum diff -r 4a98853e8e4c -r 1ee00bb1ef75 src/video/SDL_sysvideo.h --- a/src/video/SDL_sysvideo.h Wed Jul 24 22:25:17 2013 +0200 +++ b/src/video/SDL_sysvideo.h Thu Jul 25 19:58:10 2013 +0800 @@ -292,6 +292,7 @@ int profile_mask; int use_egl; int share_with_current_context; + int framebuffer_srgb_capable; int retained_backing; int driver_loaded; char driver_path[256]; diff -r 4a98853e8e4c -r 1ee00bb1ef75 src/video/SDL_video.c --- a/src/video/SDL_video.c Wed Jul 24 22:25:17 2013 +0200 +++ b/src/video/SDL_video.c Thu Jul 25 19:58:10 2013 +0800 @@ -2537,7 +2537,10 @@ break; case SDL_GL_SHARE_WITH_CURRENT_CONTEXT: _this->gl_config.share_with_current_context = value; - break; + break; + case SDL_GL_FRAMEBUFFER_SRGB_CAPABLE: + _this->gl_config.framebuffer_srgb_capable = value; + break; default: retval = SDL_SetError("Unknown OpenGL attribute"); break; @@ -2702,6 +2705,11 @@ *value = _this->gl_config.share_with_current_context; return 0; } + case SDL_GL_FRAMEBUFFER_SRGB_CAPABLE: + { + *value = _this->gl_config.framebuffer_srgb_capable; + return 0; + } default: return SDL_SetError("Unknown OpenGL attribute"); } diff -r 4a98853e8e4c -r 1ee00bb1ef75 src/video/windows/SDL_windowsopengl.c --- a/src/video/windows/SDL_windowsopengl.c Wed Jul 24 22:25:17 2013 +0200 +++ b/src/video/windows/SDL_windowsopengl.c Thu Jul 25 19:58:10 2013 +0800 @@ -66,6 +66,11 @@ #define WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 #endif +#ifndef WGL_ARB_framebuffer_sRGB +#define WGL_ARB_framebuffer_sRGB +#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 +#endif + typedef HGLRC(APIENTRYP PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, @@ -493,6 +498,11 @@ *iAttr++ = _this->gl_config.multisamplesamples; } + if (_this->gl_config.framebuffer_srgb_capable) { + *iAttr++ = WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB; + *iAttr++ = _this->gl_config.framebuffer_srgb_capable; + } + /* We always choose either FULL or NO accel on Windows, because of flaky drivers. If the app didn't specify, we use FULL, because that's probably what they wanted (and if you didn't care and got FULL, that's diff -r 4a98853e8e4c -r 1ee00bb1ef75 src/video/x11/SDL_x11opengl.c --- a/src/video/x11/SDL_x11opengl.c Wed Jul 24 22:25:17 2013 +0200 +++ b/src/video/x11/SDL_x11opengl.c Thu Jul 25 19:58:10 2013 +0800 @@ -106,6 +106,13 @@ #endif #endif +#ifndef GLX_ARB_framebuffer_sRGB +#define GLX_ARB_framebuffer_sRGB +#ifndef GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB +#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2 +#endif +#endif + #ifndef GLX_EXT_swap_control #define GLX_SWAP_INTERVAL_EXT 0x20F1 #define GLX_MAX_SWAP_INTERVAL_EXT 0x20F2 @@ -461,6 +468,11 @@ attribs[i++] = _this->gl_config.multisamplesamples; } + if (_this->gl_config.framebuffer_srgb_capable) { + attribs[i++] = GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB; + attribs[i++] = _this->gl_config.framebuffer_srgb_capable; + } + if (_this->gl_config.accelerated >= 0 && _this->gl_data->HAS_GLX_EXT_visual_rating) { attribs[i++] = GLX_VISUAL_CAVEAT_EXT;