为了避免动画中的闪烁,最好将整个动画帧绘制到称为后台缓冲区的屏幕外纹理(off-screen texture)中。一旦整个场景被绘制到给定动画帧的后缓冲区,它就作为一个完整的帧呈现给屏幕;以这种方式,观看者不会在绘制帧时观看到 - 观看者只能看到完整的帧。为实现这一点,硬件维护两个纹理缓冲区(texture buffers),一个称为前缓冲区(front buffer),另一个称为后缓冲区(back buffer)。前缓冲区存储当前正在监视器上显示的图像数据,而下一帧动画正被绘制到后缓冲区。在将帧绘制到后台缓冲区后,后台缓冲区和前台缓冲区的角色对调:后台缓冲区成为前台缓冲区,前台缓冲区成为下一帧动画的后台缓冲区。交换后台和前台缓冲区的角色称为呈现(presenting)。呈现是一种高效的操作,因为只需要交换指向当前前缓冲区的指针和指向当前后缓冲区的指针。图4.1说明了该过程。

图4.1。 对于第n桢,当前是缓冲区A正在被显示,下一帧将被渲染到缓冲区B,缓冲区B用作当前后台缓冲区。 帧绘制完成后,交换指针,缓冲区B成为前缓冲区,缓冲区A成为新的后台缓冲区。 然后我们将下一帧n + 1渲染到BufferA。 帧完成后,交换指针,缓冲区A成为前缓冲区,缓冲区B再次成为后台缓冲区。

前后缓冲区形成交换链(a swap chain)。 在Direct3D中,交换链由IDXGISwapChain接口表示。 此接口存储前后缓冲区纹理(the front and back buffer textures),并提供调整缓冲区大小(IDXGISwapChain :: ResizeBuffers)和呈现(IDXGISwapChain :: Present)的方法。
使用两个缓冲区(前缓冲区和后缓冲区)称为双重缓冲。 可以使用两个以上的缓冲区; 使用三个缓冲区称为三重缓冲。 但是,两个缓冲区通常就足够了。

  

旁注:即使后缓冲区是纹理(a texture)(因此元素应该称为纹素),但我们经常将元素称为像素,因为在后缓冲区的情况下,它存储颜色信息(in the case of the back buffer, it stores color information这句不懂)。 有时人们会将纹理元素称为像素,即使它不存储颜色信息(例如,“法线贴图的像素”)。

【D3D12学习手记】The Swap Chain and Page Flipping的更多相关文章

  1. 【D3D12学习手记】The Command Queue and Command Lists

    GPU有一个命令队列,CPU通过Direct3D API将命令提交到队列里来使用命令列表(command lists),如下图.当一套命令(a set of commands)已经被提交到命令队列,他 ...

  2. 【D3D12学习手记】4.3.8 Create the Depth/Stencil Buffer and View

    我们现在需要创建深度/模板缓冲区. 如§4.1.5所述,深度缓冲区只是一个2D纹理,用于存储最近的可见对象的深度信息(如果使用模板(stencil),则也会存储模板信息). 纹理是一种GPU资源,因此 ...

  3. 【D3D12学习手记】4.1.6 Resources and Descriptors

    在渲染过程中,GPU将写资源(resources)(例如,后缓冲区,深度/模板缓冲区),读资源(例如,描述表面外观的纹理,存储场景中几何体3D位置的缓冲区).在我们发出绘图命令之前,我们需要将资源绑定 ...

  4. 【D3D12学习手记】CPU/GPU Synchronization

    由于有两个并行运行的处理器(CPU和GPU),会出现许多同步问题.假设我们有一些资源R存储了我们希望绘制的某些几何体的位置. 此外,假设CPU更新R的数据以存储位置p1,然后将引用R的绘图命令C添加到 ...

  5. Linux.NET学习手记(7)

    前一篇中,我们简单的讲述了下如何在Linux.NET中部署第一个ASP.NET MVC 5.0的程序.而目前微软已经提出OWIN并致力于发展VNext,接下来系列中,我们将会向OWIN方向转战. 早在 ...

  6. Linux.NET学习手记(8)

    上一回合中,我们讲解了Linux.NET面对OWIN需要做出的准备,以及介绍了如何将两个支持OWIN协议的框架:SignalR以及NancyFX以OwinHost的方式部署到Linux.NET当中.这 ...

  7. 关于《Linux.NET学习手记(8)》的补充说明

    早前的一两天<Linux.NET学习手记(8)>发布了,这一篇主要是讲述OWIN框架与OwinHost之间如何根据OWIN协议进行通信构成一套完整的系统.文中我们还直接学习如何直接操作OW ...

  8. EF框架学习手记

    转载: [ASP.NET MVC]: - EF框架学习手记 1.EF(Entity Framework)实体框架EF是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架 ...

  9. ExtJS MVC 学习手记3

    在演示应用中,我们已经创建好了viewport,并为之添加了一个菜单树.但也仅仅是这样,点击树或应用的其他地方获得不到任何响应.这个演示应用还是一个死的应用. 接下来,我们让这个应用活起来. 首先,给 ...

随机推荐

  1. 【SDOI2018】反回文串(【ARC064 F】Rotated Palindromes 加强版)

    题意 给你一个正整数 \(n\),求有多少字符集为 \(1\) 到 \(k\) 之间整数的字符串,使得该字符串可以由一个长度为 \(n\) 的回文串循环移位得到. ARC原题 \(100\%\) 的数 ...

  2. Linux用户组账号文件——group和gshadow

     /etc/passwd文件中包含着每个用户的用户组ID(GID). /etc/group文件对用户组的许可权限的控制并不是必要的,这是因为Linux系统用来自于/etc/passwd文件的UID.G ...

  3. JS 函数相关的声明调用

    // 函数声明方法一 function f (a, b) { return a + b; } // 函数调用 console.log(f(1, 4)); // 函数声明方法二 var num = fu ...

  4. 【OI学习注意事项】

    1. 必备知识 普及组必学 1.模拟算法(暴力枚举),按照题目的要求,题目怎么说就怎么做,保证时间和正确性即可. 2.搜索与回溯,主要的是\(DFS\)(深度优先搜索)和\(BFS\)(宽度优先搜索) ...

  5. CA认证和证书

    一些概念: PKI:Public Key Infrastructure 签证机构:CA(Certificate Authority) 注册机构:RA(Register Authority) 证书吊销列 ...

  6. 10-SQLServer中统计信息的使用

    一.总结 1.网址https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-stats-tr ...

  7. docker及k8s安装consul

    一.docker部署consul集群 参考文献:https://www.cnblogs.com/lonelyxmas/p/10880717.html https://blog.csdn.net/qq_ ...

  8. java 日期增加

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public cl ...

  9. (转发)Android 源码获取-----在Windows环境下通过Git得到Android源代码

    在学习Android的过程中,深入其源代码研究对我们来说是非常重要的,这里将介绍如何通过在Windows环境下使用Git来得到我们的Android源代码. 1.首先确保你电脑上安装了Git,这个通过  ...

  10. React事件,修改this.state的值

    1.React中绑定事件 React中绑定事件格式: onClick = { function } React中绑定事件的标准用法: import React from 'react' export ...