android - Android 上的 OpenGL 与 iOS : optimisations, 以及它们的不同之处

标签 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 状态变化
  • 尽可能使用纹理图集以避免必须选择许多不同的纹理

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

  • 将您的顶点数据交织在每个顶点中:例如顶点坐标;纹理坐标;普通的。交错中是否有项目的首选顺序?
  • 将每个顶点填充到下一个字节数的倍数。我看到到处都是数字 32,但在某些地方也看到了 4 或 8。
  • 考虑为每个顶点的坐标使用 short 或类似的,而不是 float

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

最佳答案

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

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

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

  3. 再次强调,移动设备上的填充率至关重要。使用更小的数据类型,更少的纹理提取。 Apple 在新 iPad 上的视网膜显示屏尤其如此。对于合理的公式,优先考虑计算而不是纹理查找(您应该分析)。

关于android - Android 上的 OpenGL 与 iOS : optimisations, 以及它们的不同之处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8532971/

相关文章:

android - 我正在尝试使用安全参数,但是当我将依赖项添加到项目级别 build.gradle 时,它​​给了我这个错误

mysql - 选择 * 和查询优化器

javascript - 为什么许多网站缩小 CSS 和 JavaScript 而不是 HTML?

iphone - 在 objective-c 中重新加载后如何更改单元格的值?

ios - 如何显示 UISearchBar 搜索的建议?

javascript - iPhone 上的锁定方向 UIWebView

r - R中的体育简单评分系统实现

android - 如何旋转 MapView?

android - 从 flex mobile 中的默认相机应用程序拍摄的照片如何上传?

Android - 画一个矩形