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);
|
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) {
|
if (scenario && instance->octree_id) {
|
||||||
scenario->octree.erase(instance->octree_id); //make dependencies generated by the octree go away
|
scenario->octree.erase(instance->octree_id); //make dependencies generated by the octree go away
|
||||||
instance->octree_id = 0;
|
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);
|
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()) {
|
if (gi_probe->update_element.in_list()) {
|
||||||
gi_probe_update_list.remove(&gi_probe->update_element);
|
gi_probe_update_list.remove(&gi_probe->update_element);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user