美文网首页
屏幕图像显示的那些事儿

屏幕图像显示的那些事儿

作者: _涼城 | 来源:发表于2020-07-18 10:42 被阅读0次

    计算机显示方式的演变

    扫描演变.jpg

    光栅扫描显示

    图像 - 像素矩阵,显示一个图像时间,显示整个光栅的时间,和图像复杂度无关。

    如下图所示,从上到下逐行扫描,扫描完成后显示器就呈现一帧画面。然后电子枪回到初始位置进行下一次扫描。

    ios-screen-scan.png

    水平同步与垂直同步

    为了同步显示器的显示过程和系统的视频控制器,显示器会用硬件时钟产生一系列的定时信号。

    当电子枪换行进行扫描时,显示器会发出一个水平同步信号(horizonal synchronization),简称 HSync

    当一帧画面绘制完成后,电子枪回复到原位,准备画下一帧前,显示器会发出一个垂直同步信号(vertical synchronization),简称 VSync

    显示器通常以固定频率进行刷新,这个刷新率就是 VSync 信号产生的频率。

    渲染过程

    CPU 计算好显示内容提交至 GPU,GPU 渲染完成后将渲染结果存入帧缓冲区,视频控制器会按照 VSync 信号逐帧读取帧缓冲区的数据,经过数据转换后最终由显示器进行显示。

    渲染流程.jpg

    双缓冲区

    为了解决效率问题,GPU 通常会引入两个缓冲区,即 双缓冲机制。在这种情况下,GPU 会预先渲染一帧放入一个缓冲区中,用于视频控制器的读取。当下一帧渲染完毕后,GPU 会直接把视频控制器的指针指向第二个缓冲器。

    gpu-double-buffer.png
    图像撕裂

    双缓冲虽然能解决效率问题,但会引入一个新的问题。当视频控制器还未读取完成时,即屏幕内容刚显示一半时,GPU 将新的一帧内容提交到帧缓冲区并把两个缓冲区进行交换后,视频控制器就会把新的一帧数据的下半段显示到屏幕上,造成图像撕裂现象。

    为了解决这个问题,GPU 通常有一个机制叫做垂直同步(简写也是 V-Sync),当开启垂直同步后,GPU 会等待显示器的 VSync 信号发出后,才进行新的一帧渲染和缓冲区更新。这样能解决画面撕裂现象,也增加了画面流畅度,但需要消费更多的计算资源,也会带来部分延迟。

    图像掉帧

    渲染流水线耗时过长会导致重复渲染同一帧数据,使用三缓存区可以减少掉帧次数。

    相关文章

      网友评论

          本文标题:屏幕图像显示的那些事儿

          本文链接:https://www.haomeiwen.com/subject/fkyxkktx.html