From 79179351a3edfc56377d63d3d686daa06611e95d Mon Sep 17 00:00:00 2001 From: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> Date: Mon, 22 Jan 2024 13:44:36 +0100 Subject: [PATCH] [Editor] Fix threading problems with `TileMap` preview (cherry picked from commit dbcd82ba674182fbf5bf5ae0a9701da2b11e6fe9) --- editor/plugins/tiles/tiles_editor_plugin.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/editor/plugins/tiles/tiles_editor_plugin.cpp b/editor/plugins/tiles/tiles_editor_plugin.cpp index b96f3f21b8a..e56c0e108c5 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. EditorNode::get_singleton()->call_deferred("add_child", viewport); + MessageQueue::get_singleton()->flush(); + RS::get_singleton()->connect(SNAME("frame_pre_draw"), callable_mp(const_cast(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(); }