// 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

vertexglobal
{
	uniform vec4 DiffuseColor;
	uniform vec4 FogVector;
  uniform mat4 WorldViewProj;
}

vertexshaders
{
  shader "VSDualTexture"
  {
    attribute vec4 pos;
    attribute vec2 tex;
    attribute vec2 tex2;
	
    varying vec4 diffuse;
    varying vec4 specular;
    varying vec2 diffuseTexCoord;
    varying vec2 diffuseTexCoord2;
    void main( )
    {
      gl_Position = WorldViewProj * pos;
      diffuse = DiffuseColor;
      specular = vec4(0, 0, 0, saturate(dot(pos, FogVector)));
      diffuseTexCoord = tex;
      diffuseTexCoord2 = tex2;
    }
  }
  
  shader "VSDualTextureNoFog"
  {
    attribute vec4 pos;
    attribute vec2 tex;
    attribute vec2 tex2;
	
    varying vec4 diffuse;
    varying vec2 diffuseTexCoord;
    varying vec2 diffuseTexCoord2;
    void main( )
    {
      gl_Position = WorldViewProj * pos;
      diffuse = DiffuseColor;
      diffuseTexCoord = tex;
      diffuseTexCoord2 = tex2;
    }
  }
  
  shader "VSDualTextureVertexColor"
  {
    attribute vec4 pos;
    attribute vec2 tex;
    attribute vec2 tex2;
    attribute vec4 col;
	
    varying vec4 diffuse;
    varying vec4 specular;
    varying vec2 diffuseTexCoord;
    varying vec2 diffuseTexCoord2;
    void main( )
    {
      gl_Position = WorldViewProj * pos;
      diffuse = DiffuseColor * col;
      specular = vec4(0, 0, 0, saturate(dot(pos, FogVector)));
      diffuseTexCoord = tex;
      diffuseTexCoord2 = tex2;
    }
  }
  
  shader "VSDualTextureVertexColorNoFog"
  {
    attribute vec4 pos;
    attribute vec2 tex;
    attribute vec2 tex2;
    attribute vec4 col;
	
    varying vec4 diffuse;
    varying vec2 diffuseTexCoord;
    varying vec2 diffuseTexCoord2;
    void main( )
    {
      gl_Position = WorldViewProj * pos;
      diffuse = DiffuseColor * col;
      diffuseTexCoord = tex;
      diffuseTexCoord2 = tex2;
    }
  }
}

fragmentglobal
{
  uniform sampler2D Texture;
  uniform sampler2D Texture2;
  uniform vec3 FogColor;
}

fragmentshaders
{
  shader "PSDualTexture"
  {
    varying vec4 diffuse;
    varying vec4 specular;
    varying vec2 diffuseTexCoord;
    varying vec2 diffuseTexCoord2;
    void main( )
    {
      vec4 color = texture2D(Texture, diffuseTexCoord);
      vec4 overlay = texture2D(Texture2, diffuseTexCoord2);
      color.rgb *= 2;
      color *= overlay * diffuse;
      color.rgb = lerp(color.rgb, FogColor * color.a, specular.w);
      gl_FragColor = color;
    }
  }
  
  shader "PSDualTextureNoFog"
  {
    varying vec4 diffuse;
    varying vec2 diffuseTexCoord;
    varying vec2 diffuseTexCoord2;
    void main( )
    {
      vec4 color = texture2D(Texture, diffuseTexCoord);
      vec4 overlay = texture2D(Texture2, diffuseTexCoord2);
      color.rgb *= 2;
      color *= overlay * diffuse;
      gl_FragColor = color;
    }
  }
}

techniques
{
  technique "DualTextureEffect"
  {
    vertex "VSDualTexture"
    fragment "PSDualTexture"
  }
  
  technique "DualTextureEffectNoFog"
  {
    vertex "VSDualTextureNoFog"
    fragment "PSDualTextureNoFog"
  }
  
  technique "DualTextureEffectVertexColor"
  {
    vertex "VSDualTextureVertexColor"
    fragment "PSDualTexture"
  }
  
  technique "DualTextureEffectNoFogVertexColor"
  {
    vertex "VSDualTextureVertexColorNoFog"
    fragment "PSDualTextureNoFog"
  }
}