//---------------------------------------------------------------------------
//These materials/shaders are part of the NEW InstanceManager implementation
//Written by Matias N. Goldberg ("dark_sylinc")
//---------------------------------------------------------------------------

//--------------------------------------------------------------
// GLSL Programs
//--------------------------------------------------------------
fragment_program Ogre/Instancing_glsl_ps glsl
{
	source Instancing.frag

	preprocessor_defines DEPTH_SHADOWRECEIVER=1

	default_params
	{
		param_named			diffuseMap				int 0
		param_named			shadowMap				int 1
	}
}

fragment_program Ogre/Instancing/shadow_caster_glsl_ps glsl glsles
{
    source pssmCasterFp.glsl
}

//--------------------------------------------------------------
// GLSL ES Programs
//--------------------------------------------------------------
fragment_program Ogre/Instancing_glsles_ps glsles
{
	source Instancing.frag
	syntax glsl300es

	preprocessor_defines DEPTH_SHADOWRECEIVER=1

	default_params
	{
		param_named			diffuseMap				int 0
		param_named			shadowMap				int 1
	}
}

//--------------------------------------------------------------
// CG Programs
//--------------------------------------------------------------
fragment_program Ogre/Instancing_hlsl_ps hlsl
{
	source Instancing_ps.cg
	entry_point main_ps
	preprocessor_defines DEPTH_SHADOWRECEIVER
}

fragment_program Ogre/Instancing/shadow_caster_hlsl_ps hlsl
{
	source pssm.cg
	target ps_3_0
	entry_point shadow_caster_ps

	default_params
	{
	}
}


//--------------------------------------------------------------
// Unified CG/GLSL Programs
//--------------------------------------------------------------
fragment_program Ogre/Instancing_ps unified
{
	delegate Ogre/Instancing_glsl_ps
	delegate Ogre/Instancing_glsles_ps
	delegate Ogre/Instancing_hlsl_ps
	
	default_params
	{
		param_named_auto	lightPosition		light_position			0
		param_named_auto	cameraPosition		camera_position
		param_named_auto	lightAmbient		ambient_light_colour
		param_named_auto	lightDiffuse		light_diffuse_colour	0
		param_named_auto	lightSpecular		light_specular_colour	0
		param_named_auto	lightGloss			surface_shininess
	}
}

fragment_program Ogre/Instancing/shadow_caster_ps unified
{
	delegate Ogre/Instancing/shadow_caster_glsl_ps
	delegate Ogre/Instancing/shadow_caster_hlsl_ps
}
