【问题标题】:Pass an array from HLSL vertex shader to pixel shader将数组从 HLSL 顶点着色器传递到像素着色器
【发布时间】:2012-07-07 19:40:18
【问题描述】:

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

通常的做法是声明一个输出结构

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

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

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

【问题讨论】:

    标签: arrays parameter-passing hlsl


    【解决方案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 输出,您会发现它按顺序很好地布置了它们

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      相关资源
      最近更新 更多