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

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

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

// Bump map with parallax fragment program 
fragment_program Examples/OffsetMappingFPShaderModel4 cg
{ 
   source OffsetMapping.cg
   entry_point main_fp
   profiles ps_4_0
} 


// Bump map with parallax fragment program 
fragment_program Examples/OffsetMappingPSAsm asm 
{ 
   source OffsetMapping_specular.asm 
   // sorry, only for ps_1_4 and above:) 
   syntax ps_1_4 
	default_params
	{
        // Parallax Height scale and bias 
        param_indexed 2 float4 0.04 -0.02 1 0 
	}
} 

// Bump map with parallax fragment program 
fragment_program Examples/OffsetMappingPSGLSLES glsles
{ 
    source OffsetMapping_specular.glsles
    profiles glsles
	default_params
	{
        // Parallax Height scale and bias 
        param_named scaleBias float4 0.04 -0.02 1 0 
	}
}

// Bump map with Parallax offset vertex program, support for this is required 
vertex_program Examples/OffsetMappingVPGLSLES glsles
{ 
    source OffsetMappingVp.glsles
    profiles glsles
} 

// Bump map with parallax fragment program 
fragment_program Examples/OffsetMappingFPGLSLES glsles
{ 
    source OffsetMappingFp.glsles
    profiles glsles
	default_params
	{
		// assign samplers as required by GLSL
		param_named normalHeightMap int 0
		param_named diffuseMap int 1
	}
}

// Bump map with parallax fragment program 
fragment_program Examples/OffsetMappingPSGLSL glsl
{ 
    source OffsetMapping_specular.glsl
    syntax glsl150
	default_params
	{
        // Parallax Height scale and bias 
        param_named scaleBias float4 0.04 -0.02 1 0 
	}
}

// Bump map with Parallax offset vertex program, support for this is required 
vertex_program Examples/OffsetMappingVPGLSL glsl
{ 
    source OffsetMappingVp.glsl
    syntax glsl150
}

// Bump map with parallax fragment program 
fragment_program Examples/OffsetMappingFPGLSL glsl
{ 
    source OffsetMappingFp.glsl
    syntax glsl150
	default_params
	{
		// assign samplers as required by GLSL
		param_named normalHeightMap int 0
		param_named diffuseMap int 1
	}
}

vertex_program Examples/OffsetMappingVP unified
{
	delegate Examples/OffsetMappingVPGLSL
	delegate Examples/OffsetMappingVPGLSLES
	delegate Examples/OffsetMappingVPCg
}

fragment_program Examples/OffsetMappingFP unified
{
	delegate Examples/OffsetMappingFPGLSL
	delegate Examples/OffsetMappingFPGLSLES
	delegate Examples/OffsetMappingFPCg
}

fragment_program Examples/OffsetMappingPS unified
{
	delegate Examples/OffsetMappingPSGLSL
	delegate Examples/OffsetMappingPSGLSLES
	delegate Examples/OffsetMappingPSAsm
}


material Examples/OffsetMapping/Specular 
{ 
   technique ShaderModel4
   {
   	// ambient / depth
	  pass
	  {
	      illumination_stage ambient
		  vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTextureCgSm4
		  {
              param_named_auto worldViewProj worldviewproj_matrix
		  }
		  fragment_program_ref Ogre/BasicFragmentPrograms/PassthroughFpCgSm4ForAmbientOneTexture
		  {
		  }
		  
	  }

      // 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/OffsetMappingVPShaderModel4
         { 
            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/OffsetMappingFPShaderModel4
         { 
            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 
         } 
      } 
   } 

   technique GLES
   {
   	  // ambient / depth
	  pass
	  {
	      illumination_stage ambient
		  vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTextureUnified
		  {
		  }
		  fragment_program_ref Ogre/BasicFragmentPrograms/PassthroughFP
		  {
		  }
		  
	  }
      // 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 
         } 
      } 
   } 

   technique gl dx9
   {
   	  // ambient / depth
	  pass
	  {
	      illumination_stage ambient
		  vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTextureUnified
		  {
		  }
		  
	  }
      // 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 OffsetMappingShadowsVp.glsl
	syntax glsl150
   default_params
   {
        param_named_auto worldViewProj worldviewproj_matrix 
   }
} 

vertex_program Examples/OffsetMappingIntegratedShadowsVPglsles glsles
{ 
   source OffsetMappingShadowsVp.glsles
} 

// 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 OffsetMappingShadowsFp.glsl
	syntax glsl150
	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
	}
}
fragment_program Examples/OffsetMappingIntegratedShadowsFPglsles glsles
{
	source OffsetMappingShadowsFp.glsles
	default_params
	{
		// assign samplers as required by GLSL ES
		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
	delegate Examples/OffsetMappingIntegratedShadowsVPglsles
}
// Single-pass offset mapping with shadows
fragment_program Examples/OffsetMappingIntegratedShadowsFP unified
{
	delegate Examples/OffsetMappingIntegratedShadowsFPhlsl
	delegate Examples/OffsetMappingIntegratedShadowsFPglsl
	delegate Examples/OffsetMappingIntegratedShadowsFPglsles
}



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