ID3D10Device::CreateInputLayout

入力アセンブラー ステージで使用される入力バッファー データを記述するための入力レイアウト オブジェクトを作成します。

HRESULT 
CreateInputLayout(
  const D3D10_INPUT_ELEMENT_DESC *pInputElementDescs,
  UINT NumElements,
  const void *pShaderBytecodeWithInputSignature,
  SIZE_T BytecodeLength,
  ID3D10InputLayout **ppInputLayout
);

パラメータ

  • pInputElementDescs
    入力アセンブラー ステージの入力データ型の配列です。各データ型は要素の記述によって示されます (「D3D10_INPUT_ELEMENT_DESC」を参照してください)。
  • NumElements
    入力要素の配列内の入力データ型の数です。
  • pShaderBytecodeWithInputSignature
    コンパイル済みシェーダーへのポインターです。このポインターを取得するには、「コンパイル済みシェーダーへのポインターの取得」を参照してください。コンパイル済みシェーダー コードには入力シグネチャが格納され、これらは要素の配列に対して検証されます。「解説」を参照してください。
  • BytecodeLength
    コンパイル済みシェーダーのサイズです。
  • ppInputLayout
    作成される入力レイアウト オブジェクトへのポインターです (「ID3D10InputLayout インターフェイス」を参照してください)。他の入力パラメーターを検証するには、このポインターを NULL に設定して、メソッドから S_FALSE が返されることを確認します。

戻り値

メソッドが正常終了した場合、リターン コードは S_OK です。失敗した場合のエラー コードについては、「Direct3D 10 のリターン コード」を参照してください。

解説 

作成した入力レイアウト オブジェクトは、描画 API を呼び出す前に入力アセンブラー ステージにバインドする必要があります。コード例については、「入力アセンブラー ステージの基礎知識 (Direct3D 10)」を参照してください。

シェーダー シグネチャから入力レイアウト オブジェクトが作成されると、同じ入力シグネチャ (セマンティクスを含む) を持つ他のシェーダーでこの入力レイアウト オブジェクトを再使用できます。これによって、同じ入力を持つ多数のシェーダーを使用する場合に、入力レイアウト オブジェクトの作成が簡素化されます。

入力レイアウト宣言のデータ型がシェーダー入力シグネチャのデータ型と一致しない場合、コンパイル時に CreateInputLayout に関する警告が生成されます。この警告は、単にレジスタからの読み込み時にデータが再解釈される可能性があることに注意を向けるためのものです。再解釈が意図的な場合、この警告は無視することができます。また、両方の宣言でデータ型を一致させて警告を解消することもできます。

Direct3D 9 と Direct3D 10 の違い

入力レイアウトを使用して頂点データをシェーダー入力にマッピングする方法は、パフォーマンス向上を目的として Direct3D 10 で新たに導入されたものです。

Direct3D 10 では、入力レイアウト オブジェクトが作成されたときに頂点データがシェーダー入力にマッピングされます。一方 Direct3D 9 では、現在バインドされている頂点の宣言、頂点バッファー、頂点シェーダーに基づいて、描画時にマッピングが行われます。入力レイアウト オブジェクトの作成時にマッピングを実行することによって、再マッピングが不要になるため、描画時のドライバーに対する追加リンクが減少するか、または不要になります。

要件

ヘッダー: D3D10.h 宣言

関連項目

ID3D10Device インターフェイス