diff --git a/Cargo.toml b/Cargo.toml index 2afec62..2019435 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,22 +26,24 @@ mint = "0.5" enum_dispatch = "0.3.12" ahash = "0.8.7" enumset = "1.1.3" -bevy = "0.13" +bytemuck = "1.5" +uuid = "1.1" +bevy = "0.14.0-rc" -bevy_app = { version = "0.13", default-features = false } -bevy_core = { version = "0.13", default-features = false } -bevy_core_pipeline = { version = "0.13", default-features = false } -bevy_reflect = { version = "0.13", default-features = false } -bevy_math = { version = "0.13", features = ["mint"], default-features = false } -bevy_render = { version = "0.13", default-features = false } -bevy_input = { version = "0.13", default-features = false } -bevy_asset = { version = "0.13", default-features = false } -bevy_utils = { version = "0.13", default-features = false } -bevy_pbr = { version = "0.13", default-features = false } -bevy_ecs = { version = "0.13", default-features = false } -bevy_log = { version = "0.13", default-features = false } -bevy_window = { version = "0.13", default-features = false } -bevy_transform = { version = "0.13", default-features = false } +bevy_app = { version = "0.14.0-rc", default-features = false } +bevy_core = { version = "0.14.0-rc", default-features = false } +bevy_core_pipeline = { version = "0.14.0-rc", default-features = false } +bevy_reflect = { version = "0.14.0-rc", default-features = false } +bevy_math = { version = "0.14.0-rc", features = ["mint"], default-features = false } +bevy_render = { version = "0.14.0-rc", default-features = false } +bevy_input = { version = "0.14.0-rc", default-features = false } +bevy_asset = { version = "0.14.0-rc", default-features = false } +bevy_utils = { version = "0.14.0-rc", default-features = false } +bevy_pbr = { version = "0.14.0-rc", default-features = false } +bevy_ecs = { version = "0.14.0-rc", default-features = false } +bevy_log = { version = "0.14.0-rc", default-features = false } +bevy_window = { version = "0.14.0-rc", default-features = false } +bevy_transform = { version = "0.14.0-rc", 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 9bdfad5..5457a29 100644 --- a/crates/transform-gizmo-bevy/Cargo.toml +++ b/crates/transform-gizmo-bevy/Cargo.toml @@ -36,9 +36,11 @@ bevy_ecs.workspace = true bevy_log.workspace = true bevy_window.workspace = true bevy_transform.workspace = true +bytemuck.workspace = true +uuid.workspace = true [dev-dependencies] -bevy = "0.13" +bevy = "0.14.0-rc" [lints] workspace = true \ No newline at end of file diff --git a/crates/transform-gizmo-bevy/src/lib.rs b/crates/transform-gizmo-bevy/src/lib.rs index 5c5e8c1..5e1c3d8 100644 --- a/crates/transform-gizmo-bevy/src/lib.rs +++ b/crates/transform-gizmo-bevy/src/lib.rs @@ -35,8 +35,9 @@ use bevy_input::prelude::*; use bevy_math::{DQuat, DVec3, Vec2}; use bevy_render::prelude::*; use bevy_transform::prelude::*; -use bevy_utils::{HashMap, Uuid}; +use bevy_utils::HashMap; use bevy_window::{PrimaryWindow, Window}; +use uuid::Uuid; use render::{DrawDataHandles, TransformGizmoRenderPlugin}; use transform_gizmo::config::{ @@ -421,7 +422,7 @@ fn update_gizmos( Pos2::new(viewport.max.x, viewport.max.y), ); - let projection_matrix = camera.projection_matrix(); + let projection_matrix = camera.clip_from_view(); let view_matrix = camera_transform.compute_matrix().inverse(); diff --git a/crates/transform-gizmo-bevy/src/render.rs b/crates/transform-gizmo-bevy/src/render.rs index 9c48208..271d482 100644 --- a/crates/transform-gizmo-bevy/src/render.rs +++ b/crates/transform-gizmo-bevy/src/render.rs @@ -1,6 +1,5 @@ use bevy_app::{App, Plugin}; use bevy_asset::{load_internal_asset, Asset, Handle}; -use bevy_core::cast_slice; use bevy_core_pipeline::core_3d::{Transparent3d, CORE_3D_DEPTH_FORMAT}; use bevy_core_pipeline::prepass::{ DeferredPrepass, DepthPrepass, MotionVectorPrepass, NormalPrepass, @@ -18,8 +17,8 @@ use bevy_render::render_asset::{ RenderAssets, }; use bevy_render::render_phase::{ - AddRenderCommand, DrawFunctions, PhaseItem, RenderCommand, RenderCommandResult, RenderPhase, - SetItemPipeline, TrackedRenderPass, + AddRenderCommand, DrawFunctions, PhaseItem, PhaseItemExtraIndex, RenderCommand, + RenderCommandResult, SetItemPipeline, TrackedRenderPass, ViewSortedRenderPhases, }; use bevy_render::render_resource::{ BlendState, Buffer, BufferInitDescriptor, BufferUsages, ColorTargetState, ColorWrites, @@ -32,7 +31,9 @@ use bevy_render::renderer::RenderDevice; use bevy_render::texture::BevyDefault; use bevy_render::view::{ExtractedView, RenderLayers, ViewTarget}; use bevy_render::{Extract, Render, RenderApp, RenderSet}; -use bevy_utils::{HashMap, HashSet, Uuid}; +use bevy_utils::{HashMap, HashSet}; +use bytemuck::cast_slice; +use uuid::Uuid; const GIZMO_SHADER_HANDLE: Handle = Handle::weak_from_u128(7414812681337026784); @@ -43,9 +44,9 @@ impl Plugin for TransformGizmoRenderPlugin { load_internal_asset!(app, GIZMO_SHADER_HANDLE, "gizmo.wgsl", Shader::from_wgsl); app.init_resource::() - .add_plugins(RenderAssetPlugin::::default()); + .add_plugins(RenderAssetPlugin::::default()); - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; @@ -56,12 +57,12 @@ impl Plugin for TransformGizmoRenderPlugin { Render, queue_transform_gizmos .in_set(RenderSet::Queue) - .after(prepare_assets::), + .after(prepare_assets::), ); } fn finish(&self, app: &mut App) { - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; @@ -99,33 +100,33 @@ pub(crate) struct GizmoBuffers { index_count: u32, } -impl RenderAsset for GizmoDrawData { - type PreparedAsset = GizmoBuffers; +impl RenderAsset for GizmoBuffers { + type SourceAsset = GizmoDrawData; type Param = SRes; - fn asset_usage(&self) -> RenderAssetUsages { + fn asset_usage(_source_asset: &Self::SourceAsset) -> RenderAssetUsages { RenderAssetUsages::all() } fn prepare_asset( - self, + source_asset: Self::SourceAsset, render_device: &mut SystemParamItem, - ) -> Result> { - let position_buffer_data = cast_slice(&self.0.vertices); + ) -> Result> { + let position_buffer_data = cast_slice(&source_asset.0.vertices); let position_buffer = render_device.create_buffer_with_data(&BufferInitDescriptor { usage: BufferUsages::VERTEX, label: Some("TransformGizmo Position Buffer"), contents: position_buffer_data, }); - let index_buffer_data = cast_slice(&self.0.indices); + let index_buffer_data = cast_slice(&source_asset.0.indices); let index_buffer = render_device.create_buffer_with_data(&BufferInitDescriptor { usage: BufferUsages::INDEX, label: Some("TransformGizmo Index Buffer"), contents: index_buffer_data, }); - let color_buffer_data = cast_slice(&self.0.colors); + let color_buffer_data = cast_slice(&source_asset.0.colors); let color_buffer = render_device.create_buffer_with_data(&BufferInitDescriptor { usage: BufferUsages::VERTEX, label: Some("TransformGizmo Color Buffer"), @@ -136,7 +137,7 @@ impl RenderAsset for GizmoDrawData { index_buffer, position_buffer, color_buffer, - index_count: self.0.indices.len() as u32, + index_count: source_asset.0.indices.len() as u32, }) } } @@ -146,7 +147,7 @@ struct DrawTransformGizmo; impl RenderCommand

for DrawTransformGizmo { type ViewQuery = (); type ItemQuery = Read>; - type Param = SRes>; + type Param = SRes>; #[inline] fn render<'w>( @@ -287,10 +288,10 @@ fn queue_transform_gizmos( pipeline_cache: Res, msaa: Res, transform_gizmos: Query<(Entity, &Handle)>, - transform_gizmo_assets: Res>, + transform_gizmo_assets: Res>, mut views: Query<( + Entity, &ExtractedView, - &mut RenderPhase, Option<&RenderLayers>, ( Has, @@ -299,16 +300,21 @@ fn queue_transform_gizmos( Has, ), )>, + mut transparent_render_phases: ResMut>, ) { let draw_function = draw_functions.read().get_id::().unwrap(); for ( + view_entity, view, - mut transparent_phase, _render_layers, (normal_prepass, depth_prepass, motion_vector_prepass, deferred_prepass), ) in &mut views { + let Some(transparent_phase) = transparent_render_phases.get_mut(&view_entity) else { + continue; + }; + let mut view_key = MeshPipelineKey::from_msaa_samples(msaa.samples()) | MeshPipelineKey::from_hdr(view.hdr); @@ -348,7 +354,7 @@ fn queue_transform_gizmos( pipeline, distance: 0., batch_range: 0..1, - dynamic_offset: None, + extra_index: PhaseItemExtraIndex::NONE, }); } } diff --git a/rust-toolchain b/rust-toolchain index b76bf61..ca5876e 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1,4 +1,4 @@ [toolchain] -channel = "1.77.0" +channel = "1.78.0" components = ["rustfmt", "clippy"] targets = ["wasm32-unknown-unknown"]