diff --git a/crates/bevy_pbr/Cargo.toml b/crates/bevy_pbr/Cargo.toml index 4fd611fa27..e6b2c4637a 100644 --- a/crates/bevy_pbr/Cargo.toml +++ b/crates/bevy_pbr/Cargo.toml @@ -39,7 +39,6 @@ fixedbitset = "0.4" bytemuck = { version = "1", features = ["derive"] } radsort = "0.1" smallvec = "1.6" -thread_local = "1.0" [lints] workspace = true diff --git a/crates/bevy_pbr/src/render/mesh.rs b/crates/bevy_pbr/src/render/mesh.rs index 8226d2f483..4cd5f8d7ec 100644 --- a/crates/bevy_pbr/src/render/mesh.rs +++ b/crates/bevy_pbr/src/render/mesh.rs @@ -26,9 +26,7 @@ use bevy_render::{ Extract, }; use bevy_transform::components::GlobalTransform; -use bevy_utils::{tracing::error, Entry, HashMap, Hashed}; -use std::cell::Cell; -use thread_local::ThreadLocal; +use bevy_utils::{tracing::error, Entry, HashMap, Hashed, Parallel}; #[cfg(debug_assertions)] use bevy_utils::warn_once; @@ -258,7 +256,7 @@ pub struct RenderMeshInstances(EntityHashMap); pub fn extract_meshes( mut render_mesh_instances: ResMut, - mut thread_local_queues: Local>>>, + mut thread_local_queues: Local>>, meshes_query: Extract< Query<( Entity, @@ -306,25 +304,24 @@ pub fn extract_meshes( previous_transform: (&previous_transform).into(), flags: flags.bits(), }; - let tls = thread_local_queues.get_or_default(); - let mut queue = tls.take(); - queue.push(( - entity, - RenderMeshInstance { - mesh_asset_id: handle.id(), - transforms, - shadow_caster: !not_shadow_caster, - material_bind_group_id: AtomicMaterialBindGroupId::default(), - automatic_batching: !no_automatic_batching, - }, - )); - tls.set(queue); + thread_local_queues.scope(|queue| { + queue.push(( + entity, + RenderMeshInstance { + mesh_asset_id: handle.id(), + transforms, + shadow_caster: !not_shadow_caster, + material_bind_group_id: AtomicMaterialBindGroupId::default(), + automatic_batching: !no_automatic_batching, + }, + )); + }); }, ); render_mesh_instances.clear(); for queue in thread_local_queues.iter_mut() { - render_mesh_instances.extend(queue.get_mut().drain(..)); + render_mesh_instances.extend(queue.drain(..)); } }