Android与iOS上的OpenGL:优化,以及它们的不同之处

时间:2011-12-16 10:40:25

标签: android iphone optimization opengl-es opengl-es-2.0

我正在编写适用于Android和iPhone的OpenGL ES 1.1应用程序。 OpenGL ES引擎位于共享库中,可通过Android上的NDK访问。

我正在寻求优化我的OpenGL性能。那里有很多视频和资源,例如:

http://www.vizworld.com/2010/02/ngmocos-tim-omernick-optimizing-opengl-iphone/

http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/Performance/Performance.html#//apple_ref/doc/uid/TP40008793-CH105

http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.html

OpenGL ES 2.0 : Seeking VBO Performance/Optimisation Tips For Many Moving Vertices

When are VBOs faster than "simple" OpenGL primitives (glBegin())?

https://gamedev.stackexchange.com/questions/1068/opengl-optimization-tips

但通常有众所周知的技术可以普遍适用,例如:

  • 使用顶点缓冲区对象(VBO)
  • 最小化OpenGL状态更改
  • 尽可能使用纹理atlassing以避免必须选择许多不同的纹理

某些技术在其细节方面可能或者可能更敏感,并且在Android和iPhone之间可能会有所不同,这就是我感兴趣的内容。例如:

  • 在每个顶点内交错顶点数据:例如顶点坐标;纹理坐标;正常。交错中是否有首选项目顺序?
  • 将每个顶点填充到某个字节数的下一个倍数。我看到数字32大概,但在某些地方也看到4或8。
  • 考虑对每个Vertex的坐标使用短或类似,而不是浮点

所以我的问题是:魔术优化的更精细细节是什么,例如上面的最后一个列表在Android和iPhone之间有所不同?他们不同的地方,最好的策略是什么?只需使用适合这两个世界的价值? (根据平台在运行时微调这些细节可能有点过头了?)

1 个答案:

答案 0 :(得分:1)

答案中提到了主要(正统)优化。但是,还有一些其他鲜为人知的技术适用于在移动设备上呈现:

  1. 与桌面怪物相比,移动GPU的时钟频率和内存带宽要低得多。尽可能减少透支和纹理访问是明智的。考虑使用CPU级隐藏表面删除算法和技术。

  2. 使用特定于供应商的分析器来微调特定芯片的代码。如果性能因供应商而异,则使用不同的代码路径。

  3. 再一次,填写移动设备至关重要。使用较小的数据类型,较少的纹理提取。对于Apple在新iPad上的视网膜显示器尤其如此。更喜欢对合理公式进行纹理查找的计算(您应该剖析)。