Практическое руководство. Получение уровня компонентов устройства
В этих разделах показано, как получить наивысший уровень функций , поддерживаемый устройством. Устройства Direct3D 11 поддерживают фиксированный набор уровней функций, определенных в перечислении D3D_FEATURE_LEVEL . Если вы знаете самый высокий уровень функций , поддерживаемый устройством, вы можете выполнить пути кода, подходящие для этого устройства.
Получение уровня компонентов устройства
Вызовите функцию D3D11CreateDevice или функцию D3D11CreateDeviceAndSwapChain , указав значение NULL для параметра ppDevice . Это можно сделать перед созданием устройства.
— или —
Вызовите ID3D11Device::GetFeatureLevel после создания устройства.
Проверьте значение возвращаемого перечисления D3D_FEATURE_LEVEL из последнего шага, чтобы определить поддерживаемый уровень компонентов.
В следующем примере кода показано, как определить самый высокий поддерживаемый уровень функций путем вызова функции D3D11CreateDevice . D3D11CreateDevice сохраняет самый высокий поддерживаемый уровень компонентов в переменной FeatureLevel. Этот код можно использовать для проверки значения перечисленного типа D3D_FEATURE_LEVEL , возвращаемого D3D11CreateDevice . Обратите внимание, что этот код явно перечисляет все уровни функций (для Direct3D 11.1 и Direct3D 11.2).
Примечание
Если на компьютере присутствует среда выполнения Direct3D 11.1, а для pFeatureLevels задано значение NULL, эта функция не создаст D3D_FEATURE_LEVEL_11_1 устройство. Чтобы создать устройство D3D_FEATURE_LEVEL_11_1 , необходимо явно указать массив D3D_FEATURE_LEVEL , включающий D3D_FEATURE_LEVEL_11_1. Если указать массив D3D_FEATURE_LEVEL , содержащий D3D_FEATURE_LEVEL_11_1 на компьютере, на котором не установлена среда выполнения Direct3D 11.1, эта функция немедленно завершается сбоем с 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.
Связанные темы