2012-02-23 65 views
0

这是对问题的更新:iPhone GCC/LLVM GCC or LLVM?...因为问了这个问题已经过了一年多了。iOS5和OpenGL ES 2.0最佳编译器

我对图形处理非常陌生,刚刚开始学习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?

即使用定点数学仍然是一个戏剧性的改善超过浮点数?

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

回答

2

首先,与I stated in answer to the question you've linked above一样,LLVM通常在定位iOS时为编译代码提供更好的性能。 Apple甚至从Xcode中删除GCC作为编译器,所以你不会有任何选择。使用LLVM。其次,该文章中关于定点数学的陈述并不适用于iOS设备上的OpenGL ES实现。这些设备中使用的PowerVR GPU被调整为使用浮点输入,并且在处理定点数据时实际上可能会降低性能。来自Apple的OpenGL ES Programming Guide

避免使用OpenGL ES GL_FIXED数据类型。它需要与GL_FLOAT相同的内存量 ,但提供更小范围的值。 所有iOS设备都支持硬件浮点单元,因此可以更快速地处理浮点型值 。

的ARM处理器在IOS器件的工艺的浮点指令 本身。只要有可能,应用程序应该使用浮点数,而不是固定的点数。如果您正在移植 使用定点操作的应用程序,请重写代码以使用浮点型 类型。

我相信PowerVR文档(作为其免费SDK的一部分提供)也提到了这一点。另外,您应该可以在ARMv7设备(iPhone 3G S和更新版本)上启用Thumb构建,并为ARMv6设备禁用它,因为这会减慢对后者的浮点计算,但会降低后者的浮点计算速度,并且可能会导致更好性能在前一类设备上。最后,当谈到矩阵运算时,如果你只想定位iOS 5.0,你应该使用GLKit附带的新的矩阵数学函数。那些使用NEON加速实现来做快速向量数学。您也可以推出自己的产品或查找使用Accelerate框架或直接NEON计算的现有实施。

也就是说,在进行OpenGL ES渲染时,这些区域都不会成为您的瓶颈。使用仪器和其他工具来查找应用程序中正在放慢渲染速度的实际区域。我提到的这些优化只会减少少量的时间。

+0

按照惯例,布拉德,你是最棒的!努力学习所有这些的基础,以便我可以为您的GPUImage框架贡献一些过滤器! https://github.com/BradLarson/GPUImage – 2012-02-23 18:20:26

+1

@MatisseVerDuyn - 谢天谢地,OpenGL片段着色器中的大量文档转化为OpenGL ES。此外,Imagination Technologies还在其SDK中提供了一些非常有用的调谐信息作为PDF的一部分:http://www.imgtec.com/powervr/insider/powervr-sdk-docs.asp – 2012-02-23 18:27:51

1

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

至于浮点数学 - 如果你不针对3GS的旧手机,那么不要担心固定点。使用浮点进行3d转换。没事的。