【问题标题】:iPhone OpenGL ES: What is the fastest texture mode?iPhone OpenGL ES:最快的纹理模式是什么?
【发布时间】:2011-08-23 10:32:52
【问题描述】:

所以我一直在开发 iPhone 3D 游戏,分辨率通常为 320x480(不是视网膜)。

我一直在使用仪器测试它的性能,它报告渲染器利用率为 64%,而分块器利用率为 9%。这意味着性能损失与纹理、混合等有关。

接下来我尝试删除所有绘图,除了天空盒。单独渲染天空盒会使渲染器百分比从菜单屏幕跳到 40%,原来是 20%。

会发生什么?我尝试禁用 GL_BLEND,并将 GL_NEAREST 设置为纹理 mag 过滤器,但渲染器 % 仍然很糟糕。

我尝试打开 Retina 显示器(分辨率是四倍),但帧速率刚刚被炸毁。

还可以做哪些其他事情来减少渲染器开销?考虑到 RAGE for iPhone 在视网膜分辨率下以 60fps 的速度运行(实际上我还没有证实),我想肯定有什么问题。

【问题讨论】:

  • 我们这里说的是 1.1 还是 2.0?此外,您是否尝试过针对您的应用程序运行新的 OpenGL ES Analyzer 工具(在 Xcode 4 中)以查看其专家系统指出了什么?
  • 1.1,我没试过。明天会尝试,但必须先安装 xcode 4:/

标签: iphone graphics opengl-es


【解决方案1】:

纹理的颜色深度是多少?在许多情况下,32 位的深度可以很容易地减少到 16(从 8888 格式到 4444),而不会造成相当大的质量损失。当然,“最快”的纹理是 pvrtc。另外,不要忘记纹理图集。

首先,这些调整将显着减少内存消耗,但这只是第一个优势。第二个优点是压缩纹理需要更少的带宽,这就是为什么它们会更快地从内存传输到 GPU(因为结果纹理采样会更快)。第三个优点是小纹理可以放入缓存中,并且可以更快地重复使用。

但是,正如 Brad Larson 所说,您最好运行 OpenGL ES Analyzer 并查看它的内容。

【讨论】:

    【解决方案2】:

    如果您不需要 alpha 读取,请使用 16 位帧缓冲区。禁用 Alpha 测试和 Alpha 混合。如果不需要,请不要忘记禁用照明和 z 缓冲区测试。开始新帧时,请始终清除帧缓冲区/zbuffer 和/或确保在绘制天空盒或背景时完全覆盖它而不进行 alpha 混合和测试。 如果要将纹理缩小到原始大小以下,请使用 mipmapping,但不要使用三线性。 您可以尝试禁用双线性过滤。通常它是免费的,但是在没有 mipmapping 的情况下进行纹理缩小时,它(可能)可能会慢一些。 对纹理使用 16 位或 PVR 压缩格式。甚至不要考虑其他压缩格式,硬件并不真正支持它们。 不要频繁切换纹理,尝试将所有内容放入纹理图集中。 此外,基于 NSTimer 的简单屏幕更新方法可能不是最佳的。听说有些应用,比如 iPhone Doom 端口,是在单独的线程中渲染的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      相关资源
      最近更新 更多