iOS 图形图像的显示和渲染流程

1,615 阅读2分钟

渲染的核心硬件——GPU

左手一个CPU 右手一个GPU,他俩的区别在哪里?

处理器 任务
CPU 运算核⼼、控制核⼼
GPU 专用的绘图、渲染

显示?

随机扫描显示

光栅扫描的形式

在以前的“大屁股”显示器时代,使用的是电子枪,将图像光栅化之后,再将电子逐行打到屏幕上。直到最后一行结束,这一帧图像才算显示完成。但是这一步是非常非常的快,从第一行到最后一行结束,利用人的视觉停留,完成显示。

光栅扫描的系统结构

显示的时候遇到画面撕裂\画面错位

光栅扫描的系统结构 中可以看到,GPU渲染成位图->帧缓存区->再由显示控制器刷新->屏幕。 但是屏幕的刷新频率是固定的,通常是60Hz。如果显卡的输出高于60fps,刷新频率和输出频率不同步,便会画面便会撕裂。

解决办法:

  • 引入 双缓冲区 :在屏幕上的称为屏幕缓冲区,没有显示的称为离屏缓冲区。在一个缓冲区渲染完成后,通过将屏幕缓冲区和离屏缓冲区交换,实现图像在屏幕上的显示。

  • 又引入垂直同步技术: 由于显示器的刷新是逐行进行的,因此为了防止交换缓冲区的时候出现两个缓冲区的内容,因此交换一般等待显示器刷新完成的信号(其实就是加锁,信号来了之后解锁),在显示器两次刷新的间隔中间进行交换,这个信号就是垂直同步信号,这个技术就是垂直同步

图像/图像的渲染流程

刚讲的是显示,但是在显示器显示之前,必须完成从 数据->位图 的渲染,最后才送交帧缓冲区等待显示。 在前一篇博客OpenGL 敲门砖——基础概念中,我们已经提到了渲染流程

此图来自网络

顶点数据(存在内存中,CPU处理)->几何运算->光栅化->片元/像素->位图->显示

再详细的分解,就会如下图所示:

CPU 处理存储在内存中的顶点数据(数组)

GPU 几何操作:将顶点数据进行顶点转换、坐标转换、旋转平移缩放或者光照计算等处理

GPU 顶点着色器处理:将顶点转成图元

GPU 图元装配:连接信息线条

GPU 光栅化处理转成栅格化数据

GPU 片元着色器会对栅格化数据的每一个像素进行位运算,决定每一个像素的颜色。

iOS 的渲染架构

其中,CoreAnimation 在苹果的设计中,是一个包含:渲染、构建和动画的复合引擎。