vector	OffsetDirection		: register(c0);

sampler Albedo				: register(s0);

vector	BlurSettings		: register(c4);

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

struct VS_INPUT1
{
	vector Position		: POSITION;
	float2 TexPosition	: TEXCOORD0;
};

struct PS_INPUT1
{
	vector Position		: POSITION;
	float2 TexPosition	: TEXCOORD0;
};

struct PS_OUTPUT1
{
	vector Diffuse		: COLOR0;
};

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

PS_INPUT1 VertexShader1(VS_INPUT1 input)
{
	PS_INPUT1 output = (PS_INPUT1)0;
	
	output.Position		= input.Position;
	output.TexPosition  = input.TexPosition.xy;
	return output;
}

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

PS_OUTPUT1 PixelShader1(PS_INPUT1 input)
{
	PS_OUTPUT1 output = (PS_OUTPUT1)0;
	
	output.Diffuse = tex2D(Albedo, input.TexPosition);
	
	output.Diffuse *= BlurSettings.x;
	output.Diffuse -= BlurSettings.y;
	output.Diffuse *= BlurSettings.z;
	
	return output;
}

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

struct VS_INPUTTwo
{
	vector Position		: POSITION;
	float2 TexPositionA	: TEXCOORD0;
	float2 TexPositionB	: TEXCOORD1;
	float2 TexPositionC	: TEXCOORD2;
	float2 TexPositionD	: TEXCOORD3;
	float2 TexPositionE	: TEXCOORD4;
	float2 TexPositionF	: TEXCOORD5;
	float2 TexPositionG	: TEXCOORD6;
	float2 TexPositionH	: TEXCOORD7;
};

struct PS_INPUT2
{
	vector Position		: POSITION;
	float2 TexPosition	: TEXCOORD0;
};

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

VS_INPUTTwo VertexShader2(VS_INPUT1 input)
{
	VS_INPUTTwo output = (VS_INPUTTwo)0;
	
	float4 Offset;
	Offset.xy = OffsetDirection.xy;
//	Offset.x = -0.01f;
	Offset.z = 0.0f;
	Offset.w = 0.0f;
	
	output.Position			=	input.Position;
	input.TexPosition		-=	Offset;
	output.TexPositionA		=	input.TexPosition.xy;
	input.TexPosition		-=	Offset;
	output.TexPositionB		=	input.TexPosition.xy;
	input.TexPosition		-=	Offset;
	output.TexPositionC		=	input.TexPosition.xy;
	input.TexPosition		-=	Offset;
	output.TexPositionD		=	input.TexPosition.xy;
	input.TexPosition		-=	Offset;
	output.TexPositionE		=	input.TexPosition.xy;
	input.TexPosition		-=	Offset;
	output.TexPositionF		=	input.TexPosition.xy;
	input.TexPosition		-=	Offset;
	output.TexPositionG		=	input.TexPosition.xy;
	input.TexPosition		-=	Offset;
	output.TexPositionH		=	input.TexPosition.xy;
	return output;
}

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

PS_OUTPUT1 PixelShader2(VS_INPUTTwo input)
{
	PS_OUTPUT1 output = (PS_OUTPUT1)0;
	
	output.Diffuse =	tex2D(Albedo, input.TexPositionA) * 1.000f;
	output.Diffuse +=	tex2D(Albedo, input.TexPositionB) * 0.875f;
	output.Diffuse +=	tex2D(Albedo, input.TexPositionC) * 0.750f;
	output.Diffuse +=	tex2D(Albedo, input.TexPositionD) * 0.625f;
	output.Diffuse +=	tex2D(Albedo, input.TexPositionE) * 0.500f;
	output.Diffuse +=	tex2D(Albedo, input.TexPositionF) * 0.375f;
	output.Diffuse +=	tex2D(Albedo, input.TexPositionG) * 0.250f;
	output.Diffuse +=	tex2D(Albedo, input.TexPositionH) * 0.125f;
	output.Diffuse /=	10.0f;
	
	return output;
}