30 lines
837 B
Plaintext
30 lines
837 B
Plaintext
float4x4 matWVP : register(c0);
|
|
float4 res : register(c5);
|
|
float3 viewPos : register(c4);
|
|
float3 lightDir : register(c6);
|
|
float3x3 viewMatrixRotInv : register(c7);
|
|
float4 projScaleOffsetInv : register(c11);
|
|
|
|
struct vsOut
|
|
{
|
|
float4 p : POSITION;
|
|
float2 t : TEXCOORD0;
|
|
float3 e : TEXCOORD1;
|
|
float2 l : TEXCOORD2;
|
|
};
|
|
|
|
vsOut vs_main(float4 p : POSITION)
|
|
{
|
|
vsOut o = { p, p.xy, p.xyw, (float2)0.f };
|
|
o.p.xy += float2(-1.f, 1.f) * res.zw;
|
|
o.t = o.t * float2(.5f, -.5f) + .5f;
|
|
o.e.xy = o.e.xy * projScaleOffsetInv.xy + projScaleOffsetInv.zw;
|
|
o.e = mul(o.e, viewMatrixRotInv);
|
|
o.e.xy += float2(-1.f, 1.f) * res.zw;
|
|
// Compute light position
|
|
float4 lightPos = mul( float4(viewPos - lightDir, 1.0f), matWVP );
|
|
o.l = clamp( lightPos.xy / abs(lightPos.w), -1.f, 1.f );
|
|
o.l = o.l * float2(.5f, -.5f) + .5f;
|
|
return o;
|
|
};
|