计算机显示方式
光栅扫描显示
光栅显示系统组成
- 显示器:显示内容来自帧缓存区
- 视频控制器:控制刷新部件,复制帧缓存区与显示器的对应关系
- 帧缓存区:存储渲染数据
图像是由像素阵列组成的。在光栅扫描显示器中,电子束横向扫描屏幕,一次一行,从顶到底依次进行。每一行称为一个扫描行(scan line)。当电子束横向沿每一行移动时,电子束的强度不断变化,从而建立两点组成的一个图案。图形定义保存在称为刷新缓存(refresh buffer)或帧缓存(frame buffer)
的存储器中。
- 这里的帧指的是整个屏幕范围。
- 该存储器保存一组对应屏幕所有点的强度值。
- 电子束在屏幕上逐点移动时由从刷新缓存取出的强度值控制其强度。
- 每个可由电子束点亮的屏幕点称为一个像素(pixel或pel,是picture element的简写)。
- 由于刷新缓存用来存储屏幕颜色值,因此它也称为颜色缓存(color buffer)。
- 除了颜色之外,像素的其他信息也存储在缓存中,因而不同的缓冲区域有时统称为“帧缓存”。
- 光栅扫描系统对于屏幕的每一点都有存储强度信息的能力,从而使之较好地适用于包含细微阴影和彩色模式的场景的逼真显示。
除了逐行扫描外还有隔行扫描,区别就是一个是一行一行画,一个是隔着一行画
图像撕裂
理想的成像过程:
单缓存模式下
- GPU进行渲染
- 渲染结果存储在帧缓存区
- 视频控制器读取帧缓存区的数据
- 数模转换(数字信号->模拟信号)
- 显示
理想总是美好的
人眼视觉暂留现象,想要让人感觉视频是流畅的,GPU需要在每秒处理更多帧的图像。假如显示器还没有显示完上一帧图像,正在逐行扫描中,而GPU计算速度优于显示器的处理速度,已经渲染完成了下一帧图像,并更新到帧缓存区,视频控制器读取新一帧数据数据给显示器,造成了图像撕裂的现象。多发生在大型网络游戏中。
图像撕裂解决策略
苹果使用的策略是:垂直同步Vsync+双缓存区
- 垂直同步:在帧缓存区加锁,上一帧显示完后视频控制器才会读取新的数据,防止撕裂
- 双缓存区:设计双缓存区来进行数据读取&存储的轮换
开启垂直同步,显卡绘制3D图形前会等待垂直同步信号,当该信号到达时,显卡开始绘制3D图形,如果显卡性能较为强劲,在下个垂直同步信号到来之前已经完成了对该帧的渲染,显卡就会暂停处理,等下个垂直同步信号到来后才开始渲染下一帧。通俗的来讲,垂直同步就是让显卡每秒输出的帧数等于显示器的刷新率。
掉帧
重复渲染同一帧数据叫掉帧
使用苹果策略,开启垂直同步等待同步信号,当信号到达时,CPU/GPU还未处理好图像数据,A帧被重复,造成了掉帧,感觉界面略有卡顿。
设计三缓存区进行补救,但仍旧不能完全保证解决掉帧问题,只是更合理使用CPU/GPU,减少掉帧次数。
屏幕卡顿原因
- CPU/GPU渲染流程线耗时过长,造成掉帧
- 未解决撕裂问题,使用垂直同步+双缓存区策略造成掉帧
推荐: