IDirect3D9::CheckDeviceFormat 方法 (d3d9helper.h)
确定表面格式是否可用作指定资源类型,并且是否可以在表示此适配器的设备上用作纹理、深度模具缓冲区、呈现目标或三者的任何组合。
语法
HRESULT CheckDeviceFormat(
[in] UINT Adapter,
[in] D3DDEVTYPE DeviceType,
[in] D3DFORMAT AdapterFormat,
[in] DWORD Usage,
[in] D3DRESOURCETYPE RType,
[in] D3DFORMAT CheckFormat
);
参数
[in] Adapter
类型: UINT
表示要查询的显示适配器的序号。 D3DADAPTER_DEFAULT 始终是主要显示适配器。 当此值等于或超过系统中的显示适配器数时,此方法返回D3DERR_INVALIDCALL。
[in] DeviceType
类型: D3DDEVTYPE
D3DDEVTYPE枚举类型的成员,标识设备类型。
[in] AdapterFormat
类型: D3DFORMAT
D3DFORMAT枚举类型的成员,标识将放置适配器的显示模式的格式。
[in] Usage
类型: DWORD
请求的图面使用选项。 使用选项是 D3DUSAGE 和 D3DUSAGE_QUERY 常量 (只有一部分D3DUSAGE常量对 CheckDeviceFormat 有效;请参阅D3DUSAGE页上的表) 。
[in] RType
类型: D3DRESOURCETYPE
请求用于查询格式的资源类型。 D3DRESOURCETYPE 的成员。
[in] CheckFormat
类型: D3DFORMAT
可以使用的图面的格式,如 Usage 所定义。 D3DFORMAT 的成员。
返回值
类型: HRESULT
如果格式与所请求用法的指定设备兼容,则此方法返回D3D_OK。
如果适配器等于或超过系统中的显示适配器数,或者 DeviceType 不受支持,则返回D3DERR_INVALIDCALL。
如果设备无法接受此格式,则返回D3DERR_NOTAVAILABLE。
注解
下面是使用 CheckDeviceFormat 检查硬件支持的一些示例:
- 屏幕外普通表面格式 - 指定 Usage = 0 且 RType = D3DRTYPE_SURFACE。
- 深度模具格式 - 以下代码片段测试传递的深度模具格式:
BOOL IsDepthFormatExisting( D3DFORMAT DepthFormat, D3DFORMAT AdapterFormat ) { HRESULT hr = pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, AdapterFormat, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, DepthFormat); return SUCCEEDED( hr ); }
有关枚举过程的更多详细信息,请参阅 选择设备 (Direct3D 9) 。
- 是否可以以特定格式呈现此纹理 - 给定当前显示模式,此示例演示如何验证纹理格式是否与特定的后台缓冲区格式兼容:
BOOL IsTextureFormatOk( D3DFORMAT TextureFormat, D3DFORMAT AdapterFormat ) { HRESULT hr = pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, AdapterFormat, 0, D3DRTYPE_TEXTURE, TextureFormat); return SUCCEEDED( hr ); }
- 像素着色器中的 Alpha 混合 - 将“使用情况”设置为 “D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING”。 对于所有浮点呈现目标,这预计会失败。
- mipmap 的自动生成 - 将“使用情况”设置为 “D3DUSAGE_AUTOGENMIPMAP”。 如果 mipmap 自动生成失败,则应用程序将得到非误贴纹理。 调用此方法被视为提示,因此,如果唯一失败的是 mipmap 生成,则此方法可以返回D3DOK_NOAUTOGEN (有效的成功代码) 。 有关 mipmap 生成的详细信息,请参阅自动生成 Mipmaps (Direct3D 9) 。
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | d3d9helper.h (包括 D3D9.h) |
Library | D3D9.lib |