1// Template materials for integrated depth shadows
2
3vertex_program Ogre/shadow/caster/depth/vpCg cg
4{
5	source depthshadowobject.cg
6	profiles vs_1_1 arbvp1
7	entry_point main_vp
8	compile_arguments -DSHADOWCASTER=1 -DDEPTH_SHADOWCASTER=1 -DDEPTH_SHADOWRECEIVER=0
9
10	default_params
11	{
12		param_named_auto worldViewProj		worldviewproj_matrix
13		param_named_auto depthRange			scene_depth_range 0
14	}
15}
16
17fragment_program Ogre/shadow/caster/depth/fpCg cg
18{
19	source depthshadowobject.cg
20	profiles ps_2_x arbfp1
21	entry_point main_fp
22	compile_arguments -DSHADOWCASTER=1 -DDEPTH_SHADOWCASTER=1 -DDEPTH_SHADOWRECEIVER=0
23
24	default_params
25	{
26	}
27}
28
29vertex_program Ogre/shadow/receiver/depth/pssm3/vpCg cg
30{
31	source depthshadowobject.cg
32	profiles vs_1_1 arbvp1
33	entry_point main_vp
34	compile_arguments -DSHADOWCASTER=0 -DDEPTH_SHADOWCASTER=0 -DDEPTH_SHADOWRECEIVER=1
35
36	default_params
37	{
38		param_named_auto worldViewProj		worldviewproj_matrix
39		param_named_auto lightPosition		light_position_object_space 0
40		param_named_auto lightDiffuse		derived_light_diffuse_colour 0
41		param_named_auto depthRange0		shadow_scene_depth_range 0
42		param_named_auto depthRange1		shadow_scene_depth_range 1
43		param_named_auto depthRange2		shadow_scene_depth_range 2
44
45		param_named_auto texWorldViewProjMatrix0	texture_worldviewproj_matrix 0
46		param_named_auto texWorldViewProjMatrix1	texture_worldviewproj_matrix 1
47		param_named_auto texWorldViewProjMatrix2	texture_worldviewproj_matrix 2
48	}
49}
50
51fragment_program Ogre/shadow/receiver/depth/pssm3/fpCg cg
52{
53	source depthshadowobject.cg
54	profiles ps_2_x arbfp1
55	entry_point main_fp
56	compile_arguments -DSHADOWCASTER=0 -DDEPTH_SHADOWCASTER=0 -DDEPTH_SHADOWRECEIVER=1
57
58	default_params
59	{
60		param_named_auto materialAmbient derived_ambient_light_colour
61		// shadow samplers are indexes 1/2/3
62		param_named_auto inverseShadowmapSize0 inverse_texture_size 1
63		param_named_auto inverseShadowmapSize1 inverse_texture_size 2
64		param_named_auto inverseShadowmapSize2 inverse_texture_size 3
65		//SET THIS MANUALLY!
66		//param_named pssmSplitPoints 0 0 0 0
67	}
68}
69
70vertex_program Ogre/shadow/caster/depth/vphlsl hlsl
71{
72	source depthshadowobject.hlsl
73	target vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3
74	entry_point main_vp
75	preprocessor_defines SHADOWCASTER=1;DEPTH_SHADOWCASTER=1;DEPTH_SHADOWRECEIVER=0
76
77	default_params
78	{
79		param_named_auto worldViewProj		worldviewproj_matrix
80		param_named_auto depthRange			scene_depth_range 0
81	}
82}
83
84fragment_program Ogre/shadow/caster/depth/fphlsl hlsl
85{
86	source depthshadowobject.hlsl
87	target ps_4_0 ps_4_0_level_9_1 ps_4_0_level_9_3
88	entry_point caster_fp
89	preprocessor_defines SHADOWCASTER=1;DEPTH_SHADOWCASTER=1;DEPTH_SHADOWRECEIVER=0
90
91	default_params
92	{
93	}
94}
95
96vertex_program Ogre/shadow/receiver/depth/pssm3/vphlsl hlsl
97{
98	source depthshadowobject.hlsl
99	target vs_4_0 vs_4_0_level_9_1 vs_4_0_level_9_3
100	entry_point main_vp
101	preprocessor_defines SHADOWCASTER=0;DEPTH_SHADOWCASTER=0;DEPTH_SHADOWRECEIVER=1
102
103	default_params
104	{
105		param_named_auto worldViewProj		worldviewproj_matrix
106		param_named_auto lightPosition		light_position_object_space 0
107		param_named_auto lightDiffuse		derived_light_diffuse_colour 0
108		param_named_auto depthRange0		shadow_scene_depth_range 0
109		param_named_auto depthRange1		shadow_scene_depth_range 1
110		param_named_auto depthRange2		shadow_scene_depth_range 2
111
112		param_named_auto texWorldViewProjMatrix0	texture_worldviewproj_matrix 0
113		param_named_auto texWorldViewProjMatrix1	texture_worldviewproj_matrix 1
114		param_named_auto texWorldViewProjMatrix2	texture_worldviewproj_matrix 2
115	}
116}
117
118fragment_program Ogre/shadow/receiver/depth/pssm3/fphlsl hlsl
119{
120	source depthshadowobject.hlsl
121	target ps_4_0 ps_4_0_level_9_1 ps_4_0_level_9_3
122	entry_point caster_fp
123	preprocessor_defines SHADOWCASTER=0;DEPTH_SHADOWCASTER=0;DEPTH_SHADOWRECEIVER=1
124
125	default_params
126	{
127		param_named_auto materialAmbient derived_ambient_light_colour
128		// shadow samplers are indexes 1/2/3
129		param_named_auto inverseShadowmapSize0 inverse_texture_size 1
130		param_named_auto inverseShadowmapSize1 inverse_texture_size 2
131		param_named_auto inverseShadowmapSize2 inverse_texture_size 3
132		//SET THIS MANUALLY!
133		//param_named pssmSplitPoints 0 0 0 0
134	}
135}
136
137vertex_program Ogre/shadow/caster/depth/vpGLSL glsl
138{
139	source DepthShadowObjectVp.glsl
140	syntax glsl150
141	preprocessor_defines SHADOWCASTER=1,DEPTH_SHADOWCASTER=1,DEPTH_SHADOWRECEIVER=0
142
143	default_params
144	{
145		param_named_auto worldViewProj		worldviewproj_matrix
146		param_named_auto depthRange			scene_depth_range 0
147	}
148}
149
150fragment_program Ogre/shadow/caster/depth/fpGLSL glsl
151{
152	source DepthShadowObjectFp.glsl
153	syntax glsl150
154	preprocessor_defines SHADOWCASTER=1,DEPTH_SHADOWCASTER=1,DEPTH_SHADOWRECEIVER=0
155
156	default_params
157	{
158        param_named diffuseMap int 0
159	}
160}
161
162vertex_program Ogre/shadow/receiver/depth/pssm3/vpGLSL glsl
163{
164	source DepthShadowObjectVp.glsl
165	syntax glsl150
166	preprocessor_defines SHADOWCASTER=0,DEPTH_SHADOWCASTER=0,DEPTH_SHADOWRECEIVER=1
167
168	default_params
169	{
170		param_named_auto worldViewProj		worldviewproj_matrix
171		param_named_auto lightPosition		light_position_object_space 0
172		param_named_auto lightDiffuse		derived_light_diffuse_colour 0
173		param_named_auto depthRange0		shadow_scene_depth_range 0
174		param_named_auto depthRange1		shadow_scene_depth_range 1
175		param_named_auto depthRange2		shadow_scene_depth_range 2
176
177		param_named_auto texWorldViewProjMatrix0	texture_worldviewproj_matrix 0
178		param_named_auto texWorldViewProjMatrix1	texture_worldviewproj_matrix 1
179		param_named_auto texWorldViewProjMatrix2	texture_worldviewproj_matrix 2
180	}
181}
182
183fragment_program Ogre/shadow/receiver/depth/pssm3/fpGLSL glsl
184{
185	source DepthShadowObjectFp.glsl
186	syntax glsl150
187	preprocessor_defines SHADOWCASTER=0,DEPTH_SHADOWCASTER=0,DEPTH_SHADOWRECEIVER=1
188
189	default_params
190	{
191		param_named_auto materialAmbient derived_ambient_light_colour
192		// shadow samplers are indexes 1/2/3
193		param_named_auto inverseShadowmapSize0 inverse_texture_size 1
194		param_named_auto inverseShadowmapSize1 inverse_texture_size 2
195		param_named_auto inverseShadowmapSize2 inverse_texture_size 3
196        param_named diffuseMap int 0
197        param_named shadowMap0 int 1
198        param_named shadowMap1 int 2
199        param_named shadowMap2 int 3
200
201		//SET THIS MANUALLY!
202		//param_named pssmSplitPoints 0 0 0 0
203	}
204}
205
206vertex_program Ogre/shadow/caster/depth/vp unified
207{
208	delegate Ogre/shadow/caster/depth/vpGLSL
209	delegate Ogre/shadow/caster/depth/vphlsl
210	delegate Ogre/shadow/caster/depth/vpCg
211}
212
213vertex_program Ogre/shadow/receiver/depth/pssm3/vp unified
214{
215	delegate Ogre/shadow/receiver/depth/pssm3/vpGLSL
216	delegate Ogre/shadow/receiver/depth/pssm3/vphlsl
217	delegate Ogre/shadow/receiver/depth/pssm3/vpCg
218}
219
220fragment_program Ogre/shadow/caster/depth/fp unified
221{
222	delegate Ogre/shadow/caster/depth/fpGLSL
223	delegate Ogre/shadow/caster/depth/fphlsl
224	delegate Ogre/shadow/caster/depth/fpCg
225}
226
227fragment_program Ogre/shadow/receiver/depth/pssm3/fp unified
228{
229	delegate Ogre/shadow/receiver/depth/pssm3/fpGLSL
230	delegate Ogre/shadow/receiver/depth/pssm3/fphlsl
231	delegate Ogre/shadow/receiver/depth/pssm3/fpCg
232}
233
234material Ogre/shadow/depth/caster
235{
236	technique
237	{
238		pass
239		{
240			vertex_program_ref Ogre/shadow/caster/depth/vp
241			{
242			}
243			fragment_program_ref Ogre/shadow/caster/depth/fp
244			{
245			}
246		}
247	}
248}
249
250material Ogre/shadow/depth/integrated/pssm
251{
252    technique
253	{
254		// link to caster material
255		shadow_caster_material Ogre/shadow/depth/caster
256
257		pass
258		{
259			vertex_program_ref Ogre/shadow/receiver/depth/pssm3/vp
260			{
261			}
262			fragment_program_ref Ogre/shadow/receiver/depth/pssm3/fp
263			{
264				// you must specify pssmSplitPoints when you instantiate!
265			}
266
267			texture_unit diffuse
268			{
269				// nothing specified for now,derivers can override
270			}
271
272			texture_unit shadow0
273			{
274				content_type shadow
275				tex_address_mode border
276				tex_border_colour 1 1 1 1
277			}
278			texture_unit shadow1
279			{
280				content_type shadow
281				tex_address_mode border
282				tex_border_colour 1 1 1 1
283			}
284			texture_unit shadow2
285			{
286				content_type shadow
287				tex_address_mode border
288				tex_border_colour 1 1 1 1
289			}
290		}
291	}
292}
293