OpenGL ES 3.0上的sRGB Framebuffer

时间:2014-11-19 19:03:18

标签: java android opengl-es opengl-es-3.0 srgb

我正在使用Java开发OpenGL ES 3.0 Android项目。 我需要实现伽马校正,并且在某处我已经读过在OpenGL ES 3.0中支持sRGB纹理。所以我的目的是在渲染到默认帧缓冲区之前调用glEnable(GL_FRAMEBUFFER_SRGB)。

但是,当我尝试拨打

GLES30.glEnable(GLES30.GL_FRAMEBUFFER_SRGB)

事实证明,没有GLES30.GL_FRAMEBUFFER_SRGB,但是有一些常量用于sRGB纹理格式,如GLES30.GL_SRGB。

所以,我的问题是:是否可以让OpenGL ES 3.0为我做伽马校正?如果有,怎么样?

否则,我想,我必须手动进行伽马校正。

1 个答案:

答案 0 :(得分:5)

我意识到这个问题是2个月之久,但自从它出现在谷歌之后,我想我会为未来的谷歌发布一个答案:)

GL_FRAMEBUFFER_SRGB似乎只能在OpenGL桌面上以及OpenGLES 2.0上的扩展中使用。但是通过实验(我正在研究这个主题)我意识到在OpenGLES 3.x上,每当帧缓冲区的纹理具有sRGB格式时,在写入帧缓冲区时颜色被正确(并自动)转换为sRGB 。因此,在渲染为sRGB纹理时,您无需使用GL_FRAMEBUFFER_SRGB来启用sRGB转换。

现在,如果您直接写入后台缓冲区,您可能有选项启用sRGB写入,但是这将在应用程序端进行控制(例如在Windows上,它是您在通过wgl创建上下文时指定的标志,如果我“没错。”不幸的是我无法证实这一点,因为在我正在研究的框架中,我无法访问这部分。