4

我正在使用 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 为我做伽玛校正?如果是,如何?

否则,我想,我将不得不手动进行伽马校正。

4

1 回答 1

6

我意识到这个问题已经 2 个月大了,但既然它出现在谷歌中,我想我会为未来的谷歌人发布一个答案:)

GL_FRAMEBUFFER_SRGB 似乎只在 OpenGL 桌面上可用,并且通过 OpenGLES 2.0 上的扩展。但是通过实验(我目前正在研究这个主题)我意识到在 OpenGLES 3.x 上,只要帧缓冲区底层的纹理具有 sRGB 格式,在写入帧缓冲区时颜色就会正确(并自动)转换为 sRGB . 因此,在渲染为 sRGB 纹理时,您不需要使用 GL_FRAMEBUFFER_SRGB 来启用 sRGB 转换。

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

于 2015-01-27T10:40:29.427 回答