iOS:是在OpenGL之上实现的核心graphics?

我发现一个图表显示了OpenGL上面实现的核心graphics,另一个graphics显示了OpenGL。 我会认为苹果会聪明地给予每个平等的graphics硬件的访问权限,但是再次,我不太了解他们使用的graphics芯片…也许这是3D的一路?

这里有人知道具体吗?

是的,在iOS核心graphics(Quartz)似乎被分层在OpenGL ES的顶层,用于绘制目标的屏幕,虽然不是一个明确的方式,我们有权访问。

核心graphics采用vector元素(线条,弧线等)和一些光栅图像(图像)并处理它们以显示到屏幕或用于其他forms的输出(PDF文件,打印等)。 如果目标是iOS上的屏幕,则这些vector元素将直接或通过UIView的背景层托pipe在CALayer中。

这些核心animation层是GPU上矩形纹理的有效包装,Core Animation可以在原始iPhone硬件上提供平滑的平移,缩放和旋转。 我现在找不到它的参考资料,但至less有一个WWDC演示文稿指出,Core Animation使用OpenGL ES与GPU进行通信以执行此硬件加速。 在新的双GPU MacBook Pro上可以观察到类似的情况,在与使用Core Animation的应用程序进行交互时,更强大的GPU将会启动。

由于Core Graphics在绘制到屏幕上时将vector和光栅元素栅格化为CALayer,而CALayer则有效地封装了OpenGL ES纹理,所以我会将OpenGL ES置于iOS上的Core Graphics下方,但仅限于Core Graphics渲染的情况到屏幕上。 在您看到的层次结构中并排放置的原因可能是由于三个因素:在Mac上,并非所有视图都是分层支持的,因此它们可能不会以相同方式加速硬件; 我们不能真正与标准UI元素的OpenGL ES支持交互,所以从开发者的angular度来看,它们是不同的概念; 和核心graphics可以用来渲染到离线上下文,如PDF文件或图像。

核心graphics和OpenGL是两个完全独立的系统。 看看下面的图片(来源) ,它们都显示在同一级别上市。 核心graphics在同一页面上的描述也表明它是最低级的本地绘图系统。

在这里输入图像说明

另请参阅关于OpenGL ES页面。 它显示OpenGL代码直接在GPU上运行,如果向下滚动,则会看到有些事情是使用OpenGL的应用程序无法完成的。 很显然,如果CG是基于OpenGL的,那么你将无法做到这些事情。

最后,查看iOS的绘图模型页面。 在顶部,它将OpenGL与本地绘图进行比较,表明它们彼此独立工作。

核心graphics和OpenGL是独立的技术。 UIKit和AppKit都build立在两者之上,以及Core Animation。 您可以在Apple的文档( Core Animation Programming Guide )中看到graphics技术堆栈,

从iOS 9开始,iOS上的Core Graphics基于Apple的Metal框架,而不是OpenGL。