using System;
using System.Text;

namespace Microsoft.Xna.Framework.Graphics
{
	internal static class VSBasicEffect
	{
		
		internal static string CommonMainHeader = 
					"uniform mat4 WorldViewProj;\n"
					+ "uniform mat4 World;\n"
					+ "uniform mat4 WorldView;\n"
					+ "uniform vec4 DiffuseColor;\n"
					+ "varying vec4 Diffuse;\n"
					+ "varying vec2 TexCoord;\n"
				
					// Define the main here
					+ "void main(){\n"
	
					// set up references to our uniforms to make sure they are defined
					+ "mat4 wvp = WorldViewProj;\n"
					+ "mat4 wrld = World;\n"
					+ "mat4 wrldView = WorldView;\n"
					+ "vec2 tc = TexCoord;\n";
		
		internal static string CommonVSOutput = 					
					"Diffuse = DiffuseColor;\n"

					// Made sure we set the FrontColor for our vertexes
					//+ "gl_FrontColor = gl_Color;\n"
	
					// Do our transform
					+ "gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;";
		
		// TODO: add fog calculations
		internal static string CommonVSOutputNoFog = 					
					"Diffuse = DiffuseColor;\n"

					// Made sure we set the FrontColor for our vertexes
					+ "gl_FrontColor = gl_Color;\n"
	
					// Do our transform
					+ "gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;";			
			
		internal static string VSBasic
		{

			get {
				string code =
					// Set up our header and main
					CommonMainHeader
	
					+ CommonVSOutput
	
					+ "\n}";
	
				return code;
			}
		}

		internal static string VSBasicNoFog
		{

			get {
				string code =
					// Set up our header and main
					CommonMainHeader

					+ CommonVSOutputNoFog

					+ "\n}";
	
				return code;
			}
		}

		internal static string VSBasicVc
		{

			get {
				string code =
					// Set up our header and main
					CommonMainHeader

					+ CommonVSOutput
						
					+ "Diffuse *= gl_Color;\n"

					+ "\n}";
	
				return code;
			}
		}
		
		internal static string VSBasicVcNoFog
		{

			get {
				string code =
					// Set up our header and main
					CommonMainHeader

					+ CommonVSOutputNoFog
						
					+ "Diffuse *= gl_Color;\n"
	
				//+ "gl_Position = WorldViewProj * gl_Vertex;\n"
				//+ "gl_Position = ftransform();"
					+ "\n}";
	
				return code;
			}
		}
		
		internal static string VSBasicTx
		{

			get {
				string code =
					// Set up our header and main
					CommonMainHeader

					+ CommonVSOutput
						
					+ "TexCoord = vec2(gl_MultiTexCoord0);\n"

					+ "\n}";
	
				return code;
			}
		}		

		internal static string VSBasicTxNoFog
		{

			get {
				string code =
					// Set up our header and main
					CommonMainHeader

					+ CommonVSOutputNoFog
						
					+ "TexCoord = vec2(gl_MultiTexCoord0);\n"

					+ "\n}";
	
				return code;
			}
		}				
		
		internal static string VSBasicTxVc
		{

			get {
				string code =
					// Set up our header and main
					CommonMainHeader

					+ CommonVSOutput
						
					+ "Diffuse *= gl_Color;\n"
					+ "TexCoord = vec2(gl_MultiTexCoord0);\n"

					+ "\n}";
	
				return code;
			}
		}		
		
		internal static string VSBasicTxVcNoFog
		{

			get {
				string code =
					// Set up our header and main
					CommonMainHeader

					+ CommonVSOutputNoFog
						
					+ "Diffuse *= gl_Color;\n"
					+ "TexCoord = vec2(gl_MultiTexCoord0);\n"

					+ "\n}";
	
				return code;
			}
		}					
	}
}

