【问题标题】:OpenGL on Android versus iOS: optimisations, and where they differAndroid 与 iOS 上的 OpenGL:优化及其不同之处
【发布时间】:2012-01-21 21:49:20
【问题描述】:

我正在编写适用于 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 状态变化
  • 尽可能使用纹理图集以避免选择许多不同的纹理

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

  • 在每个顶点内交错你的顶点数据:例如顶点坐标;纹理坐标;普通的。交错中有优先的项目顺序吗?
  • 将每个顶点填充到某个字节数的下一个倍数。我看到数字 32 到处乱窜,但在某些地方也看到 4 或 8。
  • 考虑为每个顶点的坐标使用短的或类似的,而不是浮点数

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

【问题讨论】:

  • 我不是这方面的专家,但 AFAIK 的优化主要取决于底层芯片。 iPhone 的 GPU 芯片(有点)更加一致,但在 android 中你可以有几个 GPU 芯片:Adreno 2xx、PowerVR SGXxxx、Malixxx、Tegra2。功能上也存在差异。另外,只是出于好奇?为什么你使用 1.1 而不是 2.0?我认为使用可编程着色器可以更好地优化代码(当然,您的应用程序将支持更少的设备......但现在 AFAIK 每个 android 设备都支持 2.0)
  • 至于使用OpenGL ES1.1:是支持一些老设备的问题。关于芯片组的要点!

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


【解决方案1】:

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

  1. 与桌面怪兽相比,移动 GPU 的时钟频率和内存带宽明显较低。尽可能减少过度绘制和纹理访问是明智的。考虑使用 CPU 级别的隐藏表面去除算法和技术。

  2. 使用供应商特定的分析器针对特定芯片微调您的代码。如果不同供应商的性能差异很大,请使用不同的代码路径。

  3. 再次强调,移动设备上的填充率至关重要。使用更小的数据类型,更少的纹理提取。对于 Apple 在新 iPad 上的视网膜显示屏来说尤其如此。更喜欢计算而不是纹理查找以获得合理的公式(您应该配置文件)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2013-07-11
    相关资源
    最近更新 更多