我正在尝试从我的iPhone OpenGL ES应用程序中获得一些性能提升。根据Instruments的数据,我的磁贴利用率大部分时间接近100%,FPS约为24%。我想把我的FPS提高到30以上。我可以通过从GL_FLOAT转换到GL_SHORT来实现这一点,但目前这给我带来了一些相当令人生畏的技术问题。我宁可不去那里。
因此,我正在考虑从glDrawArrays()切换到glDrawElements()。我有由708个顶点组成的35个网格,但其中许多顶点是在面间共享的。我是纹理贴图,但网格的颜色大部分都是均匀的。需要特殊纹理处理的面将保留原样。
假设我可以将顶点的数量减半。也就是说,我还以一种对iPhone有意义的方式组织了我的几何体:比如说,使用想象力技术PVRTTriStrip工具。忽略索引数组的少量额外内存,这意味着我大致将内存带宽减少了一半,因此我应该会看到相当不错的性能提升。
这是真的吗,还是我漏掉了什么或误解了什么?非常感谢您的建议。
发布于 2010-01-16 07:10:11
如果有人感兴趣,我继续尝试,没有使用PVRTTriStrip工具部分。所有测试都是在iPhone 3G上完成的。我能够将我的顶点从708缩小到113。因为我不到255,所以我使用GLubyte作为我的索引类型。所以,我的回答是:
35 * (708 * 32) = ~774K
至:
35 * (113 * 32 + 708 * 1) = ~148K
这使我的总内存带宽减少到原来的20%以下。我的FPS提高到了~34。所以,我看到FPS提高了大约42%。总体而言,我很高兴。我认为还有更多的收获,但我现在有更重要的事情要做。
此外,我过滤掉了一堆退化的三角形(不是有用的那种),将索引计数从708降至522。由此,我看到从我看到的~34 FPS增加到~40 FPS。
发布于 2010-01-16 07:14:06
如果你在工具(like I was)中达到100%的拖尾利用率,你就会受到几何体大小的限制。在我试图提高性能的所有事情中,我只注意到当我减小几何尺寸时帧率有一个显着的提升。所以,是的,如果你能从发送中消除一些顶点,你应该会看到性能的提升。
即使你说这很难做到,我还是强烈建议你从GL_FLOAT转换到GL_SHORTs,因为你会看到渲染速度有很大的提高。我在我的应用程序中做到了这一点,对于我得到的那种返回来说,实现它并不是太麻烦。
https://stackoverflow.com/questions/2073216
复制相似问题