性能:Quartz2D与OpenGL ES(GLKit)

Jer*_*oen 5 iphone opengl-es ios glkit

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

来自Apple,GLPaint的示例项目,使用OpenGL

使用Quartz2D从EffectiveUI的示例项目

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

你能对GLPaint项目进行任何有利于性能的优化吗?

Ric*_*III 6

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

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

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

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

让我们面对现实吧 - OpenGL很老了,因此必须按原样对待 - 一只老狗.你不能教这个老狗的新技巧,但是它知道的技巧真是太棒了.

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