From bef44d7ac295ecbcbf64cd7e3309a57ca97f97d5 Mon Sep 17 00:00:00 2001 From: Tim Date: Mon, 7 Oct 2024 22:57:26 +0000 Subject: [PATCH] Stop using `Handle` as a component in `bevy_gizmos` (#15713) # Objective - Another step towards removing the `Component` impl on `Handle` ## Solution - Yeet --- crates/bevy_gizmos/src/config.rs | 19 +++---------------- crates/bevy_gizmos/src/lib.rs | 26 ++++++++++++++++---------- crates/bevy_gizmos/src/pipeline_2d.rs | 18 ++++++++---------- crates/bevy_gizmos/src/pipeline_3d.rs | 18 ++++++++---------- 4 files changed, 35 insertions(+), 46 deletions(-) diff --git a/crates/bevy_gizmos/src/config.rs b/crates/bevy_gizmos/src/config.rs index 2f164d9f0b956..a9c466b3423db 100644 --- a/crates/bevy_gizmos/src/config.rs +++ b/crates/bevy_gizmos/src/config.rs @@ -1,13 +1,13 @@ //! A module for the [`GizmoConfig`] [`Resource`]. -use crate as bevy_gizmos; +use crate::{self as bevy_gizmos}; pub use bevy_gizmos_macros::GizmoConfigGroup; #[cfg(all( feature = "bevy_render", any(feature = "bevy_pbr", feature = "bevy_sprite") ))] -use bevy_ecs::component::Component; +use {crate::LineGizmo, bevy_asset::Handle, bevy_ecs::component::Component}; use bevy_ecs::{reflect::ReflectResource, system::Resource}; use bevy_reflect::{std_traits::ReflectDefault, Reflect, TypePath}; @@ -201,18 +201,5 @@ pub(crate) struct GizmoMeshConfig { pub line_perspective: bool, pub line_style: GizmoLineStyle, pub render_layers: bevy_render::view::RenderLayers, -} - -#[cfg(all( - feature = "bevy_render", - any(feature = "bevy_pbr", feature = "bevy_sprite") -))] -impl From<&GizmoConfig> for GizmoMeshConfig { - fn from(item: &GizmoConfig) -> Self { - GizmoMeshConfig { - line_perspective: item.line_perspective, - line_style: item.line_style, - render_layers: item.render_layers.clone(), - } - } + pub handle: Handle, } diff --git a/crates/bevy_gizmos/src/lib.rs b/crates/bevy_gizmos/src/lib.rs index 0fdf881bb1393..b94930ee0331d 100644 --- a/crates/bevy_gizmos/src/lib.rs +++ b/crates/bevy_gizmos/src/lib.rs @@ -83,6 +83,8 @@ use bevy_ecs::{ use bevy_math::Vec3; use bevy_reflect::TypePath; +use crate::config::GizmoMeshConfig; + #[cfg(feature = "bevy_render")] use { bevy_ecs::{ @@ -456,9 +458,13 @@ fn extract_gizmo_data( #[cfg(feature = "webgl")] _padding: Default::default(), }, - (*handle).clone_weak(), #[cfg(any(feature = "bevy_pbr", feature = "bevy_sprite"))] - config::GizmoMeshConfig::from(config), + GizmoMeshConfig { + line_perspective: config.line_perspective, + line_style: config.line_style, + render_layers: config.render_layers.clone(), + handle: handle.clone(), + }, TemporaryRenderEntity, )); } @@ -598,20 +604,20 @@ struct DrawLineGizmo; impl RenderCommand

for DrawLineGizmo { type Param = SRes>; type ViewQuery = (); - type ItemQuery = Read>; + type ItemQuery = Read; #[inline] fn render<'w>( _item: &P, _view: ROQueryItem<'w, Self::ViewQuery>, - handle: Option>, + config: Option>, line_gizmos: SystemParamItem<'w, '_, Self::Param>, pass: &mut TrackedRenderPass<'w>, ) -> RenderCommandResult { - let Some(handle) = handle else { + let Some(config) = config else { return RenderCommandResult::Skip; }; - let Some(line_gizmo) = line_gizmos.into_inner().get(handle) else { + let Some(line_gizmo) = line_gizmos.into_inner().get(&config.handle) else { return RenderCommandResult::Skip; }; @@ -651,20 +657,20 @@ struct DrawLineJointGizmo; impl RenderCommand

for DrawLineJointGizmo { type Param = SRes>; type ViewQuery = (); - type ItemQuery = Read>; + type ItemQuery = Read; #[inline] fn render<'w>( _item: &P, _view: ROQueryItem<'w, Self::ViewQuery>, - handle: Option>, + config: Option>, line_gizmos: SystemParamItem<'w, '_, Self::Param>, pass: &mut TrackedRenderPass<'w>, ) -> RenderCommandResult { - let Some(handle) = handle else { + let Some(config) = config else { return RenderCommandResult::Skip; }; - let Some(line_gizmo) = line_gizmos.into_inner().get(handle) else { + let Some(line_gizmo) = line_gizmos.into_inner().get(&config.handle) else { return RenderCommandResult::Skip; }; diff --git a/crates/bevy_gizmos/src/pipeline_2d.rs b/crates/bevy_gizmos/src/pipeline_2d.rs index 0f6552f787406..3cffb4480c173 100644 --- a/crates/bevy_gizmos/src/pipeline_2d.rs +++ b/crates/bevy_gizmos/src/pipeline_2d.rs @@ -1,12 +1,10 @@ use crate::{ config::{GizmoLineJoint, GizmoLineStyle, GizmoMeshConfig}, line_gizmo_vertex_buffer_layouts, line_joint_gizmo_vertex_buffer_layouts, DrawLineGizmo, - DrawLineJointGizmo, GizmoRenderSystem, GpuLineGizmo, LineGizmo, - LineGizmoUniformBindgroupLayout, SetLineGizmoBindGroup, LINE_JOINT_SHADER_HANDLE, - LINE_SHADER_HANDLE, + DrawLineJointGizmo, GizmoRenderSystem, GpuLineGizmo, LineGizmoUniformBindgroupLayout, + SetLineGizmoBindGroup, LINE_JOINT_SHADER_HANDLE, LINE_SHADER_HANDLE, }; use bevy_app::{App, Plugin}; -use bevy_asset::Handle; use bevy_core_pipeline::core_2d::{Transparent2d, CORE_2D_DEPTH_FORMAT}; use bevy_ecs::{ @@ -285,7 +283,7 @@ fn queue_line_gizmos_2d( pipeline: Res, mut pipelines: ResMut>, pipeline_cache: Res, - line_gizmos: Query<(Entity, &Handle, &GizmoMeshConfig)>, + line_gizmos: Query<(Entity, &GizmoMeshConfig)>, line_gizmo_assets: Res>, mut transparent_render_phases: ResMut>, mut views: Query<(Entity, &ExtractedView, &Msaa, Option<&RenderLayers>)>, @@ -301,12 +299,12 @@ fn queue_line_gizmos_2d( | Mesh2dPipelineKey::from_hdr(view.hdr); let render_layers = render_layers.unwrap_or_default(); - for (entity, handle, config) in &line_gizmos { + for (entity, config) in &line_gizmos { if !config.render_layers.intersects(render_layers) { continue; } - let Some(line_gizmo) = line_gizmo_assets.get(handle) else { + let Some(line_gizmo) = line_gizmo_assets.get(&config.handle) else { continue; }; @@ -338,7 +336,7 @@ fn queue_line_joint_gizmos_2d( pipeline: Res, mut pipelines: ResMut>, pipeline_cache: Res, - line_gizmos: Query<(Entity, &Handle, &GizmoMeshConfig)>, + line_gizmos: Query<(Entity, &GizmoMeshConfig)>, line_gizmo_assets: Res>, mut transparent_render_phases: ResMut>, mut views: Query<(Entity, &ExtractedView, &Msaa, Option<&RenderLayers>)>, @@ -357,12 +355,12 @@ fn queue_line_joint_gizmos_2d( | Mesh2dPipelineKey::from_hdr(view.hdr); let render_layers = render_layers.unwrap_or_default(); - for (entity, handle, config) in &line_gizmos { + for (entity, config) in &line_gizmos { if !config.render_layers.intersects(render_layers) { continue; } - let Some(line_gizmo) = line_gizmo_assets.get(handle) else { + let Some(line_gizmo) = line_gizmo_assets.get(&config.handle) else { continue; }; diff --git a/crates/bevy_gizmos/src/pipeline_3d.rs b/crates/bevy_gizmos/src/pipeline_3d.rs index 8197623b3618c..5b9d156d06b70 100644 --- a/crates/bevy_gizmos/src/pipeline_3d.rs +++ b/crates/bevy_gizmos/src/pipeline_3d.rs @@ -1,12 +1,10 @@ use crate::{ config::{GizmoLineJoint, GizmoLineStyle, GizmoMeshConfig}, line_gizmo_vertex_buffer_layouts, line_joint_gizmo_vertex_buffer_layouts, DrawLineGizmo, - DrawLineJointGizmo, GizmoRenderSystem, GpuLineGizmo, LineGizmo, - LineGizmoUniformBindgroupLayout, SetLineGizmoBindGroup, LINE_JOINT_SHADER_HANDLE, - LINE_SHADER_HANDLE, + DrawLineJointGizmo, GizmoRenderSystem, GpuLineGizmo, LineGizmoUniformBindgroupLayout, + SetLineGizmoBindGroup, LINE_JOINT_SHADER_HANDLE, LINE_SHADER_HANDLE, }; use bevy_app::{App, Plugin}; -use bevy_asset::Handle; use bevy_core_pipeline::{ core_3d::{Transparent3d, CORE_3D_DEPTH_FORMAT}, prepass::{DeferredPrepass, DepthPrepass, MotionVectorPrepass, NormalPrepass}, @@ -280,7 +278,7 @@ fn queue_line_gizmos_3d( pipeline: Res, mut pipelines: ResMut>, pipeline_cache: Res, - line_gizmos: Query<(Entity, &Handle, &GizmoMeshConfig)>, + line_gizmos: Query<(Entity, &GizmoMeshConfig)>, line_gizmo_assets: Res>, mut transparent_render_phases: ResMut>, mut views: Query<( @@ -331,12 +329,12 @@ fn queue_line_gizmos_3d( view_key |= MeshPipelineKey::DEFERRED_PREPASS; } - for (entity, handle, config) in &line_gizmos { + for (entity, config) in &line_gizmos { if !config.render_layers.intersects(render_layers) { continue; } - let Some(line_gizmo) = line_gizmo_assets.get(handle) else { + let Some(line_gizmo) = line_gizmo_assets.get(&config.handle) else { continue; }; @@ -369,7 +367,7 @@ fn queue_line_joint_gizmos_3d( pipeline: Res, mut pipelines: ResMut>, pipeline_cache: Res, - line_gizmos: Query<(Entity, &Handle, &GizmoMeshConfig)>, + line_gizmos: Query<(Entity, &GizmoMeshConfig)>, line_gizmo_assets: Res>, mut transparent_render_phases: ResMut>, mut views: Query<( @@ -423,12 +421,12 @@ fn queue_line_joint_gizmos_3d( view_key |= MeshPipelineKey::DEFERRED_PREPASS; } - for (entity, handle, config) in &line_gizmos { + for (entity, config) in &line_gizmos { if !config.render_layers.intersects(render_layers) { continue; } - let Some(line_gizmo) = line_gizmo_assets.get(handle) else { + let Some(line_gizmo) = line_gizmo_assets.get(&config.handle) else { continue; };