5

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

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

EffectiveUI 中使用 Quartz2D 的示例项目

令我印象深刻的是,Quartz 实现比 OpenGL 实现快得多。我一直认为 OpenGL 会更快,因为它级别较低,几乎可以与硬件本身对话。我知道 Quartz2D 也使用 OpenGL 进行绘图,所以我的问题是;为什么 GLPaint 示例中的绘图如此缓慢?

您能否对 GLPaint 项目进行任何优化以提高性能?

4

2 回答 2

6

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

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

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

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

让我们面对现实吧——OpenGL 已经过时了,因此必须照原样对待——一条老狗。你不能教这只老狗新把戏,但它知道的把戏非常擅长。

另一方面,石英是一只新狗——虽然它可以做很多花样,但它不能把一件事做得特别好——表演它们。对于中等复杂的项目来说没问题,但对于任何主要的项目,我总是推荐使用 OpenGL,或者在它之上使用一个精简的 C++ 包装器。

于 2012-08-30T12:31:56.137 回答
1

OpenGL 绝对可以达到 Quartz 无法达到的水平,但由于水平如此之低,通常需要专家才能达到该水平。Quartz 已经由专家编写,只要您能在其限制范围内生活,它应该是您绘图应用程序的完美 API。

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

于 2012-08-30T12:28:20.003 回答