相关文章推荐
谦和的沙滩裤  ·  windows - Powershell ...·  2 年前    · 
狂野的皮蛋  ·  Gitee ...·  2 年前    · 
想出家的葫芦  ·  Python http ...·  2 年前    · 

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

struct Name { [ InterpolationModifier ] Type [ R x C ] MemberName ; ... };

可以在任何结构成员或像素着色器函数的参数上指定内插修饰符。 如果修饰符同时出现在这两个位置,则外部修饰符 (像素着色器参数修饰符) (结构修饰符) 推翻内部修饰符。

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

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

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

内插修饰符 sample 在着色器模型 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)