简体   繁体   English

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

[英]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,
                                      &params);
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, &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);

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.

相关问题 英特尔高清显卡-帧缓冲区不完整? - intel hd graphics- framebuffer not complete? 将FBO混合到默认帧缓冲区 - Blend FBO onto default framebuffer 如何在单独的视口中使用帧缓冲区以及默认帧缓冲区? - how to use framebuffer in a separate viewport along with default framebuffer? 是否可以将默认帧缓冲区复制到 OpenGL 中的另一个帧缓冲区 object? - is it possible to copy the default framebuffer to another framebuffer object in OpenGL? 多重采样帧缓冲区仅适用于 Nvidia 卡,而不是 AMD 或 Intel HD Graphics - Multisampled framebuffer only visible with Nvidia cards, not AMD or Intel HD Graphics 是否可以将纹理作为渲染目标附加到默认帧缓冲区? - Is it possible to attach textures as render target to the default framebuffer? Vulkan 交换链对 window 系统默认帧缓冲区的作用 - What Vulkan swapchain does to the window system default framebuffer 延迟渲染:在默认帧缓冲区中使用Gbuffer中的深度缓冲区 - Deferred Rendering: Use depth buffer from Gbuffer in default framebuffer 在无窗口的GLX程序中读取OpenGL的默认帧缓冲区 - Reading OpenGL's default framebuffer in a windowless GLX program 是否可以仅使用OpenGL确定默认帧缓冲区的大小? - Is it possible to determine the size of the default framebuffer using OpenGL only?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM