rapier3d/pipeline/debug_render_pipeline/
debug_render_backend.rs1use super::DebugColor;
2use crate::dynamics::{
3 ImpulseJoint, ImpulseJointHandle, Multibody, MultibodyLink, RigidBody, RigidBodyHandle,
4};
5use crate::geometry::{Aabb, Collider, ContactPair};
6use crate::math::{Isometry, Point, Real, Vector};
7use crate::prelude::{ColliderHandle, MultibodyJointHandle};
8use na::Scale;
9
10#[derive(Copy, Clone)]
12pub enum DebugRenderObject<'a> {
13 RigidBody(RigidBodyHandle, &'a RigidBody),
15 Collider(ColliderHandle, &'a Collider),
17 ColliderAabb(ColliderHandle, &'a Collider, &'a Aabb),
19 ImpulseJoint(ImpulseJointHandle, &'a ImpulseJoint),
21 MultibodyJoint(MultibodyJointHandle, &'a Multibody, &'a MultibodyLink),
23 ContactPair(&'a ContactPair, &'a Collider, &'a Collider),
25}
26
27pub trait DebugRenderBackend {
34 fn filter_object(&self, _object: DebugRenderObject) -> bool {
36 true
37 }
38
39 fn draw_line(
43 &mut self,
44 object: DebugRenderObject,
45 a: Point<Real>,
46 b: Point<Real>,
47 color: DebugColor,
48 );
49
50 fn draw_polyline(
52 &mut self,
53 object: DebugRenderObject,
54 vertices: &[Point<Real>],
55 indices: &[[u32; 2]],
56 transform: &Isometry<Real>,
57 scale: &Vector<Real>,
58 color: DebugColor,
59 ) {
60 for idx in indices {
61 let a = transform * (Scale::from(*scale) * vertices[idx[0] as usize]);
62 let b = transform * (Scale::from(*scale) * vertices[idx[1] as usize]);
63 self.draw_line(object, a, b, color);
64 }
65 }
66
67 fn draw_line_strip(
69 &mut self,
70 object: DebugRenderObject,
71 vertices: &[Point<Real>],
72 transform: &Isometry<Real>,
73 scale: &Vector<Real>,
74 color: DebugColor,
75 closed: bool,
76 ) {
77 for vtx in vertices.windows(2) {
78 let a = transform * (Scale::from(*scale) * vtx[0]);
79 let b = transform * (Scale::from(*scale) * vtx[1]);
80 self.draw_line(object, a, b, color);
81 }
82
83 if closed && vertices.len() > 2 {
84 let a = transform * (Scale::from(*scale) * vertices[0]);
85 let b = transform * (Scale::from(*scale) * vertices.last().unwrap());
86 self.draw_line(object, a, b, color);
87 }
88 }
89}