OpenGL

三、画面撕裂及卡顿问题分析

2020-07-04  本文已影响0人  小山93

1. 图片显示不完整

原因: 图片被渲染到帧缓冲区后,下一次屏幕刷新的时候, 会讲帧缓冲区的内容显示到屏幕上。 如果在屏幕刷新的时候,图片没有完整的绘制完,可能就会出现一半图片的情况。

解决方案:为了解决图片显示不完整的问题,引入了双缓冲区技术(Double Buffering)。 即有两个缓冲区,显示到屏幕上的叫屏幕缓冲区,未显示到屏幕上的叫离屏缓冲区。图片渲染的时候,在离屏缓冲区渲染,渲染完成后,两个缓冲区交换。这样渲染完成的图片就可以显示出一张完整的图片了。

image.png

2. 屏幕撕裂(Screen Tearing)
原因: 屏幕绘制是从左到右,从上到下逐行绘制的。 如果某一帧在绘制过程中,屏幕缓冲区进行了交换,屏幕就会未绘制完的区域,开始绘制下一帧的同位置的图形。
解决方案:为了解决这个问题,引入了垂直同步技术。即在屏幕绘制完成后,发出一个信号,接到信号后,缓冲区再进行交换。就相当于把屏幕绘制过程加了一把锁,等屏幕刷新完成后,再把锁解开。这个信号叫垂直同步信号(Vsync),这个技术叫垂直同步技术。

屏幕撕裂.png

3. 掉帧(重复渲染同一帧数据)
原因: 由于要等待离屏缓冲区渲染完成后, 再进行下一帧的绘制。就会出现这样一个情况:当屏幕刷新时,新的一帧没有渲染完,它就只能重新渲染旧的帧,两次刷新屏幕显示的是同一帧,这个现象叫做掉帧。
解决方案

苹果当前采用的双缓冲区 + 垂直同步技术

安卓有用到三级缓存

上一篇下一篇

猜你喜欢

热点阅读