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

时间:2017-03-22 01:16:05

标签: opengl gpu

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

要根据this article使用OpenGL,可以设置:

LIKE

但是,如果我能正确理解所有这些,那么如果您的GPU本身不支持伽马校正,那么在OpenGL层启用/激活它并不重要,该设置将被忽略。

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

glEnable(GL_FRAMEBUFFER_SRGB); 

有没有人有任何想法// Pseudo-code! bool gammaCorrectionSupported = determineSomehow(); if(gammaCorrectionSupported == true) { glEnable(GL_FRAMEBUFFER_SRGB); }

1 个答案:

答案 0 :(得分:2)

伽玛校正渲染是一个广泛的主题。您似乎特别指的是使用sRGB图像作为渲染操作的输出,GPU硬件输出将根据sRGB标准正确调整以提供正确的结果。

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

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

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