added spam print of number of solids per CollisionSolid, pstats timing of collision solid tests

This commit is contained in:
Darren Ranalli 2007-04-03 17:59:59 +00:00
parent 52ff79375d
commit d412984e74
2 changed files with 20 additions and 6 deletions

View File

@ -279,7 +279,7 @@ traverse(const NodePath &root) {
#ifdef DO_PSTATS #ifdef DO_PSTATS
PStatTimer pass_timer(get_pass_collector(pass)); PStatTimer pass_timer(get_pass_collector(pass));
#endif #endif
r_traverse(level_states[pass]); r_traverse(level_states[pass], pass);
} }
hi = _handlers.begin(); hi = _handlers.begin();
@ -521,7 +521,7 @@ prepare_colliders(CollisionTraverser::LevelStates &level_states,
// Description: // Description:
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void CollisionTraverser:: void CollisionTraverser::
r_traverse(CollisionLevelState &level_state) { r_traverse(CollisionLevelState &level_state, size_t pass) {
if (!level_state.any_in_bounds()) { if (!level_state.any_in_bounds()) {
return; return;
} }
@ -551,6 +551,9 @@ r_traverse(CollisionLevelState &level_state) {
if ((entry._from_node->get_from_collide_mask() & if ((entry._from_node->get_from_collide_mask() &
cnode->get_into_collide_mask()) != 0) { cnode->get_into_collide_mask()) != 0) {
#ifdef DO_PSTATS
PStatTimer collide_timer(_solid_collide_collectors[pass]);
#endif
entry._from_node_path = level_state.get_collider_node_path(c); entry._from_node_path = level_state.get_collider_node_path(c);
entry._from = level_state.get_collider(c); entry._from = level_state.get_collider(c);
@ -593,6 +596,9 @@ r_traverse(CollisionLevelState &level_state) {
if ((entry._from_node->get_from_collide_mask() & if ((entry._from_node->get_from_collide_mask() &
gnode->get_into_collide_mask()) != 0) { gnode->get_into_collide_mask()) != 0) {
#ifdef DO_PSTATS
PStatTimer collide_timer(_solid_collide_collectors[pass]);
#endif
entry._from_node_path = level_state.get_collider_node_path(c); entry._from_node_path = level_state.get_collider_node_path(c);
entry._from = level_state.get_collider(c); entry._from = level_state.get_collider(c);
@ -612,7 +618,7 @@ r_traverse(CollisionLevelState &level_state) {
int index = node->get_visible_child(); int index = node->get_visible_child();
if (index >= 0 && index < node->get_num_children()) { if (index >= 0 && index < node->get_num_children()) {
CollisionLevelState next_state(level_state, node->get_child(index)); CollisionLevelState next_state(level_state, node->get_child(index));
r_traverse(next_state); r_traverse(next_state, pass);
} }
} else if (node->is_lod_node()) { } else if (node->is_lod_node()) {
@ -630,7 +636,7 @@ r_traverse(CollisionLevelState &level_state) {
next_state.set_include_mask(next_state.get_include_mask() & next_state.set_include_mask(next_state.get_include_mask() &
~GeomNode::get_default_collide_mask()); ~GeomNode::get_default_collide_mask());
} }
r_traverse(next_state); r_traverse(next_state, pass);
} }
} else { } else {
@ -638,7 +644,7 @@ r_traverse(CollisionLevelState &level_state) {
int num_children = node->get_num_children(); int num_children = node->get_num_children();
for (int i = 0; i < num_children; ++i) { for (int i = 0; i < num_children; ++i) {
CollisionLevelState next_state(level_state, node->get_child(i)); CollisionLevelState next_state(level_state, node->get_child(i));
r_traverse(next_state); r_traverse(next_state, pass);
} }
} }
} }
@ -664,6 +670,9 @@ compare_collider_to_node(CollisionEntry &entry,
CollisionNode *cnode; CollisionNode *cnode;
DCAST_INTO_V(cnode, entry._into_node); DCAST_INTO_V(cnode, entry._into_node);
int num_solids = cnode->get_num_solids(); int num_solids = cnode->get_num_solids();
collide_cat.spam()
<< "Colliding against CollisionNode " << entry._into_node << " which has " << num_solids
<< " collision solids.\n";
for (int s = 0; s < num_solids; ++s) { for (int s = 0; s < num_solids; ++s) {
entry._into = cnode->get_solid(s); entry._into = cnode->get_solid(s);
if (entry._from != entry._into) { if (entry._from != entry._into) {
@ -889,6 +898,8 @@ get_pass_collector(int pass) {
name << "pass " << (_pass_collectors.size() + 1); name << "pass " << (_pass_collectors.size() + 1);
PStatCollector col(_this_pcollector, name.str()); PStatCollector col(_this_pcollector, name.str());
_pass_collectors.push_back(col); _pass_collectors.push_back(col);
PStatCollector sc_col(col, "solid_collide");
_solid_collide_collectors.push_back(sc_col);
} }
return _pass_collectors[pass]; return _pass_collectors[pass];

View File

@ -84,7 +84,7 @@ private:
typedef pvector<CollisionLevelState> LevelStates; typedef pvector<CollisionLevelState> LevelStates;
void prepare_colliders(LevelStates &level_states, const NodePath &root); void prepare_colliders(LevelStates &level_states, const NodePath &root);
void r_traverse(CollisionLevelState &level_state); void r_traverse(CollisionLevelState &level_state, size_t pass);
void compare_collider_to_node(CollisionEntry &entry, void compare_collider_to_node(CollisionEntry &entry,
const GeometricBoundingVolume *from_parent_gbv, const GeometricBoundingVolume *from_parent_gbv,
@ -139,6 +139,9 @@ private:
PStatCollector _this_pcollector; PStatCollector _this_pcollector;
typedef pvector<PStatCollector> PassCollectors; typedef pvector<PStatCollector> PassCollectors;
PassCollectors _pass_collectors; PassCollectors _pass_collectors;
// pstats category for actual collision detection (vs. bounding heirarchy collision detection)
typedef pvector<PStatCollector> SolidCollideCollectors;
SolidCollideCollectors _solid_collide_collectors;
}; };
INLINE ostream &operator << (ostream &out, const CollisionTraverser &trav) { INLINE ostream &operator << (ostream &out, const CollisionTraverser &trav) {