mirror of
https://github.com/glfw/glfw.git
synced 2026-09-18 22:55:46 +00:00
Added initial framebuffer sRGB support.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user