diff --git a/src/legion.rs b/src/legion.rs index 8fbf92e..4a9e9c1 100644 --- a/src/legion.rs +++ b/src/legion.rs @@ -105,18 +105,25 @@ fn present(#[resource] callbacks: &mut T) { callbacks.present(); } -#[system(for_each)] +#[system] fn draw_transformed_meshes( #[resource] mesh_pass: &pass::RenderPassBox, - transform: &scene::Transform, - mesh: &scene::Mesh, + world: &SubWorld, + query: &mut Query<(&scene::Transform, &scene::Mesh)>, ) { - puffin::profile_function!(); + query.par_iter_chunks(world).for_each(|mesh_chunk| { + puffin::profile_function!(); - mesh_pass.add_transformed_meshes(&[mesh::TransformedMesh { - transform: transform.transform, - mesh: mesh.mesh, - }]); + let meshes: Vec<_> = mesh_chunk + .into_iter() + .map(|(transform, mesh)| mesh::TransformedMesh { + transform: transform.transform, + mesh: mesh.mesh, + }) + .collect(); + + mesh_pass.add_transformed_meshes(&meshes); + }); } #[system(for_each)]