关于在iPhone上加速OpenGL ES 1.1的建议

我正在研究一个严重依赖OpenGL的iPhone应用程序。 目前它在iPhone 3G上运行速度有点慢,但在新的32G iPod Touch上看起来很快。 我认为这是硬件相关的。 无论如何,我想让iPhone的性能与iPod Touch的性能相似。 我相信我在OpenGL中做了很多次优化,我希望得到有关改进会给我带来最大收益的建议。

我的场景渲染是这样的:

  • 重复35次
  • glPushMatrix
  • glLoadIdentity
  • glTranslate
  • 重复7次
  • glBindTexture
  • glVertexPointer
  • glNormalPointer
  • glTexCoordPointer
  • glDrawArrays(GL_TRIANGLES,...)
  • glPopMatrix
  • 我的顶点,正常和纹理坐标已经交错。

    那么,我应该采取哪些步骤来加速这一进程? 你会先尝试一步?

    我的第一个想法是通过使用Texture Atlas消除所有这些glBindTexture()调用。

    那么更高效的矩阵运算呢? 我明白gl *()版本效率不高。

    那么维也纳组织呢?

    更新

    有8260个三角形。 纹理尺寸是64x64 png。 有58种不同的纹理。

    我没有运行仪器。

    更新2

    在iPhone 3G上运行OpenGL ES仪器后,我发现我的平铺器利用率在90-100%范围内,而我的渲染利用率在30%范围内。

    更新3

    Texture Atlasing对这个问题没有明显的影响。 使用范围仍然如上所述。

    更新4

    将我的顶点和正常指针转换为GL_SHORT似乎可以提高FPS,但在很多情况下,Tiler Utilization仍然在90%范围内。 我仍然在使用GL_FLOAT作为我的纹理坐标。 我想我可以将它们击倒到GL_SHORT并保存每个顶点四个字节。

    更新5

    将我的纹理坐标转换为GL_SHORT产生了另一个性能增加。 我现在一直在获得> 30 FPS。 泰勒利用率仍然在90%左右,但经常在70-80%的范围内下降。 渲染器利用率徘徊在50%左右。 我想这可能与从GL_TEXTURE矩阵模式缩放纹理坐标有关。

    我仍在寻求额外的改进。 我希望更接近40 FPS,因为这是我的iPod Touch获得的,并且在那里光滑如丝。 如果有人仍在关注,我可以挑选哪些其他低垂果实?


    在铺砖机利用率仍高于90%的情况下,您可能仍然是顶点吞吐量限制。 渲染器利用率更高,因为GPU渲染的帧数更多。 如果您的主要关注点是提高旧设备的性能,那么关键还是要减少每个三角形所需的顶点数据量。 这有两个方面:

    减少每个顶点的数据量 :现在所有的顶点属性都已经是GL_SHORT ,接下来要做的就是找到一种方法来使用更少的属性或组件来做你想要的。 例如,如果您的生活没有镜面高光,那么使用DOT3照明代替OpenGL ES固定功能照明将替换您的3条短裤(+ 1短缺填充),以获得具有2条短裤的法线,以获得额外的纹理坐标。 作为额外的好处,你可以点亮你的模型每像素。

    减少每个三角形所需的顶点数量 :使用索引三角形进行绘制时,应确保您的索引已排序以最大限度地重用。 通过Imagination Technologies的PVRTTriStrip工具运行您的几何图形可能是您最好的选择。


    如果你只有58个不同的64x64纹理,纹理图集似乎是一个好主意,因为它们都适合单一的512x512纹理......如果你不依赖纹理包装模式,我肯定至少尝试这个。

    你的纹理是什么格式? 您可以尝试使用压缩的PVRTC纹理; 我认为这对Tiler来说负载较少,即使对于每像素2位纹理,我也对图像质量感到惊喜。 (对于自然图像很好,如果你做的东西看起来像一个8位视频游戏就不太好)


    我要做的第一件事就是在硬件设备上运行Instruments分析,速度很慢。 它应该很快显示你的瓶颈是哪里适合你的具体情况。

    仪器结果后更新:

    这个问题在你的仪器中有类似的结果,也许这个建议也适用于你的情况(基本上减少了数量顶点数据)

    链接地址: http://www.djcxy.com/p/33891.html

    上一篇: Advice on speeding up OpenGL ES 1.1 on the iPhone

    下一篇: Combine lots of texture atlas draw calls with OpenGL ES