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

}

vertex_program Ogre/BasicVertexPrograms/AmbientOneTextureCgSm4 cg
{
    source Example_Basic_sm4.cg
    entry_point ambientOneTexture_vp
    profiles vs_4_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/AmbientOneTextureHLSL hlsl
{
    source Example_Basic.hlsl
    entry_point ambientOneTexture_vp
    target vs_4_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
{
    source AmbientOneTexture.glsl
}

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

    default_params
    {
        param_named_auto ambient ambient_light_colour
        param_named_auto worldViewProj worldviewproj_matrix
    }
}

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

    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
        param_named_auto ambient ambient_light_colour
    }
}

vertex_program Ogre/BasicVertexPrograms/AmbientOneTextureWithUVGLSLES glsles
{
    source AmbientOneTextureWithUV.glsles

    default_params
    {
        param_named_auto worldViewProj worldviewproj_matrix
        param_named_auto ambient ambient_light_colour
    }
}

vertex_program Ogre/BasicVertexPrograms/AmbientOneTextureWithUVGLSL glsl
{
    source AmbientOneTextureWithUV.glsl
    syntax glsl150

    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/AmbientOneTextureWithUVGLSLES
    delegate Ogre/BasicVertexPrograms/AmbientOneTextureHLSL
    delegate Ogre/BasicVertexPrograms/AmbientOneTextureCg
    delegate Ogre/BasicVertexPrograms/AmbientOneTextureCgSm4
}

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

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

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

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

fragment_program Ogre/BasicFragmentPrograms/DiffuseOneTexture unified
{
	delegate Ogre/BasicFragmentPrograms/DiffuseOneTextureGLSL
    delegate Ogre/BasicFragmentPrograms/DiffuseOneTextureGLSLES
    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/PassthroughFpGLSLES
    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
{
    entry_point main
    source PassthroughFP_sm4.cg
    profiles ps_4_0
}

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
}


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

fragment_program Ogre/BasicFragmentPrograms/PassthroughFpGLSL glsl
{
    source PassthroughFP.glsl
}

// Same as below, but for use when rendering texture shadows
vertex_program Ogre/HardwareSkinningOneWeightShadowCaster cg
{
    source Example_Basic.cg
    entry_point hardwareSkinningOneWeightCaster_vp
    profiles vs_4_0 vs_1_1 arbvp1
    includes_skeletal_animation true
}
// Basic hardware skinning using one indexed weight per vertex
vertex_program Ogre/HardwareSkinningOneWeight cg
{
   source Example_Basic.cg
   entry_point hardwareSkinningOneWeight_vp
   profiles vs_4_0 vs_1_1 arbvp1
   includes_skeletal_animation true
}
// Same as below, but for use when rendering texture shadows
vertex_program Ogre/HardwareSkinningTwoWeightsShadowCasterCg cg
{
    source Example_Basic.cg
    entry_point hardwareSkinningTwoWeightsCaster_vp
    profiles vs_4_0 vs_1_1 arbvp1
    includes_skeletal_animation true
}

// Same as below, but for use when rendering texture shadows
vertex_program Ogre/HardwareSkinningTwoWeightsShadowCasterHLSL hlsl
{
    source Example_Basic.hlsl
    entry_point hardwareSkinningTwoWeightsCaster_vp
    target vs_4_0
    includes_skeletal_animation true
    column_major_matrices false
}

vertex_program Ogre/HardwareSkinningTwoWeightsShadowCasterGLSL glsl
{
    source skinningTwoWeightsShadowCasterVp.glsl
    includes_skeletal_animation true
}

vertex_program Ogre/HardwareSkinningTwoWeightsShadowCasterGLSLES glsles
{
    source skinningTwoWeightsShadowCasterVp.glsles
    includes_skeletal_animation true
    use_optimiser false
}

vertex_program Ogre/HardwareSkinningTwoWeightsShadowCaster unified
{
    delegate Ogre/HardwareSkinningTwoWeightsShadowCasterGLSLES
    delegate Ogre/HardwareSkinningTwoWeightsShadowCasterHLSL
    delegate Ogre/HardwareSkinningTwoWeightsShadowCasterGLSL
    delegate Ogre/HardwareSkinningTwoWeightsShadowCasterCg
}

// Basic hardware skinning using two indexed weights per vertex
vertex_program Ogre/HardwareSkinningTwoWeightsHLSL hlsl
{
    source Example_Basic.hlsl
    entry_point hardwareSkinningTwoWeights_vp
    target vs_4_0
    includes_skeletal_animation true
    column_major_matrices false
}

vertex_program Ogre/HardwareSkinningTwoWeightsGLSL glsl
{
    source skinningTwoWeightsVp.glsl
    includes_skeletal_animation true
}

vertex_program Ogre/HardwareSkinningTwoWeightsGLSLES glsles
{
    source skinningTwoWeightsVp.glsles
    includes_skeletal_animation true
    use_optimiser false
}

vertex_program Ogre/HardwareSkinningTwoWeightsCg cg
{
   source Example_Basic.cg
   entry_point hardwareSkinningTwoWeights_vp
   profiles vs_4_0 vs_1_1 arbvp1
   includes_skeletal_animation true
}

vertex_program Ogre/HardwareSkinningTwoWeights unified
{
    delegate Ogre/HardwareSkinningTwoWeightsGLSL
    delegate Ogre/HardwareSkinningTwoWeightsGLSLES
    delegate Ogre/HardwareSkinningTwoWeightsHLSL
    delegate Ogre/HardwareSkinningTwoWeightsCg

    default_params
    {
        param_named_auto worldMatrix3x4Array world_matrix_array_3x4
        param_named_auto viewProjectionMatrix viewproj_matrix
        param_named_auto lightPos[0] light_position 0
        param_named_auto lightPos[1] light_position 1
        param_named_auto lightDiffuseColour[0] light_diffuse_colour 0
        param_named_auto lightDiffuseColour[1] light_diffuse_colour 1
        param_named_auto ambient ambient_light_colour
        param_named_auto diffuse surface_diffuse_colour
    }
}

// Basic hardware skinning using four indexed weights per vertex
vertex_program Ogre/HardwareSkinningFourWeights cg
{
   source Example_Basic.cg
   entry_point hardwareSkinningFourWeights_vp
   profiles vs_4_0 vs_1_1 arbvp1
   includes_skeletal_animation true

   default_params
   {
        param_named_auto worldMatrix3x4Array world_matrix_array_3x4
        param_named_auto viewProjectionMatrix viewproj_matrix
        param_named_auto lightPos[0] light_position 0
        param_named_auto lightPos[1] light_position 1
        param_named_auto lightDiffuseColour[0] light_diffuse_colour 0
        param_named_auto lightDiffuseColour[1] light_diffuse_colour 1
        param_named_auto ambient ambient_light_colour
   }
}

// Basic hardware morph animation (no normals)
vertex_program Ogre/HardwareMorphAnimationCg cg
{
    source Example_Basic.cg
    entry_point hardwareMorphAnimation
    profiles vs_4_0 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/HardwareMorphAnimationGLSLES glsles
{
    source HardwareMorphAnimationVp.glsles

    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
{
    source HardwareMorphAnimationVp.glsl
    syntax glsl150

    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/HardwareMorphAnimationCg
    delegate Ogre/HardwareMorphAnimationGLSL
    delegate Ogre/HardwareMorphAnimationGLSLES
}

// 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_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/HardwarePoseAnimationGLSLES glsles
{
    source HardwarePoseAnimationVp.glsles

    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
{
    source HardwarePoseAnimationVp.glsl
    syntax glsl150

    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/HardwarePoseAnimationCg
    delegate Ogre/HardwarePoseAnimationGLSL
    delegate Ogre/HardwarePoseAnimationGLSLES
}

// Basic hardware morph animation (with normals)
vertex_program Ogre/HardwareMorphAnimationWithNormalsCg cg
{
    source Example_Basic.cg
    entry_point hardwareMorphAnimationWithNormals
    profiles vs_4_0 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/HardwareMorphAnimationWithNormalsGLSLES glsles
{
    source HardwareMorphAnimationWithNormalsVp.glsles

    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
{
    source HardwareMorphAnimationWithNormalsVp.glsl
    syntax glsl150

    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/HardwareMorphAnimationWithNormalsCg
    delegate Ogre/HardwareMorphAnimationWithNormalsGLSL
    delegate Ogre/HardwareMorphAnimationWithNormalsGLSLES
}

// 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_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/HardwarePoseAnimationWithNormalsGLSLES glsles
{
    source HardwarePoseAnimationWithNormalsVp.glsles

    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
{
    source HardwarePoseAnimationWithNormalsVp.glsl
    syntax glsl150

    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/HardwarePoseAnimationWithNormalsCg
    delegate Ogre/HardwarePoseAnimationWithNormalsGLSL
    delegate Ogre/HardwarePoseAnimationWithNormalsGLSLES
}
