Replace BulletDebugNode.setVerbose with setters for individual debug components (wireframe, bounding boxes, constraints, normals)

This commit is contained in:
enn0x 2011-08-20 11:54:39 +00:00
parent 48f2a8cab7
commit a0b8d5758d
3 changed files with 65 additions and 25 deletions

View File

@ -23,25 +23,49 @@ INLINE BulletDebugNode::
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: BulletDebugNode::set_verbose // Function: BulletDebugNode::show_wireframe
// Access: Published // Access: Published
// Description: // Description:
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
INLINE void BulletDebugNode:: INLINE void BulletDebugNode::
set_verbose(bool verbose) { show_wireframe(bool show) {
_verbose = verbose; _wireframe = show;
draw_mask_changed(); draw_mask_changed();
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: BulletDebugNode::get_verbose // Function: BulletDebugNode::show_constraints
// Access: Published // Access: Published
// Description: // Description:
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
INLINE bool BulletDebugNode:: INLINE void BulletDebugNode::
get_verbose() const { show_constraints(bool show) {
return _verbose; _constraints = show;
draw_mask_changed();
}
////////////////////////////////////////////////////////////////////
// Function: BulletDebugNode::show_bounding_boxes
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
INLINE void BulletDebugNode::
show_bounding_boxes(bool show) {
_bounds = show;
draw_mask_changed();
}
////////////////////////////////////////////////////////////////////
// Function: BulletDebugNode::show_normals
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
INLINE void BulletDebugNode::
show_normals(bool show) {
_drawer._normals = show;
} }

View File

@ -26,7 +26,12 @@ TypeHandle BulletDebugNode::_type_handle;
// Description: // Description:
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
BulletDebugNode:: BulletDebugNode::
BulletDebugNode(const char *name) : GeomNode(name), _verbose(false) { BulletDebugNode(const char *name) : GeomNode(name) {
_wireframe = true;
_constraints = true;
_bounds = false;
_drawer._normals = true;
_vdata = new GeomVertexData("", GeomVertexFormat::get_v3c4(), Geom::UH_stream); _vdata = new GeomVertexData("", GeomVertexFormat::get_v3c4(), Geom::UH_stream);
@ -167,21 +172,24 @@ draw_mask_changed() {
_drawer.setDebugMode(DebugDraw::DBG_NoDebug); _drawer.setDebugMode(DebugDraw::DBG_NoDebug);
} }
else { else {
if (_verbose) { int mode = DebugDraw::DBG_DrawText |
_drawer.setDebugMode(DebugDraw::DBG_DrawWireframe |
DebugDraw::DBG_DrawAabb |
DebugDraw::DBG_DrawText |
DebugDraw::DBG_DrawFeaturesText | DebugDraw::DBG_DrawFeaturesText |
DebugDraw::DBG_DrawContactPoints | DebugDraw::DBG_DrawContactPoints;
DebugDraw::DBG_DrawConstraints |
DebugDraw::DBG_DrawConstraintLimits);
}
else {
_drawer.setDebugMode(DebugDraw::DBG_DrawWireframe |
DebugDraw::DBG_DrawConstraints |
DebugDraw::DBG_FastWireframe);
if (_wireframe) {
mode |= DebugDraw::DBG_DrawWireframe;
} }
if (_constraints) {
mode |= DebugDraw::DBG_DrawConstraints;
mode |= DebugDraw::DBG_DrawConstraintLimits;
}
if (_bounds) {
mode |= DebugDraw::DBG_DrawAabb;
}
_drawer.setDebugMode(mode);
} }
} }
@ -297,6 +305,10 @@ drawLine(const btVector3 &from, const btVector3 &to, const btVector3 &color) {
float g = color.getY(); float g = color.getY();
float b = color.getZ(); float b = color.getZ();
// Hack to get rid of triangle normals. The hack is based on the
// assumption that only normals are drawn in yellow.
if (_normals==false && r==1.0f && g==1.0f && b==0.0f) return;
Line line; Line line;
line._p0 = LVecBase3f(from.getX(), from.getY(), from.getZ()); line._p0 = LVecBase3f(from.getX(), from.getY(), from.getZ());

View File

@ -37,8 +37,10 @@ PUBLISHED:
virtual void draw_mask_changed(); virtual void draw_mask_changed();
INLINE void set_verbose(bool verbose); INLINE void show_wireframe(bool show);
INLINE bool get_verbose() const; INLINE void show_constraints(bool show);
INLINE void show_bounding_boxes(bool show);
INLINE void show_normals(bool show);
public: public:
virtual bool safe_to_flatten() const; virtual bool safe_to_flatten() const;
@ -91,13 +93,15 @@ private:
pvector<Line> _lines; pvector<Line> _lines;
pvector<Triangle> _triangles; pvector<Triangle> _triangles;
private: bool _normals;
int _mode; int _mode;
}; };
DebugDraw _drawer; DebugDraw _drawer;
bool _verbose; bool _wireframe;
bool _constraints;
bool _bounds;
PT(GeomVertexData) _vdata; PT(GeomVertexData) _vdata;
PT(Geom) _geom_lines; PT(Geom) _geom_lines;