函式宣告語法
HLSL 函式會以下列語法宣告。
[StorageClass][clipplanes () ][precise]Return_Value Name ( [ArgumentList] ) [: Semantic] { [StatementBlock] };
參數
-
StorageClass
-
重新定義函式宣告的修飾詞。 內嵌 目前是唯一的修飾詞值。 修飾詞值必須 內嵌 ,因為它也是預設值。 因此,不論您是否指定 內嵌,HLSL 中的所有函式都會內嵌。 內嵌函式會在編譯每個函式呼叫的) 時,產生函式主體 (的複本。 這是為了減少呼叫函式的額外負荷。
-
Clipplanes
-
裁剪平面的選擇性清單,最多 6 個使用者指定的裁剪平面。 這是適用于功能層級9_x和更新版本的SV_ClipDistance替代機制。
-
名字
-
可唯一識別著色器函式名稱的 ASCII 字串。
-
ArgumentList
-
選擇性引數清單,這是傳遞至函式的自 變數 逗號分隔清單。
-
語義
-
選擇性字串,可識別傳回資料的用途 ( (請參閱 DirectX HLSL) ) 語意。
-
StatementBlock
-
組成函式主體的選擇性 語句 。 未定義主體的函式稱為函式原型;在呼叫函式之前,必須先在其他地方定義原型函式的主體。
傳回值
傳回型別可以是下列其中一個 HLSL 類型。
備註
此頁面的語法描述幾乎所有類型的 HLSL 函式,這包括頂點著色器、圖元著色器和協助程式函式。 雖然幾何著色器也會使用函式實作,但其語法稍微複雜一點,因此有一個定義幾何著色器函式宣告的個別頁面, (請參閱 Geometry-Shader 物件 (DirectX HLSL) ) 。
只要函式提供參數類型和/或參數順序的唯一組合,就可以多載函式。 HLSL 也會實作許多內建函 式或內建函式。
您可以使用剪輯平面屬性來指定使用者特定的 裁剪平面 。 Windows 會將這些裁剪平面套用至繪製的所有基本類型。 剪輯平面屬性的運作方式類似SV_ClipDistance,但適用于所有硬體功能層級9_x和更新版本。 如需詳細資訊,請參閱 功能層級 9 硬體上的使用者裁剪平面。
範例
此範例來自 BasicHLSL10.fx 的 BasicHLSL10 範例。
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.fx 的範例來自 AdvancedParticles 範例,說明使用傳回類型的語意。
//
// PS for particles
//
float4 PSPointSprite(PSSceneIn input) : SV_Target
{
return g_txDiffuse.Sample( g_samLinear, input.tex ) * input.color;
}
相關主題