我有一堆从顶点着色器输出的参数,我想将它们传递给像素着色器。
执行此操作的正常方法是声明一个输出结构
struct vOut
{
float4 param0 : TEXCOORD0 ;
float4 param1 : TEXCOORD1 ;
} ;
所以你必须编写一个单独的变量并将每个变量放在一个纹理坐标中。
有没有办法声明一个 16 * float4 的数组,并让它们占据TEXCOORD0 -> TEXCOORD15
而不必写出这样的顶点声明?
我有一堆从顶点着色器输出的参数,我想将它们传递给像素着色器。
执行此操作的正常方法是声明一个输出结构
struct vOut
{
float4 param0 : TEXCOORD0 ;
float4 param1 : TEXCOORD1 ;
} ;
所以你必须编写一个单独的变量并将每个变量放在一个纹理坐标中。
有没有办法声明一个 16 * float4 的数组,并让它们占据TEXCOORD0 -> TEXCOORD15
而不必写出这样的顶点声明?
像这样声明它:
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 输出,您会发现它按顺序很好地排列它们