Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 核心动画架构_Macos_Opengl_Core Animation_Quartz Graphics - Fatal编程技术网

Macos 核心动画架构

Macos 核心动画架构,macos,opengl,core-animation,quartz-graphics,Macos,Opengl,Core Animation,Quartz Graphics,从中可以看出,核心动画层位于OpenGL和Quartz2D之上。即 执行核心动画命令应该会产生一系列Quartz2D和OpenGL命令,对吗 在interface builder中的“视图效果”选项卡下,我们可以设置核心动画层。内部情况如何?当我们勾选“上下文视图”选项时,屏幕上的内容(按钮、滚动条等)不是使用主上下文或currentContext(视图)绘制的,而是为它们创建新的位图上下文。引擎盖下面发生了什么 有人能给我解释一下CoreAnimation层和Quartz2d/OpenGL之间

从中可以看出,核心动画层位于OpenGL和Quartz2D之上。即 执行核心动画命令应该会产生一系列Quartz2D和OpenGL命令,对吗

在interface builder中的“视图效果”选项卡下,我们可以设置核心动画层。内部情况如何?当我们勾选“上下文视图”选项时,屏幕上的内容(按钮、滚动条等)不是使用主上下文或currentContext(视图)绘制的,而是为它们创建新的位图上下文。引擎盖下面发生了什么


有人能给我解释一下CoreAnimation层和Quartz2d/OpenGL之间的关系吗

核心动画层本质上是OpenGL曲面的高级抽象。它们由GPU存储和操作,因此层的操作非常快
CALayer
对象本身非常轻量级,没有事件处理

以层为背景的
NSView
对象(如果启用Interface Builder中的复选框,则会得到该对象)是将其内容绘制到核心动画层的视图,再次存储在GPU内存中,具有与普通
CALayer
对象相同的性能优势,但是具有正常的
NSView
的所有功能

发生的情况是,视图的内容被渲染(通过石英)到其背景层(本质上是OpenGL纹理)。然后,仅当图层内容发生更改时,视图才需要再次绘制


视图图层的位置、比例、旋转等的更改不需要重新绘制视图的内容。这意味着在大多数情况下,CPU不必参与不断地重新绘制视图。

感谢您的响应。这里发生了什么,CALayer*theLayer=[CALayer-layer];theLayer.contents=图像;我刚刚用一些图片更新了图层的内容。谁在NSView上绘制的。是来自Quartz的CGContext还是OpenGL Context?如何实现?这是一个实现细节,它的实现方式是不透明的。如果创建
CALayer
,则必须将其托管在图层备份视图中。这种类型的视图本质上承载一个OpenGL上下文,并将其子Calayer作为该上下文中的纹理进行管理。然而,你不需要知道如何成功地使用核心动画,事实上,因为它是封闭源代码,你无法确切地了解它是如何完成的。我对一些更低级的细节感兴趣。是否有可用的文件?我试过了,但找不到你刚才提到的细节。