/*vertex_program Ogre/Hair/AddAngularForcesVS hlsl
{
	source Hair.hlsl
	entry_point AddAngularForcesVS
	target vs_4_0
	
	default_params
	{

	}	
}

geometry_program Ogre/Hair/AddAngularForcesGS hlsl
{
	source Hair.hlsl
	entry_point AddAngularForcesGS
	target gs_4_0
	
	default_params
	{
		param_named g_bClearForces int 0
	}	
}

vertex_program Ogre/Hair/addForcesAndIntegrateVS hlsl
{
	source Hair.hlsl
	entry_point addForcesAndIntegrateVS
	target vs_4_0
	
	default_params
	{
		param_named g_bApplyAdditionalTransform int 0
		param_named g_bApplyHorizontalForce int 0
		param_named g_bAddGravity int 0
		param_named g_TimeStep float 1.0
		param_named g_gravityStrength float 1.0
		param_named g_bSimulate int 0
		param_named g_windForce float3 1.0 1.0 1.0
		param_named g_NumSphereImplicits int 1
		param_named g_NumCylinderImplicits int 1
		param_named g_NumSphereNoMoveImplicits int 1
	}	
}

geometry_program Ogre/Hair/addForcesAndIntegrateVSG hlsl
{
	source Hair.hlsl
	entry_point addForcesAndIntegrateVS
	target vs_4_0
	
	default_params
	{
		param_named g_bApplyAdditionalTransform int 0
		param_named g_bApplyHorizontalForce int 0
		param_named g_bAddGravity int 0
		param_named g_TimeStep float 1.0
		param_named g_gravityStrength float 1.0
		param_named g_bSimulate int 0
		param_named g_windForce float3 1.0 1.0 1.0
		param_named g_NumSphereImplicits int 1
		param_named g_NumCylinderImplicits int 1
		param_named g_NumSphereNoMoveImplicits int 1
	}	
}

vertex_program Ogre/Hair/SatisfySpringConstraintsVS hlsl
{
	source Hair.hlsl
	entry_point SatisfySpringConstraintsGS
	target vs_4_0
	
	default_params
	{

	}	
}

geometry_program Ogre/Hair/SatisfySpringConstraintsGS hlsl
{
	source Hair.hlsl
	entry_point SatisfySpringConstraintsGS
	target gs_4_0
	
	default_params
	{

	}	
}

vertex_program Ogre/Hair/SatisfyAngularSpringConstraintsVS hlsl
{
	source Hair.hlsl
	entry_point SatisfyAngularSpringConstraintsVS
	target vs_4_0
	
	default_params
	{

	}	
}

geometry_program Ogre/Hair/SatisfyAngularSpringConstraintsGS hlsl
{
	source Hair.hlsl
	entry_point SatisfyAngularSpringConstraintsGS
	target gs_4_0
	
	default_params
	{
		param_named g_angularStiffness float 1.0
	}	
}

vertex_program Ogre/Hair/SatisfyCollisionConstraintsVS hlsl
{
	source Hair.hlsl
	entry_point SatisfyCollisionConstraintsVS
	target vs_4_0
	
	default_params
	{

	}	
}

geometry_program Ogre/Hair/SatisfyCollisionConstraintsVSG hlsl
{
	source Hair.hlsl
	entry_point SatisfyCollisionConstraintsVS
	target vs_4_0
	
	default_params
	{

	}	
}

vertex_program Ogre/Hair/UpdateCoordinateFrameVS hlsl
{
	source Hair.hlsl
	entry_point UpdateCoordinateFrameVS
	target vs_4_0
	
	default_params
	{
		param_named g_blendAxis float 0.0
	}	
}

geometry_program Ogre/Hair/UpdateCoordinateFrameVSG hlsl
{
	source Hair.hlsl
	entry_point UpdateCoordinateFrameVS
	target vs_4_0
	
	default_params
	{
		param_named g_blendAxis float 0.0
	}	
}

vertex_program Ogre/Hair/PropagateCoordinateFrameVS hlsl
{
	source Hair.hlsl
	entry_point PropagateCoordinateFrameVS
	target vs_4_0
	
	default_params
	{

	}	
}


geometry_program Ogre/Hair/PropagateCoordinateFrameVSG hlsl
{
	source Hair.hlsl
	entry_point PropagateCoordinateFrameVS
	target vs_4_0
	
	default_params
	{

	}	
}

vertex_program Ogre/Hair/restoreToDefaultPositionsVS hlsl
{
	source Hair.hlsl
	entry_point restoreToDefaultPositionsVS
	target vs_4_0
	
	default_params
	{

	}	
}

geometry_program Ogre/Hair/restoreToDefaultPositionsVSG hlsl
{
	source Hair.hlsl
	entry_point restoreToDefaultPositionsVS
	target vs_4_0
	
	default_params
	{

	}	
}

vertex_program Ogre/Hair/RenderCoordinateFrameVSUnTess hlsl
{
	source Hair.hlsl
	entry_point RenderCoordinateFrameVSUnTess
	target vs_4_0
	
	default_params
	{

	}	
}

vertex_program Ogre/Hair/RenderCoordinateFrameVSUnTessSB hlsl
{
	source Hair.hlsl
	entry_point RenderCoordinateFrameVSUnTessSB
	target vs_4_0
	
	default_params
	{

	}	
}

vertex_program Ogre/Hair/RenderCoordinateFrameVS hlsl
{
	source Hair.hlsl
	entry_point RenderCoordinateFrameVS
	target vs_4_0
	
	default_params
	{

	}	
}

geometry_program Ogre/Hair/RenderCoordinateFrameGSUnTessellated hlsl
{
	source Hair.hlsl
	entry_point RenderCoordinateFrameGSUnTessellated
	target gs_4_0
	
	default_params
	{

	}	
}

geometry_program Ogre/Hair/RenderCoordinateFrameGSUnTessellatedSB hlsl
{
	source Hair.hlsl
	entry_point RenderCoordinateFrameGSUnTessellatedSB
	target gs_4_0
	
	default_params
	{

	}	
}

geometry_program Ogre/Hair/RenderCoordinateFrameGSTessellated hlsl
{
	source Hair.hlsl
	entry_point RenderCoordinateFrameGSTessellated
	target gs_4_0
	
	default_params
	{

	}	
}

fragment_program Ogre/Hair/RenderCoordinateFramePS hlsl
{
	source Hair.hlsl
	entry_point restoreToDefaultPositionsVS
	target ps_4_0
	
	default_params
	{

	}	
}

material Ogre/Hair/SimulateHair
{
	technique SimulateHair
	{
		pass addAngularForces
		{
			vertex_program_ref Ogre/Hair/AddAngularForcesVS
			{
			
			}
			geometry_program_ref Ogre/Hair/AddAngularForcesGS
			{
			
			}
			depth_check off
			depth_write off
		}
		pass addForcesAndIntegrate
		{
			vertex_program_ref Ogre/Hair/addForcesAndIntegrateVS
			{
			
			}
			geometry_program_ref Ogre/Hair/addForcesAndIntegrateVSG
			{
			
			}
			depth_check off
			depth_write off
		}
		pass SatisfySpringConstraints
		{
			vertex_program_ref Ogre/Hair/SatisfySpringConstraintsVS
			{
			
			}
			geometry_program_ref Ogre/Hair/SatisfySpringConstraintsGS
			{
			
			}
			depth_check off
			depth_write off
		}
		pass SatisfyAngularSpringConstraints
		{
			vertex_program_ref Ogre/Hair/SatisfyAngularSpringConstraintsVS
			{
			
			}
			geometry_program_ref Ogre/Hair/SatisfyAngularSpringConstraintsGS
			{
			
			}
			depth_check off
			depth_write off
		}
		pass SatisfyCollisionConstraints
		{
			vertex_program_ref Ogre/Hair/SatisfyCollisionConstraintsVS
			{
			
			}
			geometry_program_ref Ogre/Hair/SatisfyCollisionConstraintsVSG
			{
			
			}
			depth_check off
			depth_write off
		}
		pass restoreToDefaultPositions
		{
			vertex_program_ref Ogre/Hair/restoreToDefaultPositionsVS
			{
			
			}
			geometry_program_ref Ogre/Hair/restoreToDefaultPositionsVSG
			{
			
			}
			depth_check off
			depth_write off
		}
		pass RenderCoordinateFrameUnTessellated
		{
			vertex_program_ref Ogre/Hair/RenderCoordinateFrameVSUnTess
			{
			
			}
			geometry_program_ref Ogre/Hair/RenderCoordinateFrameGSUnTessellated
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderCoordinateFramePS
			{
			
			}
		
			depth_check on
			depth_write on
		}
		pass RenderCoordinateFrameUnTessellatedSB
		{
			vertex_program_ref Ogre/Hair/RenderCoordinateFrameVSUnTessSB
			{
			
			}
			geometry_program_ref Ogre/Hair/RenderCoordinateFrameGSUnTessellatedSB
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderCoordinateFramePS
			{
			
			}
		
			depth_check on
			depth_write on
		}
		pass RenderCoordinateFrameTessellated
		{
			vertex_program_ref Ogre/Hair/RenderCoordinateFrameVS
			{
			
			}
			geometry_program_ref Ogre/Hair/RenderCoordinateFrameGSTessellated
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderCoordinateFramePS
			{
			
			}
		
			depth_check on
			depth_write on
		}
		pass UpdateCoordinateFrame
		{
			vertex_program_ref Ogre/Hair/UpdateCoordinateFrameVS
			{
			
			}
			geometry_program_ref Ogre/Hair/UpdateCoordinateFrameVSG
			{
			
			}
		
			depth_check off
			depth_write off
		}
		pass PropagateCoordinateFrame
		{
			vertex_program_ref Ogre/Hair/PropagateCoordinateFrameVS
			{
			
			}
			geometry_program_ref Ogre/Hair/PropagateCoordinateFrameVSG
			{
			
			}
		
			depth_check off
			depth_write off
		}
	}
}

vertex_program Ogre/Hair/InterpolateVS_DUMMY11 hlsl
{
	source Hair.hlsl
	entry_point InterpolateVS_DUMMY11
	target vs_5_0
	
	default_params
	{
	
	}
}

vertex_program Ogre/Hair/InterpolateVSMultiStrand_LOAD hlsl
{
	source Hair.hlsl
	entry_point InterpolateVSMultiStrand_LOAD
	target vs_5_0
	
	default_params
	{
		param_named g_bApplyAdditionalRenderingTransform int 0
		param_named g_useShadows int 1
		param_named g_SigmaA float 1.0
		param_named g_ZNear float 1.0
		param_named g_ZFar float 2.0
	}
}

vertex_program Ogre/Hair/InterpolateVSMultiStrandDepthShadows_LOAD hlsl
{
	source Hair.hlsl
	entry_point InterpolateVSMultiStrandDepthShadows_LOAD
	target vs_5_0
	
	default_params
	{
		param_named g_bApplyAdditionalRenderingTransform int 0	
	}
}

vertex_program Ogre/Hair/InterpolateVSMultiStrandCollisions hlsl
{
	source Hair.hlsl
	entry_point InterpolateVSMultiStrandCollisions
	target vs_5_0
	
	default_params
	{
		param_named g_NumTotalWisps int 0
		param_named g_NumMaxStrandsPerWisp int 0		
	}
}

tesselation_hull_program Ogre/Hair/InterpolateHSMultiStrand hlsl
{
	source Hair.hlsl
	entry_point InterpolateHSMultiStrand
	target hs_5_0
	
	default_params
	{
		param_named g_fNumHairsLOD float 1.0
	}
}

tesselation_hull_program Ogre/Hair/InterpolateHSMultiStrandDepth hlsl
{
	source Hair.hlsl
	entry_point InterpolateHSMultiStrandDepth
	target hs_5_0
	
	default_params
	{
		param_named g_fNumHairsLOD float 1.0
	}
}

tesselation_hull_program Ogre/Hair/InterpolateHSMultiStrandCollisions hlsl
{
	source Hair.hlsl
	entry_point InterpolateHSMultiStrandCollisions
	target hs_5_0
	
	default_params
	{
		param_named g_fNumHairsLOD float 1.0
	}
}

tesselation_domain_program Ogre/Hair/InterpolateDSMultiStrand hlsl
{
	source Hair.hlsl
	entry_point InterpolateDSMultiStrand
	target ds_5_0
	
	default_params
	{
		param_named g_bApplyAdditionalRenderingTransform int 0
		param_named g_fWidthHairsLOD float 1.0
		param_named g_maxLengthToRoot float 12.0
		param_named g_NumTotalWisps int 0
		param_named g_NumMaxStrandsPerWisp int 0	
		param_named g_thinning float 0.5
		param_named g_useShadows int 1
		param_named g_SigmaA float 1.0
		param_named g_ZNear float 1.0
		param_named g_ZFar float 2.0
	}
}

tesselation_domain_program Ogre/Hair/InterpolateDSMultiStrandDepth hlsl
{
	source Hair.hlsl
	entry_point InterpolateDSMultiStrandDepth
	target ds_5_0
	
	default_params
	{
		param_named g_bApplyAdditionalRenderingTransform bool 0
		param_named g_fWidthHairsLOD float 1.0
		param_named g_NumTotalWisps int 0
		param_named g_NumMaxStrandsPerWisp int 0
		param_named g_thinning float 0.5		
	}
}

tesselation_domain_program Ogre/Hair/InterpolateDSMultiStrandCollisions hlsl
{
	source Hair.hlsl
	entry_point InterpolateDSMultiStrandCollisions
	target ds_5_0
	
	default_params
	{
	
	}
}

tesselation_domain_program Ogre/Hair/InterpolateDSMultiStrandCollisionsWithGS hlsl
{
	source Hair.hlsl
	entry_point InterpolateDSMultiStrandCollisionsWithGS
	target ds_5_0
	
	default_params
	{
		param_named g_NumTotalWisps int 0
		param_named g_NumMaxStrandsPerWisp int 0	
	}
}

geometry_program Ogre/Hair/InterpolateGS hlsl
{
	source Hair.hlsl
	entry_point InterpolateGS
	target gs_5_0
	
	default_params
	{
		param_named g_ScreenWidth float 1280.0
		param_named g_ScreenHeight float 1024.0	
	}
}

geometry_program Ogre/Hair/InterpolateGSDepthShadows hlsl
{
	source Hair.hlsl
	entry_point InterpolateGSDepthShadows
	target gs_5_0
	
	default_params
	{
	
	}
}

geometry_program Ogre/Hair/InterpolateGSMultiStrandCollisions hlsl
{
	source Hair.hlsl
	entry_point InterpolateGSMultiStrandCollisions
	target gs_5_0
	
	default_params
	{
	
	}
}

fragment_program Ogre/Hair/RenderPS hlsl
{
	source Hair.hlsl
	entry_point RenderPS
	target ps_5_0
	
	default_params
	{
		param_named g_ksP float 0.0
		param_named g_ksS float 0.0
		param_named g_kd float 0.0
		param_named g_specPowerPrimary float 0.0
		param_named g_specPowerSecondary float 0.0
		param_named g_ksP_sparkles float 0.0
		param_named g_specPowerPrimarySparkles float 0.0
		param_named g_ka float 0.0
		param_named g_baseColor float4 0.0 0.0 0.0 0.0
		param_named g_specColor float4 0.0 0.0 0.0 0.0
		param_named g_useShadows int 1
		param_named g_SigmaA float 1.0
		param_named g_ZNear float 1.0
		param_named g_ZFar float 2.0
	}
}

fragment_program Ogre/Hair/RenderDepthPSSmall hlsl
{
	source Hair.hlsl
	entry_point RenderDepthPSSmall
	target ps_5_0
	
	default_params
	{
	
	}
}

fragment_program Ogre/Hair/InterpolatePSMultiStrandCollisions hlsl
{
	source Hair.hlsl
	entry_point InterpolatePSMultiStrandCollisions
	target ps_5_0
	
	default_params
	{
		param_named g_densityThreshold float 1.0
		param_named g_textureDepth float 1.0
	}
}

fragment_program Ogre/Hair/RenderDepthPSSmall_DOM hlsl
{
	source Hair.hlsl
	entry_point RenderDepthPSSmall_DOM
	target ps_5_0
	
	default_params
	{
	
	}
}

vertex_program Ogre/Hair/TessellateVSBSplinePassThrough hlsl
{
	source Hair.hlsl
	entry_point TessellateVSBSplinePassThrough
	target vs_4_0
	
	default_params
	{

	}	
}

vertex_program Ogre/Hair/TessellateVSBSplineCFs hlsl
{
	source Hair.hlsl
	entry_point TessellateVSBSplineCFs
	target vs_4_0
	
	default_params
	{

	}	
}

vertex_program Ogre/Hair/TessellateVSBSplineSBCFs hlsl
{
	source Hair.hlsl
	entry_point TessellateVSBSplineSBCFs
	target vs_4_0
	
	default_params
	{

	}	
}

vertex_program Ogre/Hair/TessellateVSBSplineLengths hlsl
{
	source Hair.hlsl
	entry_point TessellateVSBSplineLengths
	target vs_4_0
	
	default_params
	{

	}	
}

vertex_program Ogre/Hair/InterpolateVSMultiStrand_SO hlsl
{
	source Hair.hlsl
	entry_point InterpolateVSMultiStrand_SO
	target vs_4_0
	
	default_params
	{
		param_named g_maxLengthToRoot float 12.0
		param_named g_NumTotalWisps int 0
		param_named g_NumMaxStrandsPerWisp int 0
		param_named g_doCurlyHair int 0
		param_named g_thinning float 0.5
		param_named g_TessellatedMasterStrandLengthMax int 1
	}	
}

vertex_program Ogre/Hair/InterpolateVSSingleStrand_SO hlsl
{
	source Hair.hlsl
	entry_point InterpolateVSSingleStrand_SO
	target vs_4_0
	
	default_params
	{
		param_named g_maxLengthToRoot float 12.0
		param_named g_thinning float 0.5
		param_named g_TessellatedMasterStrandLengthMax int 1
	}	
}

vertex_program Ogre/Hair/InterpolateVSDepthPrepass hlsl
{
	source Hair.hlsl
	entry_point InterpolateVSDepthPrepass
	target vs_4_0
	
	default_params
	{
		param_named g_maxLengthToRoot float 12.0
		param_named g_NumTotalWisps int 0
		param_named g_NumMaxStrandsPerWisp int 0
		param_named g_doCurlyHair int 0
		param_named g_thinning float 0.5
		param_named g_TessellatedMasterStrandLengthMax int 1
	}	
}

vertex_program Ogre/Hair/InterpolateVSDepthPrepass_LOAD hlsl
{
	source Hair.hlsl
	entry_point InterpolateVSDepthPrepass_LOAD
	target vs_4_0
	
	default_params
	{
		param_named g_bApplyAdditionalRenderingTransform int 0
		param_named g_NumTotalWisps int 0
		param_named g_NumMaxStrandsPerWisp int 0		
	}	
}

vertex_program Ogre/Hair/InterpolateVSMultiStrand hlsl
{
	source Hair.hlsl
	entry_point InterpolateVSMultiStrand
	target vs_4_0
	
	default_params
	{
		param_named g_maxLengthToRoot float 12.0
		param_named g_doCurlyHair int 0
	}	
}

vertex_program Ogre/Hair/InterpolateVSClumpDepthPrepass hlsl
{
	source Hair.hlsl
	entry_point InterpolateVSClumpDepthPrepass
	target vs_4_0
	
	default_params
	{
		param_named g_maxLengthToRoot float 12.0
		param_named g_thinning float 0.5
		param_named g_TessellatedMasterStrandLengthMax int 1
	}	
}

vertex_program Ogre/Hair/InterpolateVSClumpDepthPrepass_LOAD hlsl
{
	source Hair.hlsl
	entry_point InterpolateVSClumpDepthPrepass_LOAD
	target vs_4_0
	
	default_params
	{
		param_named g_bApplyAdditionalRenderingTransform int 0
		param_named g_TessellatedMasterStrandLengthMax int 1
	}	
}

vertex_program Ogre/Hair/InterpolateVSSingleStrand hlsl
{
	source Hair.hlsl
	entry_point InterpolateVSSingleStrand
	target vs_4_0
	
	default_params
	{
		param_named g_maxLengthToRoot float 12.0
		param_named g_thinning float 0.5
		param_named g_TessellatedMasterStrandLengthMax int 1
	}	
}

vertex_program Ogre/Hair/InterpolateVSSingleStrand_LOAD hlsl
{
	source Hair.hlsl
	entry_point InterpolateVSSingleStrand_LOAD
	target vs_4_0
	
	default_params
	{
		param_named g_bApplyAdditionalRenderingTransform int 0
		param_named g_NumTotalWisps int 0
		param_named g_NumMaxStrandsPerWisp int 0
		param_named g_useShadows int 1		
		param_named g_SigmaA float 1.0
		param_named g_ZNear float 1.0
		param_named g_ZFar float 2.0
	}	
}

vertex_program Ogre/Hair/InterpolateVSMCollisions hlsl
{
	source Hair.hlsl
	entry_point InterpolateVSMCollisions
	target vs_4_0
	
	default_params
	{
		param_named g_NumTotalWisps int 0
		param_named g_NumMaxStrandsPerWisp int 0
	}	
}

vertex_program Ogre/Hair/InterpolateVS2Grid hlsl
{
	source Hair.hlsl
	entry_point InterpolateVS2Grid
	target vs_4_0
	
	default_params
	{

	}	
}

geometry_program Ogre/Hair/TessellateGSBSpline hlsl
{
	source Hair.hlsl
	entry_point TessellateGSBSpline
	target gs_4_0
	
	default_params
	{

	}	
}

geometry_program Ogre/Hair/TessellateGSBSplineSB hlsl
{
	source Hair.hlsl
	entry_point TessellateGSBSplineSB
	target gs_4_0
	
	default_params
	{

	}	
}

geometry_program Ogre/Hair/TessellateVSBSplineCFsG hlsl
{
	source Hair.hlsl
	entry_point TessellateVSBSplineCFs
	target vs_4_0
	
	default_params
	{

	}	
}

geometry_program Ogre/Hair/TessellateVSBSplineSBCFsG hlsl
{
	source Hair.hlsl
	entry_point TessellateVSBSplineSBCFs
	target vs_4_0
	
	default_params
	{

	}	
}

geometry_program Ogre/Hair/TessellateVSBSplineLengthsG hlsl
{
	source Hair.hlsl
	entry_point TessellateVSBSplineLengths
	target vs_4_0
	
	default_params
	{

	}	
}

geometry_program Ogre/Hair/InterpolateVSMultiStrand_SOG hlsl
{
	source Hair.hlsl
	entry_point InterpolateVSMultiStrand_SO
	target vs_4_0
	
	default_params
	{
		param_named g_TessellatedMasterStrandLengthMax int 1
	}	
}

geometry_program Ogre/Hair/InterpolateVSSingleStrand_SOG hlsl
{
	source Hair.hlsl
	entry_point TessellateVSBSplineCFs
	target vs_4_0
	
	default_params
	{

	}	
}

geometry_program Ogre/Hair/InterpolateGSDepthPrepass hlsl
{
	source Hair.hlsl
	entry_point InterpolateGSDepthPrepass
	target gs_4_0
	
	default_params
	{
		param_named g_ScreenWidth float 1280.0
		param_named g_ScreenHeight float 1024.0
	}	
}

geometry_program Ogre/Hair/InterpolateGSMCollisions hlsl
{
	source Hair.hlsl
	entry_point InterpolateGSMCollisions
	target gs_4_0
	
	default_params
	{

	}	
}

geometry_program Ogre/Hair/InterpolateGS2Grid hlsl
{
	source Hair.hlsl
	entry_point InterpolateGS2Grid
	target gs_4_0
	
	default_params
	{

	}	
}

geometry_program Ogre/Hair/GS_ARRAY hlsl
{
	source Hair.hlsl
	entry_point GS_ARRAY
	target gs_4_0
	
	default_params
	{

	}	
}

tesselation_hull_program Ogre/Hair/InterpolateHSSingleStrand hlsl
{
	source Hair.hlsl
	entry_point InterpolateHSSingleStrand
	target hs_5_0
	
	default_params
	{
		param_named g_fNumHairsLOD float 1.0
	}	
}

tesselation_domain_program Ogre/Hair/InterpolateDSSingleStrand_DEPTH hlsl
{
	source Hair.hlsl
	entry_point InterpolateHSSingleStrand
	target ds_5_0
	
	default_params
	{
		param_named g_bApplyAdditionalRenderingTransform int 0
		param_named g_fWidthHairsLOD float 1.0
		param_named g_maxLengthToRoot float 12.0
		param_named g_doCurlyHair int 0
		param_named g_thinning float 0.5
		param_named g_TessellatedMasterStrandLengthMax int 1
	}	
}

tesselation_domain_program Ogre/Hair/InterpolateDSSingleStrand_NORMAL hlsl
{
	source Hair.hlsl
	entry_point InterpolateDSSingleStrand_NORMAL
	target ds_5_0
	
	default_params
	{
		param_named g_bApplyAdditionalRenderingTransform int 0	
		param_named g_fWidthHairsLOD float 1.0
		param_named g_maxLengthToRoot float 12.0
		param_named g_doCurlyHair int 0
		param_named g_thinning float 0.5
		param_named g_TessellatedMasterStrandLengthMax int 1
		param_named g_useShadows int 1
		param_named g_SigmaA float 1.0
		param_named g_ZNear float 1.0
		param_named g_ZFar float 2.0
	}	
}

fragment_program Ogre/Hair/RenderPSDepthPrepass hlsl
{
	source Hair.hlsl
	entry_point RenderPSDepthPrepass
	target ps_4_0
	
	default_params
	{

	}	
}

fragment_program Ogre/Hair/InterpolatePSMCollisions hlsl
{
	source Hair.hlsl
	entry_point InterpolatePSMCollisions
	target ps_4_0
	
	default_params
	{

	}	
}

fragment_program Ogre/Hair/RenderPSForGridMRT hlsl
{
	source Hair.hlsl
	entry_point RenderPSForGridMRT
	target ps_4_0
	
	default_params
	{

	}	
}

vertex_program Ogre/Hair/InterpolateVSBMultiStrandDepthShadows hlsl
{
	source Hair.hlsl
	entry_point InterpolateVSBMultiStrandDepthShadows
	target vs_4_0
	
	default_params
	{
		param_named g_doCurlyHair int 0
	}
}

vertex_program Ogre/Hair/InterpolateVSSingleStrandDepthShadows hlsl
{
	source Hair.hlsl
	entry_point InterpolateVSSingleStrandDepthShadows
	target vs_4_0
	
	default_params
	{
		param_named g_TessellatedMasterStrandLengthMax int 1
	}
}

vertex_program Ogre/Hair/InterpolateVSSingleStrandDepthShadows_LOAD hlsl
{
	source Hair.hlsl
	entry_point InterpolateVSSingleStrandDepthShadows_LOAD
	target vs_4_0
	
	default_params
	{
			param_named g_bApplyAdditionalRenderingTransform int 0
	}
}

vertex_program Ogre/Hair/FullScreenTriVS hlsl
{
	source Hair.hlsl
	entry_point FullScreenTriVS
	target vs_4_0
	
	default_params
	{
	
	}
}

vertex_program Ogre/Hair/MeshVS hlsl
{
	source Hair.hlsl
	entry_point MeshVS
	target vs_4_0
	
	default_params
	{
	
	}
}

vertex_program Ogre/Hair/MeshVSShadows hlsl
{
	source Hair.hlsl
	entry_point MeshVSShadows
	target vs_4_0
	
	default_params
	{
	
	}
}

vertex_program Ogre/Hair/VSDrawPlane hlsl
{
	source Hair.hlsl
	entry_point VSDrawPlane
	target vs_4_0
	
	default_params
	{
	
	}
}

vertex_program Ogre/Hair/MeshDepthVS hlsl
{
	source Hair.hlsl
	entry_point MeshDepthVS
	target vs_4_0
	
	default_params
	{
		param_named g_ZNear float 1.0
		param_named g_ZFar float 2.0
	}
}

vertex_program Ogre/Hair/VS_GRID hlsl
{
	source Hair.hlsl
	entry_point VS_GRID
	target vs_4_0
	
	default_params
	{
		param_named g_textureHeight float 1.0
		param_named g_textureWidth float 1.0
	}
}

vertex_program Ogre/Hair/VS_COLLISIONS hlsl
{
	source Hair.hlsl
	entry_point VS_COLLISIONS
	target vs_4_0
	
	default_params
	{
	
	}
}

vertex_program Ogre/Hair/VS_GRID_FLUIDSIM hlsl
{
	source Hair.hlsl
	entry_point VS_GRID_FLUIDSIM
	target vs_4_0
	
	default_params
	{
		param_named fluidg_textureWidth int 1
		param_named fluidg_textureHeight int 1
		param_named fluidg_textureDepth int 1
		param_named g_textureDepth float 1.0		
	}
}

vertex_program Ogre/Hair/VSArrow hlsl
{
	source Hair.hlsl
	entry_point VSArrow
	target vs_4_0
	
	default_params
	{
	
	}
}

vertex_program Ogre/Hair/CollisionVS hlsl
{
	source Hair.hlsl
	entry_point CollisionVS
	target vs_4_0
	
	default_params
	{
		param_named g_currentCollisionSphere int 1
	}
}

fragment_program Ogre/Hair/CollisionPS hlsl
{
	source Hair.hlsl
	entry_point CollisionPS
	target ps_4_0
	
	default_params
	{
	
	}
}

fragment_program Ogre/Hair/VisDepthsPS hlsl
{
	source Hair.hlsl
	entry_point VisDepthsPS
	target ps_4_0
	
	default_params
	{
		param_named g_ZNear float 1.0
		param_named g_ZFar float 2.0
	}
}

fragment_program Ogre/Hair/CopyTexturePS hlsl
{
	source Hair.hlsl
	entry_point CopyTexturePS
	target ps_4_0
	
	default_params
	{
	
	}
}

fragment_program Ogre/Hair/MeshPS hlsl
{
	source Hair.hlsl
	entry_point MeshPS
	target ps_4_0
	
	default_params
	{
		param_named g_useScalpTexture int 0
	}
}

fragment_program Ogre/Hair/MeshPSShadows hlsl
{
	source Hair.hlsl
	entry_point MeshPSShadows
	target ps_4_0
	
	default_params
	{
		param_named g_useScalpTexture int 0
		param_named g_useShadows int 1
	}
}

fragment_program Ogre/Hair/PSDrawPlane hlsl
{
	source Hair.hlsl
	entry_point PSDrawPlane
	target ps_4_0
	
	default_params
	{
		param_named g_useShadows bool 1
	}
}

fragment_program Ogre/Hair/MeshDepthPS hlsl
{
	source Hair.hlsl
	entry_point MeshDepthPS
	target ps_4_0
	
	default_params
	{
	
	}
}

fragment_program Ogre/Hair/MeshDepthPS_DOM hlsl
{
	source Hair.hlsl
	entry_point MeshDepthPS_DOM
	target ps_4_0
	
	default_params
	{
	
	}
}

fragment_program Ogre/Hair/PS_DRAW_TEXTURE hlsl
{
	source Hair.hlsl
	entry_point PS_DRAW_TEXTURE
	target ps_4_0
	
	default_params
	{
		param_named g_densityThreshold float 1.0
		param_named g_rowWidth int 1
		param_named g_colWidth int 1
	}
}

fragment_program Ogre/Hair/PS_DRAW_COLLISIONS_TEXTURE hlsl
{
	source Hair.hlsl
	entry_point PS_DRAW_COLLISIONS_TEXTURE
	target ps_4_0
	
	default_params
	{
	
	}
}

fragment_program Ogre/Hair/PS_RESOLVE_SUPERSAMPLE hlsl
{
	source Hair.hlsl
	entry_point PS_RESOLVE_SUPERSAMPLE
	target ps_4_0
	
	default_params
	{
		param_named g_SSg_textureWidth float 0.0
		param_named g_SSg_textureHeight float 0.0
	}
}

fragment_program Ogre/Hair/PS_RECONSTRUCT_DEPTH hlsl
{
	source Hair.hlsl
	entry_point PS_RECONSTRUCT_DEPTH
	target ps_4_0
	
	default_params
	{
	
	}
}

fragment_program Ogre/Hair/PS_DRAW_TEXTURE_DEMUX hlsl
{
	source Hair.hlsl
	entry_point PS_DRAW_TEXTURE_DEMUX
	target ps_4_0
	
	default_params
	{
		param_named g_densityThreshold float 1.0
		param_named g_rowWidth int 1
		param_named g_colWidth int 1
		param_named g_textureIndex int 1
	}
}

fragment_program Ogre/Hair/PS_DEMUX hlsl
{
	source Hair.hlsl
	entry_point PS_DEMUX
	target ps_4_0
	
	default_params
	{
		param_named g_gridZIndex int 1
	}
}

fragment_program Ogre/Hair/PS_VOXELIZE_OBSTACLES hlsl
{
	source Hair.hlsl
	entry_point PS_VOXELIZE_OBSTACLES
	target ps_4_0
	
	default_params
	{
		param_named g_NumSphereImplicits int 1
		param_named g_NumCylinderImplicits int 1
		param_named g_NumSphereNoMoveImplicits int 1
		param_named g_densityThreshold float 1.0
		param_named g_textureDepth float 1.0
		param_named g_gridZIndex int 1
	}
}

fragment_program Ogre/Hair/PS_DEMUX_TO_3D_OBSTACLE_TEX hlsl
{
	source Hair.hlsl
	entry_point PS_DEMUX_TO_3D_OBSTACLE_TEX
	target ps_4_0
	
	default_params
	{
		param_named g_NumSphereImplicits int 1
		param_named g_NumCylinderImplicits int 1
		param_named g_NumSphereNoMoveImplicits int 1
		param_named g_densityThreshold float 1.0
		param_named g_textureDepth float 1.0
	}
}

fragment_program Ogre/Hair/PSArrow hlsl
{
	source Hair.hlsl
	entry_point PSArrow
	target ps_4_0
	
	default_params
	{
	
	}
}

material Ogre/Hair/RenderHair
{
	technique RenderHair
	{
		//hardwareTessellation passes for multistrand interpolation  ------------------------------------------------
		pass InterpolateAndRenderM_HardwareTess
		{
			vertex_program_ref Ogre/Hair/InterpolateVS_DUMMY11
			{
			
			}
			
			tesselation_hull_program_ref Ogre/Hair/InterpolateHSMultiStrand
			{
			
			}
			
			tesselation_domain_program_ref Ogre/Hair/InterpolateDSMultiStrand
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGS
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderPS
			{
			
			}

			scene_blend alpha_blend
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}
		pass InterpolateInstancedVS_LOAD
		{
			vertex_program_ref Ogre/Hair/InterpolateVSMultiStrand_LOAD
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGS
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderPS
			{
			
			}

			scene_blend alpha_blend
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}  
		pass InterpolateAndRenderDepth_HardwareTess
		{
			vertex_program_ref Ogre/Hair/InterpolateVS_DUMMY11
			{
			
			}
			
			tesselation_hull_program_ref Ogre/Hair/InterpolateHSMultiStrandDepth
			{
			
			}
			
			tesselation_domain_program_ref Ogre/Hair/InterpolateDSMultiStrandDepth
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSDepthShadows
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderDepthPSSmall
			{
			
			}

			scene_blend alpha_blend
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}

		pass InterpolateAndRenderDepth_HardwareTess_DOM
		{
			vertex_program_ref Ogre/Hair/InterpolateVS_DUMMY11
			{
			
			}
			
			tesselation_hull_program_ref Ogre/Hair/InterpolateHSMultiStrandDepth
			{
			
			}
			
			tesselation_domain_program_ref Ogre/Hair/InterpolateDSMultiStrandDepth
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSDepthShadows
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderDepthPSSmall_DOM
			{
			
			}

			scene_blend add
			scene_blend_op min
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}

		pass InterpolateInstancedDepthVS_LOAD
		{
			vertex_program_ref Ogre/Hair/InterpolateVSMultiStrandDepthShadows_LOAD
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSDepthShadows
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderDepthPSSmall
			{
			
			}

			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}

		pass InterpolateInstancedDepthVS_LOAD_DOM
		{
			vertex_program_ref Ogre/Hair/InterpolateVSMultiStrandDepthShadows_LOAD
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSDepthShadows
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderDepthPSSmall_DOM
			{
			
			}

			scene_blend add
			scene_blend_op min
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}

		 pass InterpolateAndRenderCollisions_HardwareTess
		{
			vertex_program_ref Ogre/Hair/InterpolateVS_DUMMY11
			{
			
			}
			
			tesselation_hull_program_ref Ogre/Hair/InterpolateHSMultiStrandCollisions
			{
			
			}
			
			tesselation_domain_program_ref Ogre/Hair/InterpolateDSMultiStrandCollisionsWithGS
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSMultiStrandCollisions
			{
			
			}
			fragment_program_ref Ogre/Hair/InterpolatePSMultiStrandCollisions
			{
			
			}

			scene_blend add
			scene_blend_op min
			depth_check off
			depth_write off
			cull_hardware none
			cull_software none
		}   
		pass InterpolateInstancedBaryCentricCollisions
		{
			vertex_program_ref Ogre/Hair/InterpolateVSMultiStrandCollisions
			{
			
			}
			fragment_program_ref Ogre/Hair/InterpolatePSMultiStrandCollisions
			{
			
			}

			scene_blend add
			scene_blend_op min
			depth_check off
			depth_write off
			cull_hardware none
			cull_software none
		}      
		
		//tessellation
		pass Tessellate
		{
			vertex_program_ref Ogre/Hair/TessellateVSBSplinePassThrough
			{
			
			}
			geometry_program_ref Ogre/Hair/TessellateGSBSpline
			{
			
			}
			depth_check off
			depth_write off
		}
		pass TessellateSB
		{
			vertex_program_ref Ogre/Hair/TessellateVSBSplinePassThrough
			{
			
			}
			geometry_program_ref Ogre/Hair/TessellateGSBSplineSB
			{
			
			}
			depth_check off
			depth_write off
		}
		
		pass TessellateCoordinateFrames
		{
			vertex_program_ref Ogre/Hair/TessellateVSBSplineCFs
			{
			
			}
			geometry_program_ref Ogre/Hair/TessellateVSBSplineCFsG
			{
			
			}
			depth_check off
			depth_write off	
		}
		
		pass TessellateCoordinateFramesSB
		{
			vertex_program_ref Ogre/Hair/TessellateVSBSplineSBCFs
			{
			
			}
			geometry_program_ref Ogre/Hair/TessellateVSBSplineSBCFsG
			{
			
			}
			depth_check off
			depth_write off
		}
		
		pass TessellateLengths
		{
			vertex_program_ref Ogre/Hair/TessellateVSBSplineLengths
			{
			
			}
			geometry_program_ref Ogre/Hair/TessellateVSBSplineLengthsG
			{
			
			}

			depth_check off
			depth_write off
		}
		   
		//streamout the attributes-----------------------------------------------------
		pass SO_M_Attributes
		{
			vertex_program_ref Ogre/Hair/InterpolateVSMultiStrand_SO
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateVSMultiStrand_SOG
			{
			
			}

			depth_check off
			depth_write off	
		}
		pass SO_S_Attributes
		{
			vertex_program_ref Ogre/Hair/InterpolateVSSingleStrand_SO
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateVSSingleStrand_SOG
			{
			
			}

			depth_check off
			depth_write off  
		}
		pass InterpolateInstancedDepthVSSingleStrand11
		{
			vertex_program_ref Ogre/Hair/InterpolateVS_DUMMY11
			{
			
			}
			
			tesselation_hull_program_ref Ogre/Hair/InterpolateHSSingleStrand
			{
			
			}
			
			tesselation_domain_program_ref Ogre/Hair/InterpolateDSSingleStrand_DEPTH
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSDepthShadows
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderDepthPSSmall
			{
			
			}

			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}
		pass InterpolateInstancedDepthVSSingleStrand11_DOM
		{
			vertex_program_ref Ogre/Hair/InterpolateVS_DUMMY11
			{
			
			}
			
			tesselation_hull_program_ref Ogre/Hair/InterpolateHSSingleStrand
			{
			
			}
			
			tesselation_domain_program_ref Ogre/Hair/InterpolateDSSingleStrand_DEPTH
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSDepthShadows
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderDepthPSSmall_DOM
			{
			
			}

			scene_blend add
			scene_blend_op min
			depth_check off
			depth_write off
			cull_hardware none
			cull_software none
		}
		pass InterpolateAndRenderS_HardwareTess
		{
			vertex_program_ref Ogre/Hair/InterpolateVS_DUMMY11
			{
			
			}
			
			tesselation_hull_program_ref Ogre/Hair/InterpolateHSSingleStrand
			{
			
			}
			
			tesselation_domain_program_ref Ogre/Hair/InterpolateDSSingleStrand_NORMAL
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGS
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderPS
			{
			
			}

			scene_blend alpha_blend
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}

		//normal rendering
		pass InterpolateInstancedDepthPrepassVS
		{
			vertex_program_ref Ogre/Hair/InterpolateVSDepthPrepass
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSDepthPrepass
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderPSDepthPrepass
			{
			
			}

			alpha_to_coverage on
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}    
		pass InterpolateInstancedDepthPrepassVS_LOAD
		{
			vertex_program_ref Ogre/Hair/InterpolateVSDepthPrepass_LOAD
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSDepthPrepass
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderPSDepthPrepass
			{
			
			}

			alpha_to_coverage on
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}
		
		pass InterpolateInstancedVS
		{
			vertex_program_ref Ogre/Hair/InterpolateVSMultiStrand
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGS
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderPS
			{
			
			}

			scene_blend alpha_blend
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}

		
		pass InterpolateInstancedVSSingleStrandDepthPrepass
		{
			vertex_program_ref Ogre/Hair/InterpolateVSClumpDepthPrepass
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSDepthPrepass
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderPSDepthPrepass
			{
			
			}

			alpha_to_coverage on
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}
		pass InterpolateInstancedVSSingleStrandDepthPrepass_LOAD
		{
			vertex_program_ref Ogre/Hair/InterpolateVSClumpDepthPrepass_LOAD
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSDepthPrepass
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderPSDepthPrepass
			{
			
			}

			alpha_to_coverage on
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}
		
		pass InterpolateInstancedVSSingleStrand
		{
			vertex_program_ref Ogre/Hair/InterpolateVSSingleStrand
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGS
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderPS
			{
			
			}

			scene_blend alpha_blend
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}
		pass InterpolateInstancedVSSingleStrand_LOAD
		{
			vertex_program_ref Ogre/Hair/InterpolateVSSingleStrand_LOAD
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGS
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderPS
			{
			
			}

			scene_blend alpha_blend
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}
		
		//density rendering

		pass InterpolateInstancedVSRenderCollisionsNormal
		{
			vertex_program_ref Ogre/Hair/InterpolateVSMCollisions
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSMCollisions
			{
			
			}
			fragment_program_ref Ogre/Hair/InterpolatePSMCollisions
			{
			
			}

			depth_check on
			depth_write on
			cull_hardware none
			cull_software none 
		} 
	   
		pass InterpolateInstancedVSForGrid3DTextureMRT
		{
			vertex_program_ref Ogre/Hair/InterpolateVS2Grid
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGS2Grid
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderPSForGridMRT
			{
			
			}
			scene_blend add
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}
		//next passes are for shadows
		pass InterpolateInstancedDepthVS
		{
			vertex_program_ref Ogre/Hair/InterpolateVSBMultiStrandDepthShadows
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSDepthShadows
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderDepthPSSmall
			{
			
			}
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}

		pass InterpolateInstancedDepthVS_DOM
		{
			vertex_program_ref Ogre/Hair/InterpolateVSBMultiStrandDepthShadows
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSDepthShadows
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderDepthPSSmall_DOM
			{
			
			}
			scene_blend add
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}

		pass InterpolateInstancedDepthVSSingleStrand
		{
			vertex_program_ref Ogre/Hair/InterpolateVSSingleStrandDepthShadows
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSDepthShadows
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderDepthPSSmall
			{
			
			}
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}

		pass InterpolateInstancedDepthVSSingleStrand_DOM
		{
			vertex_program_ref Ogre/Hair/InterpolateVSSingleStrandDepthShadows
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSDepthShadows
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderDepthPSSmall_DOM
			{
			
			}
			scene_blend add
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}

		pass InterpolateInstancedDepthVSSingleStrand_LOAD
		{
			vertex_program_ref Ogre/Hair/InterpolateVSSingleStrandDepthShadows_LOAD
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSDepthShadows
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderDepthPSSmall
			{
			
			}
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		} 
		pass InterpolateInstancedDepthVSSingleStrand_LOAD_DOM
		{
			vertex_program_ref Ogre/Hair/InterpolateVSSingleStrandDepthShadows_LOAD
			{
			
			}
			geometry_program_ref Ogre/Hair/InterpolateGSDepthShadows
			{
			
			}
			fragment_program_ref Ogre/Hair/RenderDepthPSSmall_DOM
			{
			
			}
			scene_blend add
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		} 
			
		pass VisualizeShadowMap
		{
			vertex_program_ref Ogre/Hair/FullScreenTriVS
			{
			
			}
			fragment_program_ref Ogre/Hair/VisDepthsPS
			{
			
			}
			depth_check off
			depth_write off
			cull_hardware none
			cull_software none	
		}
		
		pass copyTexture
		{
			vertex_program_ref Ogre/Hair/FullScreenTriVS
			{
			
			}
			fragment_program_ref Ogre/Hair/CopyTexturePS
			{
			
			}
			scene_blend alpha_blend
			depth_check off
			depth_write off
			cull_hardware none
			cull_software none
		}
		
		pass AllNulls
		{
		}
	}
}

material Ogre/Hair/RenderMesh
{
	technique RenderMesh
	{
		pass RenderWithoutShadows
		{
			vertex_program_ref Ogre/Hair/MeshVS
			{
			
			}
			fragment_program_ref Ogre/Hair/MeshPS
			{
			
			}
			depth_check on
			depth_write off
			cull_hardware none
			cull_software none
		}
		pass RenderWithShadows
		{
			vertex_program_ref Ogre/Hair/MeshVSShadows
			{
			
			}
			fragment_program_ref Ogre/Hair/MeshPSShadows
			{
			
			}
			depth_check on
			depth_write off
			cull_hardware none
			cull_software none
		}
		pass RenderMeshDepthPass
		{
			vertex_program_ref Ogre/Hair/MeshVS
			{
			
			}
			fragment_program_ref Ogre/Hair/MeshPS
			{
			
			}
			depth_check off
			depth_write off
			cull_hardware none
			cull_software none
			colour_write off
		}
	}
}
material Ogre/Hair/RenderPlane
{
	technique RenderPlane
	{
		pass RenderPlaneWithShadows
		{
			vertex_program_ref Ogre/Hair/VSDrawPlane
			{
			
			}
			fragment_program_ref Ogre/Hair/PSDrawPlane
			{
			
			}
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
			
		}  
		pass RenderPlaneWithoutShadows
		{
			vertex_program_ref Ogre/Hair/VSDrawPlane
			{
			
			}
			fragment_program_ref Ogre/Hair/PSDrawPlane
			{
			
			}
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none			
		}  
	}
}

material Ogre/Hair/RenderMeshDepth
{
	technique RenderMeshDepth
	{
		pass
		{
			vertex_program_ref Ogre/Hair/MeshDepthVS
			{
			
			}
			fragment_program_ref Ogre/Hair/MeshDepthPS
			{
			
			}
			depth_check on
			depth_write on
			cull_hardware none
			cull_software none
		}  
	}
}
material Ogre/Hair/RenderMeshDepth_DOM
{
	technique RenderMeshDepth_DOM
	{
		pass
		{
			vertex_program_ref Ogre/Hair/MeshDepthVS
			{
			
			}
			fragment_program_ref Ogre/Hair/MeshDepthPS_DOM
			{
			
			}
			scene_blend add
			depth_check off
			depth_write off
			cull_hardware none
			cull_software none
		}  
	}
}

material Ogre/Hair/RenderArrow
{
	technique RenderArrow
	{
		pass P0
		{
			vertex_program_ref Ogre/Hair/VSArrow
			{
			
			}
			fragment_program_ref Ogre/Hair/PSArrow
			{
			
			}
			depth_check on
			depth_write off
			cull_hardware none
			cull_software none       
		}
	}
}

material Ogre/Hair/DrawTexture
{
	technique DrawTexture
	{
		pass
		{
			vertex_program_ref Ogre/Hair/VS_GRID
			{
			
			}

			fragment_program_ref Ogre/Hair/PS_DRAW_TEXTURE
			{
			
			}
			depth_check off
			depth_write off
		}
		pass drawCollisionsTexture
		{
			vertex_program_ref Ogre/Hair/VS_COLLISIONS
			{
			
			}

			fragment_program_ref Ogre/Hair/PS_DRAW_COLLISIONS_TEXTURE
			{
			
			}
			depth_check off
			depth_write off
		}
		pass ResolveSuperSample
		{
			vertex_program_ref Ogre/Hair/VS_COLLISIONS
			{
			
			}

			fragment_program_ref Ogre/Hair/PS_RESOLVE_SUPERSAMPLE
			{
			
			}
			depth_check off
			depth_write off
		}
		pass ReconstructDepth
		{
			vertex_program_ref Ogre/Hair/VS_COLLISIONS
			{
			
			}

			fragment_program_ref Ogre/Hair/PS_RECONSTRUCT_DEPTH
			{
			
			}
			depth_check off
			depth_write on
			colour_write off
		}       
	}
}

material Ogre/Hair/DrawTextureDemuxed
{
	technique DrawTextureDemuxed
	{
		pass
		{
			vertex_program_ref Ogre/Hair/VS_GRID
			{
			
			}

			fragment_program_ref Ogre/Hair/PS_DRAW_TEXTURE_DEMUX
			{
			
			}
			depth_check off
			depth_write off
		}
	}
}

material Ogre/Hair/TextureDemux
{
	technique TextureDemux
	{
		pass
		{
			vertex_program_ref Ogre/Hair/VS_GRID
			{
			
			}

			fragment_program_ref Ogre/Hair/PS_DEMUX
			{
			
			}
			depth_check off
			depth_write off
		}
	}
}

material Ogre/Hair/VoxelizeObstacles
{
	technique VoxelizeObstacles
	{
		pass
		{
			vertex_program_ref Ogre/Hair/VS_GRID
			{
			
			}

			fragment_program_ref Ogre/Hair/PS_VOXELIZE_OBSTACLES
			{
			
			}
			depth_check off
			depth_write off
		}
	}
}

material Ogre/Hair/RenderCollisionObjects
{
	technique RenderCollisionObjects
	{
		pass
		{
			vertex_program_ref Ogre/Hair/CollisionVS
			{
			
			}

			fragment_program_ref Ogre/Hair/CollisionPS
			{
			
			}
			depth_check on
			depth_write off
			cull_hardware none
			cull_software none
		}
	}
}

material Ogre/Hair/DemuxTo3DFluidObstacles
{
	technique DemuxTo3DFluidObstacles
	{
		pass
		{
			vertex_program_ref Ogre/Hair/VS_GRID_FLUIDSIM
			{
			
			}
			geometry_program_ref Ogre/Hair/GS_ARRAY
			{
			
			}
			fragment_program_ref Ogre/Hair/PS_DEMUX_TO_3D_OBSTACLE_TEX
			{
			
			}
			depth_check off
			depth_write off
		}

	}
}*/