当前位置: 首页 > news >正文

2分钟带你了解什么是Vsync

了解Vsync,首先我们需要认知如下问题

  1. 什么是GPU
  2. CPU在渲染之前起到什么作用
  3. 什么是帧,帧率
  4. 什么是画面撕裂

什么是GPU

GPU为图形处理器,又称显示核心、视觉处理器、显示芯片。

在这里插入图片描述
是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上做图像和图形相关运算工作的微处理器主要用于画面的渲染。

CPU在渲染之前起到什么作用?

在这里插入图片描述
在屏幕显示一个画面时候,他需要获取GPU合成的图层数据,进行渲染,而GPU进行图层合成时候,他的数据来自于CPU计算好的数据。
也就是说,一个画面的显示过程为,CPU通过程序的业务代码运算产生的数据,运输到GPU进行图层合成,发送到屏幕进行渲染显示。

什么是帧,帧率

帧(fps)是一个画面的显示,屏幕一秒显示多少个帧(画面),称为帧率。平时看到的60fps,代表一秒绘制60帧,反过来可以知道,60fps的渲染,一帧大概是需要16.66毫秒。人眼的正常帧率范围是30到60帧之间,如果在程序运行时候产生的画面帧率比这范围更低,视觉看到的画面会出现卡顿,也就是人们说的掉帧。通常手机屏幕的渲染帧数为60fps,高性能的手机为120fps。因此,显示画面的fps越高,意味,画面越流畅

在这里插入图片描述

什么是屏幕撕裂?

通过上面的了解我们已经知道,一个画面的绘制流程,如下图
在这里插入图片描述
每一个帧在显示器上绘制都需要从buffer缓冲区上拿去数据,进行刷新屏幕。在早期,只有一个缓冲区,并没有绘制同步概念,如果一个画面一边读取一边绘制还没完全完毕时候,突然缓冲区的数据被GPU合成的数据替换,就会造成画面有多重画面叠层效果,如下图,

在这里插入图片描述
这种情况称之为画面撕裂。GPU写入过快或写入过慢都会导致画面撕裂。后来为了解决这个问题,人们用了双或多缓冲区来解决这个问题
在这里插入图片描述
提供一个缓冲区提供给GPU写入,提供一个给显示器读取。当GPU写入完毕时候,下一次显示器读取时候,只需要将这两个数据交换即可。这就避免了GPU生产和显示器读取数据时间问题。那么问题又来了, 那么什么时候是写的缓冲区的数据交换到读的buffer缓冲区的最佳时期?答案是,显示器刚好绘制完一帧的时候。显示器绘制完一帧时候会发送一个信号给GPU,如果此时GPU已经写入完成,就会把这个数据与读Buffer缓冲区交换数据。这个信号称之为Vsync,也就是垂直信号,这就是Vsync的由来。

相关文章:

  • Java爬虫攻略:应对JavaScript登录表单
  • Apache Hive(部署+SQL+FineBI构建展示)
  • Ribbon组件的负载均衡原理
  • 电脑搜不自己的手机热点,其余热点均可!
  • 采样率越高噪声越大?
  • 【redis笔记】分布式锁
  • 【Lidar】基于Python的三维点云数据转二维平面+散点图绘制
  • 2次MD5加密——用于分布式对话
  • Labelme2Yolo labelme格式的json标注转yolo格式txt
  • 【尘缘送书第五期】Java程序员:学习与使用多线程
  • 排序:直接选择排序
  • 分享几种 Java8 中通过 Stream 对列表进行去重的方法
  • 论文精读 MOG2 阴影检测
  • [传智杯 #2 初赛] 1024 程序员节发橙子
  • python-比较Excel两列数据,并分别显示差异
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Git的一些常用操作
  • Java程序员幽默爆笑锦集
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Linux中的硬链接与软链接
  • Nodejs和JavaWeb协助开发
  • Spark RDD学习: aggregate函数
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 大整数乘法-表格法
  • 动态魔术使用DBMS_SQL
  • 汉诺塔算法
  • 后端_MYSQL
  • 记录:CentOS7.2配置LNMP环境记录
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 前嗅ForeSpider采集配置界面介绍
  • 如何优雅地使用 Sublime Text
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 用element的upload组件实现多图片上传和压缩
  • No resource identifier found for attribute,RxJava之zip操作符
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​批处理文件中的errorlevel用法
  • ​油烟净化器电源安全,保障健康餐饮生活
  • ###项目技术发展史
  • #Lua:Lua调用C++生成的DLL库
  • #mysql 8.0 踩坑日记
  • $L^p$ 调和函数恒为零
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Oracle)SQL优化技巧(一):分页查询
  • (多级缓存)缓存同步
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (全注解开发)学习Spring-MVC的第三天
  • (十八)三元表达式和列表解析
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网