所以我正在阅读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);
}
?
答案 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_SRGB8
或GL_SRGB8_ALPHA8
。对于默认的帧缓冲区,您需要选择使用sRGB色彩空间的像素格式。