美文网首页
图像撕裂、掉帧

图像撕裂、掉帧

作者: 古方月 | 来源:发表于2020-07-13 23:06 被阅读0次

1 图像撕裂

图像撕裂就是一张图片显示的时候,出现了上下断层,如下图:

1.1 出现撕裂的原因

首先我们来看图像显示的过程,CPU解密(从内存copy到显存) ->  GPU进行渲染到帧缓存区里 -> 视频控制器读取帧缓存区信息(位图) -> 数模转换(数字信号->模拟信号) -> 逐行扫描显示图像。

在读取帧缓存区的数据时,当一帧图像扫描到某一个位置,此时,GPU将新的图像渲染到帧缓存区,视频控制器在读取帧缓冲区拿到的是新的位图数据,将其显示到屏幕上,所有造成了图像的撕裂。其根本原因就是GPU渲染的速度大于视频控制器读取的速度,视频控制器还未读取完,帧缓存区数据已经更新。

2 撕裂的解决方案

垂直同步Vsync + 双缓冲区DoubleBuffering

垂直同步

帧缓冲区加锁,保证一帧扫描完,在扫描另一帧,防止撕裂出现

双缓冲区

帧缓冲区开辟两个缓冲区,我们GPU渲染好一帧放到A缓冲区,垂直同步加锁,视频控制器读取A缓冲区的信息直至读取完成、转化显示,A解锁, 与此同时GPU渲染的下一帧放到B缓冲区,B加锁,A扫描完成之后,视频控制器读取B缓冲区的信息直至扫描完成显示,B解锁, 于此往复。

3 掉帧

启用垂直同步Vsync + 双缓冲区DoubleBuffering(解决撕裂) -> 产生掉帧

双缓冲区,虽然接收到Vsync,但是由于CPU、GPU处理速度慢,还没准备好图片数据,视频控制器拿不到FrameBuffer,还是会扫描之前的图像,就会掉帧(重复渲染同一帧数据)

为了减少掉帧引入三缓冲区(注意不是解决,掉帧问题只能尽量的减少,不能完全解决,三级缓冲区也有可能出现掉帧),三级缓冲区是为了充分利用CPU/GPU的空余时间,开辟ABC三个帧缓冲区,A显示屏幕, B也渲染好,C再从GPU拿取渲染数据,当屏幕缓冲区和帧缓冲区都弄好了,然后视频控制器再指向帧缓冲区的另外一个,再显示,这样交替,达到减少掉帧的情况,这样做就比二级缓冲区多了一个确认的操作

屏幕卡顿的原因:

CPU/GPU渲染流水线耗时过长 -> 掉帧

垂直同步Vsync + 双缓冲区DoubleBuffering,以掉帧为代价解决撕裂问题

三缓冲区:合理使用CPU/GPU以减少掉帧次数

相关文章

  • 图像撕裂、掉帧

    1 图像撕裂 图像撕裂就是一张图片显示的时候,出现了上下断层,如下图: 1.1 出现撕裂的原因 首先我们来看图像显...

  • 撕裂/掉帧

    图像显示大致过程: CPU/GPU处理 → 存放到帧缓存区 → 视频控制器去帧缓存区中读取 → 其他一些列的处理 ...

  • 深入理解IOS离屏渲染

    目录:图像显示原理1.1 将图像显示到屏幕的流程1.2 显示器显示流程UI卡顿、掉帧2.1 屏幕撕裂 Screen...

  • iOS图像撕裂和掉帧问题分析

    1. 什么是图像撕裂 图像撕裂是我们所观看到的一张图片发生上下错位,出现了明显的断层,如下图: GPU进行渲染到显...

  • iOS 渲染流程和屏幕卡顿原因

    屏幕卡顿 屏幕卡顿是指图形显示到屏幕上时,出现了图像撕裂、掉帧等问题 卡顿原因 图形、图像显示到屏幕上,需要经过C...

  • N0.5 - 图像撕裂 、掉帧、 iOS中的渲染流程

    1、撕裂 撕裂原因:其本质是拿到图像后,GPU进⾏渲染->帧缓存区⾥ ->视频控制器->读取帧缓存区信息(位图) ...

  • 图像撕裂、掉帧及三级缓存

    图像撕裂 图像撕裂就像图中所示,同一副画面显示的内容无法上下对齐 屏幕的更新频率是固定的,通常是60Hz。显卡效能...

  • 屏幕卡顿 及 iOS中OpenGL渲染架构分析

    屏幕卡顿 屏幕卡顿是指图形图像的在显示时出现了撕裂(即图片错位显示)、掉帧(重复显示同一帧数据)等问题,导致用户能...

  • 02-图像撕裂,掉帧及解决方法

    图像撕裂原因及解决方法 先说说图片显示的过程,CPU将图片解码,交给GPU -> GPU进行图像的渲染 -> 存储...

  • 计算机渲染原理及图像撕裂掉帧

    1. CPU和GPU的角色 CPU:计算机整个系统控制、运算和资源的调配,运算核心。会处理复杂逻辑和数据。CPU数...

网友评论

      本文标题:图像撕裂、掉帧

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