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。 请参阅“备注”。

  • 对于全屏模式,指定的窗口必须是顶级窗口。
  • 对于窗口模式 ,仅当pPresentationParameters 的 hDeviceWindow 成员设置为有效的非 NULL 值时,此参数才可为 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**

指向返回的 IDirect3DDevice9 接口的指针的地址,该接口表示创建的设备。

返回值

类型: HRESULT

如果方法成功,则返回值D3D_OK。 如果方法失败,则返回值可以是以下值之一:D3DERR_DEVICELOST、D3DERR_INVALIDCALL、D3DERR_NOTAVAILABLE D3DERR_OUTOFVIDEOMEMORY。

注解

此方法返回一个完全工作的设备接口, (或开窗) 设置为所需的显示模式,并使用相应的后台缓冲区进行分配。 若要开始呈现,应用程序只需创建并设置深度缓冲区 (假设 EnableAutoDepthStencil 在 D3DPRESENT_PARAMETERS) 中为 FALSE

创建 Direct3D 设备时,需要提供两个不同的窗口参数: (hFocusWindow) 的焦点窗口,以及 D3DPRESENT_PARAMETERS) 中的 hDeviceWindow (设备窗口。 每个窗口的用途是:

  • 当应用程序通过 Alt-Tab、鼠标单击或其他一些方法) 从前台模式切换到后台模式 (时,焦点窗口会向 Direct3D 发出警报。 单个焦点窗口由应用程序创建的每个设备共享。
  • 设备窗口确定屏幕上后台缓冲区的位置和大小。 在 演示期间,当后台缓冲区内容复制到前缓冲区时,Direct3D 会使用此功能。
处理WM_CREATE期间不应运行此方法。 应用程序在处理WM_CREATE时绝不应将窗口句柄传递给 Direct3D。 任何创建、释放或重置设备的调用都必须使用与焦点窗口的窗口过程相同的线程来完成。

请注意,D3DCREATE_HARDWARE_VERTEXPROCESSING、D3DCREATE_MIXED_VERTEXPROCESSING和D3DCREATE_SOFTWARE_VERTEXPROCESSING是互斥标志,调用此方法时必须至少指定其中一个顶点处理标志。

仅当在表示参数中指定了D3DPRESENTFLAG_LOCKABLE_BACKBUFFER时,才可锁定作为设备一部分创建的后台缓冲区。 (多重采样的后台缓冲区和深度图面永远不会锁定。)

方法 ResetIUnknownTestCooperativeLevel 必须从使用此方法创建设备的同一线程调用。

在调用 CreateDeviceResetCreateAdditionalSwapChain 时,可以为窗口模式后台缓冲区格式指定D3DFMT_UNKNOWN。 这意味着应用程序在为窗口模式调用 CreateDevice 之前不必查询当前桌面格式。 对于全屏模式,必须指定后台缓冲区格式。

如果尝试在0x0大小的窗口上创建设备, CreateDevice 将失败。

要求

要求
目标平台 Windows
标头 d3d9.h (包括 D3D9.h)
Library D3D9.lib

另请参阅

D3DDEVICE_CREATION_PARAMETERS

Direct3DCreate9

IDirect3D9

多头 (Direct3D 9)

重置