Skip to content

Commit 8757aaf

Browse files
committed
ugh
1 parent a2422c8 commit 8757aaf

File tree

6 files changed

+51
-55
lines changed

6 files changed

+51
-55
lines changed

crates/bevy_debug_draw/Cargo.toml

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "bevy_debug_draw"
3-
version = "0.9.0-dev"
3+
version = "0.9.0"
44
edition = "2021"
55
description = "Provides debug drawing for Bevy Engine"
66
homepage = "https://bevyengine.org"
@@ -10,17 +10,17 @@ keywords = ["bevy"]
1010

1111
[dependencies]
1212
# Bevy
13-
bevy_pbr = { path = "../bevy_pbr", version = "0.9.0-dev", optional = true }
14-
bevy_sprite = { path = "../bevy_sprite", version = "0.9.0-dev", optional = true }
15-
bevy_app = { path = "../bevy_app", version = "0.9.0-dev" }
16-
bevy_ecs = { path = "../bevy_ecs", version = "0.9.0-dev" }
17-
bevy_math = { path = "../bevy_math", version = "0.9.0-dev" }
18-
bevy_asset = { path = "../bevy_asset", version = "0.9.0-dev" }
19-
bevy_render = { path = "../bevy_render", version = "0.9.0-dev" }
20-
bevy_utils = { path = "../bevy_utils", version = "0.9.0-dev" }
21-
bevy_core = { path = "../bevy_core", version = "0.9.0-dev" }
22-
bevy_reflect = { path = "../bevy_reflect", version = "0.9.0-dev" }
23-
bevy_core_pipeline = { path = "../bevy_core_pipeline", version = "0.9.0-dev" }
13+
bevy_pbr = { path = "../bevy_pbr", version = "0.9.0", optional = true }
14+
bevy_sprite = { path = "../bevy_sprite", version = "0.9.0", optional = true }
15+
bevy_app = { path = "../bevy_app", version = "0.9.0" }
16+
bevy_ecs = { path = "../bevy_ecs", version = "0.9.0" }
17+
bevy_math = { path = "../bevy_math", version = "0.9.0" }
18+
bevy_asset = { path = "../bevy_asset", version = "0.9.0" }
19+
bevy_render = { path = "../bevy_render", version = "0.9.0" }
20+
bevy_utils = { path = "../bevy_utils", version = "0.9.0" }
21+
bevy_core = { path = "../bevy_core", version = "0.9.0" }
22+
bevy_reflect = { path = "../bevy_reflect", version = "0.9.0" }
23+
bevy_core_pipeline = { path = "../bevy_core_pipeline", version = "0.9.0" }
2424
# Other
2525
once_cell = "1.16"
2626
crossbeam-channel = "0.5"

crates/bevy_debug_draw/src/gizmos.rs

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -84,26 +84,20 @@ impl Gizmos {
8484
/// Draw a rectangle.
8585
#[inline]
8686
pub fn rect(&self, position: Vec3, rotation: Quat, size: Vec2, color: Color) {
87-
let positions = self
87+
let [tl, tr, br, bl] = self
8888
.rect_inner(size)
8989
.map(|vec2| position + rotation * vec2.extend(0.));
90-
self.linestrip(positions, color);
90+
self.linestrip([tl, tr, br, bl, tl], color);
9191
}
9292

9393
/// Draw a box.
9494
#[inline]
9595
pub fn cuboid(&self, position: Vec3, rotation: Quat, size: Vec3, color: Color) {
96-
let half_size = size / 2.;
96+
let rect = self.rect_inner(size.truncate());
9797
// Front
98-
let tlf = position + rotation * Vec3::new(-half_size.x, half_size.y, half_size.z);
99-
let trf = position + rotation * Vec3::new(half_size.x, half_size.y, half_size.z);
100-
let blf = position + rotation * Vec3::new(-half_size.x, -half_size.y, half_size.z);
101-
let brf = position + rotation * Vec3::new(half_size.x, -half_size.y, half_size.z);
98+
let [tlf, trf, brf, blf] = rect.map(|vec2| position + rotation * vec2.extend(size.z / 2.));
10299
// Back
103-
let tlb = position + rotation * Vec3::new(-half_size.x, half_size.y, -half_size.z);
104-
let trb = position + rotation * Vec3::new(half_size.x, half_size.y, -half_size.z);
105-
let blb = position + rotation * Vec3::new(-half_size.x, -half_size.y, -half_size.z);
106-
let brb = position + rotation * Vec3::new(half_size.x, -half_size.y, -half_size.z);
100+
let [tlb, trb, brb, blb] = rect.map(|vec2| position + rotation * vec2.extend(-size.z / 2.));
107101

108102
let positions = [
109103
tlf, trf, trf, brf, brf, blf, blf, tlf, // Front
@@ -162,8 +156,8 @@ impl Gizmos {
162156
#[inline]
163157
pub fn rect_2d(&self, position: Vec2, rotation: f32, size: Vec2, color: Color) {
164158
let rotation = Mat2::from_angle(rotation);
165-
let positions = self.rect_inner(size).map(|vec2| position + rotation * vec2);
166-
self.linestrip_2d(positions, color);
159+
let [tl, tr, br, bl] = self.rect_inner(size).map(|vec2| position + rotation * vec2);
160+
self.linestrip_2d([tl, tr, br, bl, tl], color);
167161
}
168162

169163
fn circle_inner(&self, radius: f32) -> impl Iterator<Item = Vec2> {
@@ -174,14 +168,13 @@ impl Gizmos {
174168
})
175169
}
176170

177-
fn rect_inner(&self, size: Vec2) -> impl Iterator<Item = Vec2> {
171+
fn rect_inner(&self, size: Vec2) -> [Vec2; 4] {
178172
let half_size = size / 2.;
179173
let tl = Vec2::new(-half_size.x, half_size.y);
180174
let tr = Vec2::new(half_size.x, half_size.y);
181175
let bl = Vec2::new(-half_size.x, -half_size.y);
182176
let br = Vec2::new(half_size.x, -half_size.y);
183-
184-
[tl, tr, br, bl, tl].into_iter()
177+
[tl, tr, br, bl]
185178
}
186179

187180
#[inline]

crates/bevy_debug_draw/src/lib.rs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@ use bevy_render::{
1313
mesh::Mesh,
1414
render_phase::AddRenderCommand,
1515
render_resource::{PrimitiveTopology, Shader, SpecializedMeshPipelines},
16-
RenderApp, RenderStage, Extract, view::NoFrustumCulling,
16+
Extract, RenderApp, RenderStage,
1717
};
1818

1919
#[cfg(feature = "bevy_pbr")]
2020
use bevy_pbr::MeshUniform;
2121
#[cfg(feature = "bevy_sprite")]
22-
use bevy_sprite::Mesh2dHandle;
22+
use bevy_sprite::{Mesh2dHandle, Mesh2dUniform};
2323

24-
use bevy_sprite::Mesh2dUniform;
2524
use once_cell::sync::Lazy;
2625

2726
pub mod gizmos;
@@ -36,7 +35,7 @@ use crate::gizmos::Gizmos;
3635
/// The `bevy_debug_draw` prelude.
3736
pub mod prelude {
3837
#[doc(hidden)]
39-
pub use crate::{DebugDrawPlugin, GizmoConfig, GIZMOS};
38+
pub use crate::{GizmoConfig, GIZMOS};
4039
}
4140

4241
const SHADER_HANDLE: HandleUntyped =
@@ -50,7 +49,7 @@ impl Plugin for DebugDrawPlugin {
5049

5150
app.init_resource::<MeshHandles>()
5251
.init_resource::<GizmoConfig>()
53-
.add_system_to_stage(CoreStage::Last, sys);
52+
.add_system_to_stage(CoreStage::Last, system);
5453

5554
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { return; };
5655

@@ -93,14 +92,14 @@ pub struct GizmoConfig {
9392
/// This setting only affects 3D. In 2D, debug drawing is always on top.
9493
///
9594
/// Defaults to `true`.
96-
pub always_on_top: bool,
95+
pub on_top: bool,
9796
}
9897

9998
impl Default for GizmoConfig {
10099
fn default() -> Self {
101100
Self {
102101
enabled: true,
103-
always_on_top: true,
102+
on_top: true,
104103
}
105104
}
106105
}
@@ -116,7 +115,7 @@ enum SendItem {
116115

117116
pub static GIZMOS: Lazy<Gizmos> = Lazy::new(Gizmos::new);
118117

119-
fn sys(mut meshes: ResMut<Assets<Mesh>>, handles: Res<MeshHandles>) {
118+
fn system(mut meshes: ResMut<Assets<Mesh>>, handles: Res<MeshHandles>) {
120119
let mut list_positions = Vec::new();
121120
let mut list_colors = Vec::new();
122121
let mut strip_positions = Vec::new();
@@ -128,7 +127,6 @@ fn sys(mut meshes: ResMut<Assets<Mesh>>, handles: Res<MeshHandles>) {
128127
list_positions.extend(positions);
129128
list_colors.extend(colors);
130129
}
131-
132130
SendItem::List((positions, colors)) => {
133131
list_positions.extend(positions);
134132
list_colors.extend(colors);
@@ -171,8 +169,11 @@ impl FromWorld for MeshHandles {
171169
#[derive(Component)]
172170
struct GizmoDrawMesh;
173171

174-
fn extract(mut commands: Commands, handles: Extract<Res<MeshHandles>>, config: Extract<Res<GizmoConfig>>) {
175-
172+
fn extract(
173+
mut commands: Commands,
174+
handles: Extract<Res<MeshHandles>>,
175+
config: Extract<Res<GizmoConfig>>,
176+
) {
176177
if config.is_changed() {
177178
commands.insert_resource(**config);
178179
}

crates/bevy_debug_draw/src/pipeline_2d.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,19 +97,19 @@ pub(crate) fn queue(
9797
pipeline: Res<DebugLinePipeline>,
9898
mut pipeline_cache: ResMut<PipelineCache>,
9999
mut specialized_pipelines: ResMut<SpecializedMeshPipelines<DebugLinePipeline>>,
100-
render_meshes: Res<RenderAssets<Mesh>>,
100+
gpu_meshes: Res<RenderAssets<Mesh>>,
101101
msaa: Res<Msaa>,
102-
material_meshes: Query<&Mesh2dHandle, With<GizmoDrawMesh>>,
102+
mesh_handles: Query<&Mesh2dHandle, With<GizmoDrawMesh>>,
103103
mut views: Query<(&VisibleEntities, &mut RenderPhase<Transparent2d>)>,
104104
) {
105-
let draw_mesh2d = draw_functions.read().get_id::<DrawDebugLines>().unwrap();
105+
let draw_function = draw_functions.read().get_id::<DrawDebugLines>().unwrap();
106106
let key = Mesh2dPipelineKey::from_msaa_samples(msaa.samples);
107107
for (view, mut phase) in &mut views {
108108
for visible_entity in &view.entities {
109109
println!("e");
110-
let Ok(mesh_handle) = material_meshes.get(*visible_entity) else { continue; };
110+
let Ok(mesh_handle) = mesh_handles.get(*visible_entity) else { continue; };
111111
println!("ee");
112-
let Some(mesh) = render_meshes.get(&mesh_handle.0) else { continue; };
112+
let Some(mesh) = gpu_meshes.get(&mesh_handle.0) else { continue; };
113113
println!("eee");
114114

115115
let key = key | Mesh2dPipelineKey::from_primitive_topology(mesh.primitive_topology);
@@ -118,7 +118,7 @@ pub(crate) fn queue(
118118
.unwrap();
119119
phase.add(Transparent2d {
120120
entity: *visible_entity,
121-
draw_function: draw_mesh2d,
121+
draw_function,
122122
pipeline,
123123
sort_key: FloatOrd(f32::MAX),
124124
batch_range: None,

crates/bevy_debug_draw/src/pipeline_3d.rs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ use bevy_asset::Handle;
22
use bevy_core_pipeline::core_3d::Opaque3d;
33
use bevy_ecs::{
44
entity::Entity,
5+
query::With,
56
system::{Query, Res, ResMut, Resource},
6-
world::{FromWorld, World}, query::With,
7+
world::{FromWorld, World},
78
};
89
use bevy_pbr::*;
910
use bevy_render::{mesh::Mesh, render_resource::Shader};
@@ -42,9 +43,13 @@ impl SpecializedMeshPipeline for DebugLinePipeline {
4243
layout: &MeshVertexBufferLayout,
4344
) -> Result<RenderPipelineDescriptor, SpecializedMeshPipelineError> {
4445
let mut shader_defs = Vec::new();
45-
shader_defs.push("DEBUG_LINES_3D".to_string());
46+
shader_defs.push("DEBUG_LINES_3D".into());
47+
shader_defs.push(ShaderDefVal::Int(
48+
"MAX_DIRECTIONAL_LIGHTS".to_string(),
49+
MAX_DIRECTIONAL_LIGHTS as i32,
50+
));
4651
if depth_test {
47-
shader_defs.push("DEPTH_TEST".to_string());
52+
shader_defs.push("DEPTH_TEST".into());
4853
}
4954

5055
let vertex_buffer_layout = layout.get_layout(&[
@@ -139,10 +144,7 @@ pub(crate) fn queue(
139144
config: Res<GizmoConfig>,
140145
mut views: Query<(&ExtractedView, &mut RenderPhase<Opaque3d>)>,
141146
) {
142-
let draw_custom = draw_functions
143-
.read()
144-
.get_id::<DrawDebugLines>()
145-
.unwrap();
147+
let draw_function = draw_functions.read().get_id::<DrawDebugLines>().unwrap();
146148
let key = MeshPipelineKey::from_msaa_samples(msaa.samples);
147149
for (view, mut phase) in &mut views {
148150
let view_matrix = view.transform.compute_matrix();
@@ -154,14 +156,14 @@ pub(crate) fn queue(
154156
.specialize(
155157
&mut pipeline_cache,
156158
&pipeline,
157-
(!config.always_on_top, key),
159+
(!config.on_top, key),
158160
&mesh.layout,
159161
)
160162
.unwrap();
161163
phase.add(Opaque3d {
162164
entity,
163165
pipeline,
164-
draw_function: draw_custom,
166+
draw_function,
165167
distance: view_row_2.dot(mesh_uniform.transform.col(3)),
166168
});
167169
}

examples/stress_tests/many_debug_lines.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ fn main() {
2222
fancy: false,
2323
})
2424
.insert_resource(GizmoConfig {
25-
always_on_top: false,
25+
on_top: false,
2626
..default()
2727
})
2828
.add_startup_system(setup)

0 commit comments

Comments
 (0)