163 lines
4.2 KiB
HLSL
163 lines
4.2 KiB
HLSL
|
// 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<float4> Texture : register(t0);
|
||
|
sampler TextureSampler : register(s0);
|
||
|
|
||
|
Texture2D<float4> 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()));
|
||
|
}
|
||
|
}
|