OpenGL ES 3.0上的sRGB Framebuffer

j00*_*0hi 2 java android opengl-es srgb opengl-es-3.0

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

但是,当我试着打电话的时候

GLES30.glEnable(GLES30.GL_FRAMEBUFFER_SRGB)
Run Code Online (Sandbox Code Playgroud)

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

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

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

Cit*_*ron 5

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

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

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