Skip to content

Commit

Permalink
Merge pull request #44651 from lawnjelly/bvh_world_aabb
Browse files Browse the repository at this point in the history
Fix BVH to world_aabb, and call update
  • Loading branch information
reduz authored Dec 24, 2020
2 parents dbd00d9 + 6d687de commit 4d9b95f
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
9 changes: 8 additions & 1 deletion core/math/dynamic_bvh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -354,10 +354,17 @@ void DynamicBVH::_update(Node *leaf, int lookahead) {
void DynamicBVH::update(const ID &p_id, const AABB &p_box) {
ERR_FAIL_COND(!p_id.is_valid());
Node *leaf = p_id.node;
Node *base = _remove_leaf(leaf);

Volume volume;
volume.min = p_box.position;
volume.max = p_box.position + p_box.size;

if ((leaf->volume.min == volume.min) && (leaf->volume.max == volume.max)) {
// noop
return;
}

Node *base = _remove_leaf(leaf);
if (base) {
if (lkhd >= 0) {
for (int i = 0; (i < lkhd) && base->parent; ++i) {
Expand Down
10 changes: 8 additions & 2 deletions servers/rendering/renderer_scene_cull.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1070,9 +1070,15 @@ void RendererSceneCull::_update_instance(Instance *p_instance) {

if (!p_instance->indexer_id.is_valid()) {
if ((1 << p_instance->base_type) & RS::INSTANCE_GEOMETRY_MASK) {
p_instance->indexer_id = p_instance->scenario->indexers[Scenario::INDEXER_GEOMETRY].insert(p_instance->aabb, p_instance);
p_instance->indexer_id = p_instance->scenario->indexers[Scenario::INDEXER_GEOMETRY].insert(p_instance->transformed_aabb, p_instance);
} else {
p_instance->indexer_id = p_instance->scenario->indexers[Scenario::INDEXER_VOLUMES].insert(p_instance->aabb, p_instance);
p_instance->indexer_id = p_instance->scenario->indexers[Scenario::INDEXER_VOLUMES].insert(p_instance->transformed_aabb, p_instance);
}
} else {
if ((1 << p_instance->base_type) & RS::INSTANCE_GEOMETRY_MASK) {
p_instance->scenario->indexers[Scenario::INDEXER_GEOMETRY].update(p_instance->indexer_id, p_instance->transformed_aabb);
} else {
p_instance->scenario->indexers[Scenario::INDEXER_VOLUMES].update(p_instance->indexer_id, p_instance->transformed_aabb);
}
}

Expand Down

0 comments on commit 4d9b95f

Please sign in to comment.