mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	
		
			
	
	
		
			43 lines
		
	
	
	
		
			932 B
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			43 lines
		
	
	
	
		
			932 B
		
	
	
	
		
			C++
		
	
	
	
	
	
|   | 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); | ||
|  | 		} | ||
|  | 	} | ||
|  | } |