OpenGL sRGB帧缓冲区异常

OpenGL sRGB帧缓冲区异常,opengl,nvidia,glfw,Opengl,Nvidia,Glfw,我正在使用GLFW3创建上下文,我注意到GLFW_SRGB_CAPABLE属性似乎没有任何效果。无论我将其设置为什么,当启用GL\u FRAMEBUFFER\u sRGB时,我总是获得sRGB转换。我的理解是,当启用GL\u FRAMEBUFFER\u SRGB时,只有当帧缓冲区是SRGB格式时,才能进行SRGB转换。更让人困惑的是,如果我检查GL\u帧缓冲区\u附件\u颜色\u编码我会得到GL\u线性,无论我将GLFW\u SRGB\u功能设置为什么。这似乎不是GLFW的问题。我手动创建了一个

我正在使用GLFW3创建上下文,我注意到
GLFW_SRGB_CAPABLE
属性似乎没有任何效果。无论我将其设置为什么,当启用
GL\u FRAMEBUFFER\u sRGB
时,我总是获得sRGB转换。我的理解是,当启用
GL\u FRAMEBUFFER\u SRGB
时,只有当帧缓冲区是SRGB格式时,才能进行SRGB转换。更让人困惑的是,如果我检查
GL\u帧缓冲区\u附件\u颜色\u编码
我会得到
GL\u线性
,无论我将
GLFW\u SRGB\u功能设置为什么。这似乎不是GLFW的问题。我手动创建了一个窗口和上下文,并确保将
GL\u FRAMEBUFFER\u SRGB\u CAPABLE\u ARB
设置为true

我正在使用Nvidia GTX 760和340.76驱动程序。我正在检查如下格式:

glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_FRONT_LEFT, GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, &enc);

这应该返回
GL\u SRGB
,不是吗?如果无论
WGL\u FRAMEBUFFER\u sRGB\u CAPABLE\u ARB
设置为什么,它都在应用sRGB校正,那么Nvidia的驱动程序是否未损坏?直到现在还没有人注意到这一点

这似乎只是默认帧缓冲区的一个问题,因此它一定是Nvidia的WGL实现中的一个bug。我已经向他们指出了这一点,希望它能被修复。

对于GLX(Linux),我也经历了同样的行为。它将报告线性,尽管它清楚地呈现为sRGB。可以验证它是否实际工作的一种方法是使用texel值为1的sRGB纹理,将此纹理渲染到sRGB帧缓冲区,并查看它是否显示深灰色正方形。(为了进行比较,您可以看到当纹理不是sRGB纹理时它的外观-仍然具有texel值1,这将给出一个较浅的灰色正方形)

您可以看到以下示例:

有趣的是,在OpenGL ES上下文中,(几乎)相同的代码不能正确呈现

nvidia的开发者OpenGL论坛上有一个主题:


嗨,你能再详细说明一下吗?我也很感兴趣。你是怎么得出这个结论的?