英特尔UHD 630上的默认帧缓冲区未进行伽玛校正



我在Windows 10上使用SDL2来创建OpenGL上下文,但当我试图在Intel UHD 630上获取帧缓冲区附件颜色编码时,却出现了无效操作错误。在我的Nvidia Geforce 1070上,它返回了正确的值(GL_LINEAR(。

根据Khronos的说法,我的代码应该可以工作:

checkGlErrors(); // no error
auto params = GLint{ 0 };
glGetFramebufferAttachmentParameteriv(GL_DRAW_FRAMEBUFFER,
GL_BACK,
GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING,
&params);
checkGlErrors(); // invalid operation

我读到的是,英特尔驱动程序是出了名的不可靠,但如果它们不支持SRGB帧缓冲区,我会感到惊讶。上下文:我使用GL_FRAMEBUFFER_SRGB进行伽马校正,这在我的集成GPU上也不起作用,尽管它在我的Nvidia GPU上完美工作。

我做错什么了吗?是否有可靠的方法在默认帧缓冲区上启用SRGB?我的驱动程序是最新的(27.10.100.8425(。我的Geforce GPU对输出进行了伽玛校正,但集成的Intel GPU在没有伽玛校正的情况下渲染默认帧缓冲区,所以我认为Intel驱动程序中的默认帧缓冲区时有一些我不知道的独特之处。

编辑:正确的值应该是GL_SRGB,而不是GL_LINEAR。获取该参数的正确代码:

// default framebuffer, using glGetFramebuffer
glGetFramebufferAttachmentParameteriv(GL_DRAW_FRAMEBUFFER, GL_FRONT_LEFT, GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, &params);
// default framebuffer, using glGetNamedFramebuffer
glGetNamedFramebufferAttachmentParameteriv(GL_ZERO, GL_FRONT_LEFT, GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, &params);
// named framebuffer
glGetNamedFramebufferAttachmentParameteriv(namedFramebuffer.getId(), GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, &params);

看起来这只是一个驱动程序错误。100.8425(当前的测试版驱动程序(运行良好,除了SRGB问题;当前稳定的驱动程序以及其他几个较新的驱动程序都在窗口中显示闪烁的绿色水平线。我恢复到100.8190,现在窗口渲染正确——与Geforce GPU相同。

这概括了这种情况:;英特尔的驱动程序很糟糕,不要相信他们做的任何事情;

最新更新