理想状况是在必定的频率下,人眼中看到流畅的画面(通常60fps),扫描完一张图,屏幕刷新一帧图像,当每一秒有60帧的画面更新,至关于每隔16.7ms就有1帧画面更新,若是CPU和GPU能在16.7ms内处理完1帧画面那么就是流畅的,反之就会出现卡顿缓存
图像的显示流程是:扫描图像--->帧缓存区--->视频控制器发出指令读取帧缓存区位图信息--->数模转换(数字信号转换为模拟信号)---> 显示 显示器的刷新是逐⾏进⾏的,所以为了防显示的时候屏幕缓冲区的数据分属于两个不一样的帧,且两帧图像有必定的位移,咱们就会看到撕裂图像的现象,以下图post
常规的GPU⾄少都会有两个帧缓冲区。显示在屏幕上的称为屏幕缓冲区,没有显示的称为离屏缓冲区。在一个缓冲区渲染完成以后,经过将屏幕缓冲区和离屏缓冲区交换,实现图像在屏幕上的显示。性能
显示器的刷新时,为了防止缓冲区的数据分属于两个不一样的帧,给帧缓冲区加锁,所以交换通常会等待显示器刷新完成的信号,在显示器两次刷新的间隔中进行交换,这个信号就被称为垂直同步信号,这个技术被称为垂直同步cdn
双缓冲区要等待缓冲区交换以后再进行显示,若是未交换,仍显示上一帧的数据,使得帧率没法彻底达到硬件容许的最⾼水平-->引入三缓冲区技术.视频
三缓冲区技术 :有1个上屏缓冲区和两个离屏缓冲区,在等待垂直同步时,来回交替渲染两个离屏的缓冲区,而垂直同步发生时,屏幕缓冲区和最近渲染完成的离屏缓冲区交换,充分利用硬件性能blog
接收到垂直信号时,CPU和CPU处理图片数据未完成,拿不到缓冲区的数据,重复渲染同一帧数据(上一次缓存中的数据)到屏幕,称为掉帧。 图片
CPU/GPU 渲染流水线耗时过长-->掉帧get
使用垂直同步信号+双缓存区以掉帧为代价解决撕裂问题同步
使用三缓冲也有可能掉帧,但能够减小掉帧次数it