问题描述
|
我已经使用OpenGL-ES 1.1编写了一个应用程序,但是想知道通过切换到2.0是否可以提高速度。有没有人对大型多边形模型进行过任何测试?我只想渲染具有不同颜色的三角形,没有幻想。但是,我想渲染约100万个三角形用于比较测试。
解决方法
OpenGL ES 1.1和2.0提供了两种截然不同的3D图形方式,因此我不知道直接的性能比较是否有意义。如果创建的2.0着色器仅模拟OpenGL ES 1.1的固定功能管线,则可能会看到两者的性能相同。 Apple的PowerVR SGX文档提供了支持,其中说:
PowerVR SGX的图形驱动程序还实现了OpenGL ES 1.1
通过使用着色器有效地实现固定功能的管道。
对于渲染基本的单色三角形,我建议您使用OpenGL ES 1.1,因为您只需要编写更少的代码。如果您能够使用1.1中的内置功能,通常可以更轻松地定位该版本。您还可以通过使用不支持2.0的硬件来定位(现在)少数iOS设备所有者来扩大市场。
但是,与1.1相比,OpenGL ES 2.0使您可以使用其顶点和片段着色器做更多的事情,因此,您可以对大量几何图形执行的某些操作可以由着色器处理。这样可以使效果更好,更快。
例如,我正在使用2.0着色器完成对分子渲染器的更新,这将显着提高可视化结构的分辨率。我通过使用自定义着色器来执行此操作,这些着色器会为这些结构中的球体和圆柱体生成射线追踪的假冒者。在任何放大倍率下,这些物体看起来都非常圆滑。用纯几何在OpenGL ES 1.1中几乎不可能做到这一点,因为所需的三角形数量太可笑了(而且,广告牌不能很好地适合我的圆柱体,并且这些形状的交集也无法处理在这种情况下)。
对于这些设备,一百万个三角形可能有点大。以我的基准测试,旧的iPhone 3G每秒可处理约500,000个三角形,而第一代iPad则可处理约200万个三角形。我还没有完全对更快的iPad 2进行基准测试,但是我的早期测试表明它的速度约为每秒8,000,000-10,000个三角形。即使在最快的设备上,在最好的设备上,一百万个三角形的场景中,您也只能获得约10 FPS。奇怪的是,您不需要那种几何尺寸,所以我会尽我所能减少这种尺寸。
,ES 2.0中的性能提升不是来自渲染单个VBO,而是通过
1)自定义着色器中的性能调整仅执行所需的最低要求,而不是更常规的固定功能
2)由于简化了矩阵流水线并删除了矩阵堆栈和“固定函数”,因此渲染了大量对象,这必须在状态更改时找出新的着色器,并且无需进行多遍渲染一些影响。
这允许例如CPU在单独的线程中执行所有动态矩阵转换,同时忽略静态矩阵,并避免在CPU-> GPU之间进行不必要的传输。在着色器版本中,无需在2D和3D状态更改之间连续重做相机矩阵。