函数声明语法

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;
}

函数 (DirectX HLSL)