Практическое руководство. Получение уровня компонентов устройства

В этом разделе показано, как получить наивысший уровень функций , поддерживаемый устройством. Устройства Direct3D 11 поддерживают фиксированный набор уровней компонентов, определенных в перечислении D3D_FEATURE_LEVEL . Если вы знаете самый высокий уровень функций , поддерживаемый устройством, вы можете выполнять пути кода, подходящие для этого устройства.

Получение уровня компонентов устройства

  1. Вызовите функцию D3D11CreateDevice или функции D3D11CreateDeviceAndSwapChain , указав значение NULL для параметра ppDevice . Это можно сделать перед созданием устройства.

    — или —

    Вызов ID3D11Device::GetFeatureLevel после создания устройства.

  2. Проверьте значение возвращаемого 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.

Direct3D 11 на оборудовании нижнего уровня

Использование Direct3D 11