0

我正在尝试在 C++ 中初始化 Direct3D11。在安装了 Visual Studio 的机器上(所有这些都在 Windows 10 上运行),它运行良好。在其他计算机上(未安装 Visual Studio,Windows 10 和 7)它返回 E_INVALIDARG。

这些计算机上的标志P_FeatureLevelsSupported0。在我的上面写着D3D_FEATURE_LEVEL_11_1。所以我想这与 DirectX 安装有关,或者可能是因为缺少 SDK(但这不会很奇怪吗?:D)

通过运行 dxdiag,我知道那些机器支持 DirectX11_0。

有什么我需要安装的吗?该软件必须在我们客户的 PC 上运行。

导致错误的代码:

const D3D_FEATURE_LEVEL lvl[] = {   D3D_FEATURE_LEVEL_11_1, D3D_FEATURE_LEVEL_11_0,
                                    D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0,
                                    D3D_FEATURE_LEVEL_9_3, D3D_FEATURE_LEVEL_9_2, D3D_FEATURE_LEVEL_9_1,
}; 
D3D_FEATURE_LEVEL  P_FeatureLevelsSupported;


//see microsoft documentation, we use 11_1 or 11_0 if 11_1 is not supported by the client machine
//https://docs.microsoft.com/en-us/windows/desktop/direct3d11/overviews-direct3d-11-devices-initialize
result  = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, D3D11_CREATE_DEVICE_DEBUG, lvl, _countof(lvl), D3D11_SDK_VERSION, &swapChainDesc, &swapChain, &device, &P_FeatureLevelsSupported, &deviceContext);
if(result == E_INVALIDARG) //check with FEATURE_LEVEL_11_0
      D3D11CreateDeviceAndSwapChain(NULL, 
                              D3D_DRIVER_TYPE_HARDWARE, 
                              NULL,
                              D3D11_CREATE_DEVICE_DEBUG, 
                              &lvl[1],
                              _countof(lvl) - 1,
                              D3D11_SDK_VERSION,
                              &swapChainDesc, 
                              &swapChain, 
                              &device,
                              &P_FeatureLevelsSupported, 
                              &deviceContext);

提前致谢 :)

4

1 回答 1

2

您要求通过传入来创建调试设备D3D11_CREATE_DEVICE_DEBUG。为了成功,您必须安装D3D11*SDKLayers.dll,您可能在您的开发机器上安装了它。请参阅此处了解详细信息,其中包括:

调试层 调试层提供广泛的附加参数和一致性验证(例如验证着色器链接和资源绑定、验证参数一致性和报告错误描述)。

要创建支持调试层的设备,必须安装 DirectX SDK(获取 D3D11SDKLayers.dll),然后在调用 D3D11CreateDevice 函数或 D3D11CreateDeviceAndSwapChain 函数时指定 D3D11_CREATE_DEVICE_DEBUG 标志。如果您在启用调试层的情况下运行应用程序,应用程序的速度会大大降低。但是,为了确保您的应用程序在发布之前没有错误和警告,请使用调试层。有关详细信息,请参阅使用调试层调试应用程序。

笔记

对于 Windows 8,要创建支持调试层的设备,请安装适用于 Windows 8 的 Windows 软件开发工具包 (SDK) 以获取 D3D11_1SDKLayers.dll。

如果您在客户机器上不需要调试设备,只需删除该标志即可。

于 2018-11-08T14:44:59.747 回答