Функция D3D11CreateDevice (d3d11.h)

Создает устройство, представляющее видеоадаптер.

Синтаксис

HRESULT D3D11CreateDevice(
  [in, optional]  IDXGIAdapter            *pAdapter,
                  D3D_DRIVER_TYPE         DriverType,
                  HMODULE                 Software,
                  UINT                    Flags,
  [in, optional]  const D3D_FEATURE_LEVEL *pFeatureLevels,
                  UINT                    FeatureLevels,
                  UINT                    SDKVersion,
  [out, optional] ID3D11Device            **ppDevice,
  [out, optional] D3D_FEATURE_LEVEL       *pFeatureLevel,
  [out, optional] ID3D11DeviceContext     **ppImmediateContext
);

Параметры

[in, optional] pAdapter

Тип: IDXGIAdapter*

Указатель на видеоадаптер, используемый при создании устройства. Передайте значение NULL , чтобы использовать адаптер по умолчанию, который является первым адаптером, перечисляемым IDXGIFactory1::EnumAdapters.

Примечание Не следует использовать DXGI 1.0 (IDXGIFactory) и DXGI 1.1 (IDXGIFactory1) в приложении. Используйте IDXGIFactory или IDXGIFactory1, но не оба в приложении.
 

DriverType

Тип: D3D_DRIVER_TYPE

D3D_DRIVER_TYPE, представляющий тип создаваемого драйвера.

Software

Тип: HMODULE

Дескриптор библиотеки DLL, реализующий программный растеризатор. Если DriverType имеет значение D3D_DRIVER_TYPE_SOFTWARE, программное обеспечение не должно иметь значение NULL. Получите дескриптор, вызвав LoadLibrary, LoadLibraryEx или GetModuleHandle.

Flags

Тип: UINT

Уровни среды выполнения для включения (см. D3D11_CREATE_DEVICE_FLAG); значения могут быть побитовой ИЛИ.

[in, optional] pFeatureLevels

Тип: const D3D_FEATURE_LEVEL*

Указатель на массив D3D_FEATURE_LEVELs, определяющий порядок уровней признаков, которые необходимо создать. Если для 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,
};
Примечание Если на компьютере присутствует среда выполнения 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.
 

FeatureLevels

Тип: UINT

Количество элементов в pFeatureLevels.

SDKVersion

Тип: UINT

Версия пакета SDK; используйте D3D11_SDK_VERSION.

[out, optional] ppDevice

Тип: ID3D11Device**

Возвращает адрес указателя на объект ID3D11Device , представляющий созданное устройство. Если этот параметр имеет значение NULL, id3D11Device не возвращается.

[out, optional] pFeatureLevel

Тип: D3D_FEATURE_LEVEL*

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

[out, optional] ppImmediateContext

Тип: ID3D11DeviceContext**

Возвращает адрес указателя на объект ID3D11DeviceContext , представляющий контекст устройства. Если этот параметр имеет значение NULL, id3D11DeviceContext не возвращается.

Возвращаемое значение

Тип: HRESULT

Этот метод может возвращать один из кодов возврата Direct3D 11.

Этот метод возвращает E_INVALIDARG, если для параметра pAdapter задано значение, отличное от NULL , а для параметра DriverType — значение D3D_DRIVER_TYPE_HARDWARE.

Этот метод возвращает DXGI_ERROR_SDK_COMPONENT_MISSING , если вы указали D3D11_CREATE_DEVICE_DEBUG в разделе Флаги и на компьютере установлена неверная версия отладочного слоя . Установите последнюю версию windows SDK, чтобы получить правильную версию.

Комментарии

Эта точка входа поддерживается средой выполнения Direct3D 11, которая доступна в Windows 7, Windows Server 2008 R2 и в качестве обновления до Windows Vista (KB971644).

Чтобы создать устройство Direct3D 11.1 (ID3D11Device1), доступное в Windows 8, Windows Server 2012, Windows 7 и Windows Server 2008 R2 с установленным Обновлением платформы для Windows 7 сначала создается id3D11Device с этой функцией, а затем вызывается метод QueryInterface для объекта ID3D11Device , чтобы получить интерфейс ID3D11Device1 .

Чтобы создать устройство Direct3D 11.2 (ID3D11Device2), доступное в Windows 8.1 и Windows Server 2012 R2, сначала создайте ID3D11Device с этой функцией, а затем вызовите метод QueryInterface для объекта ID3D11Device, чтобы получить интерфейс ID3D11Device2.

Присвойте ppDevice и ppImmediateContextзначение NULL , чтобы определить поддерживаемый уровень функций, просмотрев pFeatureLevel без создания устройства.

Пример см. в разделах Практическое руководство. Создание устройства и Непосредственный контекст. Чтобы создать устройство и цепочку буферов одновременно, используйте D3D11CreateDeviceAndSwapChain.

Если для параметра pAdapter задано значение, отличное от NULL , необходимо также задать для параметра DriverType значение D3D_DRIVER_TYPE_UNKNOWN. Если для параметра pAdapter задано значение, отличное от NULL , а для параметра DriverType — значение D3D_DRIVER_TYPE_HARDWARE, D3D11CreateDevice возвращает HRESULT E_INVALIDARG.

Различия между Direct3D 10 и Direct3D 11:

В Direct3D 10 наличие pAdapter определяет, какой адаптер следует использовать, и DriverType может не совпадать с тем, что адаптер был.

Если вы пытаетесь создать аппаратное или программное устройство в Direct3D 11, задайте pAdapter != NULL , который ограничивает другие входные данные следующим образом:

  • DriverType должен быть D3D_DRIVER_TYPE_UNKNOWN
  • Программное обеспечение должно иметь значение NULL.
С другой стороны, если значение pAdapter == NULL, driverType не может быть задано как D3D_DRIVER_TYPE_UNKNOWN; ему может быть присвоено одно из следующих значений:
  • Если DriverType == D3D_DRIVER_TYPE_SOFTWARE, software не может иметь значение NULL.
  • Если DriverType == D3D_DRIVER_TYPE_HARDWARE, используемым адаптером будет адаптер по умолчанию, который является первым адаптером, перечисляемым IDXGIFactory1::EnumAdapters.
 

Сигнатура функции PFN_D3D11_CREATE_DEVICE предоставляется в виде определения типа, поэтому вместо статического связывания можно использовать методы динамической компоновки (GetProcAddress).

Windows Phone 8. Этот API поддерживается.

Windows Phone 8.1: этот API поддерживается.

Требования

   
Целевая платформа Windows
Header d3d11.h
Библиотека D3D11.lib
DLL D3D11.dll

См. также раздел

Основные функции