From 0931d6fe5c27a0e1ab5fd151655cbeb5c56b55ed Mon Sep 17 00:00:00 2001 From: Friz64 Date: Thu, 30 May 2024 03:24:26 +0200 Subject: [PATCH 01/12] Update to Bevy 0.14 --- Cargo.toml | 10 ++++++++-- examples/render_to_image_widget.rs | 14 ++++++++------ examples/side_panel.rs | 4 ++-- examples/ui.rs | 2 +- src/egui_node.rs | 2 +- src/lib.rs | 6 +++--- src/render_systems.rs | 3 ++- src/systems.rs | 31 +++++++++++++----------------- 8 files changed, 38 insertions(+), 34 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 452bcf38a..f4bafccde 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,8 +39,11 @@ name = "ui" required-features = ["render"] [dependencies] -bevy = { version = "0.13", default-features = false, features = ["bevy_asset"] } +bevy = { version = "0.14.0-dev", default-features = false, features = [ + "bevy_asset", +] } egui = { version = "0.27", default-features = false, features = ["bytemuck"] } +bytemuck = "1" webbrowser = { version = "0.8.2", optional = true } [target.'cfg(not(any(target_arch = "wasm32", target_os = "android")))'.dependencies] @@ -49,7 +52,7 @@ thread_local = { version = "1.1.0", optional = true } [dev-dependencies] version-sync = "0.9.4" -bevy = { version = "0.13", default-features = false, features = [ +bevy = { version = "0.14.0-dev", default-features = false, features = [ "x11", "png", "bevy_pbr", @@ -78,3 +81,6 @@ crossbeam-channel = "0.5.8" [workspace] members = ["run-wasm"] + +[patch.crates-io] +bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "4065098586519a1764a462c02a63f299114c35c9" } diff --git a/examples/render_to_image_widget.rs b/examples/render_to_image_widget.rs index 3dba0ae87..82ae9231c 100644 --- a/examples/render_to_image_widget.rs +++ b/examples/render_to_image_widget.rs @@ -70,7 +70,7 @@ fn setup( let cube_handle = meshes.add(Cuboid::new(4.0, 4.0, 4.0)); let default_material = StandardMaterial { - base_color: Color::rgb(0.8, 0.7, 0.6), + base_color: Color::srgb(0.8, 0.7, 0.6), reflectance: 0.02, unlit: false, ..default() @@ -89,7 +89,7 @@ fn setup( ..default() }) .insert(PreviewPassCube) - .insert(preview_pass_layer); + .insert(preview_pass_layer.clone()); // Light // NOTE: Currently lights are shared between passes - see https://github.com/bevyengine/bevy/issues/3462 @@ -104,7 +104,7 @@ fn setup( // render before the "main pass" camera order: -1, target: RenderTarget::Image(image_handle), - clear_color: ClearColorConfig::Custom(Color::rgba(1.0, 1.0, 1.0, 0.0)), + clear_color: ClearColorConfig::Custom(Color::srgba(1.0, 1.0, 1.0, 0.0)), ..default() }, transform: Transform::from_translation(Vec3::new(0.0, 0.0, 15.0)) @@ -164,7 +164,9 @@ fn render_to_image_example_system( ui.end_row(); ui.label("Emissive:"); - color_picker_widget(ui, &mut preview_material.emissive); + let mut emissive_color = Color::from(preview_material.emissive); + color_picker_widget(ui, &mut emissive_color); + preview_material.emissive = emissive_color.into(); ui.end_row(); ui.label("Perceptual roughness:"); @@ -192,7 +194,7 @@ fn render_to_image_example_system( } fn color_picker_widget(ui: &mut egui::Ui, color: &mut Color) -> egui::Response { - let [r, g, b, a] = color.as_rgba_f32(); + let [r, g, b, a] = Srgba::from(*color).to_f32_array(); let mut egui_color: egui::Rgba = egui::Rgba::from_srgba_unmultiplied( (r * 255.0) as u8, (g * 255.0) as u8, @@ -205,7 +207,7 @@ fn color_picker_widget(ui: &mut egui::Ui, color: &mut Color) -> egui::Response { egui::color_picker::Alpha::Opaque, ); let [r, g, b, a] = egui_color.to_srgba_unmultiplied(); - *color = Color::rgba( + *color = Color::srgba( r as f32 / 255.0, g as f32 / 255.0, b as f32 / 255.0, diff --git a/examples/side_panel.rs b/examples/side_panel.rs index 5536bbe65..5989f27fc 100644 --- a/examples/side_panel.rs +++ b/examples/side_panel.rs @@ -76,12 +76,12 @@ fn setup_system( ) { commands.spawn(PbrBundle { mesh: meshes.add(Plane3d::default().mesh().size(5.0, 5.0)), - material: materials.add(Color::rgb(0.3, 0.5, 0.3)), + material: materials.add(Color::srgb(0.3, 0.5, 0.3)), ..Default::default() }); commands.spawn(PbrBundle { mesh: meshes.add(Cuboid::new(1.0, 1.0, 1.0)), - material: materials.add(Color::rgb(0.8, 0.7, 0.6)), + material: materials.add(Color::srgb(0.8, 0.7, 0.6)), transform: Transform::from_xyz(0.0, 0.5, 0.0), ..Default::default() }); diff --git a/examples/ui.rs b/examples/ui.rs index 80844b287..e8435ed15 100644 --- a/examples/ui.rs +++ b/examples/ui.rs @@ -22,7 +22,7 @@ impl FromWorld for Images { /// - configuring egui contexts during the startup. fn main() { App::new() - .insert_resource(ClearColor(Color::rgb(0.0, 0.0, 0.0))) + .insert_resource(ClearColor(Color::BLACK)) .insert_resource(Msaa::Sample4) .init_resource::() .add_plugins(DefaultPlugins.set(WindowPlugin { diff --git a/src/egui_node.rs b/src/egui_node.rs index 2943f1f9b..399ee8516 100644 --- a/src/egui_node.rs +++ b/src/egui_node.rs @@ -5,7 +5,6 @@ use crate::{ EguiRenderOutput, EguiSettings, WindowSize, }; use bevy::{ - core::cast_slice, ecs::world::{FromWorld, World}, prelude::{Entity, Handle, Resource}, render::{ @@ -26,6 +25,7 @@ use bevy::{ view::ExtractedWindows, }, }; +use bytemuck::cast_slice; use egui::{TextureFilter, TextureOptions}; /// Egui shader. diff --git a/src/lib.rs b/src/lib.rs index f57e1b5b4..9fa9b8d03 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -627,7 +627,7 @@ impl Plugin for EguiPlugin { fn build(&self, app: &mut App) { app.register_type::(); - let world = &mut app.world; + let world = app.world_mut(); world.init_resource::(); #[cfg(feature = "render")] world.init_resource::(); @@ -723,7 +723,7 @@ impl Plugin for EguiPlugin { #[cfg(feature = "render")] fn finish(&self, app: &mut App) { - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app .init_resource::() .init_resource::>() @@ -870,7 +870,7 @@ fn free_egui_textures_system( if let egui::TextureId::Managed(texture_id) = texture_id { let managed_texture = egui_managed_textures.remove(&(window_id, texture_id)); if let Some(managed_texture) = managed_texture { - image_assets.remove(managed_texture.handle); + image_assets.remove(&managed_texture.handle); } } } diff --git a/src/render_systems.rs b/src/render_systems.rs index c04357f1d..84ef7a2cd 100644 --- a/src/render_systems.rs +++ b/src/render_systems.rs @@ -14,6 +14,7 @@ use bevy::{ DynamicUniformBuffer, PipelineCache, ShaderType, SpecializedRenderPipelines, }, renderer::{RenderDevice, RenderQueue}, + texture::GpuImage, view::ExtractedWindows, Extract, }, @@ -188,7 +189,7 @@ pub fn queue_bind_groups_system( mut commands: Commands, egui_textures: ExtractedEguiTextures, render_device: Res, - gpu_images: Res>, + gpu_images: Res>, egui_pipeline: Res, ) { let bind_groups = egui_textures diff --git a/src/systems.rs b/src/systems.rs index 491e2d73e..46034aa9f 100644 --- a/src/systems.rs +++ b/src/systems.rs @@ -16,7 +16,7 @@ use bevy::{ log, prelude::{Entity, EventReader, Query, Resource, Time}, time::Real, - window::{CursorMoved, ReceivedCharacter, RequestRedraw}, + window::{CursorMoved, RequestRedraw}, }; use std::marker::PhantomData; @@ -27,7 +27,6 @@ pub struct InputEvents<'w, 's> { pub ev_cursor: EventReader<'w, 's, CursorMoved>, pub ev_mouse_button_input: EventReader<'w, 's, MouseButtonInput>, pub ev_mouse_wheel: EventReader<'w, 's, MouseWheel>, - pub ev_received_character: EventReader<'w, 's, ReceivedCharacter>, pub ev_keyboard_input: EventReader<'w, 's, KeyboardInput>, pub ev_touch: EventReader<'w, 's, TouchInput>, } @@ -38,7 +37,6 @@ impl<'w, 's> InputEvents<'w, 's> { self.ev_cursor.read().last(); self.ev_mouse_button_input.read().last(); self.ev_mouse_wheel.read().last(); - self.ev_received_character.read().last(); self.ev_keyboard_input.read().last(); self.ev_touch.read().last(); } @@ -239,26 +237,23 @@ pub fn process_input_system( } } - if !command && !win || !*context_params.is_macos && ctrl && alt { - for event in input_events.ev_received_character.read() { - let Some(mut window_context) = context_params.window_context(event.window) else { - continue; - }; - - if event.char.matches(char::is_control).count() == 0 { - window_context - .egui_input - .events - .push(egui::Event::Text(event.char.to_string())); - } - } - } - for event in keyboard_input_events { + let send_text_event = !command && !win || !*context_params.is_macos && ctrl && alt; let Some(mut window_context) = context_params.window_context(event.window) else { continue; }; + if send_text_event { + if let Key::Character(c) = &event.logical_key { + if c.matches(char::is_control).count() == 0 { + window_context + .egui_input + .events + .push(egui::Event::Text(c.to_string())); + } + } + } + let (Some(key), physical_key) = ( bevy_to_egui_key(&event.logical_key), bevy_to_egui_physical_key(&event.key_code), From bfc06fec25a61f9de6d908e36c49c334bbbd7379 Mon Sep 17 00:00:00 2001 From: Friz64 Date: Thu, 30 May 2024 03:55:09 +0200 Subject: [PATCH 02/12] fix text input --- src/systems.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/systems.rs b/src/systems.rs index 46034aa9f..4f70e9a23 100644 --- a/src/systems.rs +++ b/src/systems.rs @@ -238,19 +238,20 @@ pub fn process_input_system( } for event in keyboard_input_events { - let send_text_event = !command && !win || !*context_params.is_macos && ctrl && alt; + let text_event_allowed = !command && !win || !*context_params.is_macos && ctrl && alt; let Some(mut window_context) = context_params.window_context(event.window) else { continue; }; - if send_text_event { - if let Key::Character(c) = &event.logical_key { - if c.matches(char::is_control).count() == 0 { - window_context - .egui_input - .events - .push(egui::Event::Text(c.to_string())); + if text_event_allowed && event.state.is_pressed() { + match &event.logical_key { + Key::Character(char) if char.matches(char::is_control).count() == 0 => { + (window_context.egui_input.events).push(egui::Event::Text(char.to_string())); + } + Key::Space => { + (window_context.egui_input.events).push(egui::Event::Text(" ".into())); } + _ => (), } } From 772598b1cd5b72f453176bd6bee5659742ea64bc Mon Sep 17 00:00:00 2001 From: Friz64 Date: Thu, 30 May 2024 04:03:11 +0200 Subject: [PATCH 03/12] proper git dependency --- Cargo.toml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index f4bafccde..52c2250aa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,7 +39,7 @@ name = "ui" required-features = ["render"] [dependencies] -bevy = { version = "0.14.0-dev", default-features = false, features = [ +bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "4065098", default-features = false, features = [ "bevy_asset", ] } egui = { version = "0.27", default-features = false, features = ["bytemuck"] } @@ -52,7 +52,7 @@ thread_local = { version = "1.1.0", optional = true } [dev-dependencies] version-sync = "0.9.4" -bevy = { version = "0.14.0-dev", default-features = false, features = [ +bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "4065098", default-features = false, features = [ "x11", "png", "bevy_pbr", @@ -81,6 +81,3 @@ crossbeam-channel = "0.5.8" [workspace] members = ["run-wasm"] - -[patch.crates-io] -bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "4065098586519a1764a462c02a63f299114c35c9" } From bbda1c020b267bffd278cba0bb55069bb5a7854e Mon Sep 17 00:00:00 2001 From: Friz64 Date: Tue, 4 Jun 2024 20:50:43 +0200 Subject: [PATCH 04/12] fd82ef8 --- Cargo.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 52c2250aa..745db2510 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,7 +39,7 @@ name = "ui" required-features = ["render"] [dependencies] -bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "4065098", default-features = false, features = [ +bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "fd82ef8", default-features = false, features = [ "bevy_asset", ] } egui = { version = "0.27", default-features = false, features = ["bytemuck"] } @@ -52,7 +52,7 @@ thread_local = { version = "1.1.0", optional = true } [dev-dependencies] version-sync = "0.9.4" -bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "4065098", default-features = false, features = [ +bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "fd82ef8", default-features = false, features = [ "x11", "png", "bevy_pbr", @@ -62,7 +62,7 @@ bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "4065098", defaul ] } [target.'cfg(target_arch = "wasm32")'.dependencies] -winit = "0.29" +winit = "0.30" web-sys = { version = "0.3.63", features = [ "Clipboard", "ClipboardEvent", From b492a66a7abf5b44a23439e03509913fb388c6e9 Mon Sep 17 00:00:00 2001 From: Friz64 Date: Wed, 5 Jun 2024 21:39:52 +0200 Subject: [PATCH 05/12] 519abbc --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 745db2510..07803dd2a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,7 +39,7 @@ name = "ui" required-features = ["render"] [dependencies] -bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "fd82ef8", default-features = false, features = [ +bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "519abbc", default-features = false, features = [ "bevy_asset", ] } egui = { version = "0.27", default-features = false, features = ["bytemuck"] } @@ -52,7 +52,7 @@ thread_local = { version = "1.1.0", optional = true } [dev-dependencies] version-sync = "0.9.4" -bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "fd82ef8", default-features = false, features = [ +bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "519abbc", default-features = false, features = [ "x11", "png", "bevy_pbr", From 421f7375e9fbb62d8facb0259b9549cdc82995e5 Mon Sep 17 00:00:00 2001 From: Friz64 Date: Fri, 7 Jun 2024 18:03:05 +0200 Subject: [PATCH 06/12] 0.14.0-rc.2 --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 07803dd2a..6aff021b5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,7 +39,7 @@ name = "ui" required-features = ["render"] [dependencies] -bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "519abbc", default-features = false, features = [ +bevy = { version = "0.14.0-rc.2", default-features = false, features = [ "bevy_asset", ] } egui = { version = "0.27", default-features = false, features = ["bytemuck"] } @@ -52,7 +52,7 @@ thread_local = { version = "1.1.0", optional = true } [dev-dependencies] version-sync = "0.9.4" -bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "519abbc", default-features = false, features = [ +bevy = { version = "0.14.0-rc.2", default-features = false, features = [ "x11", "png", "bevy_pbr", From 515d26200a30e76a8b66e05829ff8dbf5931acf3 Mon Sep 17 00:00:00 2001 From: Friz64 Date: Mon, 17 Jun 2024 19:24:43 +0200 Subject: [PATCH 07/12] Update Cargo.toml Co-authored-by: MiniaczQ --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 6aff021b5..2deefa1f0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,7 +39,7 @@ name = "ui" required-features = ["render"] [dependencies] -bevy = { version = "0.14.0-rc.2", default-features = false, features = [ +bevy = { version = "0.14.0-rc.3", default-features = false, features = [ "bevy_asset", ] } egui = { version = "0.27", default-features = false, features = ["bytemuck"] } From 505df116da3e2ca891ead571a2b371dfe1332328 Mon Sep 17 00:00:00 2001 From: Friz64 Date: Mon, 17 Jun 2024 19:24:48 +0200 Subject: [PATCH 08/12] Update Cargo.toml Co-authored-by: MiniaczQ --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 2deefa1f0..fb1d72187 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -52,7 +52,7 @@ thread_local = { version = "1.1.0", optional = true } [dev-dependencies] version-sync = "0.9.4" -bevy = { version = "0.14.0-rc.2", default-features = false, features = [ +bevy = { version = "0.14.0-rc.3", default-features = false, features = [ "x11", "png", "bevy_pbr", From b25bf5bdf1ea88a21a1ddb93f13234d1fdee40f8 Mon Sep 17 00:00:00 2001 From: Friz64 Date: Fri, 28 Jun 2024 00:22:18 +0200 Subject: [PATCH 09/12] just set the version to 0.14.0-rc --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index fb1d72187..01bdfd817 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,7 +39,7 @@ name = "ui" required-features = ["render"] [dependencies] -bevy = { version = "0.14.0-rc.3", default-features = false, features = [ +bevy = { version = "0.14.0-rc", default-features = false, features = [ "bevy_asset", ] } egui = { version = "0.27", default-features = false, features = ["bytemuck"] } @@ -52,7 +52,7 @@ thread_local = { version = "1.1.0", optional = true } [dev-dependencies] version-sync = "0.9.4" -bevy = { version = "0.14.0-rc.3", default-features = false, features = [ +bevy = { version = "0.14.0-rc", default-features = false, features = [ "x11", "png", "bevy_pbr", From 7eb1191ddf1cc358c9d502d39d215f6f2ed732a1 Mon Sep 17 00:00:00 2001 From: Friz64 Date: Thu, 4 Jul 2024 21:24:23 +0200 Subject: [PATCH 10/12] =?UTF-8?q?0.14=20=F0=9F=8E=89=F0=9F=8E=89?= =?UTF-8?q?=F0=9F=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 01bdfd817..a302a9b95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,7 +39,7 @@ name = "ui" required-features = ["render"] [dependencies] -bevy = { version = "0.14.0-rc", default-features = false, features = [ +bevy = { version = "0.14.0", default-features = false, features = [ "bevy_asset", ] } egui = { version = "0.27", default-features = false, features = ["bytemuck"] } @@ -52,7 +52,7 @@ thread_local = { version = "1.1.0", optional = true } [dev-dependencies] version-sync = "0.9.4" -bevy = { version = "0.14.0-rc", default-features = false, features = [ +bevy = { version = "0.14.0", default-features = false, features = [ "x11", "png", "bevy_pbr", From b5738fc76939e2e785d709265555f1bc30cb9863 Mon Sep 17 00:00:00 2001 From: mvlabat Date: Sat, 6 Jul 2024 00:21:24 +0300 Subject: [PATCH 11/12] Fix compilation of render_to_image_widget example --- examples/render_to_image_widget.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/render_to_image_widget.rs b/examples/render_to_image_widget.rs index aa3b91bb9..c782b6899 100644 --- a/examples/render_to_image_widget.rs +++ b/examples/render_to_image_widget.rs @@ -98,7 +98,7 @@ fn setup( transform: Transform::from_translation(Vec3::new(0.0, 0.0, 10.0)), ..default() }) - .insert(RenderLayers::all()); + .insert(RenderLayers::default().with(1)); commands .spawn(Camera3dBundle { From 492b99fbcd8a3100a5f8f567e93f11901a0903ff Mon Sep 17 00:00:00 2001 From: mvlabat Date: Sat, 6 Jul 2024 00:21:43 +0300 Subject: [PATCH 12/12] Add web_sys_unstable_apis to the allowed cfg flags --- build.rs | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 build.rs diff --git a/build.rs b/build.rs new file mode 100644 index 000000000..5e6da5fb3 --- /dev/null +++ b/build.rs @@ -0,0 +1,3 @@ +fn main() { + println!("cargo::rustc-check-cfg=cfg(web_sys_unstable_apis)"); +}