繁体   English   中英

性能:Quartz2D与OpenGL ES(GLKit)

[英]Performance: Quartz2D vs OpenGL ES (GLKit)

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

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

使用Quartz2D从EffectiveUI的示例项目

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM