函式引數
函式接受一或多個輸入引數;使用下列語法來宣告每個引數。
[InputModifier]類型名稱 [: Semantic] [InterpolationModifier] [= Initializers] |
[修飾詞]類型名稱 [: Semantic] [: 插補修飾詞] [= 初始化運算式 (s) ]
如果有多個函式引數,則會以逗號分隔。
參數
項目 | 描述 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
InputModifier |
選擇性詞彙,將引數識別為輸入、輸出或兩者。
參數一律會以傳值方式傳遞。 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)
{
...
}