From 3b0b37484ff87e632f63b46da7b518eb73aa5c29 Mon Sep 17 00:00:00 2001 From: Fangdun Tsai Date: Sun, 10 Aug 2025 15:05:54 +0800 Subject: [PATCH] chore: bevy 0.17.0 --- .github/workflows/rust.yml | 2 +- Cargo.toml | 63 ++++++++++--------- crates/transform-gizmo-bevy/Cargo.toml | 3 + .../examples/ui_blocked_gizmo.rs | 4 +- crates/transform-gizmo-bevy/src/lib.rs | 16 ++--- .../src/mouse_interact.rs | 6 +- crates/transform-gizmo-bevy/src/picking.rs | 8 +-- crates/transform-gizmo-bevy/src/render.rs | 51 +++++++++------ crates/transform-gizmo-egui/Cargo.toml | 2 +- crates/transform-gizmo/Cargo.toml | 2 +- examples/bevy/Cargo.toml | 2 +- 11 files changed, 89 insertions(+), 70 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 30729d9..0f3e958 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -11,7 +11,7 @@ jobs: - uses: dtolnay/rust-toolchain@master with: - toolchain: 1.85.0 + toolchain: 1.88.0 - name: install dependencies run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev diff --git a/Cargo.toml b/Cargo.toml index abc62e3..b9306c3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,8 +3,8 @@ resolver = "2" members = ["crates/*", "examples/*"] [workspace.package] -version = "0.6.0" -rust-version = "1.85.0" +version = "0.7.0" +rust-version = "1.88.0" edition = "2024" license = "MIT OR Apache-2.0" homepage = "https://github.com/urholaukkarinen/transform-gizmo" @@ -12,41 +12,44 @@ repository = "https://github.com/urholaukkarinen/transform-gizmo" authors = ["Urho Laukkarinen "] [workspace.dependencies] -transform-gizmo = { version = "0.6.0", path = "crates/transform-gizmo" } -transform-gizmo-egui = { version = "0.6.0", path = "crates/transform-gizmo-egui" } -transform-gizmo-bevy = { version = "0.6.0", path = "crates/transform-gizmo-bevy" } +transform-gizmo = { version = "0.7.0", path = "crates/transform-gizmo" } +transform-gizmo-egui = { version = "0.7.0", path = "crates/transform-gizmo-egui" } +transform-gizmo-bevy = { version = "0.7.0", path = "crates/transform-gizmo-bevy" } -egui = "0.31" -eframe = "0.31" -emath = "0.31" -epaint = "0.31" -ecolor = "0.31" +egui = "0.32" +eframe = "0.32" +emath = "0.32" +epaint = "0.32" +ecolor = "0.32" glam = { version = "0.30", features = ["mint"] } mint = "0.5" enum_dispatch = "0.3" ahash = "0.8" enumset = "1.1" -bytemuck = "1.22" -uuid = "1.1" -bevy = "0.16" +bytemuck = "1.23" +uuid = "1.17" +bevy = "0.17.0-rc.1" -bevy_app = { version = "0.16", default-features = false } -bevy_core_pipeline = { version = "0.16", default-features = false } -bevy_reflect = { version = "0.16", default-features = false } -bevy_math = { version = "0.16", features = ["mint"], default-features = false } -bevy_render = { version = "0.16", default-features = false } -bevy_input = { version = "0.16", default-features = false } -bevy_asset = { version = "0.16", default-features = false } -bevy_utils = { version = "0.16", default-features = false } -bevy_platform = { version = "0.16", default-features = false } -bevy_pbr = { version = "0.16", default-features = false } -bevy_ecs = { version = "0.16", default-features = false } -bevy_log = { version = "0.16", default-features = false } -bevy_window = { version = "0.16", default-features = false } -bevy_transform = { version = "0.16", default-features = false } -bevy_derive = { version = "0.16", default-features = false } -bevy_image = { version = "0.16", default-features = false } -bevy_picking = { version = "0.16", default-features = false } +bevy_app = { version = "0.17.0", default-features = false } +bevy_core_pipeline = { version = "0.17.0", default-features = false } +bevy_reflect = { version = "0.17.0", default-features = false } +bevy_math = { version = "0.17.0", features = ["mint"], default-features = false } +bevy_mesh = { version = "0.17.0", default-features = false } +bevy_camera = { version = "0.17.0", default-features = false } +bevy_shader = { version = "0.17.0", default-features = false } +bevy_render = { version = "0.17.0", default-features = false } +bevy_input = { version = "0.17.0", default-features = false } +bevy_asset = { version = "0.17.0", default-features = false } +bevy_utils = { version = "0.17.0", default-features = false } +bevy_platform = { version = "0.17.0", default-features = false } +bevy_pbr = { version = "0.17.0", default-features = false } +bevy_ecs = { version = "0.17.0", default-features = false } +bevy_log = { version = "0.17.0", default-features = false } +bevy_window = { version = "0.17.0", default-features = false } +bevy_transform = { version = "0.17.0", default-features = false } +bevy_derive = { version = "0.17.0", default-features = false } +bevy_image = { version = "0.17.0", default-features = false } +bevy_picking = { version = "0.17.0", default-features = false } [profile.release] opt-level = "s" diff --git a/crates/transform-gizmo-bevy/Cargo.toml b/crates/transform-gizmo-bevy/Cargo.toml index ee789dc..2339ff5 100644 --- a/crates/transform-gizmo-bevy/Cargo.toml +++ b/crates/transform-gizmo-bevy/Cargo.toml @@ -24,8 +24,11 @@ bevy_app.workspace = true bevy_core_pipeline.workspace = true bevy_reflect.workspace = true bevy_math.workspace = true +bevy_mesh.workspace = true bevy_picking = {workspace = true, optional = true} +bevy_camera.workspace = true bevy_render.workspace = true +bevy_shader.workspace = true bevy_input.workspace = true bevy_asset.workspace = true bevy_utils.workspace = true diff --git a/crates/transform-gizmo-bevy/examples/ui_blocked_gizmo.rs b/crates/transform-gizmo-bevy/examples/ui_blocked_gizmo.rs index dc49a94..273a36f 100644 --- a/crates/transform-gizmo-bevy/examples/ui_blocked_gizmo.rs +++ b/crates/transform-gizmo-bevy/examples/ui_blocked_gizmo.rs @@ -9,8 +9,8 @@ fn main() { App::new() .add_plugins((DefaultPlugins, TransformGizmoPlugin)) .add_systems(Startup, setup) - .add_observer(|trigger: Trigger>| { - info!("Moved over: {}", trigger.target()); + .add_observer(|trigger: On>| { + info!("Moved over: {}", trigger.entity); }) .run(); } diff --git a/crates/transform-gizmo-bevy/src/lib.rs b/crates/transform-gizmo-bevy/src/lib.rs index 1686a61..d121658 100644 --- a/crates/transform-gizmo-bevy/src/lib.rs +++ b/crates/transform-gizmo-bevy/src/lib.rs @@ -30,12 +30,12 @@ use bevy_app::prelude::*; use bevy_asset::{AssetApp, Assets}; +use bevy_camera::Camera; use bevy_ecs::prelude::*; use bevy_input::prelude::*; use bevy_math::{DQuat, DVec3, Vec2}; use bevy_picking::hover::HoverMap; use bevy_platform::collections::HashMap; -use bevy_render::prelude::*; use bevy_transform::prelude::*; use bevy_window::{PrimaryWindow, Window}; use mouse_interact::MouseGizmoInteractionPlugin; @@ -72,8 +72,8 @@ impl Plugin for TransformGizmoPlugin { app.init_asset::() .init_resource::() .init_resource::() - .add_event::() - .add_event::() + .add_message::() + .add_message::() .add_plugins(TransformGizmoRenderPlugin) .add_systems( Last, @@ -371,9 +371,9 @@ fn handle_hotkeys( } } -#[derive(Debug, Event, Default)] +#[derive(Debug, Message, Default)] pub struct GizmoDragStarted; -#[derive(Debug, Event, Default)] +#[derive(Debug, Message, Default)] pub struct GizmoDragging; #[allow(clippy::too_many_arguments)] @@ -381,8 +381,8 @@ fn update_gizmos( q_window: Query<&Window, With>, q_gizmo_camera: Query<(&Camera, &GlobalTransform), With>, mut q_targets: Query<(Entity, &mut Transform, &mut GizmoTarget), Without>, - mut drag_started: EventReader, - mut dragging: EventReader, + mut drag_started: MessageReader, + mut dragging: MessageReader, gizmo_options: Res, mut gizmo_storage: ResMut, mut last_cursor_pos: Local, @@ -442,7 +442,7 @@ fn update_gizmos( let projection_matrix = camera.clip_from_view(); - let view_matrix = camera_transform.compute_matrix().inverse(); + let view_matrix = camera_transform.to_matrix().inverse(); let mut snap_angle = gizmo_options.snap_angle; let mut snap_distance = gizmo_options.snap_distance; diff --git a/crates/transform-gizmo-bevy/src/mouse_interact.rs b/crates/transform-gizmo-bevy/src/mouse_interact.rs index f799fcd..8a6a60b 100644 --- a/crates/transform-gizmo-bevy/src/mouse_interact.rs +++ b/crates/transform-gizmo-bevy/src/mouse_interact.rs @@ -1,5 +1,5 @@ use bevy_app::{App, Plugin, Update}; -use bevy_ecs::{event::EventWriter, system::Res}; +use bevy_ecs::{message::MessageWriter, system::Res}; use bevy_input::{ButtonInput, mouse::MouseButton}; use crate::{GizmoDragStarted, GizmoDragging}; @@ -13,8 +13,8 @@ impl Plugin for MouseGizmoInteractionPlugin { fn mouse_interact_gizmo( mouse: Res>, - mut drag_started: EventWriter, - mut dragging: EventWriter, + mut drag_started: MessageWriter, + mut dragging: MessageWriter, ) { if mouse.just_pressed(MouseButton::Left) { drag_started.write_default(); diff --git a/crates/transform-gizmo-bevy/src/picking.rs b/crates/transform-gizmo-bevy/src/picking.rs index c040bf2..19b8493 100644 --- a/crates/transform-gizmo-bevy/src/picking.rs +++ b/crates/transform-gizmo-bevy/src/picking.rs @@ -1,11 +1,11 @@ use bevy_app::{Plugin, PreUpdate}; use bevy_ecs::{ - event::EventWriter, + message::MessageWriter, schedule::IntoScheduleConfigs, system::{Query, Res}, }; use bevy_picking::{ - PickSet, + PickingSystems, backend::{HitData, PointerHits}, pointer::{PointerId, PointerLocation}, }; @@ -16,13 +16,13 @@ pub struct TransformGizmoPickingPlugin; impl Plugin for TransformGizmoPickingPlugin { fn build(&self, app: &mut bevy_app::App) { - app.add_systems(PreUpdate, update_hits.in_set(PickSet::Backend)); + app.add_systems(PreUpdate, update_hits.in_set(PickingSystems::Backend)); } } fn update_hits( storage: Res, - mut output: EventWriter, + mut output: MessageWriter, pointers: Query<(&PointerId, &PointerLocation)>, ) { let gizmos = storage diff --git a/crates/transform-gizmo-bevy/src/render.rs b/crates/transform-gizmo-bevy/src/render.rs index 6b37ce3..d440a29 100644 --- a/crates/transform-gizmo-bevy/src/render.rs +++ b/crates/transform-gizmo-bevy/src/render.rs @@ -1,5 +1,6 @@ use bevy_app::{App, Plugin}; -use bevy_asset::{Asset, AssetId, Handle, load_internal_asset, weak_handle}; +use bevy_asset::{Asset, AssetId, Handle, RenderAssetUsages, load_internal_asset, uuid_handle}; +use bevy_camera::visibility::RenderLayers; use bevy_core_pipeline::core_3d::{CORE_3D_DEPTH_FORMAT, Transparent3d}; use bevy_core_pipeline::prepass::{ DeferredPrepass, DepthPrepass, MotionVectorPrepass, NormalPrepass, @@ -10,15 +11,14 @@ use bevy_ecs::query::ROQueryItem; use bevy_ecs::system::SystemParamItem; use bevy_ecs::system::lifetimeless::{Read, SRes}; use bevy_image::BevyDefault as _; +use bevy_mesh::{PrimitiveTopology, VertexBufferLayout}; use bevy_pbr::{MeshPipeline, MeshPipelineKey, SetMeshViewBindGroup}; use bevy_platform::collections::{HashMap, HashSet}; use bevy_reflect::{Reflect, TypePath}; use bevy_render::extract_component::ExtractComponent; -use bevy_render::mesh::PrimitiveTopology; use bevy_render::prelude::*; use bevy_render::render_asset::{ - PrepareAssetError, RenderAsset, RenderAssetPlugin, RenderAssetUsages, RenderAssets, - prepare_assets, + PrepareAssetError, RenderAsset, RenderAssetPlugin, RenderAssets, prepare_assets, }; use bevy_render::render_phase::{ AddRenderCommand, DrawFunctions, PhaseItem, PhaseItemExtraIndex, RenderCommand, @@ -29,18 +29,19 @@ use bevy_render::render_resource::{ CompareFunction, DepthBiasState, DepthStencilState, FragmentState, IndexFormat, MultisampleState, PipelineCache, PrimitiveState, RenderPipelineDescriptor, SpecializedRenderPipeline, SpecializedRenderPipelines, StencilState, TextureFormat, - VertexAttribute, VertexBufferLayout, VertexFormat, VertexState, VertexStepMode, + VertexAttribute, VertexFormat, VertexState, VertexStepMode, }; use bevy_render::renderer::RenderDevice; use bevy_render::sync_world::TemporaryRenderEntity; -use bevy_render::view::{ExtractedView, RenderLayers, ViewTarget}; -use bevy_render::{Extract, Render, RenderApp, RenderSet}; +use bevy_render::view::{ExtractedView, ViewTarget}; +use bevy_render::{Extract, Render, RenderApp, RenderSystems}; +use bevy_shader::Shader; use bytemuck::cast_slice; use uuid::Uuid; use crate::GizmoCamera; -const GIZMO_SHADER_HANDLE: Handle = weak_handle!("e44be110-cb2b-4a8d-9c0c-965424e6a633"); +const GIZMO_SHADER_HANDLE: Handle = uuid_handle!("e44be110-cb2b-4a8d-9c0c-965424e6a633"); pub(crate) struct TransformGizmoRenderPlugin; @@ -62,7 +63,7 @@ impl Plugin for TransformGizmoRenderPlugin { .add_systems( Render, queue_transform_gizmos - .in_set(RenderSet::Queue) + .in_set(RenderSystems::Queue) .after(prepare_assets::), ); } @@ -85,7 +86,17 @@ pub(crate) struct DrawDataHandles { } #[derive( - Component, Default, Clone, Debug, Deref, DerefMut, Reflect, PartialEq, Eq, ExtractComponent, + Component, + Default, + Clone, + Debug, + Deref, + DerefMut, + Reflect, + PartialEq, + Eq, + ExtractComponent, + Hash, )] #[reflect(Component)] pub(crate) struct GizmoDrawDataHandle(pub(crate) Handle); @@ -108,14 +119,14 @@ impl From<&GizmoDrawDataHandle> for AssetId { } fn extract_gizmo_data(mut commands: Commands, handles: Extract>) { - let handle_weak_refs = handles + let handle_refs = handles .handles .values() - .map(|handle| handle.clone_weak()) + .map(|handle| handle.clone()) .collect::>(); - for handle in handle_weak_refs { - commands.spawn((GizmoDrawDataHandle(handle), TemporaryRenderEntity)); + for handle in handle_refs { + commands.spawn((handle, TemporaryRenderEntity)); } } @@ -142,6 +153,7 @@ impl RenderAsset for GizmoBuffers { source_asset: Self::SourceAsset, _: AssetId, render_device: &mut SystemParamItem, + _: Option<&Self>, ) -> std::result::Result> { let position_buffer_data = cast_slice(&source_asset.0.vertices); let position_buffer = render_device.create_buffer_with_data(&BufferInitDescriptor { @@ -183,8 +195,8 @@ impl RenderCommand

for DrawTransformGizmo { #[inline] fn render<'w>( _item: &P, - _view: ROQueryItem<'w, Self::ViewQuery>, - handle: Option>, + _view: ROQueryItem<'w, '_, Self::ViewQuery>, + handle: Option>, gizmos: SystemParamItem<'w, '_, Self::Param>, pass: &mut TrackedRenderPass<'w>, ) -> RenderCommandResult { @@ -251,13 +263,14 @@ impl SpecializedRenderPipeline for TransformGizmoPipeline { .mesh_pipeline .get_view_layout(key.view_key.into()) .clone(); + let layout = vec![view_layout.main_layout.clone()]; RenderPipelineDescriptor { label: Some("TransformGizmo Pipeline".into()), zero_initialize_workgroup_memory: true, // ? vertex: VertexState { shader: GIZMO_SHADER_HANDLE, - entry_point: "vertex".into(), + entry_point: Some("vertex".into()), shader_defs: shader_defs.clone(), buffers: vec![ VertexBufferLayout { @@ -283,14 +296,14 @@ impl SpecializedRenderPipeline for TransformGizmoPipeline { fragment: Some(FragmentState { shader: GIZMO_SHADER_HANDLE, shader_defs, - entry_point: "fragment".into(), + entry_point: Some("fragment".into()), targets: vec![Some(ColorTargetState { format, blend: Some(BlendState::PREMULTIPLIED_ALPHA_BLENDING), write_mask: ColorWrites::ALL, })], }), - layout: vec![view_layout], + layout, primitive: PrimitiveState { topology: PrimitiveTopology::TriangleList, cull_mode: None, diff --git a/crates/transform-gizmo-egui/Cargo.toml b/crates/transform-gizmo-egui/Cargo.toml index c47fb91..8b59071 100644 --- a/crates/transform-gizmo-egui/Cargo.toml +++ b/crates/transform-gizmo-egui/Cargo.toml @@ -2,7 +2,7 @@ name = "transform-gizmo-egui" description = "egui integration for transform-gizmo" version.workspace = true -rust-version = "1.85.0" +rust-version.workspace = true edition.workspace = true license.workspace = true homepage.workspace = true diff --git a/crates/transform-gizmo/Cargo.toml b/crates/transform-gizmo/Cargo.toml index d8663b3..c4ff6a0 100644 --- a/crates/transform-gizmo/Cargo.toml +++ b/crates/transform-gizmo/Cargo.toml @@ -2,7 +2,7 @@ name = "transform-gizmo" description = "3D transformation gizmo" version.workspace = true -rust-version = "1.85.0" +rust-version.workspace = true edition.workspace = true license.workspace = true homepage.workspace = true diff --git a/examples/bevy/Cargo.toml b/examples/bevy/Cargo.toml index 5a714df..22275d5 100644 --- a/examples/bevy/Cargo.toml +++ b/examples/bevy/Cargo.toml @@ -17,7 +17,7 @@ bevy_infinite_grid = "0.15" bevy_mod_outline = { git = "https://github.com/komadori/bevy_mod_outline.git", rev = "3cf356f58ca1bf30f26456cf854336f9851e6fe4" } [dependencies.bevy_egui] -version = "0.34" +version = "0.37" features = ["open_url", "default_fonts", "render"] default-features = false