vector	WorldPosition		: register(c0);
vector	OffsetPositionB		: register(c1);
vector	OffsetPositionC		: register(c2);

sampler AlbedoA				: register(s0);
sampler AlbedoB				: register(s1);
sampler AlbedoC				: register(s2);

// -------------------------------------------------------------------------
//		Datatypes
// -------------------------------------------------------------------------

struct VS_INPUT
{
	vector Position		: POSITION;
};

struct PS_INPUT
{
	vector Position		: POSITION;
	float2 TexPositionA	: TEXCOORD0;
	float2 TexPositionB	: TEXCOORD1;
	float2 TexPositionC	: TEXCOORD2;
};

struct PS_OUTPUT
{
	vector Diffuse		: COLOR0;
};

// -------------------------------------------------------------------------
//		Vertexshader
// -------------------------------------------------------------------------

PS_INPUT VertexShader(VS_INPUT input)
{
	PS_INPUT output = (PS_INPUT)0;
	
	output.Position		= input.Position;
	
	input.Position.x += 1.0f;
	input.Position.x /= 2.0f;
	input.Position.y -= 1.0f;
	input.Position.y /= -2.0f;
	
	float2 Offset = float2(WorldPosition.x, WorldPosition.y);
	
	output.TexPositionA = (input.Position.xy);
	output.TexPositionB = ((input.Position.xy + (Offset * 0.45f)) / 1.45f) + OffsetPositionB.xy;
	output.TexPositionC = ((input.Position.xy + (Offset * 1.25f)) / 2.25f) + OffsetPositionC.xy;
	
	return output;
}

// -------------------------------------------------------------------------
//		Pixelshader
// -------------------------------------------------------------------------

PS_OUTPUT PixelShader(PS_INPUT input)
{
	PS_OUTPUT output = (PS_OUTPUT)0;
	
	vector PixelAlbedoA		=	tex2D(AlbedoA, input.TexPositionA);
	vector PixelAlbedoB		=	tex2D(AlbedoB, input.TexPositionB);
	vector PixelAlbedoC		=	tex2D(AlbedoC, input.TexPositionC);
	
	output.Diffuse.xyz = lerp(PixelAlbedoA.xyz, PixelAlbedoB.xyz, PixelAlbedoB.a);
	output.Diffuse.xyz = lerp(output.Diffuse.xyz, PixelAlbedoC.xyz, PixelAlbedoC.a);
	
	return output;
}