diff --git a/editor/inspector/editor_resource_preview.cpp b/editor/inspector/editor_resource_preview.cpp index 30a22ab93f3..e1ccf220b58 100644 --- a/editor/inspector/editor_resource_preview.cpp +++ b/editor/inspector/editor_resource_preview.cpp @@ -92,12 +92,8 @@ void EditorResourcePreviewGenerator::_bind_methods() { } void EditorResourcePreviewGenerator::DrawRequester::request_and_wait(RID p_viewport) { - Callable request_vp_update_once = callable_mp(RS::get_singleton(), &RS::viewport_set_update_mode).bind(p_viewport, RS::VIEWPORT_UPDATE_ONCE); - if (EditorResourcePreview::get_singleton()->is_threaded()) { - RS::get_singleton()->connect(SNAME("frame_pre_draw"), request_vp_update_once, Object::CONNECT_ONE_SHOT); - RS::get_singleton()->request_frame_drawn_callback(callable_mp(this, &EditorResourcePreviewGenerator::DrawRequester::_post_semaphore)); - + RS::get_singleton()->connect(SNAME("frame_pre_draw"), callable_mp(this, &EditorResourcePreviewGenerator::DrawRequester::_prepare_draw).bind(p_viewport), Object::CONNECT_ONE_SHOT); semaphore.wait(); } else { // Avoid the main viewport and children being redrawn. @@ -106,7 +102,7 @@ void EditorResourcePreviewGenerator::DrawRequester::request_and_wait(RID p_viewp RID root_vp = st->get_root()->get_viewport_rid(); RenderingServer::get_singleton()->viewport_set_active(root_vp, false); - request_vp_update_once.call(); + RS::get_singleton()->viewport_set_update_mode(p_viewport, RS::VIEWPORT_UPDATE_ONCE); RS::get_singleton()->draw(false); // Let main viewport and children be drawn again. @@ -125,9 +121,13 @@ void EditorResourcePreviewGenerator::request_draw_and_wait(RID viewport) const { draw_requester.request_and_wait(viewport); } -Variant EditorResourcePreviewGenerator::DrawRequester::_post_semaphore() { +void EditorResourcePreviewGenerator::DrawRequester::_prepare_draw(RID p_viewport) { + RS::get_singleton()->viewport_set_update_mode(p_viewport, RS::VIEWPORT_UPDATE_ONCE); + RS::get_singleton()->request_frame_drawn_callback(callable_mp(this, &EditorResourcePreviewGenerator::DrawRequester::_post_semaphore)); +} + +void EditorResourcePreviewGenerator::DrawRequester::_post_semaphore() { semaphore.post(); - return Variant(); // Needed because of how the callback is used. } bool EditorResourcePreview::is_threaded() const { diff --git a/editor/inspector/editor_resource_preview.h b/editor/inspector/editor_resource_preview.h index b42f36f7ef8..cb2be1dbf9a 100644 --- a/editor/inspector/editor_resource_preview.h +++ b/editor/inspector/editor_resource_preview.h @@ -53,7 +53,8 @@ protected: class DrawRequester : public Object { Semaphore semaphore; - Variant _post_semaphore(); + void _post_semaphore(); + void _prepare_draw(RID p_viewport); public: void request_and_wait(RID p_viewport);