IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 双缓冲在游戏设计中的应用 -> 正文阅读

[系统运维]双缓冲在游戏设计中的应用

? ? ? ? 所谓双缓冲就是定义两个缓冲区,一个是当前缓冲区用来读取信息,另一个是后台缓冲区,用来在后台写入信息。当前缓冲区的数据使用完毕后,交换两个缓冲区(可以仅仅是两个引用的交换),当前缓冲区变成后台缓冲区,后台缓冲区变成当前缓冲区。

? ? ? ? 这是一个你在需要时自然会想起的设计方式。当下面这些条件成立时,适用双缓冲:

????????1. 我们需要维护一些被逐步改变着的状态量。

????????2. 同个状态可能会在其被修改的同时被访问到。

????????3. 我们希望避免访问状态的代码能看到具体的工作过程。

????????4. 我们希望能够读取状态但不希望等待写入操作的完成。

? ? ? ? 讲解双缓冲最常见的例子就是屏幕的绘制过程。屏幕绘制过程中我们的GPU通过运算那些疯狂的高级图形算法计算一帧中屏幕上每一个像素点显示需要的像素数据,这些数据会写到RAM上一个叫做缓冲区的内存块上(也就是我们为了绘制图形分配的一块内存)。然后我们的显卡从缓冲区上读取像素数据用来刷新屏幕,这就是我们屏幕绘制过程的简单描述。

? ? ? ? 如果我们使用单个缓冲,就可能出现一种情况,我们的显卡正在读取数据显示到屏幕上,此时GPU不知道当前缓冲区的数据是否使用完毕,开始往缓冲区上写入数据,这就会导致当前没有显示完成的数据被覆盖了,然后屏幕上就显示了错误的数据。

? ? ? ? 使用两个缓冲的话,就可以保证一个缓冲用于往屏幕上显示数据,另一个缓冲用来写入GPU的计算数据。这样屏幕上一帧渲染完毕后,就可以通过交换两个缓冲区的引用,立马拿到一帧新的数据用来渲染屏幕,同时GPU可以利用被交换下去的缓冲区继续往里面写入数据。这样不仅避免了的单缓冲的写入读取冲突问题,还可以保证屏幕帧的刷新不会因为当前帧渲染完毕后还没有准备好下一帧的数据而出现卡顿现象。

? ? ? ? 使用双缓冲的话它也有两个缺点:

? ? ? ? 1. 交换本身需要时间。如果你交换的只是两块内存区的应用(指针),或者两个缓冲仅仅是两个状态值得交换,那这样的交换时间可以忽略不计。如果是两块内存量大的缓存交换,那就要权衡一下了。

? ? ? ? 2. 两个缓冲当然也会增加内存的使用了。如果你的使用场景对内存比较苛刻,那么你也要权衡一下了。

? ? ? ?如果你对图形绘制接口熟悉的话,那么你会发现双缓模式在这些软件包中都有应用。例如,OpenGL中的swapBuffers()函数,Direct3D中的“swap chains”,微软XNA框架在endDraw()方法中也使用了帧缓冲区的交换。

参考:?http://gameprogrammingpatterns.com/double-buffer.html

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-11 16:07:48  更:2021-12-11 16:10:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 6:00:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码