美文网首页OpenGL
三、画面撕裂及卡顿问题分析

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

作者: 小山93 | 来源:发表于2020-07-04 22:53 被阅读0次

1. 图片显示不完整

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

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

image.png

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

屏幕撕裂.png

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

  • 为了优化掉帧问题,引入了三级缓存技术,即又增加了一个离屏缓冲区。
  • 在显示屏幕缓冲区 A 的同时,两个离屏缓冲区也在同时的渲染接下来要显示的两个帧 B 和 C。
  • 当显示 B 帧的时候,由于 C 帧是在A帧显示的时候,就开始渲染,所以很可能 C 帧已经渲染好了,这时候两个离屏缓冲区可以开始渲染 D 帧和 E 帧。
  • 这样 CPU / GPU 不停的渲染接下来要显示的两帧,就可以大大缓解掉帧问题, 当然也不是完全的解决了掉帧问题,是合理的使用 CPU / GPU 来减少掉帧次数。


    掉帧.png

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

安卓有用到三级缓存

相关文章

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

    1. 图片显示不完整 原因: 图片被渲染到帧缓冲区后,下一次屏幕刷新的时候, 会讲帧缓冲区的内容显示到屏幕上。 如...

  • 屏幕撕裂与卡顿分析

    显示器原理 首先我们先要了解一下屏幕的刷新原理,目前显示器大体分为CRT显示器和液晶显示器这两个种类。 屏幕图像的...

  • 3年Android开发面试被问到性能优化,进去5分钟就出来了

    作为安卓工程师,经常会碰到下面这些问题: 开发的app应用卡顿,丢帧,屏幕画面撕裂,UI不美观,布局混乱;开发的时...

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

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

  • 应用卡顿问题分析

    1.应用卡顿原理分析 卡顿问题的表现启动卡顿:启动白屏和启动动画卡顿运行卡顿:点击相应慢,列表滑动卡,动画卡顿 原...

  • 卡顿问题分析

    这几天在把几个副本活动从之前的本服转化到跨服,需要对一些代码的改动。由于这几个之前不是我写的,然后大概看了下其中一...

  • 【易网络当周最热】第五期

    ▼点击视频观看网桥桥接不成功及卡顿问题▼ 一、确认故障现象 1、桥接后,是摄像头传输过来的画面卡顿有延迟,还是本身...

  • iOS屏幕撕裂、屏幕卡顿、离屏渲染的相关探究

    这篇文章我们来探究下屏幕撕裂、屏幕卡顿、离屏渲染。 一、屏幕撕裂 在探究屏幕撕裂问题之前,我们需要先了解下屏幕显示...

  • 深入卡顿优化

    前言 我们经常会遇到卡顿问题 而且卡顿问题往往很难解决与复现 非常的依赖卡顿现场 所以我们来深入分析一下卡顿优化 ...

  • Android卡顿优化 | 卡顿及其优化工具概述及StrictM

    项目GitHub 本文要点一般使用的卡顿优化工具卡顿问题概述卡顿问题分析难点关于CPU Profiler关于Sys...

网友评论

    本文标题:三、画面撕裂及卡顿问题分析

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