1

我正在用 C++ 编写一个在多个(移动)平台上运行的 OpenGL ES 2.0 游戏。在 IOS、Android 上,.. 基本上一切都运行良好,除了一台设备:

在 HTC Desire 上,特定场景中一帧的计算大约需要 8 毫秒。另一款更新得多的设备三星 Galaxy Nexus 需要 18-20 毫秒。

我深入研究了这个问题,发现它与启用/禁用 GL_DEPTH_TEST 有关。

  • 如果我注释掉所有 glEnable(GL_DEPTH_TEST)/glDisable(GL_DEPTH_TEST) 调用,Nexus 上一帧所需的时间下降到 1-2 毫秒。
  • 所以我优化了 glEnable()/glDisable() 调用,使其仅在绝对需要时发生。我的场景中有 3d 和 2d 部分,因此需要在不使用 depth_test 的情况下渲染 2d,在使用深度测试的情况下渲染 3d。
  • 目前我启用深度测试,绘制 3d,禁用深度测试,绘制 2d
  • 但仍然计算需要 18-20 毫秒的连接
  • 我还检查了深度缓冲区是否被清除超过需要。但它只是在帧开始时被清除。

深度测试的切换是否可能需要这么长时间?

有没有人有其他想法可以检查什么?

更新

我发现我渲染的 3d 对象在某种程度上是导致计算缓慢的原因。

  • 如果我删除 3d 对象,则性能很好
  • 但是在另一个场景中使用相同的 3d 对象而不会造成这样的麻烦
  • 最奇怪的是:Nexus 运行 Android 4.2,它在开发人员选项中有一个选项可以将 cpu 负载可视化为覆盖。如果我启用这个设置并开始游戏,计算时间是 5-6ms 而不是 18-20ms。这怎么可能相关?
4

0 回答 0