java - OpenGL ES 3.0 上的 sRGB 帧缓冲区

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

我正在使用 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/

相关文章:

java - 具有层次结构的 JSR 303 验证

ios - 多次调用 glDrawElements 是否比在 GLSL 中对每个片段进行相同的计算更有效?

opengl-es - 在 OpenGL ES 2.0 中,如何从采样器读取相邻纹理像素?

java - Hibernate Insert 正在尝试更新标识列

java - 我的 Facebook 应用程序如何将消息发布到墙上?

java - 无法解析 Android Studio 上的 R.layout.splash

android - Logo 图像未在收据打印机中居中对齐

android - 当滚动位置位于顶部时,SwipeRefreshLayout + WebView

android - 如何在Flutter中为Android设置initialRoute?

android - 我的 Android opengl 应用程序在休眠后崩溃