Передать массив из вершинного шейдера HLSL в пиксельный шейдер

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

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

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

Поэтому вам нужно написать отдельную переменную и поместить каждую в текстурную координату.

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


person bobobobo    schedule 07.07.2012    source источник


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

person bjorke    schedule 04.12.2012