aboutsummaryrefslogtreecommitdiff
path: root/servers/visual/visual_server_scene.cpp
diff options
context:
space:
mode:
authorJuan Linietsky2017-12-06 18:06:34 -0300
committerJuan Linietsky2017-12-06 18:06:34 -0300
commit0bc573635c167b9a3d653641c1389ba9a7870596 (patch)
tree4520b70eea535ea37ad433403b4809ab6ae87f8e /servers/visual/visual_server_scene.cpp
parenta496dd4d389e2752a58f5beb98dcfad2eeccaf14 (diff)
downloadgodot-0bc573635c167b9a3d653641c1389ba9a7870596.tar.gz
godot-0bc573635c167b9a3d653641c1389ba9a7870596.tar.zst
godot-0bc573635c167b9a3d653641c1389ba9a7870596.zip
Diffstat (limited to 'servers/visual/visual_server_scene.cpp')
-rw-r--r--servers/visual/visual_server_scene.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/servers/visual/visual_server_scene.cpp b/servers/visual/visual_server_scene.cpp
index 9db730ec9..72fb1df94 100644
--- a/servers/visual/visual_server_scene.cpp
+++ b/servers/visual/visual_server_scene.cpp
@@ -308,6 +308,12 @@ void VisualServerScene::instance_set_base(RID p_instance, RID p_base) {
//from octree
InstanceGIProbeData *gi_probe = static_cast<InstanceGIProbeData *>(instance->base_data);
+ //make sure probes are done baking
+ while (!probe_bake_list.empty()) {
+ OS::get_singleton()->delay_usec(1);
+ }
+ //make sure this one is done baking
+
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);
@@ -2596,7 +2602,15 @@ void VisualServerScene::_bake_gi_probe(Instance *p_gi_probe) {
}
//send back to main thread to update un little chunks
+ if (probe_bake_mutex) {
+ probe_bake_mutex->lock();
+ }
+
probe_data->dynamic.updating_stage = GI_UPDATE_STAGE_UPLOADING;
+
+ if (probe_bake_mutex) {
+ probe_bake_mutex->unlock();
+ }
}
bool VisualServerScene::_check_gi_probe(Instance *p_gi_probe) {
@@ -2729,11 +2743,11 @@ void VisualServerScene::render_probes() {
case GI_UPDATE_STAGE_CHECK: {
if (_check_gi_probe(instance_probe) || force_lighting) {
- //send to lighting thread
- probe->dynamic.updating_stage = GI_UPDATE_STAGE_LIGHTING;
+//send to lighting thread
#ifndef NO_THREADS
probe_bake_mutex->lock();
+ probe->dynamic.updating_stage = GI_UPDATE_STAGE_LIGHTING;
probe_bake_list.push_back(instance_probe);
probe_bake_mutex->unlock();
probe_bake_sem->post();