函数参数
函数采用一个或多个输入参数;使用以下语法声明每个参数。
[InputModifier] 类型名称 [: Semantic] [InterpolationModifier] [= Initializers] |
[修饰符]类型名称 [: 语义] [: 内插修饰符] [= Initializer(s)]
如果有多个函数参数,则用逗号分隔它们。
参数
项目 | 描述 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
InputModifier |
可选术语,用于将参数标识为输入、输出或两者。
参数始终按值传递。 in 指示在函数开始之前,应从调用应用程序复制参数的值。 out 指示参数的最后一个值应复制出来,并在函数返回时返回到调用应用程序。 inout 是用于指定这两者的简写。 统一值来自常量寄存器;每个顶点着色器或像素着色器调用都会看到一个统一变量的相同初始值。 全局变量被视为统一声明的变量。 对于非顶级函数,统一与 中的同义。 如果未指定参数用法,则假定参数用法在 。 |
||||||||||
类型 |
参数类型;可以是任何有效的 HLSL 类型。 |
||||||||||
名称 |
唯一标识着色器函数名称的 ASCII 字符串。 |
||||||||||
语义 |
用于标识数据预期用途的可选字符串(请参阅 语义(DirectX HLSL))。 |
||||||||||
InterpolationModifier |
可选 内插修饰符,该修饰符允许着色器确定内插方法。 函数参数上的内插修饰符仅适用于用作像素着色器函数输入的参数。 |
||||||||||
初始值设定项 |
初始化的可选值;初始化多组件数据类型需要多个值。 |
言论
函数参数在函数声明中的逗号分隔参数列表中列出。 与 C 函数一样,每个参数都必须声明参数名称和类型;HLSL 函数的参数(可选)可以包含语义、初始值和像素着色器输入可以包括内插类型。
函数参数的 类型 可以是一个结构,可以包含每个成员的内插修饰符。 如果函数参数还具有内插修饰符,则函数参数修饰符将替代在 Type 中声明的内插修饰符。
例子
此示例(从 BasicHLSL10 示例)演示顶点着色器函数的统一和非统一输入。
VS_OUTPUT RenderSceneVS(
float4 vPos : POSITION,
float3 vNormal : NORMAL,
float2 vTexCoord0 : TEXCOORD,
uniform int nNumLights,
uniform bool bTexture,
uniform bool bAnimate )
{
...
}
此示例(来自 ContentStreaming 示例)使用输入结构将参数传递给像素着色器函数。
VSBasicIn input
struct VSBasicIn
{
float4 Pos : POSITION;
float3 Norm : NORMAL;
float2 Tex : TEXCOORD0;
};
PSBasicIn VSBasic(VSBasicIn input)
{
...
}