Android 垂直同步和三重缓冲[通俗易懂]

Android 垂直同步和三重缓冲[通俗易懂]帧率是每秒钟内游戏能够渲染的画面数量,取决于电脑的硬件配置。屏幕刷新率是屏幕在每秒钟能刷新的次数,单位是赫兹(Hz),这取决于显示器的硬件配置。假设CPU/GPU性能高在你的游戏中能够获得超过200帧的画面,但是由于显示器刷新率只有30Hz,只能“抓取”其中的30帧进行显示,最终你所看到的画面也是30帧。屏幕刷新率越高,你在每秒钟内就能看到越多的画面,因此对你来说,画面也就更加“流畅”、“清晰”。一个页面的渲染流程大致分为一下几步,CPU将界面处理对应的图形数据,然后GPU将图形数据栅格化,最后屏

大家好,又见面了,我是你们的朋友全栈君。

帧率是每秒钟内游戏能够渲染的画面数量,取决于电脑的硬件配置。屏幕刷新率是屏幕在每秒钟能刷新的次数,单位是赫兹(Hz),这取决于显示器的硬件配置。假设CPU/GPU 性能高在你的游戏中能够获得超过200帧的画面,但是由于显示器刷新率只有30Hz,只能“抓取”其中的30帧进行显示,最终你所看到的画面也是30帧。
屏幕刷新率越高,你在每秒钟内就能看到越多的画面,因此对你来说,画面也就更加“流畅”、“清晰”。

一个页面的渲染流程大致分为一下几步,CPU 将界面处理对应的图形数据,然后GPU 将图形数据栅格化,最后屏幕读取 GPU 的缓冲区来显示。
在最初屏幕读取缓冲区只有一个,当界面还没有渲染完毕时,GPU 已经将下一帧的界面栅格化,帧率和刷新频率不同且没有垂直同步会这样会造成画面撕裂的情况,因为只有一个缓冲区,上部分已经显示下一帧,而下部分是上一帧。

为了解决帧率大于刷新频率就出现了垂直同步+双缓冲方案,目前主流的设备帧率是60帧,也就是每16毫秒一帧画面,垂直同步就是以单位时间(1000/帧率)来调度刷新,这样来保证页面不撕裂,当界面还没渲染完毕时, GPU 会把下一帧的数据栅格化数据写入 Back Buffer,当页面渲染完毕,将 Frame Buffer 的指针指向 Back Buffer,这样做到无缝衔接。

GPU 有两块缓冲区Frame Buffer 和 Back Buffer,Frame Buffer 是一个二维数组,里面存放的是屏幕对应到每一个像素点的颜色信息,CPU 计算图形数据完毕后会写入 Back Buffer,GPU 会定时对 Frame Buffer 和 Back Buffer 进行处理,Back Buffer 也并不一定是必然存在的,首先它是因为屏幕刷新率和帧率不同步造成的,当二者不同时,为了避免屏幕撕裂这个时候才会创建 Back Buffer,但是二重缓冲还是有问题,举例说明如果主线程要处理的东西比较多,导致 CPU/GPU 完成一帧用了26毫秒,那么垂直同步机制的回调在本该在16毫秒的刷新是无效的,因为当前的缓冲区还是上一帧的数据,因为当前帧的数据还没有计算完毕并写入缓冲区,,会产生 Jank也就是丢帧,同时在20毫秒至32毫秒这段时间,CPU/GPU 是闲置的。

为了解决Jank丢帧问题,Android 比 IOS 多设计了一个缓冲区 Triple Buffer,为了不让 CPU/GPU 闲置,Triple Buffer 和 Back Buffer 的工作原理是一样的,相当于多了一个Back Buffer, 同时也是用到时才会创建,为了提高性能。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143414.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 深度学习PyTorch,TensorFlow中GPU利用率较低,CPU利用率很低,且模型训练速度很慢的问题总结与分析

    深度学习PyTorch,TensorFlow中GPU利用率较低,CPU利用率很低,且模型训练速度很慢的问题总结与分析在深度学习模型训练过程中,在服务器端或者本地pc端,输入nvidia-smi来观察显卡的GPU内存占用率(Memory-Usage),显卡的GPU利用率(GPU-util),然后采用top来查看CPU的线程数(PID数)和利用率(%CPU)。往往会发现很多问题,比如,GPU内存占用率低,显卡利用率低,CPU百分比低等等。接下来仔细分析这些问题和处理办法。1.GPU内存占用率问…

    2022年6月12日
    216
  • kafka安装完整步骤_Kafka教程

    kafka安装完整步骤_Kafka教程<!DOCTYPEhtml><html><head><title>Kafka入门教程之一:安装</title><metacharset=’utf-8′><linkhref=’https://cdn.maxiang.io/res-min/themes/marxico.css’rel=’st…

    2022年9月19日
    2
  • 好用的在线pdf转化器

    好用的在线pdf转化器

    2021年11月3日
    45
  • https证书怎么申请?「建议收藏」

    https证书怎么申请?「建议收藏」来看一下https证书申请都需要什么?怎么安装呢?https是什么?http和https是我们上网的时候经常见到的网络协议,当我们进入一个网站的时候,网站的域名有时候是http开头的,有时候又是https开头的,可能你们会好奇,这两者究竟有什么区别呢?https证书又是什么呢?安装https的证书究竟有没有什么作用呢?安装https证书的步骤如何,是简单还是复杂呢?关于http和…

    2022年9月30日
    4
  • Compilation failed to complete

    Compilation failed to complete

    2021年9月30日
    46
  • 微信小程序定位权限怎么打开_怎么用微信定位朋友的位置

    微信小程序定位权限怎么打开_怎么用微信定位朋友的位置最近有客户提了一个需求,要求登陆考试系统的测评者记录下当时的位置。web形式的虽然可以通过IP来定位,但是IP太容易作假了,所以为了比较高的准确性,最后决定用微信小程序,虽然也有作假的可能,但比web形式要好一些。一、准备工作既然要定位,那么肯定需要找到跟地图相关的功能API,查找微信开发文档,因为我们这里只是需要记录地位功能,不需要打开地图,所以只使用wx.getLocatio…

    2025年8月12日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号