OpenGL & Metal

视频撕裂及掉帧的原因

2020-07-06  本文已影响0人  黑眼豆豆_

显卡

显卡(英语:Video cardDisplay cardGraphics cardVideo adapter),是个人计算机最基本组成部分之一,用途是将计算机系统所需要的显示信息进行转换驱动显示器,并向显示器提供逐行或隔行扫描信号,控制显示器的正确显示,是连接显示器和个人计算机主板的重要组件,是“人机”的重要设备之一,其内置的并行计算能力现阶段也用于深度学习等运算。

显卡的构成

图形成像的原理

图形成像流程.png

屏幕撕裂

当然,这是一个正常的流程,但是事事都不可能完美,接下来,我们看看出现的问题。


画面撕裂.jpg

上图的景象想必大家都见过吧,图像出现错误。

原因

这是由于显卡输出帧的速度比显示器快,显示器的处理速度跟不上显卡。


image.png

如图,当旧的数据通过帧缓冲区读取到屏幕上,进行逐行扫描,当扫描到A点时,新的数据又传进来了,但是此时旧的数据并没有扫描完,新的数据就开始扫描了。所以会出现上半部分展示旧的数据,下半部分展示新的数据,从而造成屏幕撕裂。

苹果的解决办法

垂直同步(Vsync) + 双缓冲区(Double Buffering)

掉帧

掉帧.png

如图,正常的流程中,在每一帧进行切换前,GPU就会把已经处理好的图像存入帧缓冲区(FrameBuffer)中,视频控制器从帧缓冲区中拿到数据,并进行数模转换,并进行显示。但是由于GPU/CPU的效率低或者其他原因,在第一帧和第二帧切换时,帧缓冲区并没有处理好的B数据,所以屏幕只能重复渲染A图片,这样的情况就叫做掉帧

三缓冲区(Triple Buffering)

三缓冲区使用一个前置缓存和两个后置缓存。在着色完第一个后置缓冲区的数据后,立即开始处理第二个后置缓冲区。有3个缓冲区,显卡无需等待前缓冲区清空进而腾出后缓冲区,随时可以把渲染结果放入第3个缓冲区。这样即便有一个缓冲区被禁止交换,另外两个缓冲区还是可以来回写入图像,于是就不需要人为增加画面延迟了。

上一篇下一篇

猜你喜欢

热点阅读