Skip to content

Commit

Permalink
Fix not refitting upward from leaf nodes.
Browse files Browse the repository at this point in the history
Previously, the wrong node id (root node id) was used. Dirty leaf nodes
do not actually recalculate aabb.

Additionally, when requesting a new leaf, mark `dirty` as `false` in `clear()`.

Make sure to only mark the leaf as **dirty** when shrinking the border of
the leaf when removing items.

In other cases, the leaf node's aabb will get the correct result immediately.
1. When adding an item, the leaf nodes will be calculated immediately.
2. Removing the item within the border of the leaf node has no effect on the
original aabb.
  • Loading branch information
Rindbee committed Sep 28, 2023
1 parent 4c3dc26 commit e705aa4
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 2 deletions.
2 changes: 1 addition & 1 deletion core/math/bvh_refit.inc
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ void refit_branch(uint32_t p_node_id) {
TLeaf &leaf = _node_get_leaf(tnode);
if (leaf.is_dirty()) {
leaf.set_dirty(false);
refit_upward(p_node_id);
refit_upward(rp.node_id);
}
}
} // while more nodes to pop
Expand Down
2 changes: 1 addition & 1 deletion core/math/bvh_structs.inc
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ public:

void clear() {
num_items = 0;
set_dirty(true);
set_dirty(false);
}
bool is_full() const { return num_items >= MAX_ITEMS; }

Expand Down

0 comments on commit e705aa4

Please sign in to comment.