mirror of
https://github.com/godotengine/godot.git
synced 2024-11-27 09:16:35 +08:00
Attempt to see if this can solve the problem with #13338
This commit is contained in:
parent
e0c00efb99
commit
431dfc1458
@ -303,6 +303,17 @@ void VisualServerScene::instance_set_base(RID p_instance, RID p_base) {
|
||||
|
||||
VSG::storage->instance_remove_dependency(instance->base, instance);
|
||||
|
||||
if (instance->base_type == VS::INSTANCE_GI_PROBE) {
|
||||
//if gi probe is baking, wait until done baking, else race condition may happen when removing it
|
||||
//from octree
|
||||
InstanceGIProbeData *gi_probe = static_cast<InstanceGIProbeData *>(instance->base_data);
|
||||
|
||||
while (gi_probe->dynamic.updating_stage == GI_UPDATE_STAGE_LIGHTING) {
|
||||
//wait until bake is done if it's baking
|
||||
OS::get_singleton()->delay_usec(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (scenario && instance->octree_id) {
|
||||
scenario->octree.erase(instance->octree_id); //make dependencies generated by the octree go away
|
||||
instance->octree_id = 0;
|
||||
@ -331,10 +342,6 @@ void VisualServerScene::instance_set_base(RID p_instance, RID p_base) {
|
||||
|
||||
InstanceGIProbeData *gi_probe = static_cast<InstanceGIProbeData *>(instance->base_data);
|
||||
|
||||
while (gi_probe->dynamic.updating_stage == GI_UPDATE_STAGE_LIGHTING) {
|
||||
//wait until bake is done if it's baking
|
||||
OS::get_singleton()->delay_usec(1);
|
||||
}
|
||||
if (gi_probe->update_element.in_list()) {
|
||||
gi_probe_update_list.remove(&gi_probe->update_element);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user