diff --git a/Cargo.toml b/Cargo.toml index f2992ec..b42f8ec 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,9 +23,6 @@ version = "0.15" default-features = false features = ["bevy_render"] -[dependencies] -crossbeam-channel = "0.5.0" - [dev-dependencies.bevy] version = "0.15" default-features = false diff --git a/src/lib.rs b/src/lib.rs index 95a7f09..15a3516 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,7 +2,7 @@ use bevy::{ prelude::*, render::{ render_resource::{CachedPipelineState, PipelineCache}, - Render, RenderApp, + MainWorld, RenderApp, }, }; @@ -20,34 +20,24 @@ impl PipelinesReady { impl Plugin for PipelinesReadyPlugin { fn build(&self, app: &mut App) { - let (tx, rx) = crossbeam_channel::bounded(1); - app.init_resource::(); - app.add_systems(Update, move |mut ready: ResMut| { - let Ok(num) = rx.try_recv() else { - return; - }; - - ready.0 = num; - }); - - let renderer_app = app.sub_app_mut(RenderApp); - - let mut current = 0; - renderer_app.add_systems(Render, move |cache: Res| { - let count = cache - .pipelines() - .filter(|pipeline| matches!(pipeline.state, CachedPipelineState::Ok(_))) - .count(); + app.sub_app_mut(RenderApp) + .add_systems(ExtractSchedule, update_pipelines_ready); + } +} - if current == count { - return; - } +fn update_pipelines_ready(mut main_world: ResMut, cache: Res) { + if let Some(mut pipelines_ready) = main_world.get_resource_mut::() { + let count = cache + .pipelines() + .filter(|pipeline| matches!(pipeline.state, CachedPipelineState::Ok(_))) + .count(); - let _ = tx.send(count); + if pipelines_ready.0 == count { + return; + } - current = count; - }); + pipelines_ready.0 = count; } }