我正在尝试使用新的DX12 API,并且已经从Microsoft文档中找到并复制了一些与此相关的代码,但是在复制代码后,许多功能仍然无法识别。
我一直在详细搜索文档,但找不到适合它们的标题。我包含的标题如下:
#include "targetver.h"
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from
#include "windows.h"
// C RunTime Header Files
#include "stdlib.h"
#include "malloc.h"
#include "memory.h"
#include "tchar.h"
//for wstrings
#include "locale"
//for Microsoft namespace
#include "collection.h"
//for SwapChain3
#include "dxgi1_4.h"
#include "D3DX12.h"
#include "D3d12.h"
#include "directxmath.h"
#include "D3DCompiler.h"
未识别的功能和属性是:
ThrowIfFailed,GetHardwareAdapter,Win32Application命名空间和GetAssetFullPath
最佳答案
这些功能是各种入门模板和示例中包含的“帮助程序”,但不是Windows SDK中实际Windows API的一部分。特别是,您将在用于Win32桌面的官方DirectX 12示例GitHub中的示例中看到它们。
ThrowIfFailed
是一个简单的“如果COM返回失败,则抛出C++异常”助手。这是因为您应该始终检查返回HRESULT
而不是void
的任何COM函数的返回值,但是在大多数情况下,在“工作”程序中,Direct3D的任何失败代码在许多地方都是“致命错误”。 DX12的“官方”桌面示例在DXSampleHelper.h中定义了它,但许多其他模板将其放入pch.h
预编译头中,以确保已全局定义。有关更多详细信息,请参见this wiki page。GetHardwareAdapter
是另一个帮助器。在任何现代版本的Windows上使用create a DirectX 11 device时,您都可以安全地假定其中存在一些Direct3D适配器,具体取决于您的最低Direct3D Hardware Feature level。使用DirectX 12时,您确实需要检查,因为系统中很有可能同时具有DX11和DX12设备。有关创建DirectX 12设备的更多详细信息,请参见this blog post。Win32Application
命名空间只是一个非常简单的WndProc和窗口助手。您可以在此处查看实现cpp / hGetAssetFullPath
是另一个帮助器,但是它更特定于“官方” DirectX 12示例。它基本上解决了以下事实:在Visual Studio中进行开发时,“当前工作目录”通常是项目文件夹,但是在Debug,Release,Windows,Windows和Windows Server 2003的cso
旁边可以找到Visual Studio生成的各种着色器blob(EXE
文件),等等。您可以找到它here。另一个常见的问题是,各种
D3DX12*
帮助器函数也不是Windows SDK的一部分。相反,您将D3DX12.H
作为DirectX项目模板的一部分或从GitHub获得。该文档位于Microsoft Docs上。有关一些常规提示,请参见this blog post和DirectX Tool Kit for DX12。
关于c++ - 未定义的标识符-缺少哪些头文件? -DX12,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57569047/