1///////////////////////////////////////////////////////////////////////////
2/// Declare CG shaders for skinning
3///////////////////////////////////////////////////////////////////////////
4// Dual quaternion hardware skinning using two indexed weights per vertex
5vertex_program Ogre/DualQuaternionHardwareSkinningTwoWeightsCg cg
6{
7	source DualQuaternion.cg
8	entry_point dualQuaternionHardwareSkinningTwoWeights_vp
9    profiles vp40 vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3 vs_3_0 vs_2_0 vs_1_1
10	includes_skeletal_animation true
11
12	default_params
13	{
14	    param_named_auto diffuse surface_diffuse_colour
15	}
16}
17
18// Dual quaternion two phase hardware skinning using two indexed weights per vertex, supports scaling and shearing
19vertex_program Ogre/DualQuaternionHardwareSkinningTwoWeightsTwoPhaseCg cg
20{
21	source DualQuaternion.cg
22	entry_point dualQuaternionHardwareSkinningTwoWeightsTwoPhase_vp
23    profiles vp40 vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3 vs_3_0 vs_2_0 vs_1_1
24	includes_skeletal_animation true
25
26	default_params
27	{
28	    param_named_auto diffuse surface_diffuse_colour
29	}
30}
31
32///////////////////////////////////////////////////////////////////////////
33/// Declare CG shaders for shadow casters
34///////////////////////////////////////////////////////////////////////////
35vertex_program Ogre/DualQuaternionHardwareSkinningTwoWeightsShadowCasterCg cg
36{
37	source DualQuaternion.cg
38	entry_point shadow_caster_dq_skinning_2weight_vs
39    profiles vp40 vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3 vs_3_0 vs_2_0 vs_1_1
40	includes_skeletal_animation true
41}
42
43vertex_program Ogre/DualQuaternionHardwareSkinningTwoWeightsTwoPhaseShadowCasterCg cg
44{
45	source DualQuaternion.cg
46	entry_point shadow_caster_dq_skinning_2weight_twophase_vs
47	profiles vp40 vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3 vs_3_0 vs_2_0 vs_1_1
48	includes_skeletal_animation true
49}
50
51///////////////////////////////////////////////////////////////////////////
52/// Declare hlsl shaders for skinning
53///////////////////////////////////////////////////////////////////////////
54// Dual quaternion hardware skinning using two indexed weights per vertex
55vertex_program Ogre/DualQuaternionHardwareSkinningTwoWeightsHLSL hlsl
56{
57	source DualQuaternion.hlsl
58	entry_point dualQuaternionHardwareSkinningTwoWeights_vp
59    target vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3
60	includes_skeletal_animation true
61
62	default_params
63	{
64	    param_named_auto diffuse surface_diffuse_colour
65	}
66}
67
68// Dual quaternion two phase hardware skinning using two indexed weights per vertex, supports scaling and shearing
69vertex_program Ogre/DualQuaternionHardwareSkinningTwoWeightsTwoPhaseHLSL hlsl
70{
71	source DualQuaternion.hlsl
72	entry_point dualQuaternionHardwareSkinningTwoWeightsTwoPhase_vp
73    target vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3
74	includes_skeletal_animation true
75
76	default_params
77	{
78	    param_named_auto diffuse surface_diffuse_colour
79	}
80}
81
82///////////////////////////////////////////////////////////////////////////
83/// Declare hlsl shaders for shadow casters
84///////////////////////////////////////////////////////////////////////////
85vertex_program Ogre/DualQuaternionHardwareSkinningTwoWeightsShadowCasterHLSL hlsl
86{
87	source DualQuaternion.hlsl
88	entry_point dualQuaternionHardwareSkinningTwoWeightsCaster_vp
89    target vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3
90	includes_skeletal_animation true
91}
92
93vertex_program Ogre/DualQuaternionHardwareSkinningTwoWeightsTwoPhaseShadowCasterHLSL hlsl
94{
95	source DualQuaternion.hlsl
96	entry_point dualQuaternionHardwareSkinningTwoWeightsTwoPhaseCaster_vp
97	target vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3
98	includes_skeletal_animation true
99}
100
101
102
103///////////////////////////////////////////////////////////////////////////
104/// Declare GLSL shaders for skinning
105///////////////////////////////////////////////////////////////////////////
106vertex_program Ogre/DualQuaternionHardwareSkinningTwoWeightsCommon glsl
107{
108	source DualQuaternion_Common.glsl
109    syntax glsl
110}
111
112vertex_program Ogre/DualQuaternionHardwareSkinningTwoWeightsGLSL glsl
113{
114	source DualQuaternion.glsl
115    syntax glsl
116	attach Ogre/DualQuaternionHardwareSkinningTwoWeightsCommon
117	includes_skeletal_animation true
118}
119
120// Dual quaternion two phase hardware skinning using two indexed weights per vertex, supports scaling and shearing
121vertex_program Ogre/DualQuaternionHardwareSkinningTwoWeightsTwoPhaseGLSL glsl
122{
123	source DualQuaternion_TwoPhase.glsl
124    syntax glsl
125	attach Ogre/DualQuaternionHardwareSkinningTwoWeightsCommon
126	includes_skeletal_animation true
127}
128
129///////////////////////////////////////////////////////////////////////////
130/// Declare GLSL shaders for shadow casters
131///////////////////////////////////////////////////////////////////////////
132vertex_program Ogre/DualQuaternionHardwareSkinningTwoWeightsShadowCasterGLSL glsl
133{
134	source DualQuaternion_ShadowCaster.glsl
135    syntax glsl
136	attach Ogre/DualQuaternionHardwareSkinningTwoWeightsCommon
137	includes_skeletal_animation true
138}
139
140vertex_program Ogre/DualQuaternionHardwareSkinningTwoWeightsTwoPhaseShadowCasterGLSL glsl
141{
142	source DualQuaternion_TwoPhaseShadowCaster.glsl
143    syntax glsl
144	attach Ogre/DualQuaternionHardwareSkinningTwoWeightsCommon
145	includes_skeletal_animation true
146}
147
148///////////////////////////////////////////////////////////////////////////
149/// Declare unified shaders
150///////////////////////////////////////////////////////////////////////////
151vertex_program Ogre/DualQuaternionHardwareSkinningTwoWeights unified
152{
153    delegate Ogre/DualQuaternionHardwareSkinningTwoWeightsCg
154	delegate Ogre/DualQuaternionHardwareSkinningTwoWeightsHLSL
155	delegate Ogre/DualQuaternionHardwareSkinningTwoWeightsGLSL
156
157	default_params
158	{
159		param_named_auto worldDualQuaternion2x4Array world_dualquaternion_array_2x4
160		param_named_auto viewProjectionMatrix viewproj_matrix
161		param_named_auto lightPos[0] light_position 0
162		param_named_auto lightPos[1] light_position 1
163		param_named_auto lightDiffuseColour[0] light_diffuse_colour 0
164		param_named_auto lightDiffuseColour[1] light_diffuse_colour 1
165		param_named_auto ambient ambient_light_colour
166	}
167}
168
169vertex_program Ogre/DualQuaternionHardwareSkinningTwoWeightsShadowCaster unified
170{
171    delegate Ogre/DualQuaternionHardwareSkinningTwoWeightsShadowCasterCg
172	delegate Ogre/DualQuaternionHardwareSkinningTwoWeightsShadowCasterHLSL
173	delegate Ogre/DualQuaternionHardwareSkinningTwoWeightsShadowCasterGLSL
174
175	default_params
176	{
177		param_named_auto worldDualQuaternion2x4Array world_dualquaternion_array_2x4
178		param_named_auto viewProjectionMatrix viewproj_matrix
179		param_named_auto ambient ambient_light_colour
180	}
181}
182
183vertex_program Ogre/DualQuaternionHardwareSkinningTwoWeightsTwoPhase unified
184{
185    delegate Ogre/DualQuaternionHardwareSkinningTwoWeightsTwoPhaseCg
186	delegate Ogre/DualQuaternionHardwareSkinningTwoWeightsTwoPhaseHLSL
187	delegate Ogre/DualQuaternionHardwareSkinningTwoWeightsTwoPhaseGLSL
188
189	default_params
190	{
191		param_named_auto worldDualQuaternion2x4Array world_dualquaternion_array_2x4
192		param_named_auto scaleM world_scale_shear_matrix_array_3x4
193		param_named_auto viewProjectionMatrix viewproj_matrix
194		param_named_auto lightPos[0] light_position 0
195		param_named_auto lightPos[1] light_position 1
196		param_named_auto lightDiffuseColour[0] light_diffuse_colour 0
197		param_named_auto lightDiffuseColour[1] light_diffuse_colour 1
198		param_named_auto ambient ambient_light_colour
199	}
200}
201
202vertex_program Ogre/DualQuaternionHardwareSkinningTwoWeightsTwoPhaseShadowCaster unified
203{
204    delegate Ogre/DualQuaternionHardwareSkinningTwoWeightsTwoPhaseShadowCasterCg
205	delegate Ogre/DualQuaternionHardwareSkinningTwoWeightsTwoPhaseShadowCasterHLSL
206	delegate Ogre/DualQuaternionHardwareSkinningTwoWeightsTwoPhaseShadowCasterGLSL
207
208	default_params
209	{
210		param_named_auto worldDualQuaternion2x4Array world_dualquaternion_array_2x4
211		param_named_auto scaleM world_scale_shear_matrix_array_3x4
212		param_named_auto viewProjectionMatrix viewproj_matrix
213		param_named_auto ambient ambient_light_colour
214	}
215}
216