Fix incorrect material and mesh thumbnails

This commit is contained in:
BlueCube3310 2025-11-08 11:06:52 +01:00
parent f5918a9d35
commit 5a3c86646e
2 changed files with 10 additions and 9 deletions

View file

@ -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 {

View file

@ -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);