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 结构的指针,描述要创建的设备的演示参数。 如果 BehaviorFlags 指定 D3DCREATE_ADAPTERGROUP_DEVICE,则 pPresentationParameters 是一个数组。 无论存在的头部数量如何,系统只会自动创建一个深度/模具图面。
对于 Windows 2000 和 Windows XP,全屏设备显示刷新率按以下顺序设置:
- 用户指定的非零 ForcedRefreshRate 注册表项(如果受设备支持)。
- 演示文稿参数中应用程序指定的非零刷新率值。
- 最新桌面的刷新率(如果设备支持)。
- 如果设备支持,则为 75 赫。
- 如果设备支持,则为 60 赫。
- 设备默认值。
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 会使用此功能。
请注意,D3DCREATE_HARDWARE_VERTEXPROCESSING、D3DCREATE_MIXED_VERTEXPROCESSING和D3DCREATE_SOFTWARE_VERTEXPROCESSING是互斥标志,调用此方法时必须至少指定其中一个顶点处理标志。
仅当在表示参数中指定了D3DPRESENTFLAG_LOCKABLE_BACKBUFFER时,才可锁定作为设备一部分创建的后台缓冲区。 (多重采样的后台缓冲区和深度图面永远不会锁定。)
方法 Reset、 IUnknown 和 TestCooperativeLevel 必须从使用此方法创建设备的同一线程调用。
在调用 CreateDevice、 Reset 和 CreateAdditionalSwapChain 时,可以为窗口模式后台缓冲区格式指定D3DFMT_UNKNOWN。 这意味着应用程序在为窗口模式调用 CreateDevice 之前不必查询当前桌面格式。 对于全屏模式,必须指定后台缓冲区格式。
如果尝试在0x0大小的窗口上创建设备, CreateDevice 将失败。
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | d3d9.h (包括 D3D9.h) |
Library | D3D9.lib |