函数自变量

函数采用一个或多个输入参数;使用以下语法声明每个参数。

[InputModifier]类型名称 [: 语义] [InterpolationModifier] [= 初始值设定项]

[修饰符]类型名称 [: 语义] [: 内插修饰符] [= 初始值设定项 (s) ]

如果有多个函数参数,则用逗号分隔它们。

参数

说明
InputModifier
将参数标识为输入和/或输出的可选术语。
说明
in 仅输入
inout 输入和输出
out 仅输出
uniform 仅输入常量数据

参数始终按值传递。 中的 指示在函数开始之前,应从调用应用程序复制 参数的值。 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)
{
  ...
}

DirectX HLSL) (函数