Vorgehensweise: Abrufen der Gerätefunktionsebene
In diesem Thema wird gezeigt, wie Sie die höchste Featureebene erhalten, die von einem Gerätunterstützt wird. Direct3D 11-Geräte unterstützen einen festen Satz von Featureebenen, die in der D3D _ FEATURE _ LEVEL-Enumeration definiert sind. Wenn Sie die höchste von einem Gerät unterstützte Featureebene kennen, können Sie Codepfade ausführen, die für dieses Gerät geeignet sind.
So erhalten Sie die Gerätefunktionsebene
Rufen Sie entweder die D3D11CreateDevice-Funktion oder die D3D11CreateDeviceAndSwapChain-Funktion auf, während Sie NULL für den ppDevice-Parameter angeben. Sie können dies vor der Geräteerstellung tun.
- oder –
Rufen Sie id3D11Device::GetFeatureLevel nach der Geräteerstellung auf.
Untersuchen Sie den Wert der zurückgegebenen D3D _ FEATURE _ LEVEL-Enumeration aus dem letzten Schritt, um die unterstützte Featureebene zu ermitteln.
Im folgenden Codebeispiel wird veranschaulicht, wie die höchste unterstützte Featureebene durch Aufrufen der D3D11CreateDevice-Funktion bestimmt wird. D3D11CreateDevice speichert die höchste unterstützte Featureebene in der Variablen FeatureLevel. Sie können diesen Code verwenden, um den Wert des D3D _ FEATURE LEVEL-Enumerationstyps _ zu untersuchen, den D3D11CreateDevice zurückgibt. Beachten Sie, dass dieser Code alle Featureebenen explizit auflistet (für Direct3D 11.1 und Direct3D 11.2).
Hinweis
Wenn die Direct3D 11.1-Runtime auf dem Computer vorhanden ist und pFeatureLevels auf NULL festgelegt ist, erstellt diese Funktion kein D3D _ FEATURE LEVEL _ _ 11 _ 1-Gerät. Um ein D3D _ FEATURE LEVEL _ _ 11 _ 1-Gerät zu erstellen, müssen Sie explizit ein D3D _ FEATURE _ LEVEL-Array bereitstellen, das D3D _ FEATURE LEVEL _ _ 11 _ 1 enthält. Wenn Sie ein D3D _ FEATURE _ LEVEL-Array bereitstellen, das D3D _ FEATURE LEVEL _ _ _ 11 1 auf einem Computer enthält, auf dem die Direct3D 11.1-Runtime nicht installiert ist, schlägt diese Funktion sofort mit E _ INVALIDARG fehl.
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;
}
Im Abschnitt Referenz zu 10Level9 werden die Unterschiede zwischen den verschiedenen Methoden ID3D11Device und ID3D11DeviceContext auf verschiedenen 10Level9-Featureebenen aufgelistet.