OpenGL-ES 2.0 VS OpenGL-ES 1.1哪个更快?

时间:2011-04-15 20:24:53

标签: iphone ios opengl-es opengl-es-2.0

我使用OpenGL-ES 1.1编写了一个应用程序,但我想知道通过切换到2.0是否可以找到速度增益。有没有人用大多边形计数模型做过任何测试?我只想渲染具有不同颜色的三角形,没什么花哨的。但是,我想为我的比较测试渲染大约100万个三角形。

2 个答案:

答案 0 :(得分:14)

OpenGL ES 1.1和2.0提供了两种截然不同的三维图形处理方式,因此我不知道直接性能比较有多大意义。如果您创建仅仅模拟OpenGL ES 1.1的固定功能管道的2.0着色器,您可能会看到使用两者的相同性能。这由Apple's documentation on the PowerVR SGX支持,其中说:

  

PowerVR SGX的图形驱动程序也实现了OpenGL ES 1.1   通过使用着色器有效地实现固定功能管道。

为了渲染基本的,平面三角形,我建议使用OpenGL ES 1.1,因为你需要编写更少的代码。如果您能够使用1.1中的内置功能,则通常更容易定位该版本。通过使用不支持2.0的硬件(现在)少数iOS设备所有者来定位你也有一个稍微大一点的市场。

但是,使用OpenGL ES 2.0可以使用其顶点和片段着色器比1.1更多,因此您可以使用大量几何体来处理某些事情,而不是由着色器处理。这可以使效果更好,效果更快。

例如,我正在使用2.0着色器完成对分子渲染器的更新,这将显着提高可视化结构的分辨率。我这样做是通过使用自定义着色器为这些结构中的球体和圆柱体生成光线追踪冒名顶替者。在任何放大倍率下,这些物体看起来都非常圆润。在具有纯几何的OpenGL ES 1.1中执行此操作几乎是不可能的,因为所需的三角形数量将是荒谬的(同样,广告牌对我的圆柱体不起作用,并且这些形状的交集将无法正确处理那个案子)。

这些设备可能有一百万个三角形。在我的基准测试中,旧的iPhone 3G每秒大约有500,000个三角形,第一代iPad大约有2,000,000个。我还没有对速度更快的iPad 2进行全面测试,但我早期的测试表明它每秒大约有8,000,000到10,000,000个三角形。即使在那里最快的设备上,你也只能在最好的设备中获得大约百万三角形场景的10 FPS。可能的情况是,你不需要那么几何尺寸,所以我会尽我所能来减少它。

答案 1 :(得分:1)

ES 2.0中的性能提升不是来自渲染单个VBO,而是来自

1)在自定义着色器中进行性能调整,仅执行最低要求,而不是更常用的固定功能

2)由于矩阵管道的流线化和矩阵堆栈的移除以及“固定功能”而渲染了大量对象,“固定功能”必须在状态变化上找出新的着色器,并且不再需要多遍渲染对于某些影响。

这允许例如CPU在单独的线程中进行所有动态矩阵变换,同时忽略静态矩阵并避免CPU-> GPU之间不需要的传输。在着色器版本中,无需在2D和3D状态更改之间不断重做相机矩阵。