2012-07-07 1 views
1

У меня есть набор параметров, которые выводятся из вершинного шейдера, и я хочу передать их в пиксельный шейдер.Передача массива из вершинного шейдера HLSL в пиксельный шейдер

Обычный способ сделать это, чтобы объявить структуру вывода

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

Таким образом, вы должны написать отдельную переменную и поместить каждый в текстурных координат.

Есть ли способ объявить массив из 16 * float4 и заставить их заняться TEXCOORD0 -> TEXCOORD15, не имея необходимости выписывать объявление вершин, подобное этому?

ответ

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, вы увидите, что она выкладывает их красиво в порядке