From b8037fef616c1df482dba873df14f3b585a24f0b Mon Sep 17 00:00:00 2001 From: Amatsugu Date: Mon, 18 Aug 2025 22:13:56 -0400 Subject: [PATCH] add missing image switch --- Cargo.lock | 54 ++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 12 ++++++++++ src/app.rs | 16 ++++++++++++- src/render/pipeline.rs | 26 +++++++++++++------- 4 files changed, 99 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0afef2e..504237e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -163,6 +163,12 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + [[package]] name = "android_log-sys" version = "0.3.2" @@ -1582,6 +1588,7 @@ version = "0.1.0" dependencies = [ "bevy", "bevy-inspector-egui", + "iyes_perf_ui", ] [[package]] @@ -1749,6 +1756,18 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "chrono" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "windows-link", +] + [[package]] name = "clang-sys" version = "1.8.1" @@ -2794,6 +2813,30 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" +[[package]] +name = "iana-time-zone" +version = "0.1.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.61.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "image" version = "0.25.6" @@ -2933,6 +2976,17 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +[[package]] +name = "iyes_perf_ui" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e4468c51a47d2422a3a3e01b45cb47ed0fbce520495dd7de495bcfe8ce0f856" +dependencies = [ + "bevy", + "chrono", + "num-traits", +] + [[package]] name = "jni" version = "0.21.1" diff --git a/Cargo.toml b/Cargo.toml index d68038a..0317026 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,3 +6,15 @@ edition = "2024" [dependencies] bevy = {version = "0.16.1", features = ["bevy_image", "file_watcher"]} bevy-inspector-egui = "0.31.0" +iyes_perf_ui = "0.5.0" + + +[lints.clippy] +# Bevy supplies arguments to systems via dependency injection, so it's natural for systems to +# request more than 7 arguments, which would undesirably trigger this lint. +too_many_arguments = "allow" +# Queries may access many components, which would undesirably trigger this lint. +type_complexity = "allow" +# Make sure macros use their standard braces, such as `[]` for `bevy_ecs::children!`. +nonstandard_macro_braces = "warn" +needless_return = "allow" diff --git a/src/app.rs b/src/app.rs index fdd4718..055951c 100644 --- a/src/app.rs +++ b/src/app.rs @@ -4,6 +4,7 @@ use bevy::{ render::render_resource::{Extent3d, TextureDimension, TextureFormat, TextureUsages}, window::PrimaryWindow, }; +use iyes_perf_ui::prelude::*; use crate::render::pipeline::{TracerPipelinePlugin, TracerRenderTextures, TracerUniforms}; @@ -14,15 +15,28 @@ impl Plugin for Blackhole { app.register_type::(); app.add_systems(Startup, setup); - app.add_plugins(TracerPipelinePlugin); app.insert_resource(TracerUniforms { sky_color: LinearRgba::BLUE, }); + + //Perf UI + app.add_plugins(bevy::diagnostic::FrameTimeDiagnosticsPlugin::default()) + .add_plugins(bevy::diagnostic::EntityCountDiagnosticsPlugin) + .add_plugins(bevy::diagnostic::SystemInformationDiagnosticsPlugin) + .add_plugins(PerfUiPlugin); } } fn setup(mut commands: Commands, mut images: ResMut>, window: Single<&Window, With>) { + commands.spawn(( + PerfUiRoot::default(), + PerfUiEntryFPS::default(), + PerfUiEntryFPSWorst::default(), + PerfUiEntryFrameTime::default(), + PerfUiEntryFrameTimeWorst::default(), + )); + let size = window.physical_size(); let extent = Extent3d { diff --git a/src/render/pipeline.rs b/src/render/pipeline.rs index a3e90b4..218bc2e 100644 --- a/src/render/pipeline.rs +++ b/src/render/pipeline.rs @@ -27,13 +27,6 @@ pub struct TracerLabel; #[reflect(Resource)] pub struct TracerRenderTextures(pub Handle, pub Handle); -#[derive(Resource)] -pub struct TracerPipeline { - pub texture_bind_group_layout: BindGroupLayout, - pub init_pipeline: CachedComputePipelineId, - pub update_pipeline: CachedComputePipelineId, -} - #[derive(Resource, Clone, ExtractResource, ShaderType, Default)] pub struct TracerUniforms { pub sky_color: LinearRgba, @@ -47,7 +40,8 @@ impl Plugin for TracerPipelinePlugin { ExtractResourcePlugin::::default(), ExtractResourcePlugin::::default(), )); - app.init_resource::(); + app.init_resource::() + .add_systems(Update, switch_textures); let render_app = app.sub_app_mut(RenderApp); // render_app.add_systems(Startup, init_pipeline); @@ -64,6 +58,21 @@ impl Plugin for TracerPipelinePlugin { } } +fn switch_textures(images: Res, mut sprite: Single<&mut Sprite>) { + if sprite.image == images.0 { + sprite.image = images.1.clone(); + } else { + sprite.image = images.0.clone(); + } +} + +#[derive(Resource)] +pub struct TracerPipeline { + pub texture_bind_group_layout: BindGroupLayout, + pub init_pipeline: CachedComputePipelineId, + pub update_pipeline: CachedComputePipelineId, +} + impl FromWorld for TracerPipeline { fn from_world(world: &mut World) -> Self { let render_device = world.resource::(); @@ -109,6 +118,7 @@ impl FromWorld for TracerPipeline { } } +#[allow(dead_code)] //Pending bevy update for RenderStartup schedule fn init_pipeline( mut commands: Commands, render_device: Res,