理解图⽚从文件到渲染屏幕的过程
2019-05-13 本文已影响0人
jakeXu
图片从文件加载到渲染到屏幕上是CPU和GPU协作完成的。
如下图所示:
![](https://img.haomeiwen.com/i8033142/bb26fe2fc1d64e03.png)
CPU加载图片原始数据,并解压缩,把解码后的图片信息通过总线传给GPU。
GPU进行纹理混合,顶点变换与计算,像素点的填充与计算,输出到帧缓冲区。
最后由帧缓冲区渲染到屏幕上。
下面举个例子具体说明图片从文件到屏幕的工作流程:
1、当我们使用+imageWithContentsOfFile:方法加载图片文件时,这个时候图片还是压缩的二进制文件。
2、当UIImage对象赋值给UIImageView时,CATransaction捕获到图层树的变化。
3、在主线程的下一个 runloop 到来时,Core Animation 提交了这个隐式的 transaction ,这个过程可能会对图片进行 copy 操作,而受图片是否字节对齐等因素的影响,这个 copy 操作可能会涉及以下部分或全部步骤:
分配内存缓冲区用于管理文件 IO 和解压缩操作;
将文件数据从磁盘读到内存中;
将压缩的图片数据解码成未压缩的位图形式,这是一个非常耗时的 CPU 操作;
Core Animation中的CALayer使用未压缩的位图数据渲染UIImageView的图层。
最后CPU计算好图片的Frame,对图片解压之后就会交给GPU来做图片渲染
4、在GPU中进行渲染
GPU获取获取图片的坐标
将坐标交给顶点着色器(顶点计算)
将图片光栅化(获取图片对应屏幕上的像素点)
片元着色器计算(计算每个像素点的最终显示的颜色值)
从帧缓存区中渲染到屏幕上