@@ -36,7 +36,7 @@ impl Plugin for WireframePlugin {
36
36
Shader :: from_wgsl
37
37
) ;
38
38
39
- app. register_type :: < Wireframe > ( )
39
+ app. register_type :: < WireframeOverride > ( )
40
40
. register_type :: < WireframeConfig > ( )
41
41
. init_resource :: < WireframeConfig > ( )
42
42
. add_plugin ( ExtractResourcePlugin :: < WireframeConfig > :: default ( ) ) ;
@@ -52,24 +52,33 @@ impl Plugin for WireframePlugin {
52
52
}
53
53
}
54
54
55
- fn extract_wireframes ( mut commands : Commands , query : Extract < Query < ( Entity , & Wireframe ) > > ) {
55
+ fn extract_wireframes ( mut commands : Commands , query : Extract < Query < ( Entity , & WireframeOverride ) > > ) {
56
56
for ( entity, wireframe) in & query {
57
57
commands. get_or_spawn ( entity) . insert ( wireframe. clone ( ) ) ;
58
58
}
59
59
}
60
60
61
61
/// 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 ) ]
63
63
#[ 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
+ }
66
75
}
67
76
68
77
#[ derive( Resource , Debug , Clone , Default , ExtractResource , Reflect ) ]
69
78
#[ reflect( Resource ) ]
70
79
pub struct WireframeConfig {
71
80
/// 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.
73
82
pub global : bool ,
74
83
}
75
84
@@ -113,7 +122,12 @@ fn queue_wireframes(
113
122
mut pipelines : ResMut < SpecializedMeshPipelines < WireframePipeline > > ,
114
123
pipeline_cache : Res < PipelineCache > ,
115
124
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
+ ) > ,
117
131
mut views : Query < ( & ExtractedView , & VisibleEntities , & mut RenderPhase < Opaque3d > ) > ,
118
132
) {
119
133
let draw_custom = opaque_3d_draw_functions. read ( ) . id :: < DrawWireframes > ( ) ;
@@ -155,8 +169,9 @@ fn queue_wireframes(
155
169
. filter_map ( |visible_entity| material_meshes. get ( * visible_entity) . ok ( ) )
156
170
. filter ( |mesh| {
157
171
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 )
160
175
} )
161
176
. for_each ( add_render_phase) ;
162
177
}
0 commit comments