图像渲染的过程
图像 => GPU将图片解码 => GPU进行图像渲染 => 存储到帧缓存区 => 视频控制器进行读取帧缓存区信息 => 数模转化 => 显示器逐行扫描显示
图像渲染经常出现的问题
图像撕裂
- 原因 - 视频控制器显示速度小于GPU处理图形的速度
当第一帧图像扫描到某个位置时,GPU拿到新的数据并缓存到帧缓冲区,这个时候视频控制器从帧缓冲区扫描的是新拿到的一帧的图像,最后就形成了断层的情况,也就是图像撕裂 - 解决方案 - 目前采用的是垂直同步信号Sync+双缓存区,这种方案并没有从根本解决问题,只是避免了图像撕裂出现的现象
- 垂直同步 - 就是通过加锁来降低显卡写入帧缓存区的速度,保证在当前读取的帧数据结束之前,不会读取下一帧的数据。
当我们开启垂直同步信号后,显卡绘制3D图形前会等待垂直信号,当该信号到达时,显卡开始绘制3D图像,如果显卡性能好,在下一个垂直同步信号到来之前已经完成了对该帧的渲染,显卡就会暂停处理,等下个垂直信号到来后才开始渲染下一帧。 - 双缓存区 - 采用两个帧缓存区进行存储,当屏幕显示其中一个缓存区的时候,另一个缓存区继续等待下一个缓存结果,两个缓存区一次进行交替
- 出现的新问题 - 掉帧
掉帧
掉帧就是同一帧的数据被重复显示
- 原因 - 就是当前屏幕显示的是A,在收到垂直信号的时候,CPU和GPU处理的B还未准备好,此时屏幕显示的仍然是A
-解决方法 - 采用三缓存区,无法根治,只能降低出现的概率
生活如此美好,今天就点到为止。。。