// 3D world rendering shader
// Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com

// Vertex input data
struct VertexData
{
    float3 pos		: POSITION;
	float4 color	: COLOR0;
    float2 uv		: TEXCOORD0;
};

// Pixel input data
struct PixelData
{
    float4 pos		: POSITION;
    float4 color	: COLOR0;
    float2 uv		: TEXCOORD0;
};

// Matrix for final transformation
float4x4 worldviewproj;

// Texture input
texture texture1;

// Texture sampler settings
sampler2D texturesamp = sampler_state
{
    Texture = <texture1>;
    MagFilter = Linear;
    MinFilter = Anisotropic;
    MipFilter = Linear;
	AddressU = Wrap;
	AddressV = Wrap;
	MipMapLodBias = 0.0f;
};

// Vertex shader
PixelData vs_main(VertexData vd)
{
    PixelData pd;
    
    // Fill pixel data input
    pd.pos = mul(float4(vd.pos, 1.0f), worldviewproj);
    pd.color = vd.color;
    pd.uv = vd.uv;
    
    // Return result
    return pd;
}

// Pixel shader
float4 ps_main(PixelData pd) : COLOR
{
	float4 tcolor = tex2D(texturesamp, pd.uv);
	
	// Blend texture color and vertex color
    return tcolor * pd.color;
}

// Technique for shader model 2.0
technique SM20
{
    pass p0
    {
	    VertexShader = compile vs_2_0 vs_main();
	    PixelShader = compile ps_2_0 ps_main();
    }
}