在很久以前写过关于DirectX9的一些应用,直到现在DirectX12已经普及了。写完几个DirectX12测试代码之后,写一篇DirectX12简单入门介绍一下基本概念,以及环境搭建和编程过程。

编程环境

与DirectX9不同,在DirectX12开发中微软将需要单独下载的DirectX的SDK直接集成到了WindowsSDK中。因为VisualStudio的网络特性,除了单独下载安装WindowsSDK以外,可以直接利用VisualStudio Installer来选择需要需安装的Windows SDK的版本。我是用的是Visual Studio 2022 Community版本。同样的因为我的目标机器就是我本机,是windows版本是10.1.19044,于是选择的SDK版本为10.1.19041.0。

选择安装之后,会自动安装并且将对应SDK的路径注册到环境变量里面, 避免了DirectX9时代需要手动配置DirectX的环境变量来包含相应的头文件和库。

另外DirectX也只支持C++进行开发。另外DirectX所有系列都是基于COM架构来设计的接口。因此除了要求开发者具备C++编程能力以外,还需要掌握COM变成的基本能力。

当WindowsSDK安装完成之后就能在VisualStudio中创建一个C++桌面程序了。除了windows.h以及相关windows32的库默认会被VisualStudio添加以外,还需要额外配置编译时用到的库D3d12.h, D3d12.dll, dxgi.lib。

之后就可以使用d3d12.h和dxgi相应头文件调用相应的API了。

编程流程

从最高的视角来看。整个过程和DirectX之前的版本,甚至与GDI/GDI+编程过程都类似,都可以分为4部分,不过DirectX12根据现代GPU的特性抽象出来了许多概念来进行操作。

  1. 初始化
  2. 加载资源
  3. 循环渲染
  4. 销毁对象

接着具体来介绍一下每个阶段需要具体完成什么任务,以及用到哪些对象。

初始化

  1. 首先需要执行进行渲染的显卡,操作为通过创建IDXGIFactory对象来选择一个可以用来渲染的显卡对象,接口为IDXGIAdapter。
  2. 在选定的显卡对象上通过D3D12CreateDevice创建一个同于渲染的设备对象ID3D12Device。该对象可以看作真实显卡中进行渲染的硬件的抽象接口。
  3. 得到ID3D12Device接口后就需要创建与其进行通信通道,在DirectX中,这个对象被称为命令队列。也就是ID3D12CommandQueue接口。创建完成后渲染的操作都会通过命令队列发送给进行渲染的硬件。
  4. 接着会需要准备进行渲染的目标。这里需要注意两个概念。SwapChain以及窗口。对DirectX编程架构来说为了避免出现画面撕裂,因此都采用了双缓冲策略,所以被渲染的相关资源都是被放在SwapChain中进行交替操作。而具体什么时候进行真正的Front Buffer和Back Buffer切换是根据不同场景分别由DWM和应用自己来控制。因此在创建渲染目标的Buffer时实际上时创建的SwapChain即CreateSwapChainForHwnd。这里会设计到窗口概念和flip的概念。按照传统的显示资源管理模式。DWM会按照Window来管理并组合所绘制的内容。但是实际上也会新的DirectComposition模式,可以不需要真正的窗口句柄来管理。简单起见这里使用窗口句柄,来将创建的渲染目标即IDXGISwapChain绑定上一个窗口句柄,并且关联上CommandQueue。
  5. 接下来需要给渲染设备ID3D12Device创建一些渲染需要用到的资源,在DirectX中都可以称之为Descriptor。其中的集合可以成为Descriptor Heap。在进行渲染时操作对象不能直接对SwapChain中的Buffer进行操作。DirectX里需要通过创建SwapChain中对应的RenderTargetView来进行操作即CreateRenderTargetView创建。
  6. 最后还需要通过CreateCommandAllocator创建ID3D12CommandAllocator接口。其代表着管理所有需要操作的Command的相关资源。

做完以上步骤就将渲染的硬件资源的抽象接口准备好了。接下来就需要将渲染使用到的资源,很多都是和GPU Render用到的相关的一些对象。

DirectX12 简单入门(一)相关推荐

  1. DirectX12 简单入门(二)

    完成了初始化工作就需要加载渲染时需要的资源. 加载资源 首先需要使用ID3D12Device的CreateRootSignature方法创建RootSignature,这是D3D12里一个重要的接口. ...

  2. BizTalk 2006 简单入门示例程序(附源项目文件下载)

    BizTalk 2006 简单入门示例程序(附源项目文件下载) 为初学BizTalk Server 2006的开发人员,提供一个简单入门的示例程序,包括一个Receive Port.Send Port ...

  3. python如何读取mat文件可视化_python Matplotlib数据可视化(1):简单入门

    1 matplot入门指南 matplotlib是Python科学计算中使用最多的一个可视化库,功能丰富,提供了非常多的可视化方案,基本能够满足各种场景下的数据可视化需求.但功能丰富从另一方面来说也意 ...

  4. ARM NEON 编程简单入门1

    原文:http://blog.csdn.net/silentob/article/details/72954618  ARM NEON 编程简单入门1 NEON简介 NEON是适用于ARM Corte ...

  5. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  6. EChart.js 简单入门

    EChart.js 简单入门 最近有一个统计的项目要做,在前端的数据需要用图表的形式展示.网上搜索了一下,发现有几种统计图库. MSChart   这个是Visual Studio里的自带控件,使用比 ...

  7. 【我的区块链之路】- Hyperledger fabric的简单入门(四)链码的编写及调试

    [我的区块链之路]- Hyperledger fabric的简单入门(四)链码的编写及调试       之前的文章中我们有讲过了fabric的一些核心的配置文件的选项说明,讲过fabric 的网络启动 ...

  8. 基于vue-cli、elementUI的Vue超简单入门小例子

    基于vue-cli.elementUI的Vue超简单入门小例子 这个例子还是比较简单的,独立完成后,能大概知道vue是干嘛的,可以写个todoList的小例子. 开始写例子之前,先对环境的部署做点简单 ...

  9. 【java开发系列】—— spring简单入门示例

    回顾 1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控 ...

最新文章

  1. 排序 时间倒序_经典排序算法之冒泡排序(Bubble Sort)
  2. php 进程管理,php如何管理进程
  3. pyinstaller3.5 和 python 3.8 不兼容
  4. python123子字符串输出_Python--字符串函数方法全解
  5. .net生成excel并弹出保存提示框(转载)
  6. SQL Server 数据库的维护(四)__游标(cursor)
  7. 让Dapper支持读写分离
  8. 图像分类_PyTorch图像数据分类
  9. 亚马逊发布新版MXNet:支持英伟达Volta和稀疏张量
  10. java基础总结02-语言基础
  11. cboard企业版源码_CBoard的部署与使用
  12. php怎么画五星红旗,php基于GD库画五星红旗的方法,phpgd库五星红旗_PHP教程
  13. 应用宝ASO优化,应用宝ASO怎么优化
  14. android 限制输入 表情以及颜文字及特殊字符
  15. DBeaver 安装及配置离线驱动
  16. C语言求1到100的和
  17. Excel 上传数据和导出数据
  18. 怎么给word插入页码,详细图文教学,轻松学会
  19. ajax封装,promise封装ajax,axios封装
  20. 自己开店怎么记账才能更清楚

热门文章

  1. 关于UAP无法运行server的解决办法
  2. 网络嗅探器的设计(1)
  3. 概要设计和详细设计的区别
  4. JCJC错别字检测Windows客户端发布了
  5. 斯坦福大学3D点云模型下载
  6. AVPro Video视频方法
  7. 入门学习C语言需要使用vc++6.0吗?
  8. linux Fcitx5
  9. 问下大家,chorme里用开发者工具看headers,点network标签然后刷新网页并没有headers选项,怎么破?...
  10. 比较流行的数据分析工具合集