计算机显示器系统,屏幕卡顿以及撕裂的原理

 

显示器系统

1. 显示器工作原理

当屏幕显示画面时,CRT的电子枪从上到下逐行扫描,扫描完成后显示器就呈现一帧画面。然后电子枪回到初始位置进行下一次扫描。

为了同步显示器的显示过程和系统的视频控制器,显示器会用硬件时钟产生一系列的定时信号。当电子枪换行进行扫描时,显示器会发出一个水平同步信号(horizonal synchronization),简称 HSync;而当一帧画面绘制完成后,电子枪回复到原位,准备画下一帧前,显示器会发出一个垂直同步信号(vertical synchronization),简称 VSync。显示器通常以固定频率进行刷新,这个刷新率就是 VSync 信号产生的频率。虽然现在的显示器基本都是液晶显示屏了,但其原理基本一致。

2. 显示器系统的组成

在计算机系统中, CPUGPU显示器以下图的方式协同工作。CPU 计算好显示内容提交到 GPUGPU 渲染完成后将渲染结果放入帧缓冲区视频控制器会则按固定的频率读取帧缓冲区的数据,经过数模转换传递给显示器显示。

3. 掉帧/卡顿问题

显示器以固定的频率(60Hz或者更高)刷新,而CPUGPU计算和渲染的速度取决于当前这一帧画面计算的复杂度。当GPU不能及时地将渲染后的数据放入帧缓冲区显示器就会重复显示同一帧的画面。这种情况称为掉帧卡顿

为了处理掉帧问题,通常会使用双帧缓冲区甚至三帧缓冲区GPU会预先渲染好一帧放入一个帧缓冲区内,让视频控制器读取,当下一帧渲染好后,GPU会把视频控制器的指针指向第二个帧缓冲器,如此一来效率会有很大的提升。

但是掉帧的根本原因还是CPU/GPU渲染流水线过长,不会因为增加缓冲区而根本解决。

4. 画面撕裂问题

双缓冲区的结构下,当显示器从帧缓冲区A读取数据扫描一帧画面,而GPU渲染好新的一帧数据放入帧缓冲区B中。如果视频控制器直接将指针指向帧缓冲区B,则会造成画面撕裂问题(上半截画面属于旧的一帧,下半截画面属于新的一帧)。

GPU垂直同步机制能够很好的解决画面撕裂问题。当GPU开启垂直同步后,要等到显示器发出V-Sync信号才会进行下一帧的渲染和缓冲区更新。

但是引入垂直同步机制后,GPU要等到收到垂直同步信号,才会渲染下一帧。一定程度上拖慢了GPU渲染的速度。

参考文档

图形图像渲染原理