OpenGL

四、iOS中图形图像渲染技术栈及流水线

2020-07-06  本文已影响0人  小山93

1. 图形渲染框架

下图为 iOS APP 图形渲染框架, APP 在显示可视化的图形时,使用到了 Core AnimationCore GraphicsCore Image 等框架,这些框架在渲染图形时,都需要通过 OpenGL ES / Metal 来驱动 GPU 进行渲染与绘制。

iOS图形渲染框架.png

1.1. UIKit

UIKitiOS开发者最常用的框架,里面提供了UIView
UIView供开发者用来:

1.2. Core Animation

Core Animation源自于 Layer Kit, 是一个复合引擎,主要职责包含渲染(CALayer)、构建和实现动画。CALayer是用户所能在屏幕上看到一切的基础。

1.3. Core Graphics

Core Graphics是基于Quartz 的高级绘图引擎,主要用于运行时绘制图像。其功能有绘制路径、颜色管理、渐变、阴影、创建图像、图像遮罩、PDF文档创建显示及分析。

1.4. Core Image

Core Image 拥有一系列现成的图像过滤器,可以对已存在的图片进行高效处理。大部分情况下,``Core Image ``` 是在GPU中完成工作,如果GPU忙,会使用CPU进行处理。

2. 三个框架间的依赖关系

Core AnimationCore GraphicsCore Image这个三个框架间也存在着依赖关系。

上面提到CALayer是用户所能在屏幕上看到一切的基础。所以Core GraphicsCore Image是需要依赖于CALayer来显示界面的。由于CALayer又是Core Animation 框架提供的,所以说Core GraphicsCore Image是依赖于``Core Animation ```的。

上文还提到每一个 UIView 内部都关联一个 CALayer图层,即backing layer,每一个 CALayer都包含一个content属性指向一块缓存区,即backing store, 里面存放位图(Bitmap)。iOS中将该缓存区保存的图片称为寄宿图
这个寄宿图有两个设置方式:

3. Core Animation 流水线

CALayer 是如何调用 GPU 并显示可视化内容的呢?下面我们就需要介绍一下 Core Animation 流水线的工作原理。

渲染流水线

事实上,app 本身并不负责渲染,渲染则是由一个独立的进程负责,即 Render Server 进程。

App 通过 IPC 将渲染任务及相关数据提交给 Render ServerRender Server 处理完数据后,再传递至 GPU。最后由 GPU 调用 iOS 的图像设备进行显示。

Core Animation 流水线的详细过程如下:

对上述步骤进行串联,它们执行所消耗的时间远远超过 16.67 ms,因此为了满足对屏幕的 60 FPS 刷新率的支持,需要将这些步骤进行分解,通过流水线的方式进行并行执行,如下图所示。

渲染流水线并行执行.png

Commit Transaction

在 Core Animation 流水线中,app 调用 Render Server 前的最后一步 Commit Transaction 其实可以细分为 4 个步骤:

参考文章:iOS 图像渲染原理

上一篇下一篇

猜你喜欢

热点阅读