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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2010年度 中国WEB应用防火墙厂家和产品大全

    2010年度 中国WEB应用防火墙厂家和产品大全中国WEB应用防火墙厂商与产品大全排名依据根据“厂家名称”的首字母拼音,无特殊含义。更新日期:2010年03月23日发布网站:www.cnciso.com、www.youxia.org联系人QQ:55984512、175589438厂家名称产品名称公司网址联系电话北京绿盟科技绿盟WEB应用防火墙www.nsfocus.com400-818-6868北京瑞达时代科技有限公…

    2022年6月2日
    35
  • unity3d百度百科_3d怎么恢复四个界面

    unity3d百度百科_3d怎么恢复四个界面本文介绍了Unity3D界面及游戏对象基本操作。

    2022年8月10日
    6
  • phpstrom 2021激活码 3月最新注册码

    phpstrom 2021激活码 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    38
  • sp_helptext 查看存储过程内容

    sp_helptext 查看存储过程内容

    2021年4月27日
    212
  • KL散度、JS散度、Wasserstein距离[通俗易懂]

    KL散度、JS散度、Wasserstein距离[通俗易懂]1.KL散度KL散度又称为相对熵,信息散度,信息增益。KL散度是是两个概率分布P和Q差别的非对称性的度量。KL散度是用来度量使用基于Q的编码来编码来自P的样本平均所需的额外的位元数。典型情况下,P表示数据的真实分布,Q表示数据的理论分布,模型分布,或P的近似分布。定义如下:DKL(P//Q)=−∑x∈XP(x)log1P(x)+∑x∈XP(x)log1Q(x)DKL(…

    2022年4月19日
    114
  • dmesg的使用「建议收藏」

    dmesg的使用「建议收藏」1.dmesg命令–>用来显示开机信息,kernel会将开机信息存储在ringbuffer中。开机时来不及查看信息,可利用dmesg来查看。开机信息亦保存在/var/log/dmesg2.【dmesg命令作用】:有时候屏幕上的启动信息一闪而过,我们无法查看到具体信息,又或者服务器在电信机房,更看不到开机启动信息。这时候linux提供了dmesg这条命令。在命令行下…

    2025年7月8日
    5

发表回复

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

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