diff options
Diffstat (limited to 'editor/editor_resource_preview.cpp')
-rw-r--r-- | editor/editor_resource_preview.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/editor/editor_resource_preview.cpp b/editor/editor_resource_preview.cpp index 1fa1fe9070..173333dac9 100644 --- a/editor/editor_resource_preview.cpp +++ b/editor/editor_resource_preview.cpp @@ -188,6 +188,7 @@ void EditorResourcePreview::_generate_preview(Ref<ImageTexture> &r_texture, Ref< void EditorResourcePreview::_thread() { +#ifndef SERVER_ENABLED while (!exit) { preview_sem->wait(); @@ -313,6 +314,8 @@ void EditorResourcePreview::_thread() { preview_mutex->unlock(); } } +#endif + exited = true; } void EditorResourcePreview::queue_edited_resource_preview(const Ref<Resource> &p_res, Object *p_receiver, const StringName &p_receiver_func, const Variant &p_userdata) { @@ -417,10 +420,19 @@ void EditorResourcePreview::check_for_invalidation(const String &p_path) { } } +void EditorResourcePreview::start() { + ERR_FAIL_COND(thread); + thread = Thread::create(_thread_func, this); + exited = false; +} void EditorResourcePreview::stop() { if (thread) { exit = true; preview_sem->post(); + while (!exited) { + OS::get_singleton()->delay_usec(10000); + VisualServer::get_singleton()->sync(); //sync pending stuff, as thread may be blocked on visual server + } Thread::wait_to_finish(thread); memdelete(thread); thread = NULL; @@ -428,13 +440,13 @@ void EditorResourcePreview::stop() { } EditorResourcePreview::EditorResourcePreview() { + thread = NULL; singleton = this; preview_mutex = Mutex::create(); preview_sem = Semaphore::create(); order = 0; exit = false; - - thread = Thread::create(_thread_func, this); + exited = false; } EditorResourcePreview::~EditorResourcePreview() { |