【问题标题】:OpenGL gradient banding on AndroidAndroid上的OpenGL渐变带
【发布时间】:2011-12-29 15:31:26
【问题描述】:

我在市场上有一个动态壁纸,它使用 OpenGL 来渲染一些基本形状和平面。简单的照明在整个平面上产生渐变效果,在大多数设备上看起来都很好。不过,正如您在此屏幕截图中所见,三星 Galaxy S2 系列似乎在渲染渐变时遇到了一些问题:

色带看起来很糟糕,尤其是与难以置信的屏幕截图相比:

我在这两种情况下都使用 565 EGL 配置,所以我相信这只是 GS2 设备的显示问题。谁能证实这个怀疑?

有没有什么解决办法?

【问题讨论】:

  • 我只能说,在我的 SGS2 上玩渐变时,我看到过类似的条带。
  • 在使用抖动将图像中的颜色数量减少到可以显示的颜色时,经常会看到这种类型的条带。

标签: android opengl-es colors dithering


【解决方案1】:

您能否确认,尽管您请求了 565,但您实际上得到了 565?有用于确认您最终得到什么的 EGL 函数。我指的是检查这两种设备,因为您可能会在 Incredible 和其他设备上获得 888,因此显示效果更好。

【讨论】:

  • 我会检查返回的配置以确保,谢谢您的建议。
  • 调查了一下,我真的在所有设备上都得到了 565。这是有道理的,因为我有一些代码检查了与我请求的配置最匹配的有效返回配置。
  • +1 表示建议,因为它帮助我缩小了问题范围。
  • 你发现问题了吗?我真的有点惊讶你没有得到 888。你看到的条带正是我对 565 所期望的。我在为 PSP 做的游戏中也有类似的条带和一些平滑渐变纹理。将它们设为 5650,结果我故意将这些纹理设为 8888。
【解决方案2】:

看起来确实是 GS2 的显示,或者更准确地说,是它的抖动算法。我尝试将我请求的配置提升到 RGB888,这就是我得到的(来自我的测试用户的手机):

因此,当尝试将 888 空间中的颜色映射到 565 配置时,GS2 似乎确实做了可怕的抖动工作。

现在我不确定我是想在所有设备上将配置提高到 888(质量更好,但性能受到影响),还是只在我知道抖动很差的设备上。嗯。

【讨论】:

    【解决方案3】:

    您是否尝试在 GL 中禁用抖动?这可能会有所帮助。

    GLES20.glDisable(GLES20.GL_DITHER);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      相关资源
      最近更新 更多