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

请求的图面使用选项。 使用选项是 D3DUSAGED3DUSAGE_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)
将代码从 Direct3D 9 迁移到 Direct3D 10 时,与 CheckDeviceFormat 等效的 Direct3D 10 是 CheckFormatSupport

要求

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

另请参阅

IDirect3D9