@@ -52,21 +52,24 @@ impl Plugin for WireframePlugin {
52
52
}
53
53
}
54
54
55
- fn extract_wireframes ( mut commands : Commands , query : Extract < Query < Entity , With < Wireframe > > > ) {
56
- for entity in & query {
57
- commands. get_or_spawn ( entity) . insert ( Wireframe ) ;
55
+ fn extract_wireframes ( mut commands : Commands , query : Extract < Query < ( Entity , & Wireframe ) > > ) {
56
+ for ( entity, wireframe ) in & query {
57
+ commands. get_or_spawn ( entity) . insert ( wireframe . clone ( ) ) ;
58
58
}
59
59
}
60
60
61
- /// Controls whether an entity should rendered in wireframe-mode if the [`WireframePlugin `] is enabled
62
- #[ derive( Component , Debug , Clone , Default , Reflect ) ]
61
+ /// Overrides the global [`WireframeConfig `] for a single mesh.
62
+ #[ derive( Component , Debug , Clone , Default , Reflect , Eq , PartialEq ) ]
63
63
#[ reflect( Component , Default ) ]
64
- pub struct Wireframe ;
64
+ pub struct Wireframe {
65
+ pub enable : bool ,
66
+ }
65
67
66
68
#[ derive( Resource , Debug , Clone , Default , ExtractResource , Reflect ) ]
67
69
#[ reflect( Resource ) ]
68
70
pub struct WireframeConfig {
69
- /// Whether to show wireframes for all meshes. If `false`, only meshes with a [Wireframe] component will be rendered.
71
+ /// Whether to show wireframes for all meshes.
72
+ /// Can be overridden for individual meshes by adding a [`Wireframe`] component.
70
73
pub global : bool ,
71
74
}
72
75
@@ -110,10 +113,7 @@ fn queue_wireframes(
110
113
mut pipelines : ResMut < SpecializedMeshPipelines < WireframePipeline > > ,
111
114
pipeline_cache : Res < PipelineCache > ,
112
115
msaa : Res < Msaa > ,
113
- mut material_meshes : ParamSet < (
114
- Query < ( Entity , & Handle < Mesh > , & MeshUniform ) > ,
115
- Query < ( Entity , & Handle < Mesh > , & MeshUniform ) , With < Wireframe > > ,
116
- ) > ,
116
+ material_meshes : Query < ( Entity , & Handle < Mesh > , & MeshUniform , Option < & Wireframe > ) > ,
117
117
mut views : Query < ( & ExtractedView , & VisibleEntities , & mut RenderPhase < Opaque3d > ) > ,
118
118
) {
119
119
let draw_custom = opaque_3d_draw_functions. read ( ) . id :: < DrawWireframes > ( ) ;
@@ -123,7 +123,7 @@ fn queue_wireframes(
123
123
124
124
let view_key = msaa_key | MeshPipelineKey :: from_hdr ( view. hdr ) ;
125
125
let add_render_phase =
126
- |( entity, mesh_handle, mesh_uniform) : ( Entity , & Handle < Mesh > , & MeshUniform ) | {
126
+ |( entity, mesh_handle, mesh_uniform, _ ) : ( Entity , & Handle < Mesh > , & MeshUniform , _ ) | {
127
127
if let Some ( mesh) = render_meshes. get ( mesh_handle) {
128
128
let key = view_key
129
129
| MeshPipelineKey :: from_primitive_topology ( mesh. primitive_topology ) ;
@@ -149,21 +149,16 @@ fn queue_wireframes(
149
149
}
150
150
} ;
151
151
152
- if wireframe_config. global {
153
- let query = material_meshes. p0 ( ) ;
154
- visible_entities
155
- . entities
156
- . iter ( )
157
- . filter_map ( |visible_entity| query. get ( * visible_entity) . ok ( ) )
158
- . for_each ( add_render_phase) ;
159
- } else {
160
- let query = material_meshes. p1 ( ) ;
161
- visible_entities
162
- . entities
163
- . iter ( )
164
- . filter_map ( |visible_entity| query. get ( * visible_entity) . ok ( ) )
165
- . for_each ( add_render_phase) ;
166
- }
152
+ visible_entities
153
+ . entities
154
+ . iter ( )
155
+ . filter_map ( |visible_entity| material_meshes. get ( * visible_entity) . ok ( ) )
156
+ . filter ( |mesh| {
157
+ let wireframe_override = mesh. 3 ;
158
+ ( wireframe_config. global || wireframe_override == Some ( & Wireframe { enable : true } ) )
159
+ && wireframe_override != Some ( & Wireframe { enable : false } )
160
+ } )
161
+ . for_each ( add_render_phase) ;
167
162
}
168
163
}
169
164
0 commit comments