我发现了一张图表,显示Core Graphics实现在OpenGL之上,另一张则将其与OpenGL并列。我认为苹果应该聪明地让它们都可以平等地访问图形硬件,但是我对他们所使用的图形芯片不太了解...也许这是纯3D?
这里有人知道具体情况吗?
我发现了一张图表,显示Core Graphics实现在OpenGL之上,另一张则将其与OpenGL并列。我认为苹果应该聪明地让它们都可以平等地访问图形硬件,但是我对他们所使用的图形芯片不太了解...也许这是纯3D?
这里有人知道具体情况吗?
是的,在iOS上,核心图形(Core Graphics)似乎是建立在OpenGL ES之上进行屏幕绘制,但并不是我们可以直接访问的显式方式。
核心图形将矢量元素(线条、弧线等)和一些栅格元素(图像)处理成可显示于屏幕或其他输出形式(PDF文件、打印等)的形式。如果目标是iOS屏幕,这些矢量元素将托管在一个CALayer中,可以直接通过UIView的后备层或间接地实现。
这些核心动画(Core Animation)层本质上是GPU上矩形纹理的包装器,这就是为什么即使在最初的iPhone硬件上,Core Animation仍然可以提供对层平滑转换、缩放和旋转的支持。我现在找不到相关资料,但至少有一个WWDC演示表明,OpenGL ES被Core Animation用于与GPU通信以执行此种硬件加速。在新款双GPU的MacBook Pro上也可以观察到类似的情况,当与使用Core Animation的应用程序交互时,更强大的GPU会启动。
因为当Core Graphics将矢量和栅格元素光栅化为CALayer时,而CALayer又有效地包装在OpenGL ES纹理周围,所以我会将OpenGL ES置于iOS上Core Graphics之下,但仅在Core Graphics渲染到屏幕时。你看到的平行排列可能由以下三个因素造成: 在Mac上,并非所有视图都带有后备层,因此它们可能没有以同样的方式进行硬件加速; 我们无法真正与标准UI元素的OpenGL ES后备交互,因此从开发人员的角度来看,它们是不同的概念; 以及核心图形可以用于向离屏上下文(如PDF文件或图像)进行渲染。
核心图形和OpenGL是两种不同的技术。UIKit和AppKit都是基于它们以及核心动画构建的。你可以在苹果的文档中看到这个图形技术堆栈(Core Animation编程指南)。
argb32_mark
和 blitting 子函数上,另外 23% 花费在aa_render
上。如果这里有 GL,则它并未用于与绘图相关的任何事情。 - Slipp D. Thompson