函数声明语法

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

(DirectX HLSL) 函数