什么是图像撕裂?
即一张图出现了错位的现象,如下图:
那图像撕裂是如何形成的?
1. 图像的显示过程
- 图像 -> CPU将图片解码,交给GPU -> GPU进行图像的渲染 -> 存储到到帧缓存区 -> 视频控制器进行读取帧缓存区信息,并刷新部件(视频控制器只是负责帧缓存区与显示器的对应关系) -> 显示器逐行扫描显示。
2.图像撕裂形成原因
-
在视频控制器进行读取显示图像时,当当前这一帧的内容还未读取完成时,GPU将新的一帧内容提交到帧缓冲区并把两个帧缓冲区进行更新后,视频控制器就会把新的一帧数据的下半段显示到屏幕上,造成画面撕裂的现象。
-
既撕裂就是在于显卡输出帧的速度比显示器快,显示器的处理速度跟不上显卡,在显示器处理显卡丢过来的第1帧的时候,第2帧就又到了,导致同一个画面同时出现1、2两帧,撕裂就产生了。
如何解决图像撕裂?
1.垂直同步
- 垂直同步又称场同步(Vertical synchronization),从CRT显示器的显示原理来看,单个像素组成了水平扫描线,水平扫描线在垂直方向的堆积形成了完整的画面。显示器的刷新率受显卡DAC控制,显卡DAC完成一帧的扫描后就会产生一个垂直同步信号。
简而言之:垂直同步就是加锁,在当前读取的帧数据结束之前,不会读取下一帧的数据。
2.双缓冲区
- 双缓冲区是在帧缓存区中开辟两个缓冲区,一个缓冲区通过视频控制器进行当前帧数据的读取显示,另一个缓冲区进行接收下一帧GPU渲染的图像。两个缓冲区都执行结束,然后再交换缓冲区。
弊端:使用以上两个解决方案后,图像撕裂问题解决了,但是有引发了一个新问题掉帧/卡顿。
掉帧/卡顿的形成原因:在使用垂直同步和双缓冲区时,都有一个等待显示完成的过程,从而刷新的时间变慢,刷新频率减少,眼睛看到的图像就会变成卡顿。
网友评论