From 5f367c310800e1dfd574f658e25e8a4cee8825cb Mon Sep 17 00:00:00 2001 From: mars Date: Thu, 30 Jun 2022 00:21:17 -0600 Subject: [PATCH] Parallelize legion::draw_transformed_meshes() --- src/legion.rs | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) 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)]