性能:Quartz2D与OpenGL ES(GLKit)

时间:2012-08-30 12:18:41

标签: iphone ios opengl-es glkit

我正在开发一个项目,您可以使用触摸在屏幕上绘图。我想过使用OpenGL,但是我遇到了两个例子;一个使用OpenGL,另一个使用Quartz2D。

Example project from Apple, GLPaint, using OpenGL

Example project from EffectiveUI using Quartz2D

让我感到震惊的是,Quartz实现比OpenGL实现要快得多。我一直认为OpenGL会更快,因为它的级别较低,几乎可以与硬件本身对话。我知道Quartz2D也在使用OpenGL绘图,所以我的问题是;为什么GLPaint示例中的绘图如此之慢?

您是否可以对GLPaint项目进行任何有利于提高性能的优化?

2 个答案:

答案 0 :(得分:6)

众所周知,在模拟器上,Quartz 2D的速度比OpenGLES快约5倍,因为OpenGLES并非硬件加速(不同的芯片组,ARM vs i386)。

我强烈建议您在设备上使用OpenGLES进行测试并将其与Quartz 2D进行比较,然后您应该体验OpenGLES的2倍性能增强。

使用OpenGL时要考虑的另一件事是图像处理。 OpenGL不是为此而制作的,因此只有一个图像缓冲区,这意味着一次只能有一个图像存在于GPU中。为了补偿,尝试使用像TexturePacker之类的程序来制作纹理图集(作为PVRTC)以加载到OpenGL中,并且你应该有一些巨大的性能提升。

考虑到上述情况,请记住GLPaint实际上并没有在其实现中绘制线条,而是尝试在帧缓冲区上绘制半透明PNG,然后相应地对其进行着色。这是非常昂贵的,我建议比较苹果与苹果(OpenGL线描与石英线图)

让我们面对现实 - OpenGL已经过时了,因此必须按原样对待 - 一只老狗。你不能教这种老狗的新技巧,但它对它知道的技巧非常擅长。

另一方面,石英是一种新的狗 - 虽然它可以做很多技巧,但它不能做一件特别好的事 - 执行它们。适用于中等复杂的项目,但对于任何重要的项目,我总是会推荐使用OpenGL,或者使用简单的C ++包装器。

答案 1 :(得分:1)

OpenGL绝对可以达到Quartz所能达到的水平,但是如此低的水平通常需要专家才能达到这个水平。 Quartz已由专家编写,只要您能够满足其局限性,它就应该是您的绘图应用程序的完美API。

根据我自己的经验,我经常转向使用Quartz定制UIKit,因为我很少需要利用OpenGL来提升性能。当我构建自定义OpenGL实现时,通常是因为Quartz无法完成我不需要的复杂动画,因为它在简单的动画上表现不佳。