mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 18:31:55 -04:00
added spam print of number of solids per CollisionSolid, pstats timing of collision solid tests
This commit is contained in:
parent
52ff79375d
commit
d412984e74
@ -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];
|
||||||
|
@ -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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user