我正在尝试使用C ++初始化Direct3D11。在安装了Visual Studio的计算机上(所有这些计算机都在Windows 10上运行),它运行良好。 在其他计算机(未安装Visual Studio,Windows 10和7)上,它将返回E_INVALIDARG。
在这些计算机上,标志 P_FeatureLevelsSupported 表示 0 。在我看来,它说的是 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);
预先感谢:)
答案 0 :(得分:2)
您要通过传入D3D11_CREATE_DEVICE_DEBUG
来创建 debug 设备。为此,您必须在开发计算机上安装 D3D11 * SDKLayers.dll 。有关详细信息,请参见here,
调试层调试层提供了广泛的附加参数 和一致性验证(例如验证着色器链接和 资源绑定,验证参数一致性和报告 错误说明)。
要创建支持调试层的设备,必须安装 DirectX SDK(获取D3D11SDKLayers.dll),然后指定 调用D3D11CreateDevice时的D3D11_CREATE_DEVICE_DEBUG标志 函数或D3D11CreateDeviceAndSwapChain函数。如果你跑 您的启用了调试层的应用程序,该应用程序将 慢得多。但是,请确保您的应用程序是干净的 错误和警告,然后再使用调试层。欲了解更多 信息,请参阅使用调试层调试应用程序。
注意
对于Windows 8,要创建支持调试层的设备, 为Windows 8安装Windows软件开发工具包(SDK),以 获取D3D11_1SDKLayers.dll。
如果在客户计算机上不需要调试设备,只需删除该标志即可。