Skip to content

Commit

Permalink
Stop using Handle<T> as a component in bevy_gizmos (#15713)
Browse files Browse the repository at this point in the history
# Objective

- Another step towards removing the `Component` impl on `Handle<T>`

## Solution

- Yeet
  • Loading branch information
tim-blackbird authored Oct 7, 2024
1 parent 91bed8c commit bef44d7
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 46 deletions.
19 changes: 3 additions & 16 deletions crates/bevy_gizmos/src/config.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
//! A module for the [`GizmoConfig<T>`] [`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};
Expand Down Expand Up @@ -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<LineGizmo>,
}
26 changes: 16 additions & 10 deletions crates/bevy_gizmos/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::{
Expand Down Expand Up @@ -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,
));
}
Expand Down Expand Up @@ -598,20 +604,20 @@ struct DrawLineGizmo;
impl<P: PhaseItem> RenderCommand<P> for DrawLineGizmo {
type Param = SRes<RenderAssets<GpuLineGizmo>>;
type ViewQuery = ();
type ItemQuery = Read<Handle<LineGizmo>>;
type ItemQuery = Read<GizmoMeshConfig>;

#[inline]
fn render<'w>(
_item: &P,
_view: ROQueryItem<'w, Self::ViewQuery>,
handle: Option<ROQueryItem<'w, Self::ItemQuery>>,
config: Option<ROQueryItem<'w, Self::ItemQuery>>,
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;
};

Expand Down Expand Up @@ -651,20 +657,20 @@ struct DrawLineJointGizmo;
impl<P: PhaseItem> RenderCommand<P> for DrawLineJointGizmo {
type Param = SRes<RenderAssets<GpuLineGizmo>>;
type ViewQuery = ();
type ItemQuery = Read<Handle<LineGizmo>>;
type ItemQuery = Read<GizmoMeshConfig>;

#[inline]
fn render<'w>(
_item: &P,
_view: ROQueryItem<'w, Self::ViewQuery>,
handle: Option<ROQueryItem<'w, Self::ItemQuery>>,
config: Option<ROQueryItem<'w, Self::ItemQuery>>,
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;
};

Expand Down
18 changes: 8 additions & 10 deletions crates/bevy_gizmos/src/pipeline_2d.rs
Original file line number Diff line number Diff line change
@@ -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::{
Expand Down Expand Up @@ -285,7 +283,7 @@ fn queue_line_gizmos_2d(
pipeline: Res<LineGizmoPipeline>,
mut pipelines: ResMut<SpecializedRenderPipelines<LineGizmoPipeline>>,
pipeline_cache: Res<PipelineCache>,
line_gizmos: Query<(Entity, &Handle<LineGizmo>, &GizmoMeshConfig)>,
line_gizmos: Query<(Entity, &GizmoMeshConfig)>,
line_gizmo_assets: Res<RenderAssets<GpuLineGizmo>>,
mut transparent_render_phases: ResMut<ViewSortedRenderPhases<Transparent2d>>,
mut views: Query<(Entity, &ExtractedView, &Msaa, Option<&RenderLayers>)>,
Expand All @@ -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;
};

Expand Down Expand Up @@ -338,7 +336,7 @@ fn queue_line_joint_gizmos_2d(
pipeline: Res<LineJointGizmoPipeline>,
mut pipelines: ResMut<SpecializedRenderPipelines<LineJointGizmoPipeline>>,
pipeline_cache: Res<PipelineCache>,
line_gizmos: Query<(Entity, &Handle<LineGizmo>, &GizmoMeshConfig)>,
line_gizmos: Query<(Entity, &GizmoMeshConfig)>,
line_gizmo_assets: Res<RenderAssets<GpuLineGizmo>>,
mut transparent_render_phases: ResMut<ViewSortedRenderPhases<Transparent2d>>,
mut views: Query<(Entity, &ExtractedView, &Msaa, Option<&RenderLayers>)>,
Expand All @@ -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;
};

Expand Down
18 changes: 8 additions & 10 deletions crates/bevy_gizmos/src/pipeline_3d.rs
Original file line number Diff line number Diff line change
@@ -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},
Expand Down Expand Up @@ -280,7 +278,7 @@ fn queue_line_gizmos_3d(
pipeline: Res<LineGizmoPipeline>,
mut pipelines: ResMut<SpecializedRenderPipelines<LineGizmoPipeline>>,
pipeline_cache: Res<PipelineCache>,
line_gizmos: Query<(Entity, &Handle<LineGizmo>, &GizmoMeshConfig)>,
line_gizmos: Query<(Entity, &GizmoMeshConfig)>,
line_gizmo_assets: Res<RenderAssets<GpuLineGizmo>>,
mut transparent_render_phases: ResMut<ViewSortedRenderPhases<Transparent3d>>,
mut views: Query<(
Expand Down Expand Up @@ -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;
};

Expand Down Expand Up @@ -369,7 +367,7 @@ fn queue_line_joint_gizmos_3d(
pipeline: Res<LineJointGizmoPipeline>,
mut pipelines: ResMut<SpecializedRenderPipelines<LineJointGizmoPipeline>>,
pipeline_cache: Res<PipelineCache>,
line_gizmos: Query<(Entity, &Handle<LineGizmo>, &GizmoMeshConfig)>,
line_gizmos: Query<(Entity, &GizmoMeshConfig)>,
line_gizmo_assets: Res<RenderAssets<GpuLineGizmo>>,
mut transparent_render_phases: ResMut<ViewSortedRenderPhases<Transparent3d>>,
mut views: Query<(
Expand Down Expand Up @@ -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;
};

Expand Down

0 comments on commit bef44d7

Please sign in to comment.