12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- void _integrity_check_all() {
- #ifdef BVH_INTEGRITY_CHECKS
- for (int n = 0; n < NUM_TREES; n++) {
- uint32_t root = _root_node_id[n];
- if (root != BVHCommon::INVALID) {
- _integrity_check_down(root);
- }
- }
- #endif
- }
- void _integrity_check_up(uint32_t p_node_id) {
- TNode &node = _nodes[p_node_id];
- BVHABB_CLASS abb = node.aabb;
- node_update_aabb(node);
- BVHABB_CLASS abb2 = node.aabb;
- abb2.expand(-_node_expansion);
- CRASH_COND(!abb.is_other_within(abb2));
- }
- void _integrity_check_down(uint32_t p_node_id) {
- const TNode &node = _nodes[p_node_id];
- if (node.is_leaf()) {
- _integrity_check_up(p_node_id);
- } else {
- CRASH_COND(node.num_children != 2);
- for (int n = 0; n < node.num_children; n++) {
- uint32_t child_id = node.children[n];
- // check the children parent pointers are correct
- TNode &child = _nodes[child_id];
- CRASH_COND(child.parent_id != p_node_id);
- _integrity_check_down(child_id);
- }
- }
- }
|