[英]Default framebuffer not gamma-correcting on Intel UHD 630
I'm using SDL2 on Windows 10 to create an OpenGL context, but when I try to get the framebuffer attachment color encoding on an Intel UHD 630, I get an Invalid Operation error instead.我在 Windows 10 上使用 SDL2 来创建 OpenGL 上下文,但是当我尝试在英特尔 UHD 630 上获取帧缓冲区附件颜色编码时,我得到了一个无效操作错误。 On my Nvidia Geforce 1070, it's returning the correct value (GL_LINEAR).在我的 Nvidia Geforce 1070 上,它返回了正确的值 (GL_LINEAR)。
According to Khronos , my code should work:根据Khronos ,我的代码应该可以工作:
checkGlErrors(); // no error
auto params = GLint{ 0 };
glGetFramebufferAttachmentParameteriv(GL_DRAW_FRAMEBUFFER,
GL_BACK,
GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING,
¶ms);
checkGlErrors(); // invalid operation
What I'm reading is that Intel drivers are notoriously unreliable, but I'll be surprised if they don't support an SRGB framebuffer.我正在阅读的是英特尔驱动程序是出了名的不可靠,但如果它们不支持 SRGB 帧缓冲区,我会感到惊讶。 For context: I'm using GL_FRAMEBUFFER_SRGB for gamma correction, and this too doesn't work on my integrated GPU even though it works perfectly on my Nvidia GPU.对于上下文:我正在使用 GL_FRAMEBUFFER_SRGB 进行伽马校正,这在我的集成 GPU 上也不起作用,即使它在我的 Nvidia GPU 上完美运行。
Am I doing something wrong?难道我做错了什么? Is there a reliable way of enabling SRGB on the default framebuffer?是否有可靠的方法在默认帧缓冲区上启用 SRGB? My drivers are up to date (27.10.100.8425).我的驱动程序是最新的 (27.10.100.8425)。 The output is gamma-corrected on my Geforce GPU but the integrated Intel GPU is rendering the default framebuffer without gamma correction, so I'm assuming there's something unique about the default framebuffer in the Intel drivers that I don't know. output 在我的 Geforce GPU 上进行了伽马校正,但集成的英特尔 GPU 正在渲染默认帧缓冲区,而我没有伽马校正,所以我假设英特尔没有默认的帧缓冲区
Edit: The correct value should be GL_SRGB, not GL_LINEAR.编辑:正确的值应该是 GL_SRGB,而不是 GL_LINEAR。 The correct code for getting that parameter:获取该参数的正确代码:
// default framebuffer, using glGetFramebuffer
glGetFramebufferAttachmentParameteriv(GL_DRAW_FRAMEBUFFER, GL_FRONT_LEFT, GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, ¶ms);
// default framebuffer, using glGetNamedFramebuffer
glGetNamedFramebufferAttachmentParameteriv(GL_ZERO, GL_FRONT_LEFT, GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, ¶ms);
// named framebuffer
glGetNamedFramebufferAttachmentParameteriv(namedFramebuffer.getId(), GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, ¶ms);
It looks like it's just a driver bug.看起来这只是一个驱动程序错误。 100.8425 (the current beta driver) works well except for the SRGB issue; 100.8425(当前的 beta 驱动程序)运行良好,除了 SRGB 问题; the current stable driver, along with several other newer drivers, all display flickering green, horizontal lines in the window.当前稳定的驱动程序以及其他几个较新的驱动程序都在 window 中显示闪烁的绿色水平线。 I reverted to 100.8190 and now the window is rendering correctly--identical to the Geforce GPU.我恢复到 100.8190,现在 window 渲染正确——与 Geforce GPU 相同。
This sums up the situation: "Intel drivers suck, don't trust anything they do."这总结了这种情况: “英特尔驱动程序很糟糕,不要相信他们所做的任何事情。”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.