@@ -32,9 +32,9 @@ pub fn raytraced_shadows(client: &mut Client<gfx_platform::Device, os_platform::
32
32
"animate_meshes" ,
33
33
"animate_lights" ,
34
34
"batch_lights" ,
35
- "update_tlas "
35
+ "setup_tlas "
36
36
] ,
37
- render_graph : "mesh_lit_rt_shadow " ,
37
+ render_graph : "mesh_lit_rt_shadow2 " ,
38
38
..Default :: default ( )
39
39
}
40
40
}
@@ -49,7 +49,7 @@ pub fn blas_from_mesh(device: &mut ResMut<DeviceRes>, mesh: &pmfx::Mesh<gfx_plat
49
49
transform3x4 : None ,
50
50
index_count : mesh. num_indices as usize ,
51
51
index_format : gfx:: Format :: R16u ,
52
- vertex_count : mesh. num_indices as usize ,
52
+ vertex_count : mesh. num_vertices as usize ,
53
53
vertex_format : gfx:: Format :: RGB32f ,
54
54
vertex_stride : 56
55
55
} ) ,
@@ -66,7 +66,6 @@ pub fn setup_raytraced_shadows_scene(
66
66
mut commands : Commands ) -> Result < ( ) , hotline_rs:: Error > {
67
67
68
68
let cube_mesh = hotline_rs:: primitives:: create_cube_mesh ( & mut device. 0 ) ;
69
-
70
69
let tourus_mesh = hotline_rs:: primitives:: create_tourus_mesh ( & mut device. 0 , 32 ) ;
71
70
let teapot_mesh = hotline_rs:: primitives:: create_teapot_mesh ( & mut device. 0 , 32 ) ;
72
71
let tube_mesh = hotline_rs:: primitives:: create_tube_prism_mesh ( & mut device. 0 , 32 , 0 , 32 , true , true , 1.0 , 0.66 , 1.0 ) ;
@@ -202,7 +201,7 @@ pub fn setup_raytraced_shadows_scene(
202
201
}
203
202
204
203
#[ export_update_fn]
205
- pub fn update_tlas (
204
+ pub fn setup_tlas (
206
205
mut device : ResMut < DeviceRes > ,
207
206
mut pmfx : ResMut < PmfxRes > ,
208
207
mut entities_query : Query < ( & mut Position , & mut Scale , & mut Rotation , & BLAS ) > ,
@@ -235,6 +234,9 @@ pub fn update_tlas(
235
234
} ,
236
235
& mut pmfx. shader_heap
237
236
) ?;
237
+ let tlas_srv = tlas. get_srv_index ( ) . expect ( "expect tlas to have an srv" ) ;
238
+ pmfx. push_constant_user_data [ 0 ] = tlas_srv as u32 ;
239
+ println ! ( "tlas_srv = {tlas_srv}" ) ;
238
240
t. tlas = Some ( tlas) ;
239
241
}
240
242
}
@@ -255,13 +257,8 @@ pub fn animate_lights (
255
257
Ok ( ( ) )
256
258
}
257
259
258
- // TODO_RT
259
- // update tlas
260
- // mesh vertex count
261
- // fix: Ignoring InitialState D3D12_RESOURCE_STATE_COPY_DEST. Buffers are effectively created in state D3D12_RESOURCE_STATE_COMMON.
262
-
263
260
#[ export_compute_fn]
264
- pub fn render_meshes_raytraced (
261
+ pub fn update_tlas (
265
262
mut device : ResMut < DeviceRes > ,
266
263
pmfx : & Res < PmfxRes > ,
267
264
pass : & pmfx:: ComputePass < gfx_platform:: Device > ,
@@ -272,9 +269,6 @@ pub fn render_meshes_raytraced(
272
269
273
270
let mut heap = pmfx. shader_heap . clone ( ) ;
274
271
275
- let output_size = pmfx. get_texture_2d_size ( "staging_output" ) . expect ( "expected staging_output" ) ;
276
- let output_tex = pmfx. get_texture ( "staging_output" ) . expect ( "expected staging_output" ) ;
277
-
278
272
// update tlas
279
273
for mut t in & mut tlas_query {
280
274
let mut instances = Vec :: new ( ) ;
@@ -301,6 +295,31 @@ pub fn render_meshes_raytraced(
301
295
}
302
296
}
303
297
298
+ Ok ( ( ) )
299
+ }
300
+
301
+ // TODO_RT
302
+ // mesh vertex count
303
+ // crash when switching demo
304
+
305
+ // TODO clean
306
+ // fix: Ignoring InitialState D3D12_RESOURCE_STATE_COPY_DEST. Buffers are effectively created in state D3D12_RESOURCE_STATE_COMMON.
307
+
308
+ #[ export_compute_fn]
309
+ pub fn render_meshes_raytraced (
310
+ mut device : ResMut < DeviceRes > ,
311
+ pmfx : & Res < PmfxRes > ,
312
+ pass : & pmfx:: ComputePass < gfx_platform:: Device > ,
313
+ mut entities_query : Query < ( & mut Position , & mut Scale , & mut Rotation , & BLAS ) > ,
314
+ mut tlas_query : Query < & mut TLAS > ,
315
+ ) -> Result < ( ) , hotline_rs:: Error > {
316
+ let pmfx = & pmfx. 0 ;
317
+
318
+ let mut heap = pmfx. shader_heap . clone ( ) ;
319
+
320
+ let output_size = pmfx. get_texture_2d_size ( "staging_output" ) . expect ( "expected staging_output" ) ;
321
+ let output_tex = pmfx. get_texture ( "staging_output" ) . expect ( "expected staging_output" ) ;
322
+
304
323
let camera = pmfx. get_camera_constants ( "main_camera" ) ;
305
324
if let Ok ( camera) = camera {
306
325
for t in & tlas_query {
0 commit comments