構造体型 (DirectX HLSL)

HLSL で構造体を宣言するには、次の構文を使用します。

struct Name

{

    [InterpolationModifier] Type[RxC] MemberName;

    ...

};

パラメーター

  • Name
    構造体名を一意に識別する ASCII 文字列。
  • [InterpolationModifier]
    補間タイプを指定するオプションの修飾子です。詳細については、「解説」を参照してください。
  • Type[RxC]
    行 (R) x 列 (C) 配列サイズ (省略可能) を持つメンバー タイプ。少なくとも 1 つの要素を含む構造体です。複数の要素を含む場合は、それらの要素はすべて同じタイプとなります。行数と列数には、1 ~ 4 の範囲の符号なし整数を指定します。
  • MemberName
    メンバー名を一意に識別する ASCII 文字列。

解説 

補間修飾子は、あらゆる構造体メンバーや、ピクセル シェーダー関数の引数に対して指定できます。両方に同じ修飾子が指定された場合は、外側の修飾子 (ピクセル シェーダー引数の修飾子) が内側の修飾子 (構造体の修飾子) を無効にします。

シェーダーまたはエフェクトのコンパイル時、シェーダー コンパイラは HLSL のパッキング規則 に従って構造体メンバーをパックします。

シェーダー モデル 4 で導入された補間修飾子

ピクセル シェーダー入力で使用される頂点シェーダー出力は、ラスター化時にピクセルごとの値を取得するために線形補間されます。補間方法を設定するには、シェーダー モデル 4 以降でサポートされている次のいずれかの値を使用します。修飾子は、ピクセル シェーダー入力として使用されない頂点シェーダー出力では無視されます。

補間修飾子 説明
linear シェーダー入力間で補間します。linear は、補間修飾子が指定されていない場合の既定値です。
centroid ピクセルのカバーされている領域内にあるサンプル間を補間します (ピクセルの中心からの補間終了位置が必要になる場合があります)。ピクセルが部分的にカバーされている場合は (ピクセルの中心がカバーされていなくても)、重心サンプリングによってアンチエイリアシングが改善される可能性があります。centroid 修飾子は、linear 修飾子または noperspective 修飾子と組み合わせて使用する必要があります。
nointerpolation 補間しません1。
noperspective 補間時にパースペクティブ補正を実行しません。この補間修飾子を他の補間修飾子と一緒に使用することはできません。
sample 補間時にパースペクティブ補正を実行しません。この補間修飾子を他の補間修飾子と一緒に使用することはできません。
  1. int/uint 型を使用する場合、有効なオプションは nointerpolation のみです。

補間修飾子は、構造体メンバーと関数の引数の一方または両方に適用できます。

構造体の宣言の例を次に示します。

 struct struct1 {   int    a; }

この宣言には配列が含まれています。

 struct struct2 {   int    a;   float  b;   int4x4 iMatrix; }

この宣言には補間修飾子が含まれています。

 struct In {   centroid float2 Texcoord; };

関連項目

データ型 (DirectX HLSL)