Share via


関数引数 (DirectX HLSL)

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

[InputModifier] Type Name [: Semantic] [InterpolationModifier] [= Initializers]

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

複数の関数引数を指定するときは、コンマ (,) で区切ります。

パラメーター

  • InputModifier
    引数が入力、出力、または両方であることを示す語 (省略可能)。

    説明
    in 入力のみ
    inout 入力および出力
    out 出力のみ
    uniform 入力専用の定数データ

    パラメーターは必ず値で渡されます。in は、パラメーターの値を呼び出し元アプリケーションからコピーして入力してから、この関数を開始する必要があることを示します。out は、パラメーターの直前の値をコピーして出力し、この関数が終了するときに呼び出し元アプリケーションに返す必要があることを示します。inout は in と out の両方を指定する省略形です。

    uniform 値は、定数レジスタから取得します。頂点シェーダーやピクセル シェーダーの各呼び出しでは、uniform 変数について同じ初期値を参照します。グローバル変数は、uniform として宣言されたかのように扱われます。上位レベルでない関数に対しては、uniform は in と同義です。パラメーターの使用目的が指定されなかった場合は、使用目的は in であると想定されます。

  • Type
    引数の型。有効な HLSL ののいずれかを指定できます。

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

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

  • InterpolationModifier
    補間修飾子 (省略可能)。シェーダーはこれに基づいて補間方法を決定できます。関数引数の補間修飾子は、ピクセル シェーダー関数への入力として使用される引数にのみ適用できます。

  • Initializers
    初期化に使用される値 (省略可能)。複数の成分を持つデータ型の初期化には、複数の値を指定する必要があります。

解説 

関数引数は、関数宣言でコンマ区切りの引数リストで指定します。C 関数と同様に、各引数ではパラメーターの名前および型を宣言する必要があります。またオプションとして、HLSL 関数への引数には、セマンティクス、初期値、および補間タイプが指定可能なピクセル シェーダー入力を指定することもできます。

関数引数の Type には、構造体を指定することもできます。そこで、メンバーごとの補間修飾子を指定できます。関数変数にも補間修飾子を指定した場合は、関数変数の修飾子が 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)