函数声明语法
HLSL 函数使用以下语法声明。
[StorageClass][clipplanes()][precise]Return_Value 名称 ([ArgumentList] ) [: Semantic] { [StatementBlock] };
参数
-
StorageClass
-
重新定义函数声明的修饰符。 内联 当前是唯一的修饰符值。 修饰符值必须 内联,因为它也是默认值。 因此,无论是否指定 内联,HLSL 中的所有函数都是内联函数,都是内联函数。 内联函数为每个函数调用生成函数主体的副本(编译时)。 这样做是为了减少调用函数的开销。
-
剪辑平面
-
剪辑平面的可选列表,最多包含 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;
}
相关主题