Skip to content

Commit f02bea5

Browse files
committed
Make Wireframe respect visible entities (#4660)
# Objective - Make meshes with a Wireframe component not render if they are not in the VisibleEntities list of a given camera - See [discussion](https://discord.com/channels/691052431525675048/742884593551802431/971392761972527144) on the Bevy Engine Discord - Fixes this kind of issues: ![image](https://user-images.githubusercontent.com/1733200/166746303-39003d57-8b07-4ae2-9ddf-bacdb04e7d84.png) Camera for the RenderTexture in the bottom left is set to only see layer 1 entities. The three colored lines are on the render layer 1, but not the sphere (which has a Wireframe component). ## Solution - Mimick what is done in [bevy_pbr/src/material.rs#L307](https://github.com/bevyengine/bevy/blob/479f43bbf34834ad2d4667de43351b6fa51f22d1/crates/bevy_pbr/src/material.rs#L307) for [bevy_pbr/src/wireframe.rs#L106](https://github.com/bevyengine/bevy/blob/2b6e67f4cb441f658cad17486eea9e3485e56709/crates/bevy_pbr/src/wireframe.rs#L106) - Credits to beep for finding this out!
1 parent 3f4ac65 commit f02bea5

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

crates/bevy_pbr/src/wireframe.rs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use bevy_render::{
1414
PipelineCache, PolygonMode, RenderPipelineDescriptor, Shader, SpecializedMeshPipeline,
1515
SpecializedMeshPipelineError, SpecializedMeshPipelines,
1616
},
17-
view::{ExtractedView, Msaa},
17+
view::{ExtractedView, Msaa, VisibleEntities},
1818
RenderApp, RenderStage,
1919
};
2020
use bevy_utils::tracing::error;
@@ -115,14 +115,14 @@ fn queue_wireframes(
115115
Query<(Entity, &Handle<Mesh>, &MeshUniform)>,
116116
Query<(Entity, &Handle<Mesh>, &MeshUniform), With<Wireframe>>,
117117
)>,
118-
mut views: Query<(&ExtractedView, &mut RenderPhase<Opaque3d>)>,
118+
mut views: Query<(&ExtractedView, &VisibleEntities, &mut RenderPhase<Opaque3d>)>,
119119
) {
120120
let draw_custom = opaque_3d_draw_functions
121121
.read()
122122
.get_id::<DrawWireframes>()
123123
.unwrap();
124124
let msaa_key = MeshPipelineKey::from_msaa_samples(msaa.samples);
125-
for (view, mut opaque_phase) in views.iter_mut() {
125+
for (view, visible_entities, mut opaque_phase) in views.iter_mut() {
126126
let view_matrix = view.transform.compute_matrix();
127127
let view_row_2 = view_matrix.row(2);
128128

@@ -154,9 +154,19 @@ fn queue_wireframes(
154154
};
155155

156156
if wireframe_config.global {
157-
material_meshes.p0().iter().for_each(add_render_phase);
157+
let query = material_meshes.p0();
158+
visible_entities
159+
.entities
160+
.iter()
161+
.filter_map(|visible_entity| query.get(*visible_entity).ok())
162+
.for_each(add_render_phase);
158163
} else {
159-
material_meshes.p1().iter().for_each(add_render_phase);
164+
let query = material_meshes.p1();
165+
visible_entities
166+
.entities
167+
.iter()
168+
.filter_map(|visible_entity| query.get(*visible_entity).ok())
169+
.for_each(add_render_phase);
160170
}
161171
}
162172
}

0 commit comments

Comments
 (0)