繁体   English   中英

Intel UHD 630 上的默认帧缓冲区未进行伽马校正

[英]Default framebuffer not gamma-correcting on Intel UHD 630

我在 Windows 10 上使用 SDL2 来创建 OpenGL 上下文,但是当我尝试在英特尔 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)。 output 在我的 Geforce GPU 上进行了伽马校正,但集成的英特尔 GPU 正在渲染默认帧缓冲区,而我没有伽马校正,所以我假设英特尔没有默认的帧缓冲区

编辑:正确的值应该是 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(当前的 beta 驱动程序)运行良好,除了 SRGB 问题; 当前稳定的驱动程序以及其他几个较新的驱动程序都在 window 中显示闪烁的绿色水平线。 我恢复到 100.8190,现在 window 渲染正确——与 Geforce GPU 相同。

这总结了这种情况: “英特尔驱动程序很糟糕,不要相信他们所做的任何事情。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM