结构类型

使用以下语法通过 HLSL 声明结构。

结构名称 { [ InterpolationModifier ] Type [ R x C ] MemberName; ... };

参数

名字

唯一标识结构名称的 ASCII 字符串。

[InterpolationModifier]

指定内插类型的可选修饰符。 有关详细信息,请参阅“备注”。

类型 [R x C]

具有可选行的成员类型 (R) x 列 (C) 数组大小。 结构至少包含一个元素;如果它包含多个元素,则这些元素都是同一类型。 行数和列数是介于 1 到 4(含)之间的无符号整数。

MemberName

唯一标识成员名称的 ASCII 字符串。

备注

可以在任何结构成员或像素着色器函数的参数上指定内插修饰符。 如果修饰符同时出现在两处,则 (着色器参数修饰符) 将覆盖结构修饰符 (内修饰符) 。

编译着色器或效果时,着色器编译器根据 HLSL打包规则 打包结构成员。

着色器模型 4 中引入的内插修饰符

用于像素着色器输入的顶点着色器输出将线性内插,以在光栅化期间获取每像素值。 若要设置内插方法,请使用着色器模型 4 或更高版本中支持的任何以下值。 对于不用作像素着色器输入的任何顶点着色器输出,将忽略 修饰符。

内插修饰符 说明
线性 在着色器输入之间内插; 如果 未指定内插修饰符,则 linear 是默认值。
质心 在像素覆盖区域中的某一位置的样本之间内插 (这可能需要从像素中心位置推断) 。 如果像素被部分覆盖,质心采样可能会改进抗锯 (即使像素中心未覆盖) 。 质心修饰 符必须与线性修饰符或 noperspective 修饰符结合使用。
nointerpolation 不要内插 。
noperspective 请勿在内插期间执行透视更正。 noperspective 修饰符可以与 质心修饰符 结合使用。
样品 在着色器模型 4.1 及更高版本中可用 在样本位置(而不是像素中心)内插。 这将导致像素着色器按样本执行,而不是按像素执行。 导致按示例执行的另一种方式是使用语义 SV _ SampleIndex输入,该输入指示当前示例。 只有具有指定示例 (或输入 SV SampleIndex) 的输入在像素中的着色器调用之间有所不同,而未指定修饰符 (的其他输入(例如,如果混合使用不同输入的修饰符) 则仍在像素中心内 _ 插)。 像素着色器调用和深度/模具测试都针对像素中每个覆盖的样本进行。 这有时称为 "超采样"。 相反,在没有采样频率调用(称为多采样)的情况下,无论覆盖多少个样本,像素着色器都会调用一次,而深度/模具测试以采样频率进行。 这两种模式都提供等效的边缘抗锯切。 但是,通过更频繁地调用像素着色器,超采样可提供更好的着色质量。
1. 使用 int/uint 类型时,唯一有效的选项是 **nointerpolation**。

内插修饰符可应用于结构成员或 函数参数,或同时应用于两者。

示例

下面是一些示例结构声明。

struct struct1
{
  int    a;
}

此声明包含一个数组。

struct struct2
{
  int    a;
  float  b;
  int4x4 iMatrix;
}

此声明包括内插修饰符。

struct In
{
  centroid float2 Texcoord;
};

另请参阅

DirectX HLSL (数据类型)