2017-03-10 125 views
2

我剛剛開始學習D3D。我已經按照我所遵循的在線教程設置了我的環境,但是當我運行Luna關於DX11的書的第6章BOX源時出現了問題。「不支持Direct3D功能級別11」。在Win7 + VS2010的環境下

我得到以下運行時dialog box( 「Direct3D的功能級別11不支持的。」)

問題的代碼段:

D3D_FEATURE_LEVEL featureLevel; 
HRESULT hr = D3D11CreateDevice(
     0,     // default adapter 
     md3dDriverType, 
     0,     // no software device 
     createDeviceFlags, 
     0, 0,    // default feature level array 
     D3D11_SDK_VERSION, 
     &md3dDevice, 
     &featureLevel, 
     &md3dImmediateContext); 

if(FAILED(hr)) 
{ 
    MessageBox(0, L"D3D11CreateDevice Failed.", 0, 0); 
    return false; 
} 

if(featureLevel != D3D_FEATURE_LEVEL_11_0) 
{ 
    MessageBox(0, L"Direct3D Feature Level 11 unsupported.", 0, 0); 
    return false; 
} 

我發現了一個類似的問題在計算器(Two problems while initializing Directx 11.0 - 1.FeatureLevel, 2. 4xMSAA quality) , 但答案並不能解決我的問題。我更新了我的圖形驅動程序。

我用DXDIAG的工具和結果如下:

dxdiag

回答

1

Windows 7包含DirectX 11 API,但這並不意味着您擁有支持DirectX 11的視頻硬件。 DirectX 11(API)支持安排在Direct3D hardware feature levels中的一系列視頻硬件。僅僅因爲你當前的驅動程序/卡不支持11.0,它可能支持10.1或10.0,它有很多(但不是全部)相同的features

在Windows 8或更高版本上,您可以請求超出11.0的其他功能級別。默認情況下,如果您將nullptr傳遞給默認功能級別數組,它將僅返回9.1,9.2,9.3,10.0,10.1或11.0。

請注意,在Windows 7 Service Pack 1上,可以安裝DirectX 11.1 Runtime,但不支持較新的驅動程序模型。因此,您無法使用Direct3D硬件功能級別11.1 - 這些卡都支持11.0,因此您可以回退到此。見DirectX 11.1 and Windows 7。 DirectX 11.2及更高版本不適用於Windows 7。

弗蘭克盧娜的來源假設你有一個11.0能力的視頻卡爲簡單起見,但你仍然可以做很多事情與舊卡。有關如何創建具有一系列功能級別的設備的詳細信息,請參閱Anatomy of Direct3D 11 Create Device

或者,你可以得到一個更新的視頻卡。

如你是新來的DirectX的發展,一定要到Luna的書的某些方面的書打印日期後不久,那名外的日期閱讀Book Recommendations的音符。你也可以看看DirectX Tool Kit tutorials

最後,考慮遷移到較新版本的Visual Studio。在這一點上,大多數現代DirectX supporting libraries不會與VS 2010一起構建,因爲它只實現了一些C++ 11草稿語言功能。您應該看看使用VS Community edition,只要您符合許可證要求即可免費使用。

+0

我認爲我應該改變computer.But在任何情況下感謝你回答我的問題 – jyheng

0

僅僅因爲你的顯卡驅動程序是最新的,並不意味着他們支持D3D_FEATURE_LEVEL_11_0。目前還不清楚您的DxDiag實際上具有哪種顯卡,但HP 3005 MT的默認規格顯示了最佳可用顯卡爲Nvidia 315,並且僅支持DirectX 10.1。

在文檔中所述用於​​:

如果pFeatureLevels被設置爲NULL,這個函數使用下列 陣列特徵層次:

{ 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,};

這意味着,如果您的設備支持這些功能級別中的任何一個(它將按順序嘗試),則該功能將成功。很可能,它給你一個設備featureLevelD3D_FEATURE_LEVEL_10_1(或更低,取決於實際的卡)。有時間購買新的視頻卡。

+0

我認爲我應該在任何情況下更改computer.But謝謝你回答我的問題 – jyheng