Parallelize legion::draw_transformed_meshes()

This commit is contained in:
mars 2022-06-30 00:21:17 -06:00
parent a5047f5875
commit 5f367c3108
1 changed files with 15 additions and 8 deletions

View File

@ -105,18 +105,25 @@ fn present<T: RenderCallbacks>(#[resource] callbacks: &mut T) {
callbacks.present(); callbacks.present();
} }
#[system(for_each)] #[system]
fn draw_transformed_meshes( fn draw_transformed_meshes(
#[resource] mesh_pass: &pass::RenderPassBox<mesh::MeshPass>, #[resource] mesh_pass: &pass::RenderPassBox<mesh::MeshPass>,
transform: &scene::Transform, world: &SubWorld,
mesh: &scene::Mesh, 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 { let meshes: Vec<_> = mesh_chunk
transform: transform.transform, .into_iter()
mesh: mesh.mesh, .map(|(transform, mesh)| mesh::TransformedMesh {
}]); transform: transform.transform,
mesh: mesh.mesh,
})
.collect();
mesh_pass.add_transformed_meshes(&meshes);
});
} }
#[system(for_each)] #[system(for_each)]