如何:取得裝置功能層級
本主題說明如何取得裝置支援的最高功能層級。 Direct3D 11 裝置支援一組固定的功能層級,這些層級定義于 D3D_FEATURE_LEVEL 列舉中。 當您知道裝置支援的最高 功能層級 時,您可以執行適用于該裝置的程式碼路徑。
取得裝置功能層級
呼叫D3D11CreateDevice函式或D3D11CreateDeviceAndSwapChain函式,同時為ppDevice參數指定Null。 您可以在裝置建立之前執行這項操作。
- 或 -
在裝置建立之後呼叫 ID3D11Device::GetFeatureLevel 。
檢查上一個步驟中傳回 D3D_FEATURE_LEVEL 列舉的值,以判斷支援的功能層級。
下列程式碼範例示範如何藉由呼叫 D3D11CreateDevice 函式來判斷最高支援的功能層級。 D3D11CreateDevice 會將最高支援的功能層級儲存在 FeatureLevel 變數中。 您可以使用此程式碼來檢查D3D11CreateDevice傳回之D3D_FEATURE_LEVEL列舉型別的值。 請注意,此程式碼會列出 Direct3D 11.1 和 Direct3D 11.2) 明確 (的所有功能層級。
注意
如果電腦上的 Direct3D 11.1 執行時間存在, 且 pFeatureLevels 設定為 Null,則此函式不會建立 D3D_FEATURE_LEVEL_11_1 裝置。 若要建立D3D_FEATURE_LEVEL_11_1裝置,您必須明確提供包含D3D_FEATURE_LEVEL_11_1的D3D_FEATURE_LEVEL陣列。 如果您在未安裝 Direct3D 11.1 執行時間的電腦上提供包含D3D_FEATURE_LEVEL_11_1的D3D_FEATURE_LEVEL陣列,此函式會立即失敗並E_INVALIDARG。
HRESULT hr = E_FAIL;
D3D_FEATURE_LEVEL MaxSupportedFeatureLevel = D3D_FEATURE_LEVEL_9_1;
D3D_FEATURE_LEVEL FeatureLevels[] = {
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
};
hr = D3D11CreateDevice(
NULL,
D3D_DRIVER_TYPE_HARDWARE,
NULL,
0,
&FeatureLevels,
ARRAYSIZE(FeatureLevels),
D3D11_SDK_VERSION,
NULL,
&MaxSupportedFeatureLevel,
NULL
);
if(FAILED(hr))
{
return hr;
}
10Level9 參考區段列出各種ID3D11Device 和 ID3D11DeviceCoNtext方法在各種 10Level9 功能層級的行為差異。
相關主題