HLSL 函式會以下列語法宣告。
[StorageClass][clipplanes()][precise]Return_Value Name ([ArgumentList] ) [: Semantic] { [StatementBlock] };
參數
-
StorageClass
-
重新定義函式宣告的修飾詞。 內嵌 目前是唯一的修飾詞值。 修飾詞值必須 內嵌,因為它也是預設值。 因此,不論您是否指定內嵌 內嵌,HLSL 中的所有函式都是內嵌的。 內嵌函式會為每個函數調用產生函式主體的複本(編譯時)。 這樣做是為了降低呼叫 函式的額外負荷。
-
Clipplanes
-
選擇性的剪輯平面清單,最多6個使用者指定的剪輯平面。 這是 SV_ClipDistance 的替代機制,適用於 功能層級 9_x 和更新版本。
-
名稱
-
可唯一識別著色器函式名稱的 ASCII 字串。
-
ArgumentList
-
語意
-
選擇性字串,可識別傳回數據的預期用法(請參閱 Semantics (DirectX HLSL))。
-
StatementBlock
-
組成函式主體的選擇性 語句。 未定義主體的函式稱為函式原型;必須先在其他地方定義原型函式的主體,才能呼叫函式。
傳回值
傳回型別可以是下列任一 HLSL 類型。
言論
此頁面上的語法幾乎描述幾乎所有類型的 HLSL 函式,其中包括頂點著色器、圖元著色器和協助程式函式。 雖然幾何著色器也會使用函式來實作,但其語法稍微複雜一點,因此有一個定義幾何著色器函式宣告的個別頁面(請參閱 Geometry-Shader 物件 (DirectX HLSL))。
只要函式具有參數類型和/或參數順序的唯一組合,就可以多載函式。 HLSL 也會實作數個內建函數,或 內部函數。
您可以使用 剪輯平面 屬性來指定使用者特定的剪輯平面。 Windows 會將這些裁剪平面套用至所有繪製的基本類型。 剪輯平面 屬性的運作方式類似 SV_ClipDistance,但適用於所有硬體 功能層級 9_x 和更高層級。 如需詳細資訊,請參閱功能層級 9 硬體上的 使用者剪輯平面。
例子
此範例來自 BasicHLSL10 範例中的 BasicHLSL10.fx。
struct VS_OUTPUT
{
float4 Position : SV_POSITION;
float4 Diffuse : COLOR0;
float2 TextureUV : TEXCOORD0;
};
VS_OUTPUT RenderSceneVS( float4 vPos : POSITION,
float3 vNormal : NORMAL,
float2 vTexCoord0 : TEXCOORD,
uniform int nNumLights,
uniform bool bTexture,
uniform bool bAnimate )
{
VS_OUTPUT Output;
...
return Output;
}
來自 AdvancedParticles 範例的 AdvancedParticles.fx 範例的這個範例說明如何使用傳回型別的語意。
//
// PS for particles
//
float4 PSPointSprite(PSSceneIn input) : SV_Target
{
return g_txDiffuse.Sample( g_samLinear, input.tex ) * input.color;
}
相關主題