// This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. // For details see: http://anxframework.codeplex.com/license uniform extern float4 DiffuseColor; uniform extern float3 FogColor; uniform extern float4 FogVector; uniform extern float4x4 WorldViewProj; Texture2D Texture : register(t0); sampler TextureSampler : register(s0); Texture2D Texture2 : register(t1); sampler Texture2Sampler : register(s1); struct VSInput { float4 pos : POSITION; float2 tex : TEXCOORD0; float2 tex2 : TEXCOORD1; }; struct VSInputVertexColor { float4 pos : POSITION; float2 tex : TEXCOORD0; float2 tex2 : TEXCOORD1; float4 col : COLOR; }; struct VSOutput { float4 Diffuse : COLOR0; float4 Specular : COLOR1; float2 TexCoord : TEXCOORD0; float2 TexCoord2 : TEXCOORD1; float4 PositionPS : SV_POSITION; }; struct VSOutputNoFog { float4 Diffuse : COLOR0; float2 TexCoord : TEXCOORD0; float2 TexCoord2 : TEXCOORD1; float4 PositionPS : SV_Position; }; struct PSInput { float4 Diffuse : COLOR0; float4 Specular : COLOR1; float2 TexCoord : TEXCOORD0; float2 TexCoord2 : TEXCOORD1; }; struct PSInputNoFog { float4 Diffuse : COLOR0; float2 TexCoord : TEXCOORD0; float2 TexCoord2 : TEXCOORD1; }; VSOutput VSDualTexture(VSInput input) { VSOutput output; output.PositionPS = mul(input.pos, WorldViewProj); output.Diffuse = DiffuseColor; output.Specular = float4(0, 0, 0, saturate(dot(input.pos, FogVector))); output.TexCoord = input.tex; output.TexCoord2 = input.tex2; return output; } VSOutputNoFog VSDualTextureNoFog(VSInput input) { VSOutputNoFog output; output.PositionPS = mul(input.pos, WorldViewProj); output.Diffuse = DiffuseColor; output.TexCoord = input.tex; output.TexCoord2 = input.tex2; return output; } VSOutput VSDualTextureVertexColor(VSInputVertexColor input) { VSOutput output; output.PositionPS = mul(input.pos, WorldViewProj); output.Diffuse = DiffuseColor * input.col; output.Specular = float4(0, 0, 0, saturate(dot(input.pos, FogVector))); output.TexCoord = input.tex; output.TexCoord2 = input.tex2; return output; } VSOutputNoFog VSDualTextureVertexColorNoFog(VSInputVertexColor input) { VSOutputNoFog output; output.PositionPS = mul(input.pos, WorldViewProj); output.Diffuse = DiffuseColor * input.col; output.TexCoord = input.tex; output.TexCoord2 = input.tex2; return output; } float4 PSDualTexture(PSInput input) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, input.TexCoord); float4 overlay = Texture2.Sample(Texture2Sampler, input.TexCoord2); color.rgb *= 2; color *= overlay * input.Diffuse; color.rgb = lerp(color.rgb, FogColor * color.a, input.Specular.w); return color; } float4 PSDualTextureNoFog(PSInputNoFog input) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, input.TexCoord); float4 overlay = Texture2.Sample(Texture2Sampler, input.TexCoord2); color.rgb *= 2; color *= overlay * input.Diffuse; return color; } technique10 DualTextureEffect { pass DualTexturePass { SetGeometryShader(0); SetVertexShader(CompileShader(vs_4_0, VSDualTexture())); SetPixelShader(CompileShader(ps_4_0, PSDualTexture())); } } technique10 DualTextureEffectVertexColor { pass DualTexturePassVertexColor { SetGeometryShader(0); SetVertexShader(CompileShader(vs_4_0, VSDualTextureVertexColor())); SetPixelShader(CompileShader(ps_4_0, PSDualTexture())); } } technique10 DualTextureEffectNoFog { pass DualTexturePassNoFog { SetGeometryShader(0); SetVertexShader(CompileShader(vs_4_0, VSDualTextureNoFog())); SetPixelShader(CompileShader(ps_4_0, PSDualTextureNoFog())); } } technique10 DualTextureEffectNoFogVertexColor { pass DualTexturePassVertexColorNoFog { SetGeometryShader(0); SetVertexShader(CompileShader(vs_4_0, VSDualTextureVertexColorNoFog())); SetPixelShader(CompileShader(ps_4_0, PSDualTextureNoFog())); } }