8

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

4

2 回答 2

14

OpenGL ES 1.1 和 2.0 提供了两种非常不同的 3-D 图形处理方式,所以我不知道直接比较性能是否有意义。如果您创建仅模拟 OpenGL ES 1.1 的固定功能管道的 2.0 着色器,您可能会看到使用两者的相同性能。这得到了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 大约 2,000,000 个。我还没有完全对速度更快的 iPad 2 进行基准测试,但我早期的测试显示它每秒大约 8,000,000 - 10,000,000 个三角形。即使在目前最快的设备上,在最好的设备上,在一百万个三角形的场景中,您也只能获得约 10 FPS。奇怪的是,你不需要那么大的几何形状,所以我会尽我所能先减少它。

于 2011-04-15T21:53:56.927 回答
1

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

1) 自定义着色器中的性能调整只做最低要求而不是更一般的固定功能

2) 渲染大量对象,由于矩阵管道的精简和矩阵堆栈的去除以及“固定功能”,必须找出状态变化的新着色器,并且去除了对某些效果的多通道渲染的需要.

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

于 2013-08-02T11:54:36.453 回答