Index: data/branches/Shader_HS18/materials/Cube_Lava_Normal.material
===================================================================
--- data/branches/Shader_HS18/materials/Cube_Lava_Normal.material	(revision 12092)
+++ data/branches/Shader_HS18/materials/Cube_Lava_Normal.material	(revision 12096)
@@ -7,7 +7,21 @@
         pass ambient
         {
-            // base colours, not needed for rendering, but as information
-            // to lighting pass categorisation routine
-            diffuse 0 0 0
+          // base colours, not needed for rendering, but as information
+          // to lighting pass categorisation routine
+          ambient 1 1 1
+          diffuse 0 0 0
+          specular 0 0 0 0
+          // Really basic vertex program
+          // NB we don't use fixed function here because GL does not like
+          // mixing fixed function and vertex programs, depth fighting can
+          // be an issue
+          vertex_program_ref Ogre/BasicVertexPrograms/AmbientOneTextureUnified
+          {
+            param_named_auto ambient ambient_light_colour
+          }
+          fragment_program_ref Ogre/BasicFragmentPrograms/PassthroughFP
+          {
+          }
+
         }
         // Now do the lighting pass
@@ -15,4 +29,5 @@
         pass perlight
         {
+
             // do this for each light
             iteration once_per_light
@@ -33,5 +48,5 @@
             fragment_program_ref Examples/BumpMapFP
             {
-                param_named_auto lightDiffuse light_diffuse_colour 0 
+                param_named_auto lightDiffuse light_diffuse_colour 0
             }
 
@@ -47,7 +62,7 @@
             shadow_receiver_fragment_program_ref Examples/BumpMapFPShadowRcv
             {
-                param_named_auto lightDiffuse light_diffuse_colour 0 
+                param_named_auto lightDiffuse light_diffuse_colour 0
             }
-            
+
             // Base bump map
             texture_unit normalmap
@@ -57,14 +72,20 @@
             }
         }
-        
+
         // Decal pass
         pass decal
         {
-            // hint to pass categorisation routine, that this is decal only
+            // base colours, not needed for rendering, but as information
+            // to lighting pass categorisation routine
             lighting off
+            // Really basic vertex program
+            // NB we don't use fixed function here because GL does not like
+            // mixing fixed function and vertex programs, depth fighting can
+            // be an issue
+            
             scene_blend dest_colour zero
             texture_unit decalmap
             {
-                texture Cube_Lava_COLOR.jpg 
+                texture Cube_Lava_COLOR.jpg
             }
         }
Index: data/branches/Shader_HS18/materials/Example/Examples-Advanced.program
===================================================================
--- data/branches/Shader_HS18/materials/Example/Examples-Advanced.program	(revision 12096)
+++ data/branches/Shader_HS18/materials/Example/Examples-Advanced.program	(revision 12096)
@@ -0,0 +1,229 @@
+//------------------------
+// Bump mapping section
+//------------------------
+
+// Bump map vertex program, support for this is required
+vertex_program Examples/BumpMapVPCg cg
+{
+	source Example_BumpMapping.cg
+	entry_point main_vp
+	profiles vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3 vs_1_1 arbvp1
+}
+
+vertex_program Examples/BumpMapVPGLSLES glsles
+{
+	source Example_BumpMappingVp.glsles
+	profiles glsles
+}
+
+vertex_program Examples/BumpMapVPGLSL glsl
+{
+	source Example_BumpMappingVp.glsl
+	syntax glsl
+}
+
+vertex_program Examples/BumpMapVP unified
+{
+	delegate Examples/BumpMapVPGLSL
+	delegate Examples/BumpMapVPGLSLES
+	delegate Examples/BumpMapVPCg
+}
+
+// Bump map vertex program, with tangent parity support for this is required
+vertex_program Examples/BumpMapVPTangentParityCg cg
+{
+	source Example_BumpMapping.cg
+	entry_point main_vp
+	profiles vs_1_1 arbvp1
+	compile_arguments -DTANGENTS_HAVE_PARITY=1
+}
+
+// Bump map vertex program, with tangent parity support for this is required
+vertex_program Examples/BumpMapVPTangentParityGLSLES glsles
+{
+	source BumpMapVPTangentParity.glsles
+}
+
+vertex_program Examples/BumpMapVPTangentParityGLSL glsl
+{
+	source BumpMapVPTangentParity.glsl
+	syntax glsl
+}
+
+vertex_program Examples/BumpMapVPTangentParity unified
+{
+	delegate Examples/BumpMapVPTangentParityGLSL
+	delegate Examples/BumpMapVPTangentParityGLSLES
+	delegate Examples/BumpMapVPTangentParityCg
+}
+
+// Bump map fragment program, support for this is optional
+fragment_program Examples/BumpMapFPCg cg
+{
+	source Example_BumpMapping.cg
+	entry_point main_fp
+	profiles ps_4_0 ps_4_0_level_9_1 ps_4_0_level_9_3 ps_2_0 arbfp1 fp20
+}
+
+fragment_program Examples/BumpMapFPGLSLES glsles
+{
+	source Example_BumpMappingFp.glsles
+	profiles glsles
+	default_params
+	{
+		// assign samplers as required by GLSL
+		param_named normalMap int 0
+	}
+}
+
+fragment_program Examples/BumpMapFPGLSL glsl
+{
+	source Example_BumpMappingFp.glsl
+	syntax glsl
+	default_params
+	{
+		// assign samplers as required by GLSL
+		param_named normalMap int 0
+	}
+}
+
+fragment_program Examples/BumpMapFP unified
+{
+	delegate Examples/BumpMapFPGLSL
+	delegate Examples/BumpMapFPGLSLES
+	delegate Examples/BumpMapFPCg
+}
+
+// Bump map vertex program shadow receiver
+vertex_program Examples/BumpMapVPShadowRcvCg cg
+{
+	source Example_BumpMapping.cg
+	entry_point main_shadowreceiver_vp
+	profiles vs_1_1 arbvp1
+}
+
+// Bump map vertex program shadow receiver
+vertex_program Examples/BumpMapVPShadowRcvGLSLES glsles
+{
+	source Example_BumpMappingShadowRcvVp.glsles
+	profiles glsles
+}
+
+vertex_program Examples/BumpMapVPShadowRcvGLSL glsl
+{
+	source Example_BumpMappingShadowRcvVp.glsl
+	syntax glsl
+}
+
+vertex_program Examples/BumpMapVPShadowRcv unified
+{
+	delegate Examples/BumpMapVPShadowRcvGLSL
+	delegate Examples/BumpMapVPShadowRcvGLSLES
+	delegate Examples/BumpMapVPShadowRcvCg
+}
+
+// Bump map fragment program shadow receiver, support for this is optional
+fragment_program Examples/BumpMapFPShadowRcvCg cg
+{
+	source Example_BumpMapping.cg
+	entry_point main_shadowreceiver_fp
+	profiles ps_2_0 arbfp1 fp20
+}
+
+// Bump map fragment program shadow receiver, support for this is optional
+fragment_program Examples/BumpMapFPShadowRcvGLSLES glsles
+{
+	source Example_BumpMappingShadowRcvFp.glsles
+	profiles glsles
+	default_params
+	{
+		// assign samplers as required by GLSL
+		param_named shadowMap int 0
+		param_named normalMap int 1
+	}
+}
+
+fragment_program Examples/BumpMapFPShadowRcvGLSL glsl
+{
+	source Example_BumpMappingShadowRcvFp.glsl
+	syntax glsl
+	default_params
+	{
+		// assign samplers as required by GLSL
+		param_named shadowMap int 0
+		param_named normalMap int 1
+	}
+}
+
+fragment_program Examples/BumpMapFPShadowRcv unified
+{
+	delegate Examples/BumpMapFPShadowRcvGLSL
+	delegate Examples/BumpMapFPShadowRcvGLSLES
+	delegate Examples/BumpMapFPShadowRcvCg
+}
+
+// Bump map with specular vertex program, support for this is required
+vertex_program Examples/BumpMapVPSpecularCg cg
+{
+	source Example_BumpMapping.cg
+	entry_point specular_vp
+	profiles vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3 vs_1_1 arbvp1
+}
+
+// Bump map with specular vertex program, support for this is required
+vertex_program Examples/BumpMapVPSpecularGLSLES glsles
+{
+	source Example_BumpMappingSpecularVp.glsles
+	profiles glsles
+}
+
+vertex_program Examples/BumpMapVPSpecularGLSL glsl
+{
+	source Example_BumpMappingSpecularVp.glsl
+	syntax glsl
+}
+
+vertex_program Examples/BumpMapVPSpecular unified
+{
+	delegate Examples/BumpMapVPSpecularGLSL
+	delegate Examples/BumpMapVPSpecularGLSLES
+	delegate Examples/BumpMapVPSpecularCg
+}
+
+// Bump map fragment program, support for this is optional
+fragment_program Examples/BumpMapFPSpecularCg cg
+{
+	source Example_BumpMapping.cg
+	entry_point specular_fp
+	profiles ps_4_0 ps_4_0_level_9_1 ps_4_0_level_9_3 ps_2_0 arbfp1 fp20
+}
+
+// Bump map fragment program, support for this is optional
+fragment_program Examples/BumpMapFPSpecularGLSLES glsles
+{
+	source Example_BumpMappingSpecularFp.glsles
+	profiles glsles
+	default_params
+	{
+		// assign samplers as required by GLSL
+		param_named normalMap int 0
+	}
+}
+
+fragment_program Examples/BumpMapFPSpecularGLSL glsl
+{
+	source Example_BumpMappingSpecularFp.glsl
+	syntax glsl
+	default_params
+	{
+		// assign samplers as required by GLSL
+		param_named normalMap int 0
+	}
+}
+
+fragment_program Examples/BumpMapFPSpecular unified
+{
+	delegate Examples/BumpMapFPSpecularGLSL
+	delegate Examples/BumpMapFPSpecularGLSLES
+	delegate Examples/BumpMapFPSpecularCg
+}
Index: data/branches/Shader_HS18/materials/Example/Examples.program
===================================================================
--- data/branches/Shader_HS18/materials/Example/Examples.program	(revision 12096)
+++ data/branches/Shader_HS18/materials/Example/Examples.program	(revision 12096)
@@ -0,0 +1,666 @@
+//---------------------------------------------------
+// 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 vs_4_0_level_9_1 vs_4_0_level_9_3
+
+    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_Basic4.hlsl
+    entry_point ambientOneTexture_vp
+    target vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3
+
+    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
+
+    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
+
+    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/DiffuseOneTextureHLSL hlsl
+{
+    source Example_Basic4.hlsl
+    entry_point diffuseOneTexture_fp
+    target ps_4_0 ps_4_0_level_9_1 ps_4_0_level_9_3
+}
+
+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/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/PassthroughFpGLSLES
+	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
+{
+    entry_point main
+    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
+{
+    entry_point main
+    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/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_4_0_level_9_1 vs_4_0_level_9_3 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_4_0_level_9_1 vs_4_0_level_9_3 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_4_0_level_9_1 vs_4_0_level_9_3 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_Basic4.hlsl
+    entry_point hardwareSkinningTwoWeightsCaster_vp
+    target vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3
+    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_Basic4.hlsl
+    entry_point hardwareSkinningTwoWeights_vp
+    target vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3
+    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_4_0_level_9_1 vs_4_0_level_9_3 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/HardwareSkinningFourWeightsCg cg
+{
+   source Example_Basic.cg
+   entry_point hardwareSkinningFourWeights_vp
+   profiles vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3 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_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
+    }
+}
+
+vertex_program Ogre/HardwareSkinningFourWeightsHLSL hlsl
+{
+   source Example_Basic4.hlsl
+   entry_point hardwareSkinningFourWeights_vp
+   target vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3
+   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/HardwareMorphAnimationHLSL hlsl
+{
+    source Example_Basic4.hlsl
+    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/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/HardwareSkinningFourWeights unified
+{
+	delegate Ogre/HardwareSkinningFourWeightsHLSL
+	delegate Ogre/HardwareSkinningFourWeightsCg
+}
+
+vertex_program Ogre/HardwareMorphAnimation unified
+{
+	 delegate Ogre/HardwareMorphAnimationHLSL
+    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_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_Basic4.hlsl
+    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/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/HardwarePoseAnimationHLSL
+    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_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_Basic4.hlsl
+    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/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/HardwareMorphAnimationWithNormalsHLSL
+    delegate Ogre/HardwareMorphAnimationWithNormalsCg
+    delegate Ogre/HardwareMorphAnimationWithNormalsGLSL
+    delegate Ogre/HardwareMorphAnimationWithNormalsGLSLES
+}
+
+// Basic hardware pose animation supporting 2 active poses (with normals)
+vertex_program Ogre/HardwarePoseAnimationWithNormalsHLSL hlsl
+{
+    source Example_Basic4.hlsl
+    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/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/HardwarePoseAnimationWithNormalsHLSL
+    delegate Ogre/HardwarePoseAnimationWithNormalsCg
+    delegate Ogre/HardwarePoseAnimationWithNormalsGLSL
+    delegate Ogre/HardwarePoseAnimationWithNormalsGLSLES
+}
+
+material Examples/Flare
+{
+        technique
+        {
+                pass
+                {
+                        lighting off
+                        scene_blend add
+                        depth_write off
+
+                        texture_unit
+                        {
+                                texture flare.png
+                        }
+                }
+        }
+
+        technique
+        {
+                scheme glow
+                pass
+                {
+                        lighting off
+                        scene_blend add
+                        depth_write off
+
+                        texture_unit
+                        {
+                                texture flare.png
+                        }
+                }
+        }
+}
