mirror of
https://github.com/glfw/glfw.git
synced 2024-11-22 13:04:35 +00:00
Added initial framebuffer sRGB support.
This commit is contained in:
parent
20662dd77b
commit
07260cb768
@ -329,11 +329,12 @@ extern "C" {
|
||||
#define GLFW_STEREO 0x00020010
|
||||
#define GLFW_WINDOW_NO_RESIZE 0x00020011
|
||||
#define GLFW_FSAA_SAMPLES 0x00020012
|
||||
#define GLFW_OPENGL_VERSION_MAJOR 0x00020013
|
||||
#define GLFW_OPENGL_VERSION_MINOR 0x00020014
|
||||
#define GLFW_OPENGL_FORWARD_COMPAT 0x00020015
|
||||
#define GLFW_OPENGL_DEBUG_CONTEXT 0x00020016
|
||||
#define GLFW_OPENGL_PROFILE 0x00020017
|
||||
#define GLFW_SRGB_CAPABLE 0x00020013
|
||||
#define GLFW_OPENGL_VERSION_MAJOR 0x00020014
|
||||
#define GLFW_OPENGL_VERSION_MINOR 0x00020015
|
||||
#define GLFW_OPENGL_FORWARD_COMPAT 0x00020016
|
||||
#define GLFW_OPENGL_DEBUG_CONTEXT 0x00020017
|
||||
#define GLFW_OPENGL_PROFILE 0x00020018
|
||||
|
||||
/* GLFW_OPENGL_PROFILE bit tokens */
|
||||
#define GLFW_OPENGL_CORE_PROFILE 0x00000001
|
||||
|
@ -272,6 +272,7 @@ version of GLFW.</p>
|
||||
<li>Added <code>glfwSetWindowIconifyCallback</code> function and <code>GLFWwindowiconifyfun</code> type for receiving window iconification events</li>
|
||||
<li>Added <code>glfwGetCurrentWindow</code> function for retrieving the window whose OpenGL context is current</li>
|
||||
<li>Added <code>GLFW_OPENGL_ES2_PROFILE</code> profile for creating OpenGL ES 2.0 contexts using the <code>GLX_EXT_create_context_es2_profile</code> and <code>WGL_EXT_create_context_es2_profile</code> extensions</li>
|
||||
<li>Added <code>GLFW_SRGB_CAPABLE</code> hint for creating sRGB-capable contexts using the <code>GL_ARB_framebuffer_sRGB</code> and <code>GL_EXT_framebuffer_sRGB</code> extensions</li>
|
||||
<li>Added <code>windows</code> simple multi-window test program</li>
|
||||
<li>Added <code>sharing</code> simple OpenGL object sharing test program</li>
|
||||
<li>Added a parameter to <code>glfwOpenWindow</code> for specifying a context the new window's context will share objects with</li>
|
||||
|
@ -90,6 +90,7 @@ struct _GLFWhints
|
||||
GLboolean stereo;
|
||||
GLboolean windowNoResize;
|
||||
int samples;
|
||||
GLboolean sRGB;
|
||||
int glMajor;
|
||||
int glMinor;
|
||||
GLboolean glForward;
|
||||
@ -141,6 +142,7 @@ struct _GLFWfbconfig
|
||||
int auxBuffers;
|
||||
GLboolean stereo;
|
||||
int samples;
|
||||
GLboolean sRGB;
|
||||
GLFWintptr platformID;
|
||||
};
|
||||
|
||||
@ -186,6 +188,7 @@ struct _GLFWwindow
|
||||
int auxBuffers;
|
||||
GLboolean stereo;
|
||||
int samples;
|
||||
GLboolean sRGB;
|
||||
|
||||
// OpenGL extensions and context attributes
|
||||
GLboolean accelerated; // GL_TRUE if OpenGL context is "accelerated"
|
||||
|
@ -239,6 +239,8 @@ typedef struct _GLFWcontextWGL
|
||||
PFNWGLCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB;
|
||||
GLboolean has_WGL_EXT_swap_control;
|
||||
GLboolean has_WGL_ARB_multisample;
|
||||
GLboolean has_WGL_EXT_framebuffer_sRGB;
|
||||
GLboolean has_WGL_ARB_framebuffer_sRGB;
|
||||
GLboolean has_WGL_ARB_pixel_format;
|
||||
GLboolean has_WGL_ARB_create_context;
|
||||
GLboolean has_WGL_ARB_create_context_profile;
|
||||
|
@ -251,6 +251,11 @@ static _GLFWfbconfig* getFBConfigs(_GLFWwindow* window, unsigned int* found)
|
||||
}
|
||||
else
|
||||
result[*found].samples = 0;
|
||||
|
||||
if (window->WGL.has_WGL_EXT_framebuffer_sRGB || window->WGL.has_WGL_ARB_framebuffer_sRGB)
|
||||
result[*found].sRGB = getPixelFormatAttrib(window, i, WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB);
|
||||
else
|
||||
result[*found].sRGB = GL_FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -294,8 +299,9 @@ static _GLFWfbconfig* getFBConfigs(_GLFWwindow* window, unsigned int* found)
|
||||
result[*found].auxBuffers = pfd.cAuxBuffers;
|
||||
result[*found].stereo = (pfd.dwFlags & PFD_STEREO) ? GL_TRUE : GL_FALSE;
|
||||
|
||||
// PFD pixel formats do not support FSAA
|
||||
// PFD pixel formats do not support FSAA or sRGB
|
||||
result[*found].samples = 0;
|
||||
result[*found].sRGB = GL_FALSE;
|
||||
}
|
||||
|
||||
result[*found].platformID = i;
|
||||
@ -1024,6 +1030,8 @@ static void initWGLExtensions(_GLFWwindow* window)
|
||||
window->WGL.has_WGL_EXT_swap_control = GL_FALSE;
|
||||
window->WGL.has_WGL_ARB_pixel_format = GL_FALSE;
|
||||
window->WGL.has_WGL_ARB_multisample = GL_FALSE;
|
||||
window->WGL.has_WGL_EXT_framebuffer_sRGB = GL_FALSE;
|
||||
window->WGL.has_WGL_ARB_framebuffer_sRGB = GL_FALSE;
|
||||
window->WGL.has_WGL_ARB_create_context = GL_FALSE;
|
||||
window->WGL.has_WGL_ARB_create_context_profile = GL_FALSE;
|
||||
|
||||
@ -1040,6 +1048,12 @@ static void initWGLExtensions(_GLFWwindow* window)
|
||||
if (_glfwPlatformExtensionSupported("WGL_ARB_multisample"))
|
||||
window->WGL.has_WGL_ARB_multisample = GL_TRUE;
|
||||
|
||||
if (_glfwPlatformExtensionSupported("WGL_EXT_framebuffer_sRGB"))
|
||||
window->WGL.has_WGL_EXT_framebuffer_sRGB = GL_TRUE;
|
||||
|
||||
if (_glfwPlatformExtensionSupported("WGL_ARB_framebuffer_sRGB"))
|
||||
window->WGL.has_WGL_ARB_framebuffer_sRGB = GL_TRUE;
|
||||
|
||||
if (_glfwPlatformExtensionSupported("WGL_ARB_create_context"))
|
||||
{
|
||||
window->WGL.CreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)
|
||||
|
12
src/window.c
12
src/window.c
@ -269,6 +269,12 @@ const _GLFWfbconfig* _glfwChooseFBConfig(const _GLFWfbconfig* desired,
|
||||
continue;
|
||||
}
|
||||
|
||||
if (desired->sRGB && !current->sRGB)
|
||||
{
|
||||
// sRGB framebuffer is a hard constraint
|
||||
continue;
|
||||
}
|
||||
|
||||
// Count number of missing buffers
|
||||
{
|
||||
missing = 0;
|
||||
@ -448,6 +454,7 @@ GLFWAPI GLFWwindow glfwOpenWindow(int width, int height,
|
||||
fbconfig.auxBuffers = Max(_glfwLibrary.hints.auxBuffers, 0);
|
||||
fbconfig.stereo = _glfwLibrary.hints.stereo ? GL_TRUE : GL_FALSE;
|
||||
fbconfig.samples = Max(_glfwLibrary.hints.samples, 0);
|
||||
fbconfig.sRGB = _glfwLibrary.hints.sRGB ? GL_TRUE : GL_FALSE;
|
||||
|
||||
// Set up desired window config
|
||||
wndconfig.mode = mode;
|
||||
@ -731,6 +738,9 @@ GLFWAPI void glfwOpenWindowHint(int target, int hint)
|
||||
case GLFW_FSAA_SAMPLES:
|
||||
_glfwLibrary.hints.samples = hint;
|
||||
break;
|
||||
case GLFW_SRGB_CAPABLE:
|
||||
_glfwLibrary.hints.sRGB = hint;
|
||||
break;
|
||||
case GLFW_OPENGL_VERSION_MAJOR:
|
||||
_glfwLibrary.hints.glMajor = hint;
|
||||
break;
|
||||
@ -1040,6 +1050,8 @@ GLFWAPI int glfwGetWindowParam(GLFWwindow window, int param)
|
||||
return window->windowNoResize;
|
||||
case GLFW_FSAA_SAMPLES:
|
||||
return window->samples;
|
||||
case GLFW_SRGB_CAPABLE:
|
||||
return window->sRGB;
|
||||
case GLFW_OPENGL_VERSION_MAJOR:
|
||||
return window->glMajor;
|
||||
case GLFW_OPENGL_VERSION_MINOR:
|
||||
|
@ -110,6 +110,9 @@ typedef struct _GLFWcontextGLX
|
||||
GLboolean has_GLX_SGI_swap_control;
|
||||
GLboolean has_GLX_EXT_swap_control;
|
||||
GLboolean has_GLX_ARB_multisample;
|
||||
GLboolean has_GLX_ARB_fbconfig_float;
|
||||
GLboolean has_GLX_ARB_framebuffer_sRGB;
|
||||
GLboolean has_GLX_EXT_framebuffer_sRGB;
|
||||
GLboolean has_GLX_ARB_create_context;
|
||||
GLboolean has_GLX_ARB_create_context_profile;
|
||||
GLboolean has_GLX_EXT_create_context_es2_profile;
|
||||
|
@ -461,6 +461,11 @@ static _GLFWfbconfig* getFBConfigs(_GLFWwindow* window, unsigned int* found)
|
||||
result[*found].auxBuffers = getFBConfigAttrib(window, fbconfigs[i], GLX_AUX_BUFFERS);
|
||||
result[*found].stereo = getFBConfigAttrib(window, fbconfigs[i], GLX_STEREO);
|
||||
|
||||
if (window->GLX.has_GLX_EXT_framebuffer_sRGB || window->GLX.has_GLX_ARB_framebuffer_sRGB)
|
||||
result[*found].sRGB = getFBConfigAttrib(window, fbconfigs[i], GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB);
|
||||
else
|
||||
result[*found].sRGB = GL_FALSE;
|
||||
|
||||
if (window->GLX.has_GLX_ARB_multisample)
|
||||
result[*found].samples = getFBConfigAttrib(window, fbconfigs[i], GLX_SAMPLES);
|
||||
else
|
||||
@ -711,6 +716,12 @@ static void initGLXExtensions(_GLFWwindow* window)
|
||||
if (_glfwPlatformExtensionSupported("GLX_ARB_multisample"))
|
||||
window->GLX.has_GLX_ARB_multisample = GL_TRUE;
|
||||
|
||||
if (_glfwPlatformExtensionSupported("GLX_EXT_framebuffer_sRGB"))
|
||||
window->GLX.has_GLX_EXT_framebuffer_sRGB = GL_TRUE;
|
||||
|
||||
if (_glfwPlatformExtensionSupported("GLX_ARB_framebuffer_sRGB"))
|
||||
window->GLX.has_GLX_ARB_framebuffer_sRGB = GL_TRUE;
|
||||
|
||||
if (_glfwPlatformExtensionSupported("GLX_ARB_create_context"))
|
||||
{
|
||||
window->GLX.CreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)
|
||||
|
Loading…
Reference in New Issue
Block a user