我正在使用 Java 开发 OpenGL ES 3.0 Android 项目。 我需要实现 Gamma 校正,并且我在某处读到 sRGB 纹理将在 OpenGL ES 3.0 中得到支持。所以我的 Intent 是在渲染到默认帧缓冲区之前调用 glEnable(GL_FRAMEBUFFER_SRGB)。
但是,当我尝试调用
GLES30.glEnable(GLES30.GL_FRAMEBUFFER_SRGB)
事实证明,没有 GLES30.GL_FRAMEBUFFER_SRGB,但是有一些 sRGB 纹理格式的常量,例如 GLES30.GL_SRGB。
所以,我的问题是:是否可以让 OpenGL ES 3.0 为我进行 Gamma 校正?如果是,如何?
否则,我想,我将不得不手动进行 Gamma 校正。
最佳答案
我意识到这个问题已经有 2 个月了,但由于它出现在谷歌中,我想我会为 future 的谷歌员工发布一个答案:)
GL_FRAMEBUFFER_SRGB 似乎只能在 OpenGL 桌面上使用,并通过 OpenGLES 2.0 上的扩展使用。但是通过实验(我目前正在研究这个主题)我意识到在 OpenGLES 3.x 上,只要帧缓冲区下面的纹理具有 sRGB 格式,写入帧缓冲区时颜色就会正确(并自动)转换为 sRGB .因此在渲染到 sRGB 纹理时不需要使用 GL_FRAMEBUFFER_SRGB 来启用 sRGB 转换。
现在,如果您直接写入后台缓冲区,您可能有启用 sRGB 写入的选项,但这将在应用程序端进行控制(例如在 Windows 上,它是您在通过 wgl 创建上下文时指定的标志,如果我我没记错)很遗憾,我无法确认这一点,因为在我正在处理的框架中,我无权访问这部分内容。
关于java - OpenGL ES 3.0 上的 sRGB 帧缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27024884/