blob: 71aa0e4fe08d1cf073aa2ec659fc5497c8b57990 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
int _handle_get_tree_id(BVHHandle p_handle) const {
if (USE_PAIRS) {
int tree = 0;
if (_extra[p_handle.id()].pairable) {
tree = 1;
}
return tree;
}
return 0;
}
public:
void _handle_sort(BVHHandle &p_ha, BVHHandle &p_hb) const {
if (p_ha.id() > p_hb.id()) {
BVHHandle temp = p_hb;
p_hb = p_ha;
p_ha = temp;
}
}
private:
void create_root_node(int p_tree) {
// if there is no root node, create one
if (_root_node_id[p_tree] == BVHCommon::INVALID) {
uint32_t root_node_id;
TNode *node = _nodes.request(root_node_id);
node->clear();
_root_node_id[p_tree] = root_node_id;
// make the root node a leaf
uint32_t leaf_id;
TLeaf *leaf = _leaves.request(leaf_id);
leaf->clear();
node->neg_leaf_id = -(int)leaf_id;
}
}
bool node_is_leaf_full(TNode &tnode) const {
const TLeaf &leaf = _node_get_leaf(tnode);
return leaf.is_full();
}
public:
TLeaf &_node_get_leaf(TNode &tnode) {
BVH_ASSERT(tnode.is_leaf());
return _leaves[tnode.get_leaf_id()];
}
const TLeaf &_node_get_leaf(const TNode &tnode) const {
BVH_ASSERT(tnode.is_leaf());
return _leaves[tnode.get_leaf_id()];
}
private:
|