pub struct DebugDraw {
pub enabled: bool,
pub dev_enabled: bool,
/* private fields */
}Expand description
Accumulated debug visuals for the current and future frames.
Store one instance in super::RuntimeResources. Plugins access it via
ctx.resources.get_mut::<DebugDraw>(). Call begin_frame
before each super::ViewportRuntime::step call to clear transient primitives.
When both enabled and the relevant layer flag are true, submission methods
record primitives into the internal buffers. When disabled they are no-ops,
so no branches are needed in plugin code.
Fields§
§enabled: boolMaster switch. When false, all submission methods are no-ops.
dev_enabled: boolControls whether DebugLayer::Dev primitives are recorded.
Set to false in ship builds to suppress development-only visuals
without changing plugin code. DebugLayer::Overlay primitives are
not affected by this flag.
Implementations§
Source§impl DebugDraw
impl DebugDraw
Sourcepub fn overlay_only() -> Self
pub fn overlay_only() -> Self
Create a DebugDraw with dev_enabled = false (overlay-only mode).
Use this in ship builds to suppress dev-layer visuals while keeping any overlay-layer primitives active.
Sourcepub fn begin_frame(&mut self)
pub fn begin_frame(&mut self)
Clear all transient primitives.
Call this before each frame (before super::ViewportRuntime::step) so
that one-frame debug draws do not accumulate across frames. Persistent
primitives (added with add_persistent) are not
affected.
Sourcepub fn line(&mut self, start: Vec3, end: Vec3, colour: [f32; 4]) -> &mut Self
pub fn line(&mut self, start: Vec3, end: Vec3, colour: [f32; 4]) -> &mut Self
Submit a line segment for this frame.
The default layer is DebugLayer::Dev. Use line_overlay
for a line that appears in ship builds.
Sourcepub fn line_overlay(
&mut self,
start: Vec3,
end: Vec3,
colour: [f32; 4],
) -> &mut Self
pub fn line_overlay( &mut self, start: Vec3, end: Vec3, colour: [f32; 4], ) -> &mut Self
Submit a line segment on the DebugLayer::Overlay layer.
Sourcepub fn line_layer(
&mut self,
start: Vec3,
end: Vec3,
colour: [f32; 4],
layer: DebugLayer,
) -> &mut Self
pub fn line_layer( &mut self, start: Vec3, end: Vec3, colour: [f32; 4], layer: DebugLayer, ) -> &mut Self
Submit a line segment on a specific layer.
Sourcepub fn point(
&mut self,
position: Vec3,
radius: f32,
colour: [f32; 4],
) -> &mut Self
pub fn point( &mut self, position: Vec3, radius: f32, colour: [f32; 4], ) -> &mut Self
Submit a point marker for this frame.
radius is in screen-space pixels.
Sourcepub fn point_overlay(
&mut self,
position: Vec3,
radius: f32,
colour: [f32; 4],
) -> &mut Self
pub fn point_overlay( &mut self, position: Vec3, radius: f32, colour: [f32; 4], ) -> &mut Self
Submit a point marker on the DebugLayer::Overlay layer.
Sourcepub fn point_layer(
&mut self,
position: Vec3,
radius: f32,
colour: [f32; 4],
layer: DebugLayer,
) -> &mut Self
pub fn point_layer( &mut self, position: Vec3, radius: f32, colour: [f32; 4], layer: DebugLayer, ) -> &mut Self
Submit a point marker on a specific layer.
Sourcepub fn aabb(&mut self, min: Vec3, max: Vec3, colour: [f32; 4]) -> &mut Self
pub fn aabb(&mut self, min: Vec3, max: Vec3, colour: [f32; 4]) -> &mut Self
Submit an axis-aligned box wireframe for this frame.
Sourcepub fn aabb_overlay(
&mut self,
min: Vec3,
max: Vec3,
colour: [f32; 4],
) -> &mut Self
pub fn aabb_overlay( &mut self, min: Vec3, max: Vec3, colour: [f32; 4], ) -> &mut Self
Submit an AABB wireframe on the DebugLayer::Overlay layer.
Sourcepub fn aabb_layer(
&mut self,
min: Vec3,
max: Vec3,
colour: [f32; 4],
layer: DebugLayer,
) -> &mut Self
pub fn aabb_layer( &mut self, min: Vec3, max: Vec3, colour: [f32; 4], layer: DebugLayer, ) -> &mut Self
Submit an AABB wireframe on a specific layer.
Sourcepub fn sphere(
&mut self,
center: Vec3,
radius: f32,
colour: [f32; 4],
) -> &mut Self
pub fn sphere( &mut self, center: Vec3, radius: f32, colour: [f32; 4], ) -> &mut Self
Submit a sphere wireframe for this frame.
The sphere is drawn as three great circles (XY, XZ, and YZ planes).
Sourcepub fn sphere_overlay(
&mut self,
center: Vec3,
radius: f32,
colour: [f32; 4],
) -> &mut Self
pub fn sphere_overlay( &mut self, center: Vec3, radius: f32, colour: [f32; 4], ) -> &mut Self
Submit a sphere wireframe on the DebugLayer::Overlay layer.
Sourcepub fn sphere_layer(
&mut self,
center: Vec3,
radius: f32,
colour: [f32; 4],
layer: DebugLayer,
) -> &mut Self
pub fn sphere_layer( &mut self, center: Vec3, radius: f32, colour: [f32; 4], layer: DebugLayer, ) -> &mut Self
Submit a sphere wireframe on a specific layer.
Sourcepub fn label(
&mut self,
position: Vec3,
text: impl Into<String>,
colour: [f32; 4],
) -> &mut Self
pub fn label( &mut self, position: Vec3, text: impl Into<String>, colour: [f32; 4], ) -> &mut Self
Submit a text label anchored to a world-space position for this frame.
Sourcepub fn label_overlay(
&mut self,
position: Vec3,
text: impl Into<String>,
colour: [f32; 4],
) -> &mut Self
pub fn label_overlay( &mut self, position: Vec3, text: impl Into<String>, colour: [f32; 4], ) -> &mut Self
Submit a label on the DebugLayer::Overlay layer.
Sourcepub fn label_layer(
&mut self,
position: Vec3,
text: impl Into<String>,
colour: [f32; 4],
layer: DebugLayer,
) -> &mut Self
pub fn label_layer( &mut self, position: Vec3, text: impl Into<String>, colour: [f32; 4], layer: DebugLayer, ) -> &mut Self
Submit a label on a specific layer.
Sourcepub fn add_persistent(&mut self, id: u64, prim: DebugPrim)
pub fn add_persistent(&mut self, id: u64, prim: DebugPrim)
Insert or replace a persistent primitive keyed by id.
Persistent primitives survive begin_frame and stay
until removed with remove_persistent. The id
is caller-assigned; any u64 value works as a stable identifier.
Insertion respects the layer flags: if the layer would be suppressed by
the current enabled/dev_enabled state, the primitive is still stored
(so it becomes visible when the flag is re-enabled) but it will be skipped
during rendering conversion.
Sourcepub fn remove_persistent(&mut self, id: u64) -> Option<DebugPrim>
pub fn remove_persistent(&mut self, id: u64) -> Option<DebugPrim>
Remove a persistent primitive by id.
Returns the removed primitive, or None if id was not found.
Sourcepub fn has_persistent(&self, id: u64) -> bool
pub fn has_persistent(&self, id: u64) -> bool
True if a persistent primitive with the given id exists.
Sourcepub fn clear_persistent(&mut self)
pub fn clear_persistent(&mut self)
Remove all persistent primitives.
Sourcepub fn prims(&self) -> impl Iterator<Item = &DebugPrim>
pub fn prims(&self) -> impl Iterator<Item = &DebugPrim>
Iterate over all active primitives (both transient and persistent).
Primitives on the DebugLayer::Dev layer are included regardless of
dev_enabled; the caller decides whether to filter. Use
to_polylines and friends to get renderer-ready
items with layer filtering already applied.
Sourcepub fn transient_count(&self) -> usize
pub fn transient_count(&self) -> usize
Number of transient primitives currently accumulated.
Sourcepub fn persistent_count(&self) -> usize
pub fn persistent_count(&self) -> usize
Number of persistent primitives currently stored.
Sourcepub fn to_polylines(&self) -> Vec<PolylineItem>
pub fn to_polylines(&self) -> Vec<PolylineItem>
Convert accumulated line, AABB, and sphere primitives to polyline render items.
Primitives are grouped by colour to minimize the number of render items.
Dev-layer primitives are skipped when dev_enabled is false.
Returns an empty Vec when no line-type primitives are present or when enabled is false.
Sourcepub fn to_point_cloud(&self) -> Option<PointCloudItem>
pub fn to_point_cloud(&self) -> Option<PointCloudItem>
Convert accumulated point primitives to a single point cloud render item.
Returns None when no point primitives are present or when enabled is false.
Dev-layer points are skipped when dev_enabled is false.
Sourcepub fn to_labels(&self) -> Vec<LabelItem>
pub fn to_labels(&self) -> Vec<LabelItem>
Convert accumulated label primitives to label render items.
Returns an empty Vec when no label primitives are present or when enabled is false.
Dev-layer labels are skipped when dev_enabled is false.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for DebugDraw
impl RefUnwindSafe for DebugDraw
impl Send for DebugDraw
impl Sync for DebugDraw
impl Unpin for DebugDraw
impl UnsafeUnpin for DebugDraw
impl UnwindSafe for DebugDraw
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.