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::CheckDeviceFormat に D3DUSAGE_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 を返す。