如何确定 GPU 是否支持 OpenGL 的 Gamma 校正

How to determine if GPU supports Gamma Correction for OpenGL

所以我正在阅读 gamma correction,它似乎是一种 GPU 功能,可以真正增强 3D 游戏中光照的真实感。

根据this article,要在 OpenGL 中利用它,您可以设置:

glEnable(GL_FRAMEBUFFER_SRGB); 

但是,如果我对这一切的理解正确,那么如果您的 GPU 本身不支持伽玛校正,那么您是否 enable/activate 在 OpenGL 层使用它并不重要,设置将被忽略。

所以我想弄清楚如何确定(以编程方式)系统 GPU 是否支持伽玛校正。这样我就可以拥有(基本上)看起来像这样的 OpenGL 代码:

// Pseudo-code!
bool gammaCorrectionSupported = determineSomehow();
if(gammaCorrectionSupported == true) {
    glEnable(GL_FRAMEBUFFER_SRGB); 
}

有人知道我该怎么做吗determineSomehow()

伽玛校正渲染是一个广泛的话题。您似乎特别提到使用 sRGB 图像作为渲染操作的输出,GPU 硬件输出将适当调整以给出符合 sRGB 标准的正确结果。

sRGB 图像渲染是 3.0 及更高版本的所有 OpenGL 实现的一部分。所以基本上,如果它是在过去十年左右制作的,它应该会起作用。对于较旧的 OpenGL 实现,可以测试扩展 ARB_framebuffer_sRGB 或 EXT_framebuffer_sRGB。如果存在任何一个,那么您可以使用这些扩展来使其工作。

但是,片段着色器输出的 sRGB 转换需要两件事:enabling sRGB and rendering to an image format that uses the sRGB colorspace。因此,无论您渲染到什么帧缓冲区,都需要使用 sRGB 图像格式。

对于 FBO,这很容易;您只需为目标图像选择一种 sRGB 图像格式。只有两个可渲染颜色,因此很容易选择:GL_SRGB8GL_SRGB8_ALPHA8。对于默认的帧缓冲区,您需要 select 使用 sRGB 颜色的像素格式 space。