| 1 | void _integrity_check_all() { | 
|---|---|
| 2 | #ifdef BVH_INTEGRITY_CHECKS | 
| 3 | for (int n = 0; n < NUM_TREES; n++) { | 
| 4 | uint32_t root = _root_node_id[n]; | 
| 5 | if (root != BVHCommon::INVALID) { | 
| 6 | _integrity_check_down(root); | 
| 7 | } | 
| 8 | } | 
| 9 | #endif | 
| 10 | } | 
| 11 | |
| 12 | void _integrity_check_up(uint32_t p_node_id) { | 
| 13 | TNode &node = _nodes[p_node_id]; | 
| 14 | |
| 15 | BVHABB_CLASS abb = node.aabb; | 
| 16 | node_update_aabb(node); | 
| 17 | |
| 18 | BVHABB_CLASS abb2 = node.aabb; | 
| 19 | abb2.expand(-_node_expansion); | 
| 20 | |
| 21 | CRASH_COND(!abb.is_other_within(abb2)); | 
| 22 | } | 
| 23 | |
| 24 | void _integrity_check_down(uint32_t p_node_id) { | 
| 25 | const TNode &node = _nodes[p_node_id]; | 
| 26 | |
| 27 | if (node.is_leaf()) { | 
| 28 | _integrity_check_up(p_node_id); | 
| 29 | } else { | 
| 30 | CRASH_COND(node.num_children != 2); | 
| 31 | |
| 32 | for (int n = 0; n < node.num_children; n++) { | 
| 33 | uint32_t child_id = node.children[n]; | 
| 34 | |
| 35 | // check the children parent pointers are correct | 
| 36 | TNode &child = _nodes[child_id]; | 
| 37 | CRASH_COND(child.parent_id != p_node_id); | 
| 38 | |
| 39 | _integrity_check_down(child_id); | 
| 40 | } | 
| 41 | } | 
| 42 | } | 
| 43 | 
