Directx 第一次机会例外

Directx 第一次机会例外,directx,directx-11,Directx,Directx 11,我正在学习DirectX11的游戏编程教程。当我运行示例代码时,会出现以下错误: First-chance exception at 0x76E12EEC in Chapter1.exe: Microsoft C++ exception: Platform::COMException ^ at memory location 0x0307E824. HRESULT:0x887A0004 问题似乎出现在以下代码中的featureLevel和creationFlag中: hr = D3D11Cre

我正在学习DirectX11的游戏编程教程。当我运行示例代码时,会出现以下错误:

First-chance exception at 0x76E12EEC in Chapter1.exe: Microsoft C++ exception: Platform::COMException ^ at memory location 0x0307E824. HRESULT:0x887A0004
问题似乎出现在以下代码中的featureLevel和creationFlag中:

hr = D3D11CreateDevice(
            nullptr,
            D3D_DRIVER_TYPE_HARDWARE,
            nullptr,
            creationFlags, 
            featureLevels, 
            ARRAYSIZE(featureLevels),
            D3D11_SDK_VERSION, 
            &device, 
            &featureLevel,
            &context);  
    ThrowIfFailed(hr);
但是,如果我将creationFlags和FeatureLevel的值更改为0和nullptr,代码就可以正常工作。我正在将Visual Studio 2012与Windows 8.1和Windows SDK 8.0配合使用

以下是相关代码:

UINT creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;

#if defined(_DEBUG)
    // For debugging
    creationFlags |= D3D11_CREATE_DEVICE_DEBUG;
#endif

    D3D_FEATURE_LEVEL featureLevels[] = 
    {
        D3D_FEATURE_LEVEL_11_1,
        D3D_FEATURE_LEVEL_11_0,
    };
我读到了第一次机会的例外情况,它并不意味着代码确实有问题,但它不会消失。我该怎么办?

问题 您只通过了
D3D\u功能级别\u 11\u 1
D3D\u功能级别\u 11\u 0
,因此
D3D11CreateDevice()
函数失败,返回
HRESULT
,它不是
S\u OK
,并且您的
ThrowFailed(hr)函数抛出您遇到的异常

如果您的GPU仅支持DirectX 10,则无法创建DirectX 11硬件设备和上下文:
Createdevice*()
功能将失败。为了能够在微软引入的底层硬件上使用DirectX 11 API(但不是DirectX 11功能)

如何修复? 只需使用传统的设备创建方式。 您将需要传递具有所有可能功能级别的阵列

D3D_FEATURE_LEVEL arrFeatLevels [] =
{
    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,
};
因此,DirectX API将自动选择支持的最高版本。 (创建设备后,您可以通过查看返回的
&featureLevel
)找到所选设备:

if(featureLevel>=D3D\U FEATURE\U LEVEL\U 11\U 0)

std::cout您的hresult错误0x887A0004解码为:不支持DXGI\u错误。检查您的卡是否支持DX11和DX11。1@Sarang我用诊断工具检查,系统信息中显示DirectX版本:DirectX 11。但驾驶员的功能级别仅达到10.1。我有Intel(R)HD图形系列图形卡。我可以更新它的驱动程序以支持Directx11吗?不认为这是可能的,dxdiag怎么说?我告诉过你dxdiag的结果。在这里检查对英特尔hd图形卡的支持:用谷歌搜索一下可以让你走得很远:)
if(featureLevel >= D3D_FEATURE_LEVEL_11_0)
    std::cout << "Yay! we using D3D11! :) " << std::endl;
else if( featureLevel >= D3D_FEATURE_LEVEL_10_0)
    std::cout << "Oh noes! only D3D10 available! :(" <<std::endl;
else
    std::cout << "Man, where did you take that old videocard? =\ " <<std::endl;