上篇文章我们创建了一个窗口,看样子还不难,我们继续玩DX12
引用一些文件
头文件
#include <d3d12.h>
#include <dxgi1_4.h>
#include <wrl.h>
还有一些库
#pragma comment(lib, "d3d12.lib")
#pragma comment(lib, "dxgi.lib")
这个图是我最开始的理解哈哈,不一定是对的,笔者只是一个小萌新,刚学DX和图形,自己注意真实性
IDXGIFactory
仔细一看,我发现居然有IDXGIFactory,IDXGIFactory1,2,3,4…嘶…很抽象,我猜测是不同的API版本,功能应该差不多
我们就用那个没数字的版本
这个东西有几个功能
- 能枚举我们显示器适配器?
- 还能用它创建一个SwapChain
IDXGIAdaptor
似乎这个就是显示器适配器,也有IDXGIAdaptor1…
(好烦躁啊!!!!怎么这么多,我用哪个)
适配器是面向不同图形硬件的抽象概念,描述了图形硬件(通常是显卡)的信息(如名称,驱动等),是创建Device的必要参数
ID3D12Device
绘图设备是与适配器交互的重要接口,它提供了大量交互适配器的低级操作
绘图设备,这个东西里面
- 创建Fence
- 创建资源堆
- 创建提交的资源
- 创建描述符堆
- …一大堆,不列了
ID3D12CommandQueue
命令队列是存储较为低级绘制命令的队列,从属于绘图设备,一个绘图设备可以拥有多个命令队列,队列里的命令按时序出队执行
就…理解成这个东西会把里面的命令按顺序输入到绘图设备吧
ID3D12CommandList
命令列表封装了较为高级的绘制命令,通常需要向命令队列提交命令列表,列表内的高级命令会被翻译为低级命令按顺序排入命令队列
DX12不让直接往Queue里丢命令,只能先丢进List,再把List丢进Queue
ID3D12CommandAllocator
命令分配器提供了创建命令列表的手段,与命令列表一一对应并管理命令列表的资源
也就是说这个玩意是管着命令列表的,然后能创建命令列表
IDXGISwapChain
这个东西…嗯…1234
大概原理就是把DX渲染的东西放进这个里面,然后一次性输出到屏幕,省得出现介于两个画面之间的情况。
ID3D12DescriptorHeap
描述符堆,看样子是存东西的,描述内存里一块空间是什么东西