Поделиться через


Метод IDirect3D9::CreateDevice (d3d9.h)

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

Синтаксис

HRESULT CreateDevice(
  [in]          UINT                  Adapter,
  [in]          D3DDEVTYPE            DeviceType,
  [in]          HWND                  hFocusWindow,
  [in]          DWORD                 BehaviorFlags,
  [in, out]     D3DPRESENT_PARAMETERS *pPresentationParameters,
  [out, retval] IDirect3DDevice9      **ppReturnedDeviceInterface
);

Параметры

[in] Adapter

Тип: UINT

Порядковый номер, обозначающий видеоадаптер. D3DADAPTER_DEFAULT всегда является основным видеоадаптером.

[in] DeviceType

Тип: D3DDEVTYPE

Член перечисленного типа D3DDEVTYPE , обозначающий требуемый тип устройства. Если нужный тип устройства недоступен, метод завершится ошибкой.

[in] hFocusWindow

Тип: HWND

Окно фокуса оповещает Direct3D, когда приложение переключается из режима переднего плана в фоновый режим. См. заметки.

  • Для полноэкранного режима указанное окно должно быть окном верхнего уровня.
  • Для оконного режима этот параметр может иметь значение NULL , только если члену hDeviceWindow pPresentationParameters присвоено допустимое значение, отличное от NULL .

[in] BehaviorFlags

Тип: DWORD

Сочетание одного или нескольких параметров, управляющих созданием устройства. Дополнительные сведения см. в разделе D3DCREATE.

[in, out] pPresentationParameters

Тип: D3DPRESENT_PARAMETERS*

Указатель на структуру D3DPRESENT_PARAMETERS , описывающую параметры презентации для создаваемого устройства. Если BehaviorFlags указывает D3DCREATE_ADAPTERGROUP_DEVICE, pPresentationParameters является массивом. Независимо от количества существующих голов, автоматически создается только одна поверхность глубины или трафарета.

Для Windows 2000 и Windows XP частота обновления полноэкранного дисплея устройства задается в следующем порядке:

  1. Указанный пользователем ненулевой раздел реестра ForcedRefreshRate, если он поддерживается устройством.
  2. Указанное приложением ненулевое значение частоты обновления в параметре презентации.
  3. Частота обновления последней версии рабочего стола, если она поддерживается устройством.
  4. 75 герц, если устройство поддерживает.
  5. 60 герц, если поддерживается устройством.
  6. Устройство по умолчанию.
Неподдерживаемая частота обновления по умолчанию будет по умолчанию ближайшей поддерживаемой частотой обновления ниже нее. Например, если приложение указывает 63 герц, будет использоваться 60 герц. Частота обновления ниже 57 герц не поддерживается.

pPresentationParameters является входным и выходным параметром. Вызов этого метода может изменить несколько элементов, в том числе:

  • Если BackBufferCount, BackBufferWidth и BackBufferHeight имеют значение 0 перед вызовом метода, они будут изменены при возврате метода.
  • Если BackBufferFormat равно D3DFMT_UNKNOWN перед вызовом метода, он будет изменен при возврате метода.

[out, retval] ppReturnedDeviceInterface

Тип: IDirect3DDevice9**

Адрес указателя на возвращенный интерфейс IDirect3Device9 , представляющий созданное устройство.

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

Тип: HRESULT

Если метод выполнен успешно, возвращаемое значение будет D3D_OK. В случае сбоя метода возвращается одно из следующих значений: D3DERR_DEVICELOST, D3DERR_INVALIDCALL, D3DERR_NOTAVAILABLE D3DERR_OUTOFVIDEOMEMORY.

Комментарии

Этот метод возвращает полностью рабочий интерфейс устройства, заданный в требуемом режиме отображения (или в оконном режиме) и выделенный с соответствующими задними буферами. Чтобы начать отрисовку, приложению достаточно создать и задать буфер глубины (при условии, что в D3DPRESENT_PARAMETERS параметр EnableAutoDepthStencil имеет значение FALSE).

При создании устройства Direct3D вы предоставляете два разных параметра окна: окно фокуса (hFocusWindow) и окно устройства (hDeviceWindow в D3DPRESENT_PARAMETERS). Назначение каждого окна:

  • Окно фокуса оповещает Direct3D, когда приложение переключается из режима переднего плана в фоновый режим (с помощью alt-tab, щелчка мышью или другого метода). Каждое устройство, созданное приложением, совместно используется одним окном фокуса.
  • Окно устройства определяет расположение и размер заднего буфера на экране. Это используется Direct3D, когда содержимое заднего буфера копируется в передний буфер во время представления.
Этот метод не следует запускать во время обработки WM_CREATE. Приложение никогда не должно передавать дескриптор окна в Direct3D при обработке WM_CREATE. Любой вызов для создания, освобождения или сброса устройства должен выполняться в том же потоке, что и процедура окна фокуса.

Обратите внимание, что D3DCREATE_HARDWARE_VERTEXPROCESSING, D3DCREATE_MIXED_VERTEXPROCESSING и D3DCREATE_SOFTWARE_VERTEXPROCESSING являются взаимоисключающими флагами, и при вызове этого метода необходимо указать по крайней мере один из этих флагов обработки вершин.

Задние буферы, созданные как часть устройства, блокируются только в том случае, если D3DPRESENTFLAG_LOCKABLE_BACKBUFFER указан в параметрах презентации. (Буферы с несколькими выборками и поверхности глубины никогда не блокируются.)

Методы Reset, IUnknown и TestCooperativeLevel должны вызываться из того же потока, который использовал этот метод для создания устройства.

D3DFMT_UNKNOWN можно указать для формата обратного буфера оконного режима при вызове CreateDevice, Reset и CreateAdditionalSwapChain. Это означает, что приложению не нужно запрашивать текущий формат рабочего стола перед вызовом CreateDevice для оконного режима. Для полноэкранного режима необходимо указать формат заднего буфера.

При попытке создать устройство в окне 0x0 размера createDevice завершится ошибкой .

Требования

Требование Значение
Целевая платформа Windows
Header d3d9.h (включая D3D9.h)
Библиотека D3D9.lib

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

D3DDEVICE_CREATION_PARAMETERS

Direct3DCreate9

IDirect3D9

Multihead (Direct3D 9)

Сброс