【问题标题】:iPod App runs slower on 32GB model than on 8GB modeliPod App 在 32GB 机型上的运行速度比在 8GB 机型上慢
【发布时间】:2011-03-17 09:56:04
【问题描述】:

我在第 3 代 32GB iPod touch 型号上遇到了很大的性能问题。

该应用程序是 DS 3D 游戏的移植版。渲染是使用 OpenGL ES 1.1 完成的。它对音频使用 OpenAL,对视频使用 MPMoviePlayerController。

在 8GB iPod touch 上的性能很好,它以超过 30 fps 的速度持续运行。然后我在第三代的 32GB 机型上进行了测试,震惊了它的速度有多慢。我注意到的第一个问题是介绍过场动画。视频断断续续卡住,跳帧。

在 3D 级别中,性能约为 15 fps。场景在静态顶点缓冲区中有大约 10000 个顶点,在动态顶点缓冲区中有 7000 个顶点。动态顶点每帧都会更新,而不是全部更新,而是更新骨骼动画最后一帧的那部分。

我毫不费力地使用了构建设置、Thumb 开/关、针对 armv7 进行了优化等等。在 8GB 型号上它一直运行得非常快,而在 32GB 型号上它很烂。

然后我在 32GB 型号上尝试了来自 App Store (N.O.V.A) 的另一款 3D 游戏。它以良好的性能运行,视频也是。

现在我的想法已经结束了。

谁能给我一个提示可能是什么问题。

谢谢你的问候和最好的问候 温柔的

【问题讨论】:

  • 8GB型号是哪一代?

标签: iphone performance ipod-touch


【解决方案1】:

iPod Touch 共有三代,最新一代的规格与 iPhone 3GS 相似,最值得注意的是,内存翻倍,GPU 速度更快,GPU 比第一代或第二代好得多。

您正在比较不同的硬件,因为从来没有 8GB 第三代模型。因此,您的代码使它在较新的硬件上运行得更糟——这实际上是相当令人惊讶的。我的猜测:它与 GPU 有关。

【讨论】:

  • 是的,我知道从来没有 8GB ipod-touch 的第三代机型。这让我非常惊讶,它在第二代模型上的运行速度比在第三代模型上更快。你的意思是它与 GPU 相关,但我使用普通的 OpenGL ES 东西。而且它没有解释为什么它在 8GB 模型上如此之快(较慢的 GPU)。
  • 没有显示更多代码,我们无法推测其他任何内容。
【解决方案2】:

第二代 iPod touch 有一个原生运行 OpenGLES1.1 的 GPU。

第三代 iPod touch 有一个原生运行 OpenGLES2.0 的 GPU,速度更快,但是通过将 OpenGLES1.1 指令转换为 OpenGLES2.0 指令来运行它们。您的应用程序可能使用 1.1 指令,而 GPU 驱动程序很难使用 2.0 指令来模拟

注意:这是一个简化的解释

【讨论】:

  • 好的,我使用 Instruments 向我展示了 32Gb 型号上的昂贵流程。它告诉我,我的 UpdateDynamicVertexBuffer() 需要的时间最多,但只在第 3 代。模型。我在这个方法中所做的如下:我有一个大的动态顶点缓冲区,它保存所有必须更新的顶点,因为它们是动画的。对于每个网格,我遍历顶点并将它们与变换矩阵相乘。然后我用 glBufferSubData 将修改后的顶点上传到显卡上。这似乎以某种方式停止了渲染过程。有什么解决办法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多