我目前有一个for循环,一旦hr成功就应该打破,但它没有成功,这导致我后来的问题。
pbMyImage.Image = pbMyImage.InitialImage;
显然,for循环中的D3D11CreateDeviceAndSwapChain返回一个非成功的值,而且很奇怪的是,当我在另一台PC上运行这个程序时,它运行正常!我更新了所有的驱动程序,重新启动了我的电脑并卸载了所有的防病毒软件,但仍然没有运气。有什么想法吗?
答案 0 :(得分:3)
您尚未说明您使用的操作系统,但最可能的原因是您的系统没有安装正确的Direct3D SDK调试层。在这种情况下,如果您尝试使用D3D11_CREATE_DEVICE_DEBUG
创建设备,则会失败。快速测试是指您的Release构建是否成功创建了设备,但您的Debug版本没有。
要为您的操作系统安装正确的SDK图层:
请参阅Direct3D SDK Debug Layer Tricks
另一种可能性是您的系统没有功能级别10.0或更高版本的视频卡,但考虑到代码尝试使用WARP,它可以使用它。
请参阅Anatomy of Direct3D 11 Create Device
答案 1 :(得分:0)
正如你所说,同样的代码在其他机器上运行完美,这意味着你的gpu中有问题,尝试使用WARP或参考设备运行,从列表中删除D3D_DRIVER_TYPE_HARDWARE并重试。
尝试使用
D3D_DRIVER_TYPE driverTypes[] =
{
D3D_DRIVER_TYPE_WARP,
D3D_DRIVER_TYPE_REFERENCE,
};
并在此处阅读有关驱动程序类型的详细信息What's the difference between WARP drivers,reference drivers and software drivers?
答案 2 :(得分:0)
最后解决了这个问题。
Microsoft发布了Windows 10更新,可自动删除对DirectX11的支持。必须重新启用它。如果有人在Windows 10中遇到此问题,要重新启用DirectX11,请转到:
设置 - >应用 - >管理 - >添加额外的图形支持
(显然我需要等待21个小时才能接受我自己的答案......)
答案 3 :(得分:-1)
根据我对DX11和COM的微薄了解:
请注意,如果用户没有DirectX 11视频卡,则此功能调用将无法创建设备和设备上下文。此外,如果您自己测试DirectX 11功能并且没有DirectX 11视频卡,那么您可以将D3D_DRIVER_TYPE_HARDWARE替换为D3D_DRIVER_TYPE_REFERENCE,而DirectX将使用您的CPU来绘制而不是视频卡硬件。请注意,它的速度提高了1/1000,但对于那些在所有机器上都没有DirectX 11视频卡的人来说这是个好消息。
if (hr == E_OUTOFMEMORY) {
//do whatever
}
尝试将驱动程序类型标志更改为D3D_DRIVER_TYPE_REFERENCE以进行调试。如果可行,您可能没有DX11 GPU。
您现在可以做的最好的事情是通过将MSDN文章中的每个枚举传递到if语句来查找HRESULT的值。例如:
{{1}}