项目初始化
项目
D3D12项目通常是桌面程序,在新建项目时应该选择:

并选择“桌面应用程序(.exe)”,勾选”空项目“:

需要注意,对于桌面程序,其程序主入口通常是WINAPI WinMain而不是main:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, PSTR cmdLine, int showCmd)
{
return 0;
}
支撑文件
WinInclude.h
设置一个头文件以引用在整个项目中都会引用到的依赖库,并在后续其它文件中都引用该头文件,以避免多次引用同一个库导致重复定义和其它异常。
在这里将其命名为WinInclude.h,放在/Support/下,通常一个D3D12项目的WinInclude.h文件至少需要包含以下内容:
点击展开代码
#pragma once //允许且仅允许该头文件被include一次
#define NOMINMAX //禁用windows.h 中max和min的宏定义
#ifndef WIN32_LEAN_AND_MEAN //编译优化,仅引用windows.h中核心功能
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <d3d12.h> //d3d12
#include <dxgi1_6.h>
#include <D3Dcompiler.h>
#include <DirectXMath.h> //数学运算
#include "d3dx12.h" //d3d12的辅助
#include <string>
#include <wrl.h>
#include <shellapi.h>
//在Debug中开启增强的错误检查和内存泄露监控。未开启的情况下,D3D12不会提供任何有关报错的信息
#ifdef _DEBUG
#include <d3d12sdklayers.h>
#include <dxgidebug.h>
#endif
项目属性
打开项目属性,分步进行以下设置:
依赖项
选择配置属性->链接器->输入->附加依赖项,增加d3d12.lib;dxgi.lib;dxguid.lib。

- d3d12.lib
D3D12的核心静态库,提供与GPU交互的底层接口与函数,用于创建Deivce、Commond Queue、PSO和Assets(Buffer/Textrue)等。
常用于初始化d3d12设备,管理渲染管线、提交绘制命令、同步GPU和CPU等。
- dxgi.lib
DXGI的静态库,负责图形的硬件抽象层,提供了与GPU、SwapChain、显示模式等的相关功能。
常用于枚举GPU适配器、创建SwapChain、查询显示器支持的显示模式等。
- dxguid.lib
包含DXGI和Direct3D接口的GUID定义,用于唯一标识COM接口。
包含目录
选择配置属性->VC++目录->包含目录,添加当前项目的根目录,以便在项目中include。

浮点模型和SSE2
选择配置属性->C/C++->代码生成->浮点模型,选择快速(/fp:fast)。
同一页面找到启用增强指令集,选择流式处理SIMD拓展2(/arch:SSE2);这一步仅在x86平台是必须的,x64默认支持SSE2。
