Skip to content

Commit 47085b0

Browse files
committed
Change wireframe component to a WireframeOverride enum.
1 parent 56cb515 commit 47085b0

File tree

2 files changed

+30
-14
lines changed

2 files changed

+30
-14
lines changed

crates/bevy_pbr/src/wireframe.rs

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ impl Plugin for WireframePlugin {
3636
Shader::from_wgsl
3737
);
3838

39-
app.register_type::<Wireframe>()
39+
app.register_type::<WireframeOverride>()
4040
.register_type::<WireframeConfig>()
4141
.init_resource::<WireframeConfig>()
4242
.add_plugin(ExtractResourcePlugin::<WireframeConfig>::default());
@@ -52,24 +52,33 @@ impl Plugin for WireframePlugin {
5252
}
5353
}
5454

55-
fn extract_wireframes(mut commands: Commands, query: Extract<Query<(Entity, &Wireframe)>>) {
55+
fn extract_wireframes(mut commands: Commands, query: Extract<Query<(Entity, &WireframeOverride)>>) {
5656
for (entity, wireframe) in &query {
5757
commands.get_or_spawn(entity).insert(wireframe.clone());
5858
}
5959
}
6060

6161
/// Overrides the global [`WireframeConfig`] for a single mesh.
62-
#[derive(Component, Debug, Clone, Default, Reflect, Eq, PartialEq)]
62+
#[derive(Component, Debug, Clone, Copy, Reflect, Eq, PartialEq)]
6363
#[reflect(Component, Default)]
64-
pub struct Wireframe {
65-
pub enable: bool,
64+
pub enum WireframeOverride {
65+
/// Always render the wireframe for this entity, regardless of global config.
66+
AlwaysRender,
67+
/// Never render the wireframe for this entity, regardless of global config.
68+
NeverRender,
69+
}
70+
71+
impl Default for WireframeOverride {
72+
fn default() -> Self {
73+
Self::AlwaysRender
74+
}
6675
}
6776

6877
#[derive(Resource, Debug, Clone, Default, ExtractResource, Reflect)]
6978
#[reflect(Resource)]
7079
pub struct WireframeConfig {
7180
/// Whether to show wireframes for all meshes.
72-
/// Can be overridden for individual meshes by adding a [`Wireframe`] component.
81+
/// Can be overridden for individual meshes by adding a [`WireframeOverride`] component.
7382
pub global: bool,
7483
}
7584

@@ -113,7 +122,12 @@ fn queue_wireframes(
113122
mut pipelines: ResMut<SpecializedMeshPipelines<WireframePipeline>>,
114123
pipeline_cache: Res<PipelineCache>,
115124
msaa: Res<Msaa>,
116-
material_meshes: Query<(Entity, &Handle<Mesh>, &MeshUniform, Option<&Wireframe>)>,
125+
material_meshes: Query<(
126+
Entity,
127+
&Handle<Mesh>,
128+
&MeshUniform,
129+
Option<&WireframeOverride>,
130+
)>,
117131
mut views: Query<(&ExtractedView, &VisibleEntities, &mut RenderPhase<Opaque3d>)>,
118132
) {
119133
let draw_custom = opaque_3d_draw_functions.read().id::<DrawWireframes>();
@@ -155,8 +169,9 @@ fn queue_wireframes(
155169
.filter_map(|visible_entity| material_meshes.get(*visible_entity).ok())
156170
.filter(|mesh| {
157171
let wireframe_override = mesh.3;
158-
(wireframe_config.global || wireframe_override == Some(&Wireframe { enable: true }))
159-
&& wireframe_override != Some(&Wireframe { enable: false })
172+
(wireframe_config.global
173+
|| wireframe_override == Some(&WireframeOverride::AlwaysRender))
174+
&& wireframe_override != Some(&WireframeOverride::NeverRender)
160175
})
161176
.for_each(add_render_phase);
162177
}

examples/3d/wireframe.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//! Showcases wireframe rendering.
22
33
use bevy::{
4-
pbr::wireframe::{Wireframe, WireframeConfig, WireframePlugin},
4+
pbr::wireframe::{WireframeConfig, WireframeOverride, WireframePlugin},
55
prelude::*,
66
render::{render_resource::WgpuFeatures, settings::WgpuSettings, RenderPlugin},
77
};
@@ -26,9 +26,10 @@ fn setup(
2626
mut meshes: ResMut<Assets<Mesh>>,
2727
mut materials: ResMut<Assets<StandardMaterial>>,
2828
) {
29-
// This enables drawing of wireframes on every mesh.
30-
// To instead enable it on individual meshes, make this `false`, and add a `Wireframe` component
31-
// with `enable: true` to the meshes that should have wireframe enabled.
29+
// This enables drawing of wireframes on every mesh, except those with
30+
// `WireframeOverride::NeverRender`.
31+
// To instead enable it on individual meshes, make this `false`, and add a
32+
// `WireframeOverride::AlwaysRender` component for the meshes that should have wireframes.
3233
wireframe_config.global = true;
3334
// plane
3435
commands.spawn((
@@ -38,7 +39,7 @@ fn setup(
3839
..default()
3940
},
4041
// This disables wireframe rendering for this entity.
41-
Wireframe { enable: false },
42+
WireframeOverride::NeverRender,
4243
));
4344
// cube
4445
commands.spawn(PbrBundle {

0 commit comments

Comments
 (0)