将数组从HLSL顶点着色器传递到像素着色器

时间:2012-07-07 19:40:18

标签: arrays parameter-passing hlsl

我有一堆从顶点着色器输出的参数,我想将它们传递给像素着色器。

执行此操作的常规方法是声明输出结构

struct vOut
{
    float4 param0 : TEXCOORD0 ;
    float4 param1 : TEXCOORD1 ;
} ;

所以你必须编写一个单独的变量并将每个变量放在纹理坐标中。

有没有办法声明一个16 * float4的数组,让它们占用TEXCOORD0 -> TEXCOORD15而不必像这样写出一个顶点声明?

1 个答案:

答案 0 :(得分:1)

只是声明它:

struct VertexOutput_Test
{
  float4 hPosition    : POSITION;
  float4 vArr[5]     : TEXCOORD0;
};

并在顶点和像素着色器中正常处理它,例如这个虚拟代码:

VertexOutput_Test VS_Test(VertexInput_1UV IN) 
{
  VertexOutput_Test OUT = (VertexOutput_Test)0;
  float4 Po = float4(IN.position.xyz,1.0);
  float3 No = IN.normal.xyz;
  OUT.hPosition = mul(Po,worldViewProj);
  OUT.vArr[0] = float4(1,0,0,0);
  OUT.vArr[1] = float4(1,1,0,0);
  OUT.vArr[2] = float4(1,0,1,0);
  OUT.vArr[3] = float4(1,0,0,1);
  OUT.vArr[4] = float4(1,1,1,1);
  return OUT;
}

如果你查看fxc输出,你会看到它按顺序排列出来

相关问题