
// CG Shader Definitions
vertex_program AluminumVPCG cg
{
	source materials/programs/aluminum.cgfx
	profiles vs_1_1
	entry_point NoiseVS
	
	compile_arguments -DCG
}

fragment_program AluminumFPCG cg
{
	source materials/programs/aluminum.cgfx
	entry_point alumPSStuds
	profiles ps_2_x
	
	compile_arguments -DCG
}

vertex_program AluminumVP_gbufferCG cg
{
	source materials/programs/aluminum.cgfx
	profiles vs_1_1
	entry_point NoiseVS
	
	compile_arguments -DCG -DGBUFFER
}


fragment_program AluminumFP_gbufferCG cg
{
	source materials/programs/aluminum.cgfx
	entry_point alumPSStuds
	profiles ps_2_x
	
	compile_arguments -DCG -DGBUFFER
}

// GLSL Shader Definitions
vertex_program AluminumVPGLSL glsl
{
	source materials/programs/glsl/vert/noise.vert
	preprocessor_defines GLSL=1,GLSL_VERT=1,ENABLE_REFLECTIONS=1
}
fragment_program AluminumFPGLSL glsl
{
	source materials/programs/glsl/frag/aluminum.frag
	preprocessor_defines GLSL=1,GLSL_FRAG=1,ENABLE_REFLECTIONS=1
	default_params
	{
		param_named StudsSamp int 0
		param_named NormalSamp int 1
		param_named EnvSampler int 2
	}
}
vertex_program AluminumVP_gbufferGLSL glsl
{
	source materials/programs/glsl/vert/noise.vert
	preprocessor_defines GLSL=1,GBUFFER=1,GLSL_VERT=1,ENABLE_REFLECTIONS=1
}
fragment_program AluminumFP_gbufferGLSL glsl
{
	source materials/programs/glsl/frag/aluminum.frag
	preprocessor_defines GLSL=1,GBUFFER=1,GLSL_FRAG=1,ENABLE_REFLECTIONS=1
	default_params
	{
		param_named StudsSamp int 0
		param_named NormalSamp int 1
		param_named EnvSampler int 2
	}
}

// Unified Shader Definitions
vertex_program AluminumVP unified
{
	delegate AluminumVPCG
	delegate AluminumVPGLSL
}

fragment_program AluminumFP unified
{
	delegate AluminumFPCG
	delegate AluminumFPGLSL
}	

vertex_program AluminumVP_gbuffer unified
{
	delegate AluminumVP_gbufferCG
	delegate AluminumVP_gbufferGLSL
}

fragment_program AluminumFP_gbuffer unified
{
	delegate AluminumFP_gbufferCG
	delegate AluminumFP_gbufferGLSL
}

// Basic Shader Definitions
vertex_program BasicVP cg
{
	source materials/programs/include/common.cgh
	profiles vs_1_1
	entry_point basicVS

	default_params
	{
		param_named_auto Lamp0Pos light_position 0
		param_named_auto Lamp1Pos light_position 1
		param_named_auto WorldITXf inverse_transpose_world_matrix
		param_named_auto WorldXf world_matrix
		param_named_auto ViewIXf inverse_view_matrix
		param_named_auto WvpXf worldviewproj_matrix
		param_named_auto WorldXf world_matrix
	}
	
	compile_arguments -DCG
}


fragment_program BasicFP cg
{
	source materials/programs/include/common.cgh
	entry_point basicPSStuds
	profiles ps_2_x
	
	default_params
	{
		param_named_auto AmbiColor ambient_light_colour
		param_named_auto Lamp0Color light_diffuse_colour 0
		param_named_auto Lamp1Color light_diffuse_colour 1
	}
	
	compile_arguments -DCG
}


material Aluminum_Low
{
	technique lod1
	{
		pass
		{
			
			ambient vertexcolour
			diffuse vertexcolour
			specular 0.0 0.0 0.0 25
			max_lights 2
		
			texture_unit
			{
				texture_alias Studs
				tex_coord_set 0
				texture textures/surfacesAlpha.png
				colour_op alpha_blend
				//ignore alpha from SurfaceAlpha.png. Use fixed alpha. VERY IMPORTANT FOR OFF-SCREEN RENDERING!
		        alpha_op_ex source1 src_manual src_manual 1 1 1
		        filtering trilinear
			}
		}
	}
}

material Aluminum_Med : Aluminum_Low
{
	lod_distances 320.0
	
	technique LegacyFF_lod0
	{
		lod_index 0
		pass
		{
			ambient vertexcolour
			diffuse vertexcolour
			specular 0.0 0.0 0.0 25
			// mimic current wood shader limitation
			max_lights 2
			
			texture_unit
			{
				tex_coord_set 1
				texture textures/AluminumFallback.png
		        filtering trilinear
		        colour_op_ex add_signed src_texture src_current
				//ignore alpha from SurfaceAlpha.png. Use alpha from vertices (in this case, it is not set, so use manual 1.0). VERY IMPORTANT FOR OFF-SCREEN RENDERING!
		        alpha_op_ex source1 src_manual src_manual 1.0 1.0 1.0
		        transform 0.06 0 0 0    0 0.06 0 0    0 0 0.06 0    0 0 0 1
			}
			
			texture_unit
			{
				texture_alias Studs
				tex_coord_set 0
				texture textures/surfacesAlpha.png
				colour_op alpha_blend
				//ignore alpha from SurfaceAlpha.png. Use fixed alpha. VERY IMPORTANT FOR OFF-SCREEN RENDERING!
		        alpha_op_ex source1 src_manual src_manual 1 1 1
        
		        filtering trilinear
			}
		}
	}
	
	technique lod1
	{
		lod_index 1
		pass
		{
			ambient vertexcolour
			diffuse vertexcolour
			specular 0.0 0.0 0.0 25
			// mimic current wood shader limitation
			max_lights 2
			
			texture_unit
			{
				tex_coord_set 1
				texture textures/AluminumFallback.png
		        filtering trilinear
		        colour_op_ex add_signed src_texture src_current
				//ignore alpha from SurfaceAlpha.png. Use alpha from vertices (in this case, it is not set, so use manual 1.0). VERY IMPORTANT FOR OFF-SCREEN RENDERING!
		        alpha_op_ex source1 src_manual src_manual 1.0 1.0 1.0
		        transform 0.06 0 0 0    0 0.06 0 0    0 0 0.06 0    0 0 0 1
			}
		}
	}
}

material Aluminum_High : Aluminum_Low
{
	lod_distances 320.0
	technique Procedural_lod0
	{
		lod_index 0

		pass
		{
			max_lights 2
			
			vertex_program_ref AluminumVP
			{
			
				param_named_auto Lamp0Pos light_position 0
				param_named_auto Lamp1Pos light_position 1
				param_named_auto WorldITXf inverse_transpose_world_matrix
				param_named_auto WorldXf world_matrix
				param_named_auto ViewIXf inverse_view_matrix
				param_named_auto WvpXf worldviewproj_matrix
				param_named_auto WorldXf world_matrix
				param_named_auto WvXf worldview_matrix
				param_named Transform3DNoiseCoordinates float 0
				param_named FadeDistance float 260
				param_named NormMapScale float  0.2
			}
			
			fragment_program_ref AluminumFP
			{
				param_named_auto AmbiColor ambient_light_colour
				param_named_auto Lamp0Color light_diffuse_colour 0
				param_named_auto Lamp1Color light_diffuse_colour 1
				param_named Ks float 0.9
				param_named SpecExpon float  25
				param_named Kr float 0.7
				param_named FresnelVal float 0.6
				param_named_auto FogColour fog_colour
				param_named_auto FogParams fog_params
			}
		
			texture_unit
			{
				texture_alias Studs
				tex_coord_set 0
				texture textures/SurfacesAlpha.png
		        filtering trilinear
			}
			
			texture_unit
			{
				tex_coord_set 1
				texture textures/Crinkled_Normal.dds
		        filtering trilinear 
			}
			texture_unit
			{
				texture_alias SkyBox
				tex_coord_set 2
				texture textures/penv.dds cubic
		        filtering trilinear
			}
			
		}
		
	}
	
	technique Procedural_lod0
	{
		lod_index 0
		
		scheme MRT
		pass
		{
			max_lights 2
			
			vertex_program_ref AluminumVP_gbuffer
			{
				param_named_auto Lamp0Pos light_position 0
				param_named_auto Lamp1Pos light_position 1
				param_named_auto WorldITXf inverse_transpose_world_matrix
				param_named_auto WorldXf world_matrix
				param_named_auto ViewIXf inverse_view_matrix
				param_named_auto WvpXf worldviewproj_matrix
				param_named_auto WvXf worldview_matrix
				param_named Transform3DNoiseCoordinates float 0
				param_named FadeDistance float 260
				param_named NormMapScale float  0.2
			}

			fragment_program_ref AluminumFP_gbuffer
			{
				param_named_auto AmbiColor ambient_light_colour
				param_named_auto Lamp0Color light_diffuse_colour 0
				param_named_auto Lamp1Color light_diffuse_colour 1
				param_named Ks float 0.9
				param_named SpecExpon float  25
				param_named Kr float 0.7
				param_named FresnelVal float 0.6
				param_named_auto FogColour fog_colour
				param_named_auto FogParams fog_params
			}
			
			texture_unit
			{
				texture_alias Studs
				tex_coord_set 0
				texture textures/SurfacesAlpha.png
		        filtering trilinear
			}
			
			texture_unit
			{
				tex_coord_set 1
				texture textures/Crinkled_Normal.dds
		        filtering trilinear 
			}
			texture_unit
			{
				texture_alias SkyBox
				tex_coord_set 2
				texture textures/penv.dds cubic
		        filtering trilinear
			}
		}
		
	}
	
	technique lod1
	{
		lod_index 1
	}		
}


