Direct3D 12 编程环境设置
介绍构成高效 Direct3D 12 开发环境的安装、工具和支持的库。
开发环境
Direct3D 12 标头和库是 Windows 10 SDK 的一部分。 使用 Direct3D 12 不需要单独下载或安装。
安装 Windows 10 SDK 软件和 Visual Studio 后,Direct3D 12 编程环境的设置已完成。 建议使用 Visual Studio 2019,因为它将包括 D3D12 图形调试工具,但早期版本的 Visual Studio 将适用于程序开发。
若要使用 Direct3D 12 API,请包括 D3d12.h 和指向 D3d12.lib 的链接,或直接在 D3d12.dll中查询入口点。
以下标头和库可用。 静态库的位置取决于计算机上运行的 Windows 10 版本(32 位或 64 位)。
标头或库文件名 | 描述 | 安装位置 |
---|---|---|
D3d12.h | Direct3D 12 API 标头 | %WindowsSdkDir\Include%WindowsSDKVersion%\\um |
D3d12.lib | 静态 Direct3D 12 API 存根库 | %WindowsSdkDir\Lib%WindowsSDKVersion%\\um\arch |
D3d12.dll | 动态 Direct3D 12 API 库 | %WINDIR%\System32 |
D3d12SDKLayers.h | Direct3D 12 调试标头 | %WindowsSdkDir\Include%WindowsSDKVersion%\\um |
D3d12SDKLayers.dll | 动态 Direct3D 12 调试库 | %WINDIR%\System32 |
支持的语言
C++是 Direct3D 12 开发、C# 和其他 .NET 语言的唯一支持语言。
帮助程序结构
具体而言,有许多帮助程序结构可以轻松初始化许多 D3D12 结构。 这些结构以及一些实用工具函数位于标头 D3dx12.h 中。 此标头是开源的,开发人员可以根据需要对其进行修改 - 从 D3D12 帮助程序库 下载,并参考 D3D12的帮助程序结构和函数。
内存管理库
内存管理帮助程序库可供下载,你可以将其集成到应用中,以更紧密地匹配 D3D11 内存管理行为。 作为 D3D11 样式管理库,它对于仍在使用 提交的资源 样式分配策略的应用最为有效。 具体而言,库应被视为一个单步执行器,它将让你在内存受限方案中(例如,低端内存卡、4k、超级设置等)时,充分利用 D3D11 性能内存管理的方式。 D3D12 API 确实可实现比 D3D11 更好的内存效率的技术,尽管这些技术可能具有挑战性,而且非常耗时。
请注意,此库是正在进行的工作,可能会随时间变化。 使用以下链接访问库和示例。
支持的工具和库
以下库都可用于 Direct3D 12。
图书馆 | 目的 | 文档 |
---|---|---|
适用于 DirectX 12 的 DirectX 工具包 | 大量帮助程序类,用于编写适用于通用 Windows 平台(UWP)应用的 Direct3D 12 C++代码、适用于 Windows 10 的 Win32 桌面应用程序以及 Xbox One 独占应用。 | DirectX12TK wiki |
DirectXTex | 使用它来读取和写入 DDS 文件,并执行各种纹理内容处理作,包括调整大小、格式转换、mip 贴图生成、Direct3D 运行时纹理资源的块压缩,以及高度地图到普通地图转换。 | DirectXTex wiki |
DirectXMesh | 使用它来执行各种几何图形内容处理作,包括生成法线和正切帧、三角形相邻计算和顶点缓存优化。 | DirectXMesh wiki |
DirectXMath | 大量帮助程序类和方法支持向量、标量、矩阵、四元数和其他许多数学运算。 | MSDN DirectXMath 文档 |
UVAtlas | 使用它来创建和打包异色质质纹理图集。 | UVAtlas wiki |
样品
有关工作 D3D12 示例的列表以及如何查找和运行示例,请参阅 工作示例。
有关如何添加代码以启用特定功能的演练,请参阅 D3D12 代码演练。
调试层
调试层提供广泛的附加参数和一致性验证(例如验证着色器链接和资源绑定、验证参数一致性以及报告错误说明)。
注意
对于 Windows 10,若要创建支持调试层的设备,请启用“图形工具”可选功能。 在 Windows 10 22H2 上,转到“系统”下的“设置”面板。 在较旧版本的 Windows 10 上,转到“设置”面板,在“应用 > 应用”& 功能下。 转到可选功能 > 添加功能,然后查找“图形工具”。
默认情况下,支持调试层 D3D12SDKLayers.h 所需的标头包含在 d3d12.h 中。
当调试层列出内存泄漏时,它将输出对象接口指针的列表及其友好名称。 默认友好名称为“<未命名>”。 可以使用 ID3D12Object::SetName 方法设置友好名称。 通常,应从生产版本编译这些调用。
建议使用调试层来调试应用,以确保这些应用可以清除错误和警告。 调试层可帮助你编写 Direct3D 12 代码。 此外,当你使用调试层时,工作效率可能会增加,因为你可以立即看到模糊呈现错误的原因,甚至是源处的黑屏。 调试层为许多问题提供警告。 例如:
- 忘记设置纹理,但在像素着色器中读取纹理。
- 输出深度,但没有深度模具状态绑定。
- 纹理创建失败并出现 INVALIDARG。
设置编译器定义D3DCOMPILE_DEBUG,告知 HLSL 编译器将调试信息包含在着色器 Blob 中。
#define D3DCOMPILE_DEBUG 1
有关所有调试接口和方法的详细信息,请参阅 调试层参考。
有关使用调试层的概述信息,请参阅 了解 D3D12 调试层。
教育视频
DirectX 高级学习视频教程,包括有关图形调试工具的视频以及报告图形 bug 的视频,有许多 Direct3D 12 和 Windows 10 相关视频。
相关主题