// Bump map with Parallax offset vertex program, support for this is required 
vertex_program Examples/OffsetMappingVP cg 
{ 
   source OffsetMapping.cg 
   entry_point main_vp 
   profiles vs_1_1 arbvp1 
} 

// Bump map with parallax fragment program 
fragment_program Examples/OffsetMappingFP cg
{ 
   source OffsetMapping.cg
   entry_point main_fp
   profiles ps_2_0 arbfp1
} 

// Bump map with parallax fragment program 
fragment_program Examples/OffsetMappingPS asm 
{ 
   source OffsetMapping_specular.asm 
   // sorry, only for ps_1_4 and above:) 
   syntax ps_1_4 
} 


material Examples/OffsetMapping/Specular 
{ 

  // This is the preferred technique which uses both vertex and 
   // fragment programs, supports coloured lights 
   technique 
   {
   	  // ambient / depth
	  pass
	  {
	      illumination_stage ambient
		  vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTexture
		  {
		  }
		  
	  }
      // do the lighting  and bump mapping with parallax pass 
      pass 
      {
	     illumination_stage per_light
	     scene_blend add
		 depth_write off
       
         // Vertex program reference 
         vertex_program_ref Examples/OffsetMappingVP 
         { 
            param_named_auto lightPosition light_position_object_space 0 
            param_named_auto eyePosition camera_position_object_space 
            param_named_auto worldViewProj worldviewproj_matrix 
         } 

         // Fragment program 
         fragment_program_ref Examples/OffsetMappingFP
         { 
            param_named_auto lightDiffuse light_diffuse_colour 0 
            param_named_auto lightSpecular light_specular_colour 0 
            // Parallax Height scale and bias 
            param_named scaleBias float4 0.04 -0.02 1 0 
         } 
          
         // Normal + height(alpha) map 
         texture_unit 
         { 
            texture rockwall_NH.tga
            tex_coord_set 0 
         } 

         // Base diffuse texture map 
         texture_unit 
         { 
            texture rockwall.tga
            tex_coord_set 1 
         } 
      } 
   } 


   // This is the preferred technique which uses both vertex and 
   // fragment programs, supports coloured lights 
   technique 
   { 
      // do the lighting  and bump mapping with parallax pass 
      pass 
      { 
       
         // Vertex program reference 
         vertex_program_ref Examples/OffsetMappingVP 
         { 
            param_named_auto lightPosition light_position_object_space 0 
            param_named_auto eyePosition camera_position_object_space 
            param_named_auto worldViewProj worldviewproj_matrix 
         } 

         // Fragment program 
         fragment_program_ref Examples/OffsetMappingPS 
         { 
            param_indexed_auto 0 light_diffuse_colour 0 
            param_indexed_auto 1 light_specular_colour 0 
            // Parallax Height scale and bias 
            param_indexed 2 float4 0.04 -0.02 1 0 
         } 
          
         // Normal + height(alpha) map 
         texture_unit 
         { 
            texture rockwall_NH.tga
            tex_coord_set 0 
         } 

         // Base diffuse texture map 
         texture_unit 
         { 
            texture rockwall.tga
            tex_coord_set 1 
         } 
      } 
   } 
   
   // Simple no-shader fallback
   technique 
   { 
      pass 
      { 
         // Base diffuse texture map 
         texture_unit 
         { 
            texture rockwall.tga
         } 
	  }
   }

}



// Single-pass offset mapping with shadows
vertex_program Examples/OffsetMappingIntegratedShadowsVPhlsl hlsl 
{ 
   source OffsetMapping.hlsl
   entry_point integratedshadows_vp 
   target vs_2_0
} 
vertex_program Examples/OffsetMappingIntegratedShadowsVPglsl glsl 
{ 
   source OffsetMappingVp.glsl
} 

// Single-pass offset mapping with shadows
fragment_program Examples/OffsetMappingIntegratedShadowsFPhlsl hlsl
{ 
   source OffsetMapping.hlsl
   entry_point integratedshadows_fp
   target ps_2_0
} 
fragment_program Examples/OffsetMappingIntegratedShadowsFPglsl glsl
{
	source OffsetMappingFp.glsl
	default_params
	{
		// assign samplers as required by GLSL
		param_named normalHeightMap int 0
		param_named diffuseMap int 1
		param_named shadowMap1 int 2
		param_named shadowMap2 int 3
	}
}
// Single-pass offset mapping with shadows
vertex_program Examples/OffsetMappingIntegratedShadowsVP unified
{
	delegate Examples/OffsetMappingIntegratedShadowsVPhlsl
	delegate Examples/OffsetMappingIntegratedShadowsVPglsl
}
// Single-pass offset mapping with shadows
fragment_program Examples/OffsetMappingIntegratedShadowsFP unified
{
	delegate Examples/OffsetMappingIntegratedShadowsFPhlsl
	delegate Examples/OffsetMappingIntegratedShadowsFPglsl
}



material Examples/OffsetMapping/IntegratedShadows 
{ 

   technique 
   { 
      // do the lighting  and bump mapping with parallax pass 
      pass 
      { 
       
         // Vertex program reference 
         vertex_program_ref Examples/OffsetMappingIntegratedShadowsVP
         { 
            param_named_auto lightPosition light_position_object_space 0
            param_named_auto eyePosition camera_position_object_space 
            param_named_auto worldViewProj worldviewproj_matrix 
			param_named_auto spotDirection light_direction_object_space 0

            param_named_auto lightPosition1 light_position_object_space 1
			param_named_auto spotDirection1 light_direction_object_space 1
			// shadow texture projections
			param_named_auto worldMatrix world_matrix
			param_named_auto texViewProj1 texture_viewproj_matrix 0
			param_named_auto texViewProj2 texture_viewproj_matrix 1
         } 

         // Fragment program 
         fragment_program_ref Examples/OffsetMappingIntegratedShadowsFP
         { 
            param_named_auto lightDiffuse light_diffuse_colour 0 
			param_named_auto spotParams spotlight_params 0

			param_named_auto lightDiffuse1 light_diffuse_colour 1
			param_named_auto spotParams1 spotlight_params 1
            // Parallax Height scale and bias 
            param_named scaleBias float4 0.04 -0.02 1 0 
         } 
          
         // Normal + height(alpha) map 
         texture_unit 
         { 
            texture rockwall_NH.tga
            tex_coord_set 0 
         } 

         // Base diffuse texture map 
         texture_unit 
         { 
            texture rockwall.tga
            tex_coord_set 1 
         } 

		 // shadowmap 1
		 texture_unit
		 {
		 	content_type shadow
		 }
		 // shadowmap 2
		 texture_unit
		 {
		 	content_type shadow
		 }
      } 
   } 



}

