这是问题的更新: iPhone GCC / LLVM GCC 还是 LLVM? ...自从提出这个问题以来已经一年多了。
我对图形处理非常陌生,刚刚开始学习 OpenGL ES。
我正在阅读此内容: http://www.dpfiles.com/dpfileswiki/index.php?title=Black_Art_of_3D_Game_Programming%2C_Chapter_10:_3D_Fundamentals#Fixed_Point_Mathematics ...并且知道某些信息已过时。
本节中提到的限制是否仍然适用于 iPhone?
即使用定点数学仍然比浮点有显着的改进吗?
我应该使用什么编译器来优化矩阵运算?
首先,正如我在回答上面链接的问题时所说的那样,LLVM 在针对 iOS 时通常可以为编译代码提供更好的性能。 Apple 甚至从 Xcode 中删除了 GCC 作为编译器,因此您实际上别无选择。使用 LLVM。
其次,该文章中有关定点数学的陈述不适用于 iOS 设备上的 OpenGL ES 实现。这些设备中使用的 PowerVR GPU 经过调整以使用浮点输入,并且在处理定点数据时实际上会降低性能。来自 Apple 的 OpenGL ES 编程指南:
避免使用 OpenGL ES GL_FIXED 数据类型。它需要相同的 内存量与 GL_FLOAT 相同,但提供更小的值范围。 所有iOS设备都支持硬件浮点单元,因此浮点 可以更快地处理点值。
和
iOS设备中的ARM处理器处理浮点指令 原生地。您的应用程序应该使用浮点而不是固定点 尽可能点数学。如果您要移植的应用程序 使用定点运算,重写代码以使用浮点 类型。
我相信 PowerVR 文档(作为其免费 SDK 的一部分提供)也提到了这一点。
此外,您可能应该在 ARMv7 设备(iPhone 3G S 及更新版本)上启用 Thumb 构建,并在 ARMv6 设备上禁用它,因为这会减慢后者的浮点计算速度,但不会减慢前者的浮点计算速度,并且可以在前一类设备。
最后,在矩阵运算方面,如果您只想针对 iOS 5.0,则应该使用 GLKit 附带的新矩阵数学函数。它们使用 NEON 加速实现来进行快速矢量数学运算。您还可以自行推出或找到使用 Accelerate 框架或直接 NEON 计算的现有实现。
总而言之,在进行 OpenGL ES 渲染时,这些区域都不会成为您的瓶颈。使用仪器和其他工具来查找应用程序中减慢渲染速度的实际区域。我提到的这些优化只会减少少量的时间。
最简单的方法就是编写代码并使用任何编译器进行编译。然后测量性能,在项目设置中切换到另一个编译器(就像更改一个选项一样简单),然后重新编译并测量新的性能。因此,您将能够轻松查看哪个编译器提供更好的性能。对于我的游戏,clang 提供了更好的性能。
至于浮点数学 - 如果您不针对 3GS 的旧手机,则不必担心定点。使用浮点进行 3D 转换。会好的。