#include "hdr.cg"

// application to vertex shader
struct a2v 
{
    float4 Position : POSITION;
    float4 Normal   : NORMAL;
};

// vertex shader to fragment shader
struct v2f 
{
    float4 HPosition : POSITION;
    float4 P         : TEXCOORD0; // position
    float3 N         : TEXCOORD1; // normal
    float3 I         : TEXCOORD2; // incident vector
};

v2f main(a2v In,
         uniform float4x4 modelViewProj,
         uniform float4x4 model,
         uniform float3 eyePos
         )
{
  v2f Out;

  // transform position
  float4 P = mul(model, In.Position);

  // transform normal
  float3 N = transform_dir(model, In.Normal.xyz);
  N = normalize(N);

  // calculate incident vector
  float3 I = P.xyz - eyePos;

  Out.P = P;
  Out.N = N;
  Out.I = I;
 
  Out.HPosition = mul(modelViewProj, In.Position);
  return Out;
}
