IDirect3D9::CheckDeviceFormat
サーフェスのフォーマットが、指定したリソース タイプとして利用できるかどうか、およびこのアダプターを使用するデバイスでテクスチャー、深度ステンシル バッファー、レンダー ターゲットのいずれか、またはこれら 3 つを組み合わせて使用できるかどうかを調べます。
HRESULT
CheckDeviceFormat(
UINT Adapter,
D3DDEVTYPE DeviceType,
D3DFORMAT AdapterFormat,
DWORD Usage,
D3DRESOURCETYPE RType,
D3DFORMAT CheckFormat
);
パラメータ
- Adapter
クエリするディスプレイ アダプターを示す序数。D3DADAPTER_DEFAULT は常にプライマリ ディスプレイ アダプターです。システムのディスプレイ アダプターの数以上の値が指定された場合、このメソッドは D3DERR_INVALIDCALL を返します。 - DeviceType
D3DDEVTYPE 列挙型のメンバー。デバイス タイプを指定します。 - AdapterFormat
D3DFORMAT 列挙型のメンバー。アダプターに適用される表示モードの形式を指定します。 - Usage
サーフェスに対して要求された使用法オプション。使用法オプションは、D3DUSAGE 定数と D3DUSAGE_QUERY 定数の任意の組み合わせです (IDirect3D9::CheckDeviceFormat に対しては D3DUSAGE 定数のサブセットのみが有効です。D3DUSAGE ページの表を参照してください)。 - RType
クエリするフォーマットで使用するために要求されたリソース タイプ。D3DRESOURCETYPE のメンバーです。 - CheckFormat
Usage で指定した方法で使用するサーフェスのフォーマット。D3DFORMAT のメンバーです。
戻り値
要求された使用法に関して、フォーマットと指定されたデバイスとの間に互換性がある場合、このメソッドは D3D_OK を返します。
Adapter にシステムのディスプレイ アダプターの数以上の値が指定された場合、または DeviceType がサポートされていない場合は、D3DERR_INVALIDCALL が返されます。
この使用法に関して、デバイスがフォーマットを使用できない場合は、D3DERR_NOTAVAILABLE が返されます。
解説
IDirect3D9::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 ); }
ピクセル シェーダーのアルファ ブレンディング - Usage を D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING に設定します。すべての浮動小数点レンダー ターゲットでこれは失敗すると想定されます。
ミップマップの自動生成 - Usage を D3DUSAGE_AUTOGENMIPMAP に設定します。ミップマップの自動生成が失敗した場合、ミップマップ以外のテクスチャーが得られます。このメソッドの呼び出しはヒントと考えられます。このため、唯一の失敗がミップマップ生成である場合、このメソッドは D3DOK_NOAUTOGEN (有効なサクセス コード) を返すことができます。ミップマップ生成の詳細については、「ミップマップの自動生成 (Direct3D 9)」を参照してください。
Direct3D 9 から Direct3D 10 にコードを移行する場合、Direct3D 10 で CheckDeviceFormat と同等の機能を持つものは CheckFormatSupport です。
要件
ヘッダー: D3D9.h 宣言
ライブラリ: D3D9.lib 内容