Skip to content

项目初始化

项目

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

image-20260326140106079

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

image-20260326140221126

需要注意,对于桌面程序,其程序主入口通常是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

image-20260326142531522

  • 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。

image-20260326150106762

浮点模型和SSE2

选择配置属性->C/C++->代码生成->浮点模型,选择快速(/fp:fast)。

同一页面找到启用增强指令集,选择流式处理SIMD拓展2(/arch:SSE2);这一步仅在x86平台是必须的,x64默认支持SSE2。

image-20260326162637057