2
0
Эх сурвалжийг харах

Merge pull request #93340 from RandomShaper/fix_anim_text_thread

AnimatedTexture: Fix crash when loaded from a thread
Rémi Verschelde 1 жил өмнө
parent
commit
9a4942f2f5

+ 6 - 1
scene/resources/animated_texture.cpp

@@ -270,13 +270,18 @@ void AnimatedTexture::_bind_methods() {
 	BIND_CONSTANT(MAX_FRAMES);
 	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() {
 AnimatedTexture::AnimatedTexture() {
 	//proxy = RS::get_singleton()->texture_create();
 	//proxy = RS::get_singleton()->texture_create();
 	proxy_ph = RS::get_singleton()->texture_2d_placeholder_create();
 	proxy_ph = RS::get_singleton()->texture_2d_placeholder_create();
 	proxy = RS::get_singleton()->texture_proxy_create(proxy_ph);
 	proxy = RS::get_singleton()->texture_proxy_create(proxy_ph);
 
 
 	RenderingServer::get_singleton()->texture_set_force_redraw_if_visible(proxy, true);
 	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() {
 AnimatedTexture::~AnimatedTexture() {

+ 1 - 0
scene/resources/animated_texture.h

@@ -65,6 +65,7 @@ private:
 	uint64_t prev_ticks = 0;
 	uint64_t prev_ticks = 0;
 
 
 	void _update_proxy();
 	void _update_proxy();
+	void _finish_non_thread_safe_setup();
 
 
 protected:
 protected:
 	static void _bind_methods();
 	static void _bind_methods();