IDirect3D9::CheckDeviceType 方法 (d3d9helper.h)
验证硬件加速设备类型是否可以在此适配器上使用。
语法
HRESULT CheckDeviceType(
UINT iAdapter,
[in] D3DDEVTYPE DevType,
D3DFORMAT DisplayFormat,
[in] D3DFORMAT BackBufferFormat,
[in] BOOL bWindowed
);
参数
iAdapter
类型: UINT
表示要枚举的显示适配器的序号。 D3DADAPTER_DEFAULT始终是主要显示适配器。 当此值等于或超过系统中显示适配器的数量时,此方法返回D3DERR_INVALIDCALL。
[in] DevType
类型: D3DDEVTYPE
D3DDEVTYPE枚举类型的成员,指示要检查的设备类型。
DisplayFormat
类型: D3DFORMAT
D3DFORMAT枚举类型的成员,指示要检查其设备类型的适配器显示模式的格式。 例如,某些设备仅在每像素 16 位模式下运行。
[in] BackBufferFormat
类型: D3DFORMAT
后台缓冲区格式。 有关格式的详细信息,请参阅 D3DFORMAT。 此值必须是呈现器目标格式之一。 可以使用 GetAdapterDisplayMode 获取当前格式。
对于窗口化应用程序,如果硬件支持颜色转换,则后台缓冲区格式不需要匹配显示模式格式。 可能的后台缓冲区格式集受到约束,但运行时将允许向任何桌面格式呈现任何有效的后台缓冲区格式。 设备在桌面中可操作还有其他要求,因为设备通常不以每像素 8 位模式运行。
全屏应用程序无法执行颜色转换。
窗口模式允许D3DFMT_UNKNOWN。
[in] bWindowed
类型: BOOL
指示设备类型将在全屏模式还是窗口模式下使用的值。 如果设置为 TRUE,则对窗口化应用程序执行查询;否则,此值应设置为 FALSE。
返回值
类型: HRESULT
如果设备可以在此适配器上使用,则返回D3D_OK。
如果适配器等于或超过系统中显示适配器的数量,则返回D3DERR_INVALIDCALL。 如果 CheckDeviceType 指定的设备不存在,则也会返回D3DERR_INVALIDCALL。
如果不支持请求的后台缓冲区格式,或者硬件加速不适用于指定格式,则返回D3DERR_NOTAVAILABLE。
注解
hal 设备类型需要硬件加速。 应用程序可以使用 CheckDeviceType 来确定是否存在支持 hal 设备所需的硬件和驱动程序。
全屏应用程序不应指定包含 alpha 通道的 DisplayFormat。 这将导致调用失败。 请注意,alpha 通道可以存在于后台缓冲区中,但这两种显示格式在所有其他方面必须相同。 例如,如果 DisplayFormat = D3DFMT_X1R5G5B5,则 BackBufferFormat 的有效值包括D3DFMT_X1R5G5B5和D3DFMT_A1R5G5B5但不包括D3DFMT_R5G6B5。
以下代码片段演示如何使用 CheckDeviceType 来测试某个设备类型是否可以在此适配器上使用。
if(SUCCEEDED(pD3Device->CheckDeviceType(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
DisplayFormat,
BackBufferFormat,
bIsWindowed)))
return S_OK;
// There is no HAL on this adapter using this render-target format.
// Try again, using another format.
如果设备可以在具有指定图面格式的默认适配器上使用,则此代码将返回S_OK。
使用 CheckDeviceType 测试与显示格式不同的后台缓冲区之间的兼容性将返回适当的值。 这意味着调用将反映设备功能。 如果设备无法呈现为请求的后台缓冲区格式,调用仍将返回D3DERR_NOTAVAILABLE。 如果设备可以呈现为格式,但无法执行颜色转换演示文稿,则返回值也将D3DERR_NOTAVAILABLE。 应用程序可以通过调用 CheckDeviceFormatConversion 来发现演示文稿本身的硬件支持。 不会为颜色转换演示文稿本身提供软件仿真。
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | d3d9helper.h (包括 D3D9.h) |
Library | D3D9.lib |