Share via


IDirect3D9::CheckDeviceFormat メソッド

IDirect3D9::CheckDeviceFormat メソッド

サーフェイスのフォーマットが、指定したリソース タイプとして利用できるかどうか、およびこのアダプタを使うデバイスでテクスチャ、深度ステンシル バッファ、レンダリング ターゲットのいずれか、またはこれら 3 つの組み合わせとして使えるかどうかを調べる。

構文

HRESULT CheckDeviceFormat(      
    UINT Adapter,
    D3DDEVTYPE DeviceType,
    D3DFORMAT AdapterFormat,
    DWORD Usage,
    D3DRESOURCETYPE RType,
    D3DFORMAT CheckFormat
);

パラメータ

  • Adapter
    [in] 問い合わせ対象のディスプレイ アダプタを示す序数。D3DADAPTER_DEFAULT は常にプライマリ ディスプレイ アダプタである。この値がシステムのディスプレイ アダプタの数以上の場合、このメソッドは D3DERR_INVALIDCALL を返す。
  • DeviceType
    [in] D3DDEVTYPE 列挙型のメンバ。デバイス タイプを識別する。
  • AdapterFormat
    [in] D3DFORMAT 列挙型のメンバ。アダプタで使われるディスプレイ モードのフォーマットを識別する。
  • Usage
    [in] サーフェイスに対して要求する使用方法オプション。使用方法オプションは、D3DUSAGE および D3DUSAGE_QUERY 定数の任意の組み合わせである (CheckDeviceFormat に対しては D3DUSAGE 定数のサブセットのみが有効。「D3DUSAGE」にある表を参照すること)。
  • RType
    [in] 問い合わせ対象のフォーマットで使うことを要求するリソース タイプ。D3DRESOURCETYPE のメンバ。
  • CheckFormat
    [in] Usage で指定した方法で使うサーフェイスのフォーマットを示す。D3DFORMAT のメンバ。

戻り値

フォーマットが、要求された使用方法について、指定されたデバイスと互換性がある場合、このメソッドは D3D_OK を返す。

Adapter がシステムのディスプレイ アダプタの数以上の場合、または DeviceType がサポートされていない場合、このメソッドは D3DERR_INVALIDCALL を返す。フォーマットがこの使用方法ではデバイスで受け入れられない場合、このメソッドは D3DERR_NOTAVAILABLE を返す。

注意

アプリケーションは、IDirect3D9::CheckDeviceFormatD3DUSAGE_AUTOGENMIPMAP を指定して呼び出して、特定のフォーマットに対する自動生成のサポートを検出できる。ミップマップ自動生成の要求は、ヒントと見なされる。したがって、このメソッドは DDOK_NOAUTOGEN を返すことができる。ミップマップの生成のみに失敗した場合、この値は有効な成功コードである。ミップマップの自動生成が失敗した場合、アプリケーションはミップマップ化されていないテクスチャを受け取る。詳細については、「ミップマップの自動生成」を参照すること。

オフスクリーンの単純なプレーン サーフェイス フォーマットについて調べるには、Usage = 0 および RType = RTYPE_SURFACE を指定する。

IDirect3D9::CheckDeviceFormat の一般的な用途は、特定の深度ステンシル サーフェイス フォーマットが存在するかどうかを確認することである。列挙処理の詳細については、「デバイスの選択」を参照すること。次のサンプル コードは、IDirect3D9::CheckDeviceFormat を使って深度ステンシル フォーマットの有無を確認する方法を示している。

BOOL IsDepthFormatExisting( D3DFORMAT DepthFormat, D3DFORMAT AdapterFormat ) 
{
    HRESULT hr = pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT,
                                          D3DDEVTYPE_HAL,
                                          AdapterFormat,
                                          D3DUSAGE_DEPTHSTENCIL,
                                          D3DRTYPE_SURFACE,
                                          CheckFormat);

    return SUCCEEDED( hr );
}

上の呼び出しは、システムに CheckFormat が存在しない場合は FALSE を返す。

IDirect3D9::CheckDeviceFormat のもう 1 つの一般的な用途は、特定のサーフェイス フォーマットに存在するテクスチャを、現在のディスプレイ モードでレンダリングできるかどうかを確認することである。次のサンプル コードは、IDirect3D9::CheckDeviceFormat を使って、テクスチャ フォーマットが特定のバック バッファ フォーマットと互換性があるかどうかを確認する方法を示している。

BOOL IsTextureFormatOk( D3DFORMAT TextureFormat, D3DFORMAT AdapterFormat ) 
{
    HRESULT hr = pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT,
                                          D3DDEVTYPE_HAL,
                                          AdapterFormat,
                                          0,
                                          D3DRTYPE_TEXTURE,
                                          CheckFormat);

    return SUCCEEDED( hr );
}

上の呼び出しは、アダプタ サーフェイス フォーマットが AdapterFormat であるときに、CheckFormat を使ってテクスチャをレンダリングできない場合、FALSE を返す。