Browse Source

[Editor] Fix threading problems with `TileMap` preview

(cherry picked from commit dbcd82ba674182fbf5bf5ae0a9701da2b11e6fe9)
A Thousand Ships 1 year ago
parent
commit
79179351a3
1 changed files with 9 additions and 0 deletions
  1. 9 0
      editor/plugins/tiles/tiles_editor_plugin.cpp

+ 9 - 0
editor/plugins/tiles/tiles_editor_plugin.cpp

@@ -68,6 +68,9 @@ void TilesEditorUtils::_thread_func(void *ud) {
 }
 
 void TilesEditorUtils::_thread() {
+	CallQueue queue;
+	MessageQueue::set_thread_singleton_override(&queue);
+
 	pattern_thread_exited.clear();
 	while (!pattern_thread_exit.is_set()) {
 		pattern_preview_sem.wait();
@@ -127,6 +130,8 @@ void TilesEditorUtils::_thread() {
 				// Add the viewport at the last moment to avoid rendering too early.
 				EditorNode::get_singleton()->call_deferred("add_child", viewport);
 
+				MessageQueue::get_singleton()->flush();
+
 				RS::get_singleton()->connect(SNAME("frame_pre_draw"), callable_mp(const_cast<TilesEditorUtils *>(this), &TilesEditorUtils::_preview_frame_started), Object::CONNECT_ONE_SHOT);
 
 				pattern_preview_done.wait();
@@ -139,7 +144,11 @@ void TilesEditorUtils::_thread() {
 				viewport->queue_free();
 			}
 		}
+
+		MessageQueue::get_singleton()->flush();
 	}
+
+	MessageQueue::get_singleton()->flush();
 	pattern_thread_exited.set();
 }