matrix ViewMatrix : register(c0);
vector LightStrength : register(c0);

struct VS_INPUT
{
vector Position	: POSITION;
vector Texture	: TEXCOORD0;
};

struct VS_OUTPUT
{
vector Position	: POSITION;
float2 Texture0	: TEXCOORD0;
float2 Texture1	: TEXCOORD1;
float2 Texture2	: TEXCOORD2;
};

VS_OUTPUT BackdropVertexShader(VS_INPUT input)
{
VS_OUTPUT output = (VS_OUTPUT)0;

output.Position = mul(ViewMatrix, input.Position);
vector Position2 = output.Position / output.Position.w;

output.Texture0 = input.Texture;
output.Texture1.x = input.Texture.x * 5.0f;
output.Texture1.y = input.Texture.y * 2.5f;
output.Texture2.x = Position2.x * 0.45f + 0.5f;
output.Texture2.y = -Position2.y * 0.35f + 0.5f;

return output;
}

// -------------------------------------------------------------------------

// -------------------------------------------------------------------------

sampler BaseTex			: register(s0);
sampler BaseNormal		: register(s1);
sampler FullsNormal		: register(s2);

struct PS_OUTPUT
{
vector diffuse	: COLOR0;
};

PS_OUTPUT BackdropPixelShader(VS_OUTPUT input)
{
PS_OUTPUT output = (PS_OUTPUT)0;

vector BaseColour	= tex2D(BaseTex, input.Texture0);

vector Normal		= tex2D(BaseNormal, input.Texture1);
vector FulsNormal	= tex2D(FullsNormal, input.Texture2);

float2 Color1 = Normal.xy * -2.0f + 1.0f;
float2 Color2 = FulsNormal.xy * 2.0f - 1.0f;

output.diffuse = (BaseColour * (1.2f - dot(Color2, Color1) * 1.7f) * FulsNormal.z * LightStrength.x);

return output;

}
