函数自变量
函数采用一个或多个输入参数;使用以下语法声明每个参数。
[InputModifier]类型名称 [: 语义] [InterpolationModifier] [= 初始值设定项] |
[修饰符]类型名称 [: 语义] [: 内插修饰符] [= 初始值设定项 (s) ]
如果有多个函数参数,则用逗号分隔它们。
参数
项 | 说明 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
InputModifier |
将参数标识为输入和/或输出的可选术语。
参数始终按值传递。 中的 指示在函数开始之前,应从调用应用程序复制 参数的值。 out 指示参数的最后一个值应复制出来,并在函数返回时返回到调用应用程序。 inout 是用于指定两者的速记。 统一值来自常量寄存器;每个顶点着色器或像素着色器调用都会看到统一变量的相同初始值。 全局变量被视为声明为统一变量。 对于非顶级函数,统一与 in 同义。 如果未指定参数用法,则假定参数用法 位于 中。 |
||||||||||
类型 |
参数类型;可以是任何有效的 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 )
{
...
}
此示例 (内容 流式处理示例) 使用输入结构将参数传递给像素着色器函数。
VSBasicIn input
struct VSBasicIn
{
float4 Pos : POSITION;
float3 Norm : NORMAL;
float2 Tex : TEXCOORD0;
};
PSBasicIn VSBasic(VSBasicIn input)
{
...
}