//---------------------------------------------------
// This file includes a number of basic GPU programs
// for use in many materials.
//---------------------------------------------------


// A really basic ambient pass program, support for one texture coordinate set
vertex_program Ogre/BasicVertexPrograms/AmbientOneTextureCg cg
{
    source Example_Basic.cg
    entry_point ambientOneTexture_vp
    profiles vs_1_1 arbvp1

    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
        param_named_auto ambient ambient_light_colour
    }

}

// A really basic ambient pass program, support for one texture coordinate set
vertex_program Ogre/BasicVertexPrograms/AmbientOneTextureHLSL hlsl
{
    source Example_Basic.cg
    entry_point ambientOneTexture_vp
    target vs_2_0

    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
        param_named_auto ambient ambient_light_colour
    }
}

// A really basic ambient pass program, support for one texture coordinate set
vertex_program Ogre/BasicVertexPrograms/AmbientOneTextureGLSL glsl glsles
{
    source AmbientOneTexture.glsl

    default_params
    {
        param_named_auto ambient ambient_light_colour
        param_named_auto worldViewProj worldviewproj_matrix
    }
}

vertex_program Ogre/BasicVertexPrograms/AmbientOneTextureWithUVGLSL glsl glsles
{
    source AmbientOneTextureWithUV.glsl

    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
        param_named_auto ambient ambient_light_colour
    }
}

vertex_program Ogre/BasicVertexPrograms/AmbientOneTextureWithUV unified
{
    delegate Ogre/BasicVertexPrograms/AmbientOneTextureWithUVGLSL
    delegate Ogre/BasicVertexPrograms/AmbientOneTextureHLSL
    delegate Ogre/BasicVertexPrograms/AmbientOneTextureCg
}

vertex_program Ogre/BasicVertexPrograms/AmbientOneTextureUnified unified
{
    delegate Ogre/BasicVertexPrograms/AmbientOneTextureGLSL
    delegate Ogre/BasicVertexPrograms/AmbientOneTextureHLSL
    delegate Ogre/BasicVertexPrograms/AmbientOneTextureCg
}

fragment_program Ogre/BasicFragmentPrograms/DiffuseOneTextureCg cg
{
    source Example_Basic.cg
    entry_point diffuseOneTexture_fp
    profiles ps_2_0 arbfp1
}

fragment_program Ogre/BasicFragmentPrograms/DiffuseOneTextureHLSL hlsl
{
    source Example_Basic.cg
    entry_point diffuseOneTexture_fp
    target ps_2_0
}

fragment_program Ogre/BasicFragmentPrograms/DiffuseOneTextureGLSL glsl glsles
{
    source DiffuseOneTexture.glsl
    default_params
    {
        param_named texMap int 0
    }
}

fragment_program Ogre/BasicFragmentPrograms/DiffuseOneTexture unified
{
    delegate Ogre/BasicFragmentPrograms/DiffuseOneTextureGLSL
	delegate Ogre/BasicFragmentPrograms/DiffuseOneTextureHLSL
    delegate Ogre/BasicFragmentPrograms/DiffuseOneTextureCg
}

// A really basic ambient pass program, support for one texture coordinate set
fragment_program Ogre/BasicFragmentPrograms/PassthroughFP unified
{
    delegate Ogre/BasicFragmentPrograms/PassthroughFpGLSL
	delegate Ogre/BasicFragmentPrograms/PassthroughFpHLSL
    delegate Ogre/BasicFragmentPrograms/PassthroughFpCgSm4
    delegate Ogre/BasicFragmentPrograms/PassthroughFpCg
}

// A really basic ambient pass program, support for one texture coordinate set
fragment_program Ogre/BasicFragmentPrograms/PassthroughFpCgSm4 cg
{
    source PassthroughFP_sm4.cg
    profiles ps_4_0 ps_4_0_level_9_1 ps_4_0_level_9_3
}

// A really basic ambient pass program, support for one texture coordinate set
fragment_program Ogre/BasicFragmentPrograms/PassthroughFpHLSL hlsl
{
    source PassthroughFP_sm4.hlsl
    target ps_4_0 ps_4_0_level_9_1 ps_4_0_level_9_3
}


fragment_program Ogre/BasicFragmentPrograms/PassthroughFpCg cg
{
    entry_point mainCg
    source PassthroughFP.cg
    profiles ps_2_0 arbfp1
}

// A really basic ambient pass program, support for one texture coordinate set
fragment_program Ogre/BasicFragmentPrograms/PassthroughFpCgSm4ForAmbientOneTexture cg
{
    entry_point mainForAmbientOneTexture
    source PassthroughFP_sm4.cg
    profiles ps_4_0 ps_4_0_level_9_1 ps_4_0_level_9_3
}


// A really basic ambient pass program, support for one texture coordinate set
fragment_program Ogre/BasicFragmentPrograms/PassthroughFpGLSL glsl glsles
{
    source PassthroughFP.glsl
}

// Basic hardware morph animation (no normals)
vertex_program Ogre/HardwareMorphAnimationCg cg
{
    source Example_Basic.cg
    entry_point hardwareMorphAnimation
    profiles vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3 vs_1_1 arbvp1

    includes_morph_animation true
    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
        param_named_auto anim_t animation_parametric
    }
}

// Basic hardware morph animation (no normals)
vertex_program Ogre/HardwareMorphAnimationHLSL hlsl
{
    source Example_Basic.cg
    entry_point hardwareMorphAnimation
    target vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3

    includes_morph_animation true
    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
        param_named_auto anim_t animation_parametric
    }
}

// Basic hardware morph animation (no normals)
vertex_program Ogre/HardwareMorphAnimationGLSL glsl glsles
{
    source HardwareMorphAnimationVp.glsl

    includes_morph_animation true
    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
        param_named_auto anim_t animation_parametric
    }
}

vertex_program Ogre/HardwareMorphAnimation unified
{
	 delegate Ogre/HardwareMorphAnimationHLSL
    delegate Ogre/HardwareMorphAnimationCg
    delegate Ogre/HardwareMorphAnimationGLSL
}

// Basic hardware pose animation supporting 2 active poses (no normals)
vertex_program Ogre/HardwarePoseAnimationCg cg
{
    source Example_Basic.cg
    entry_point hardwarePoseAnimation
    profiles vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3 vs_1_1 arbvp1

    includes_pose_animation 2
    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
        param_named_auto anim_t animation_parametric
    }
}

// Basic hardware pose animation supporting 2 active poses (no normals)
vertex_program Ogre/HardwarePoseAnimationHLSL hlsl
{
    source Example_Basic.cg
    entry_point hardwarePoseAnimation
    target vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3

    includes_pose_animation 2
    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
        param_named_auto anim_t animation_parametric
    }
}

// Basic hardware pose animation supporting 2 active poses (no normals)
vertex_program Ogre/HardwarePoseAnimationGLSL glsl glsles
{
    source HardwarePoseAnimationVp.glsl

    includes_pose_animation 2
    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
        param_named_auto anim_t animation_parametric
    }
}
vertex_program Ogre/HardwarePoseAnimation unified
{
	delegate Ogre/HardwarePoseAnimationHLSL
    delegate Ogre/HardwarePoseAnimationCg
    delegate Ogre/HardwarePoseAnimationGLSL
}

// Basic hardware morph animation (with normals)
vertex_program Ogre/HardwareMorphAnimationWithNormalsCg cg
{
    source Example_Basic.cg
    entry_point hardwareMorphAnimationWithNormals
    profiles vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3 vs_1_1 arbvp1

    includes_morph_animation true
    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
        param_named_auto anim_t animation_parametric
        param_named_auto objSpaceLightPos light_position_object_space 0
        param_named_auto ambient ambient_light_colour
    }
}

// Basic hardware morph animation (with normals)
vertex_program Ogre/HardwareMorphAnimationWithNormalsHLSL hlsl
{
    source Example_Basic.cg
    entry_point hardwareMorphAnimationWithNormals
    target vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3

    includes_morph_animation true
    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
        param_named_auto anim_t animation_parametric
        param_named_auto objSpaceLightPos light_position_object_space 0
        param_named_auto ambient ambient_light_colour
    }
}

// Basic hardware morph animation (with normals)
vertex_program Ogre/HardwareMorphAnimationWithNormalsGLSL glsl glsles
{
    source HardwareMorphAnimationWithNormalsVp.glsl

    includes_morph_animation true
    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
        param_named_auto anim_t animation_parametric
        param_named_auto objSpaceLightPos light_position_object_space 0
        param_named_auto ambient ambient_light_colour
    }
}

vertex_program Ogre/HardwareMorphAnimationWithNormals unified
{
	delegate Ogre/HardwareMorphAnimationWithNormalsHLSL
    delegate Ogre/HardwareMorphAnimationWithNormalsCg
    delegate Ogre/HardwareMorphAnimationWithNormalsGLSL
}

// Basic hardware pose animation supporting 2 active poses (with normals)
vertex_program Ogre/HardwarePoseAnimationWithNormalsHLSL hlsl
{
    source Example_Basic.cg
    entry_point hardwarePoseAnimationWithNormals
    target vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3

    includes_pose_animation 2
    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
        param_named_auto anim_t animation_parametric
        param_named_auto objSpaceLightPos light_position_object_space 0
        param_named_auto ambient ambient_light_colour
    }
}

// Basic hardware pose animation supporting 2 active poses (with normals)
vertex_program Ogre/HardwarePoseAnimationWithNormalsCg cg
{
    source Example_Basic.cg
    entry_point hardwarePoseAnimationWithNormals
    profiles vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3 vs_1_1 arbvp1

    includes_pose_animation 2
    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
        param_named_auto anim_t animation_parametric
        param_named_auto objSpaceLightPos light_position_object_space 0
        param_named_auto ambient ambient_light_colour
    }
}

// Basic hardware pose animation supporting 2 active poses (with normals)
vertex_program Ogre/HardwarePoseAnimationWithNormalsGLSL glsl glsles
{
    source HardwarePoseAnimationWithNormalsVp.glsl

    includes_pose_animation 2
    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
        param_named_auto anim_t animation_parametric
        param_named_auto objSpaceLightPos light_position_object_space 0
        param_named_auto ambient ambient_light_colour
    }
}

vertex_program Ogre/HardwarePoseAnimationWithNormals unified
{
	delegate Ogre/HardwarePoseAnimationWithNormalsHLSL
    delegate Ogre/HardwarePoseAnimationWithNormalsCg
    delegate Ogre/HardwarePoseAnimationWithNormalsGLSL
}