iPhone OpenGL ES:什么是最快的纹理模式?

时间:2011-05-11 15:38:02

标签: iphone graphics opengl-es

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

我一直在使用仪器测试其性能,并且它报告渲染器利用率%为64%,而砖瓦利用率%为9%。这意味着性能命中与纹理,混合等有关。

我尝试的下一件事是删除所有图纸,除了天空盒。单独渲染天空盒使渲染器%从菜单屏幕跃升至40%,即20%。

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

我尝试打开视网膜显示器(分辨率的四倍),帧速率刚刚被轰炸。

还可以采取哪些其他措施来减少渲染器开销?我认为必须有一些东西,考虑到RAGE for iPhone在视网膜分辨率下以60fps运行(实际上我还没有确认)。

2 个答案:

答案 0 :(得分:1)

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

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

然而,正如Brad Larson所说,你最好运行OpenGL ES Analyzer并查看它的内容。

答案 1 :(得分:1)

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