Added support for EXT_framebuffer_sRGB.

Added sRGB extensions to standards conformance page.
This commit is contained in:
Camilla Berglund 2015-07-14 15:44:13 +02:00
parent bfe55118dd
commit 04c057238b
6 changed files with 27 additions and 3 deletions

View File

@ -117,6 +117,11 @@ whether a context is flushed when it is released (made non-current). Where this
extension is unavailable, the `GLFW_CONTEXT_RELEASE_BEHAVIOR` hint will have no extension is unavailable, the `GLFW_CONTEXT_RELEASE_BEHAVIOR` hint will have no
effect and the context will always be flushed when released. effect and the context will always be flushed when released.
GLFW uses the `GLX_ARB_framebuffer_sRGB` and `GLX_EXT_framebuffer_sRGB`
extensions to provide support for sRGB framebuffers. Where both of these
extensions are unavailable, the `GLFW_SRGB_CAPABLE` hint will have no effect.
@section compat_wgl WGL extensions @section compat_wgl WGL extensions
The WGL API is used to create OpenGL contexts on Microsoft Windows and other The WGL API is used to create OpenGL contexts on Microsoft Windows and other
@ -154,6 +159,11 @@ whether a context is flushed when it is released (made non-current). Where this
extension is unavailable, the `GLFW_CONTEXT_RELEASE_BEHAVIOR` hint will have no extension is unavailable, the `GLFW_CONTEXT_RELEASE_BEHAVIOR` hint will have no
effect and the context will always be flushed when released. effect and the context will always be flushed when released.
GLFW uses the `WGL_ARB_framebuffer_sRGB` and `WGL_EXT_framebuffer_sRGB`
extensions to provide support for sRGB framebuffers. Where both of these
extension are unavailable, the `GLFW_SRGB_CAPABLE` hint will have no effect.
@section compat_osx OpenGL 3.2 and later on OS X @section compat_osx OpenGL 3.2 and later on OS X
Support for OpenGL 3.2 and above was introduced with OS X 10.7 and even then Support for OpenGL 3.2 and above was introduced with OS X 10.7 and even then

View File

@ -206,6 +206,8 @@ Zero disables multisampling. `GLFW_DONT_CARE` means the application has no
preference. preference.
`GLFW_SRGB_CAPABLE` specifies whether the framebuffer should be sRGB capable. `GLFW_SRGB_CAPABLE` specifies whether the framebuffer should be sRGB capable.
If supported, the created context will provide `GL_ARB_framebuffer_sRGB` or
`GL_EXT_framebuffer_sRGB`.
`GLFW_DOUBLEBUFFER` specifies whether the framebuffer should be double buffered. `GLFW_DOUBLEBUFFER` specifies whether the framebuffer should be double buffered.
You nearly always want to use double buffering. This is a hard constraint. You nearly always want to use double buffering. This is a hard constraint.

View File

@ -117,7 +117,7 @@ static GLboolean chooseFBConfig(const _GLFWfbconfig* desired, GLXFBConfig* resul
if (_glfw.glx.ARB_multisample) if (_glfw.glx.ARB_multisample)
u->samples = getFBConfigAttrib(n, GLX_SAMPLES); u->samples = getFBConfigAttrib(n, GLX_SAMPLES);
if (_glfw.glx.ARB_framebuffer_sRGB) if (_glfw.glx.ARB_framebuffer_sRGB || _glfw.glx.EXT_framebuffer_sRGB)
u->sRGB = getFBConfigAttrib(n, GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB); u->sRGB = getFBConfigAttrib(n, GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB);
u->glx = n; u->glx = n;
@ -226,6 +226,9 @@ int _glfwInitContextAPI(void)
if (_glfwPlatformExtensionSupported("GLX_ARB_framebuffer_sRGB")) if (_glfwPlatformExtensionSupported("GLX_ARB_framebuffer_sRGB"))
_glfw.glx.ARB_framebuffer_sRGB = GL_TRUE; _glfw.glx.ARB_framebuffer_sRGB = GL_TRUE;
if (_glfwPlatformExtensionSupported("GLX_EXT_framebuffer_sRGB"))
_glfw.glx.EXT_framebuffer_sRGB = GL_TRUE;
if (_glfwPlatformExtensionSupported("GLX_ARB_create_context")) if (_glfwPlatformExtensionSupported("GLX_ARB_create_context"))
{ {
_glfw.glx.CreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC) _glfw.glx.CreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)

View File

@ -81,6 +81,7 @@ typedef struct _GLFWlibraryGLX
GLboolean MESA_swap_control; GLboolean MESA_swap_control;
GLboolean ARB_multisample; GLboolean ARB_multisample;
GLboolean ARB_framebuffer_sRGB; GLboolean ARB_framebuffer_sRGB;
GLboolean EXT_framebuffer_sRGB;
GLboolean ARB_create_context; GLboolean ARB_create_context;
GLboolean ARB_create_context_profile; GLboolean ARB_create_context_profile;
GLboolean ARB_create_context_robustness; GLboolean ARB_create_context_robustness;

View File

@ -61,6 +61,8 @@ static void initWGLExtensions(_GLFWwindow* window)
_glfwPlatformExtensionSupported("WGL_ARB_multisample"); _glfwPlatformExtensionSupported("WGL_ARB_multisample");
window->wgl.ARB_framebuffer_sRGB = window->wgl.ARB_framebuffer_sRGB =
_glfwPlatformExtensionSupported("WGL_ARB_framebuffer_sRGB"); _glfwPlatformExtensionSupported("WGL_ARB_framebuffer_sRGB");
window->wgl.EXT_framebuffer_sRGB =
_glfwPlatformExtensionSupported("WGL_EXT_framebuffer_sRGB");
window->wgl.ARB_create_context = window->wgl.ARB_create_context =
_glfwPlatformExtensionSupported("WGL_ARB_create_context"); _glfwPlatformExtensionSupported("WGL_ARB_create_context");
window->wgl.ARB_create_context_profile = window->wgl.ARB_create_context_profile =
@ -175,7 +177,8 @@ static GLboolean choosePixelFormat(_GLFWwindow* window,
if (window->wgl.ARB_multisample) if (window->wgl.ARB_multisample)
u->samples = getPixelFormatAttrib(window, n, WGL_SAMPLES_ARB); u->samples = getPixelFormatAttrib(window, n, WGL_SAMPLES_ARB);
if (window->wgl.ARB_framebuffer_sRGB) if (window->wgl.ARB_framebuffer_sRGB ||
window->wgl.EXT_framebuffer_sRGB)
{ {
if (getPixelFormatAttrib(window, n, WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB)) if (getPixelFormatAttrib(window, n, WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB))
u->sRGB = GL_TRUE; u->sRGB = GL_TRUE;
@ -543,9 +546,13 @@ int _glfwAnalyzeContext(const _GLFWwindow* window,
if (fbconfig->sRGB) if (fbconfig->sRGB)
{ {
// sRGB is not a hard constraint, so do nothing if it's not supported // sRGB is not a hard constraint, so do nothing if it's not supported
if (window->wgl.ARB_framebuffer_sRGB && window->wgl.ARB_pixel_format) if ((window->wgl.ARB_framebuffer_sRGB ||
window->wgl.EXT_framebuffer_sRGB) &&
window->wgl.ARB_pixel_format)
{
required = GL_TRUE; required = GL_TRUE;
} }
}
if (required) if (required)
return _GLFW_RECREATION_REQUIRED; return _GLFW_RECREATION_REQUIRED;

View File

@ -55,6 +55,7 @@ typedef struct _GLFWcontextWGL
GLboolean EXT_swap_control; GLboolean EXT_swap_control;
GLboolean ARB_multisample; GLboolean ARB_multisample;
GLboolean ARB_framebuffer_sRGB; GLboolean ARB_framebuffer_sRGB;
GLboolean EXT_framebuffer_sRGB;
GLboolean ARB_pixel_format; GLboolean ARB_pixel_format;
GLboolean ARB_create_context; GLboolean ARB_create_context;
GLboolean ARB_create_context_profile; GLboolean ARB_create_context_profile;