summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYuri Sizov <yuris@humnom.net>2024-01-22 20:39:32 +0100
committerYuri Sizov <yuris@humnom.net>2024-01-22 20:39:32 +0100
commitb5f033476c3052365e23e4fe14fd35e31f2cf6b9 (patch)
treed486e3d94878abbe53355b91804951f24540d8d9
parentfc25ff021af3dcdfc2647c7f1543b71381afb90c (diff)
parentdbcd82ba674182fbf5bf5ae0a9701da2b11e6fe9 (diff)
downloadredot-engine-b5f033476c3052365e23e4fe14fd35e31f2cf6b9.tar.gz
Merge pull request #87470 from AThousandShips/tile_thread_fix
[Editor] Fix threading problems with `TileMap` preview
-rw-r--r--editor/plugins/tiles/tiles_editor_plugin.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/editor/plugins/tiles/tiles_editor_plugin.cpp b/editor/plugins/tiles/tiles_editor_plugin.cpp
index 057e6443d6..65f52bc92c 100644
--- a/editor/plugins/tiles/tiles_editor_plugin.cpp
+++ b/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.
callable_mp((Node *)EditorNode::get_singleton(), &Node::add_child).call_deferred(viewport, false, Node::INTERNAL_MODE_DISABLED);
+ 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();
}