函数声明语法
HLSL 函数使用以下语法进行声明。
[StorageClass][clipplanes () ][precise]Return_Value Name ( [ArgumentList] ) [: Semantic] { [StatementBlock] };
参数
-
StorageClass
-
用于重新定义函数声明的修饰符。 inline 是当前唯一的修饰符值。 修饰符值必须是 内联 的,因为它也是默认值。 因此,无论是否指定内联,函数都是内 联的,并且 HLSL 中的所有函数都是内联函数。 内联函数在为每个函数调用编译) 时生成函数体 (的副本。 这样做是为了减少调用函数的开销。
-
剪板
-
剪辑平面的可选列表,最多是 6 个用户指定的剪裁平面。 这是SV_ClipDistance的替代 机制,适用于 9_x及更高 级别的功能级别 。
-
名字
-
唯一标识着色器函数名称的 ASCII 字符串。
-
ArgumentList
-
可选参数列表, 它是传入函数 的参数的逗号分隔列表。
-
语义
-
用于标识返回数据的预期用法的可选字符串, (请参阅 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;
}
相关主题