簡體   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