Skip to content

Commit

Permalink
Added SDL_GL_FRAMEBUFFER_SRGB_CAPABLE (thanks, David!).
Browse files Browse the repository at this point in the history
Fixes Bugzilla #1985.
  • Loading branch information
icculus committed Oct 21, 2013
1 parent d1bde39 commit 0e699eb
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 2 deletions.
3 changes: 2 additions & 1 deletion include/SDL_video.h
Expand Up @@ -187,7 +187,8 @@ typedef enum
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
Expand Down
1 change: 1 addition & 0 deletions src/video/SDL_sysvideo.h
Expand Up @@ -293,6 +293,7 @@ struct SDL_VideoDevice
int flags;
int profile_mask;
int share_with_current_context;
int framebuffer_srgb_capable;
int retained_backing;
int driver_loaded;
char driver_path[256];
Expand Down
10 changes: 9 additions & 1 deletion src/video/SDL_video.c
Expand Up @@ -2570,7 +2570,10 @@ SDL_GL_SetAttribute(SDL_GLattr attr, int value)
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;
Expand Down Expand Up @@ -2741,6 +2744,11 @@ SDL_GL_GetAttribute(SDL_GLattr attr, int *value)
*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");
}
Expand Down
10 changes: 10 additions & 0 deletions src/video/windows/SDL_windowsopengl.c
Expand Up @@ -67,6 +67,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,
Expand Down Expand Up @@ -495,6 +500,11 @@ WIN_GL_SetupWindowInternal(_THIS, SDL_Window * window)
*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
Expand Down
14 changes: 14 additions & 0 deletions src/video/x11/SDL_x11opengl.c
Expand Up @@ -106,6 +106,13 @@ typedef GLXContext(*PFNGLXCREATECONTEXTATTRIBSARBPROC) (Display * dpy,
#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
Expand Down Expand Up @@ -472,6 +479,13 @@ X11_GL_GetAttributes(_THIS, Display * display, int screen, int * attribs, int si
attribs[i++] = _this->gl_config.multisamplesamples;
}

if (_this->gl_config.framebuffer_srgb_capable) {
attribs[i++] = GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB;
if( for_FBConfig ) {
attribs[i++] = True;
}
}

if (_this->gl_config.accelerated >= 0 &&
_this->gl_data->HAS_GLX_EXT_visual_rating) {
attribs[i++] = GLX_VISUAL_CAVEAT_EXT;
Expand Down

0 comments on commit 0e699eb

Please sign in to comment.