iOS5 & OpenGL ES 2.0 最佳编译器

问题描述 投票:0回答:2

这是问题的更新: 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?

即使用定点数学仍然比浮点有显着的改进吗?

我应该使用什么编译器来优化矩阵运算?

ios performance 3d opengl-es
2个回答
2
投票

首先,正如我在回答上面链接的问题时所说的那样,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 渲染时,这些区域都不会成为您的瓶颈。使用仪器和其他工具来查找应用程序中减慢渲染速度的实际区域。我提到的这些优化只会减少少量的时间。


1
投票

最简单的方法就是编写代码并使用任何编译器进行编译。然后测量性能,在项目设置中切换到另一个编译器(就像更改一个选项一样简单),然后重新编译并测量新的性能。因此,您将能够轻松查看哪个编译器提供更好的性能。对于我的游戏,clang 提供了更好的性能。

至于浮点数学 - 如果您不针对 3GS 的旧手机,则不必担心定点。使用浮点进行 3D 转换。会好的。

© www.soinside.com 2019 - 2024. All rights reserved.