为什么UIKit绘图不能直接使用图形处理器加速

时间:2011-05-12 22:01:02

标签: iphone cocoa-touch opengl-es

你听到很多关于OpenGL直接使用图形处理器的优点,这就是使用这种技术而不是UIKit的主要优势。但是,如果用这种方式做得好得多,为什么UIKit也不这样做呢?

3 个答案:

答案 0 :(得分:6)

UIKit构建于基于OpenGL的CoreAnimation之上。有没有想过谁会为你做所有缩放和alpha混合?它是GPU,通过OpenGL纹理包含您的视图的渲染图像。

顺便说一句,我认为这是Apple的伟大技术成就之一。想想体验是多么顺畅(对于开发人员和用户而言)以及您需要做多少工作才能实现远程相似的工作。

答案 1 :(得分:1)

我在找到备份我的断言的文档时遇到了问题,但我相信堆栈是这样的:

UIKit - >核心图形 - > Quartz2D - > OpenGL的

因此,UIKit实际上正在利用OpenGL来加速UI小部件。

答案 2 :(得分:1)

为史蒂文写的内容添加更多评论:

OS X和iOS上的每张图最终都是由Open GL完成的。但是有一些方法可以画出一条线:

  1. 一种是通过CPU将一条线渲染成栅格化图像,然后将生成的栅格化图像发送到GPU以显示它。

  2. 另一种方法是将绘图命令发送到GPU,以便GPU将其绘制为光栅化图像。

  3. 然后,混合,动画等处理GPU中生成的光栅化图像。

    如果您手动使用Open GL,那么您通常会这样做。我不确定像UIBezierPath这样的UIKit绘图采用哪种方式,但OS X对应的AppKit使用方法1,除非你选择加入,这称为Quartz GL(在过去被称为Quartz 2d extreme) ):

    1. 通常,AppKit会将内容渲染到栅格化图像,并将其发送到GPU。
    2. 打开Quartz GL后,AppKit会将绘图命令发送给GPU。
    3. 但由于各种技术原因,Quartz GL默认情况下没有打开,详见John Siracusa撰写的(总是很棒的)Ars Technica文章。请参阅讨论here for 10.4another for 10.5

      以下是关于Quartz GL的一份官方文档。