関数の引数

関数は 1 つ以上の入力引数を受け取ります。各引数を宣言するには、次の構文を使用します。

[InputModifier]型名 [: Semantic] [InterpolationModifier] [= Initializers]

[修飾子]型名 [: セマンティック] [: 補間修飾子] [= 初期化子]

複数の関数引数がある場合は、コンマで区切られます。

パラメーター

Item 説明
InputModifier
引数を入力、出力、またはその両方として識別する省略可能な用語。
説明
in 入力のみ
Inout 入力と出力
out 出力のみ
uniform 定数データのみを入力する

パラメーターは常に値渡しされます。 in は、関数が開始される前に、呼び出し元のアプリケーションから パラメーターの値を コピーする必要があることを示します。 out は、パラメーターの最後の値をコピーアウトし、関数が戻るときに呼び出し元のアプリケーションに返されることを示します。 inout は、両方を指定するための短縮形です。

一様な値は定数レジスタから取得されます。各頂点シェーダーまたはピクセル シェーダー呼び出しでは、均一変数に対して同じ初期値が表示されます。 グローバル変数は、均一として宣言されているかのように扱われます。 最上位以外の関数の場合、uniform は in と同義です。 パラメーターの使用法が指定されていない場合、パラメーターの使用法は であると見なされます。

引数の型。には、任意の有効な HLSL を指定できます。

名前

シェーダー関数の名前を一意に識別する ASCII 文字列。

セマンティック

データの使用目的を識別する省略可能な文字列 ( 「セマンティクス (DirectX HLSL)」を参照)。

InterpolationModifier

シェーダー が補間 の方法を決定できるようにするオプションの補間修飾子。 関数引数の補間修飾子は、ピクセル シェーダー関数への入力として使用される引数にのみ適用されます。

初期化 子

初期化の省略可能な値。マルチコンポーネント データ型を初期化するには、複数の値が必要です。

注釈

関数の引数は、関数宣言のコンマ区切りの引数リストに一覧表示されます。 C 関数と同様に、各引数にはパラメーター名と型が宣言されている必要があります。HLSL 関数の引数には、必要に応じてセマンティック、初期値、ピクセル シェーダー入力に補間型を含めることができます。

関数引数の は、メンバーごとの補間修飾子を含む構造体である可能性があります。 関数引数にも補間修飾子がある場合、関数引数修飾子は Type 内で宣言された補間修飾子をオーバーライドします。

この例 ( BasicHLSL10 サンプル) は、頂点シェーダー関数への均一な入力と非均一な入力を示しています。

VS_OUTPUT RenderSceneVS( 
  float4 vPos : POSITION,
  float3 vNormal : NORMAL,
  float2 vTexCoord0 : TEXCOORD,
  uniform int nNumLights,
  uniform bool bTexture,
  uniform bool bAnimate )
{
  ...
}

この例 ( ContentStreaming サンプル) では、入力構造体を使用してピクセル シェーダー関数に引数を渡します。

VSBasicIn input
struct VSBasicIn
{
  float4 Pos    : POSITION;
  float3 Norm   : NORMAL;
  float2 Tex    : TEXCOORD0;
};

PSBasicIn VSBasic(VSBasicIn input)
{
  ...
}

関数 (DirectX HLSL)