iOS:核心图形是在OpenGL之上实现的吗?

iOS:核心图形是在OpenGL之上实现的吗?,ios,opengl-es,core-graphics,Ios,Opengl Es,Core Graphics,我发现一个图表显示了OpenGL上面实现的核心图形,另一个图表将其与OpenGL放在一起。我认为苹果会聪明地让每个人都能平等地使用图形硬件,但话说回来,我对他们使用的图形芯片知之甚少。。。也许一直都是3D的 这里有人知道具体情况吗?核心图形和OpenGL是两个完全独立的系统。请看下面的图片,它显示了在同一级别列出的两个。同一页下方的核心图形说明也表明它是最低级别的本地绘图系统 另请参见页面。它显示OpenGL代码直接在GPU上运行,如果向下滚动,您将看到使用OpenGL的应用程序无法完成某些事

我发现一个图表显示了OpenGL上面实现的核心图形,另一个图表将其与OpenGL放在一起。我认为苹果会聪明地让每个人都能平等地使用图形硬件,但话说回来,我对他们使用的图形芯片知之甚少。。。也许一直都是3D的


这里有人知道具体情况吗?

核心图形和OpenGL是两个完全独立的系统。请看下面的图片,它显示了在同一级别列出的两个。同一页下方的核心图形说明也表明它是最低级别的本地绘图系统

另请参见页面。它显示OpenGL代码直接在GPU上运行,如果向下滚动,您将看到使用OpenGL的应用程序无法完成某些事情。显然,如果CG是基于OpenGL的,那么你永远也做不到这些事情

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

是的,在iOS上,核心图形(石英)似乎位于OpenGL ES的顶部,用于绘制针对屏幕的图形,尽管不是以我们可以访问的显式方式

Core Graphics采用矢量元素(直线、圆弧等)和一些光栅元素(图像),并对其进行处理,以便在屏幕上显示或进行其他形式的输出(PDF文件、打印等)。如果目标是iOS上的屏幕,那么这些矢量元素将直接或通过UIView的支持层托管在CALayer中

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


由于核心图形在绘制到屏幕时将矢量和光栅元素光栅化为CALayer,并且CALayer有效地环绕OpenGL ES纹理,因此我将在iOS上的核心图形下方放置OpenGL ES,但仅适用于核心图形渲染到屏幕的情况。在层次结构中并排放置的原因可能是由于三个因素:在Mac上,并非所有视图都是层备份的,因此它们可能不会以相同的方式进行硬件加速;我们无法真正与标准UI元素的OpenGL ES支持交互,因此从开发人员的角度来看,它们是不同的概念;核心图形可以用于渲染屏幕外的环境,如PDF文件或图像。

核心图形和OpenGL是两种独立的技术。UIKit和AppKit构建在两者之上,以及核心动画。您可以在苹果的文档中看到图形技术堆栈()

从iOS 9开始,iOS上的核心图形基于苹果的金属框架,而不是OpenGL

你指的第一个图像/图表是指MacOS/X,而不是iOS。在iOS上,我不相信这是真的。正如我在回答中指出的,iOS上的每个显示元素都是以层为基础的,并且这些层都是GPU加速的,因此任何吸引到这些层中的东西(比如核心图形)都应该在OpenGL ES上分层。在Mac上,这并不总是正确的,这可以解释Quartz和OpenGL在该平台上的独立性。想想这有多么讽刺。Mac&PC和X11之所以使用合成而不是3D之上的2D,是因为这样做使用的资源更少。使用3D硬件来显示2D xterm窗口之类的东西是毫无意义的。然而,在资源更为有限的iOS设备上,苹果采取了一种更为消耗资源的方法。@BradLarson 1)核心图形不必绘制到视图中。可以创建从不与核心动画交互的上下文。2) 图层。它所做的只是在视图显示核心图形上下文之前对其进行变换/设置动画。如果不需要转换/动画,它就不需要做任何事情。我的观点是,虽然iOS上的视图系统可以使用OpenGL,但核心图形不需要。这真的很酷。在过去,有人试图在OpenGL上实现一个X服务器。。。我不知道这一切进展如何。还有一个在OpenGL上工作的小部件集,称为GLUI,我使用它的效果太好了。苹果一如既往地付出了额外的努力来生产最好的产品。我很难相信这一点。使用CG绘图测试应用程序(在iOS 6上),我发现性能远远低于GL支持的系统应该提供的性能(在iPhone 4S上,填充几条大路径可以让我获得12 FPS),OpenGL ES Analyzer仪器报告“没有GL数据”,以及63%的CPU时间(在这个CG演示应用程序中)正在CG的
argb32_标记
和blitting子作品中使用,另外23%在
aa_渲染
中使用。如果这里有GL,它并没有被真正用于任何与绘画相关的东西。对于CG和CA使用GL进行合成的论点,我可以看到仿射变换,但仅此而已。我不会称之为GL上的分层CG;对于要在GL上“分层”的CG,其功能必须是GL所做工作的抽象,但仍然只使用GL。对于大部分CG来说,这似乎不是真的。就这点而言,所有在iOS上绘制的图形在出现在屏幕之前都会显示在GL多边形上——这就是苹果如何将多任务条和通知中心手柄添加到任何应用程序中而不会出现问题的原因。但这并不意味着这些应用程序中的绘图例程正在使用GL@slipsd.Thompson-是的,核心图形在CPU端执行所有光栅化,只将结束位图上载到纹理。我试图表达这一点,但也许我的措辞是错误的