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

Rob*_*nes 9 iphone opengl-es

我正在开发一款严重依赖OpenGL的iPhone App.现在它在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仪器后,我发现我的Tiler利用率在90-100%范围内,我的渲染利用率在30%范围内.

更新3

纹理图集对问题没有明显的影响.使用范围仍然如上所述.

更新4

将我的Vertex和Normal指针转换为GL_SHORT似乎可以提高FPS,但Tiler利用率在很多时候仍然在90%的范围内.我仍在使用GL_FLOAT作为纹理坐标.我想我可以将它们击倒到GL_SHORT并为每个顶点节省四个字节.

更新5

将我的纹理坐标转换为GL_SHORT会产生另一个性能提升.我现在一直都超过30 FPS.Tiler利用率仍然在90%左右,但经常在70-80%的范围内下降.渲染器利用率徘徊在50%左右.我想这可能与从GL_TEXTURE矩阵模式缩放纹理坐标有关.

我还在寻求其他改进.我想接近40 FPS,因为这就是我的iPod Touch所带来的,它在那里如丝般顺滑.如果有人还在关注,我还能选择哪些其他低调的水果?

Piv*_*vot 7

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

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

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