通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

DX12中comptr对象中getaddressof与取地址运算符的区别

DX12中comptr对象中getaddressof与取地址运算符的区别是:com的&会把管理的对象reset掉的,之后取指针地址。getaddressof就是单纯取指针地址。对于dx12来说,都只是初始化的时候用一下,基本只对空com用。

一、DX12中comptr对象中getaddressof与取地址运算符的区别

com的&会把管理的对象reset掉的,之后取指针地址。getaddressof就是单纯取指针地址。对于dx12来说,都只是初始化的时候用一下,基本只对空com用。

DirectX 12是微软最新的图形API库,只在Win10系统上提供支持(如果不是Win10必须要升级成Win10才能用)。对这套API,我最大的感触就是特别复杂,因为它暴露了很多底层的方法。即便是我学过DX9,但是面对DX12的时候依旧会是一脸懵逼的状态,不仅是因为DX12暴露了太多方法,还有就是它封装方法的思路。好了,闲话就说到这里,下面我会用我理解的思路来介绍DX12绘制流程,并且给出一套可运行的代码。

DX12的绘制流程大概是这样的:

首先,绘制需要一个绘制的环境。绘制环境是在代码层对硬件环境的一种抽象,所有的绘制都是在这个绘制环境中完成的,可以说绘制环境才是我们的“硬件”。DX12对绘制环境的抽象是ID3D12Device。

然后,绘制自然需要资源。这里的资源就包括用来暂存渲染结果的缓冲区,包括渲染缓冲区和深度缓冲区。

最后,绘制需要绘制指令。必须让GPU知道我们想怎么样绘制才行。

DX12使用的COM技术,什么是COM技术,简单的理解就是从一个统一的公共基类继承出来的子类,用这种技术最大的好处就是资源的分配和释放可以不用太操心。

延伸阅读:

二、创建交换链

交换链是一种资源,但它比较特殊,它是当前正在显示的数据和下一帧将显示的数据的保存地。现代的绘制方式通常是这样,一个交换链有2个缓冲区,分别是前缓冲区和后缓冲区,前缓冲区中的数据是当前显示(能看到的)数据,后缓冲区的数据是下一帧要显示的数据,当需要显示后缓冲区中的数据时,将后缓冲区设置为“前”缓冲区就行了,这是一个非常巧妙的设定。

创建交换链的难点在于要描述创建什么样的交换链,这个描述结构的成员很多很繁杂,可以参考官方的[说明文档](DXGI_SWAP_CHAIN_DESC)。创建交换链的流程非常简单,只有三步:1、释放已有的交换链。

2、填充描述结构,指明要创建什么样的交换链。

3、调用Factory的CreateSwapChain函数创建交换链。

相关文章