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 内容