From e6d930b31f1042fd01d3824947b48cfdab939c0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20J=2E=20Est=C3=A9banez?= Date: Wed, 19 Jun 2024 09:54:01 +0200 Subject: [PATCH] AnimatedTexture: Fix crash when loaded from a thread --- scene/resources/animated_texture.cpp | 7 ++++++- scene/resources/animated_texture.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/scene/resources/animated_texture.cpp b/scene/resources/animated_texture.cpp index 842a398327a..f13f15539d2 100644 --- a/scene/resources/animated_texture.cpp +++ b/scene/resources/animated_texture.cpp @@ -270,13 +270,18 @@ void AnimatedTexture::_bind_methods() { BIND_CONSTANT(MAX_FRAMES); } +void AnimatedTexture::_finish_non_thread_safe_setup() { + RenderingServer::get_singleton()->connect("frame_pre_draw", callable_mp(this, &AnimatedTexture::_update_proxy)); +} + AnimatedTexture::AnimatedTexture() { //proxy = RS::get_singleton()->texture_create(); proxy_ph = RS::get_singleton()->texture_2d_placeholder_create(); proxy = RS::get_singleton()->texture_proxy_create(proxy_ph); RenderingServer::get_singleton()->texture_set_force_redraw_if_visible(proxy, true); - RenderingServer::get_singleton()->connect("frame_pre_draw", callable_mp(this, &AnimatedTexture::_update_proxy)); + + MessageQueue::get_main_singleton()->push_callable(callable_mp(this, &AnimatedTexture::_finish_non_thread_safe_setup)); } AnimatedTexture::~AnimatedTexture() { diff --git a/scene/resources/animated_texture.h b/scene/resources/animated_texture.h index 844959c810d..32384666658 100644 --- a/scene/resources/animated_texture.h +++ b/scene/resources/animated_texture.h @@ -65,6 +65,7 @@ private: uint64_t prev_ticks = 0; void _update_proxy(); + void _finish_non_thread_safe_setup(); protected: static void _bind_methods();