gpt4 book ai didi

c++ - Intel UHD 630 上的默认帧缓冲区未进行 Gamma 校正

转载 作者:行者123 更新时间:2023-12-01 14:47:14 27 4
gpt4 key购买 nike

我在 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 进行 Gamma 校正,这在我的集成 GPU 上也不起作用,即使它在我的 Nvidia GPU 上运行良好。
难道我做错了什么?是否有在默认帧缓冲区上启用 SRGB 的可靠方法?我的驱动程序是最新的 (27.10.100.8425)。输出在我的 Geforce GPU 上进行了 Gamma 校正,但集成的英特尔 GPU 渲染默认帧缓冲区而没有 Gamma 校正,所以我假设英特尔驱动程序中的默认帧缓冲区有一些我不知道的独特之处。
编辑:正确的值应该是 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 相同。
这总结了情况:"Intel drivers suck, don't trust anything they do."

关于c++ - Intel UHD 630 上的默认帧缓冲区未进行 Gamma 校正,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63096831/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com