diff --git a/scene/resources/gradient_texture.cpp b/scene/resources/gradient_texture.cpp index 62751ef92f90..327a99c6ad92 100644 --- a/scene/resources/gradient_texture.cpp +++ b/scene/resources/gradient_texture.cpp @@ -64,11 +64,11 @@ void GradientTexture1D::set_gradient(Ref p_gradient) { return; } if (gradient.is_valid()) { - gradient->disconnect_changed(callable_mp(this, &GradientTexture1D::_update)); + gradient->disconnect_changed(callable_mp(this, &GradientTexture1D::_queue_update)); } gradient = p_gradient; if (gradient.is_valid()) { - gradient->connect_changed(callable_mp(this, &GradientTexture1D::_update)); + gradient->connect_changed(callable_mp(this, &GradientTexture1D::_queue_update)); } _queue_update(); emit_changed(); @@ -164,6 +164,13 @@ bool GradientTexture1D::is_using_hdr() const { return use_hdr; } +RID GradientTexture1D::get_rid() const { + if (!texture.is_valid()) { + texture = RS::get_singleton()->texture_2d_placeholder_create(); + } + return texture; +} + Ref GradientTexture1D::get_image() const { const_cast(this)->update_now(); if (!texture.is_valid()) { diff --git a/scene/resources/gradient_texture.h b/scene/resources/gradient_texture.h index d39faf69ed5b..761e8d995b66 100644 --- a/scene/resources/gradient_texture.h +++ b/scene/resources/gradient_texture.h @@ -39,7 +39,7 @@ class GradientTexture1D : public Texture2D { private: Ref gradient; bool update_pending = false; - RID texture; + mutable RID texture; int width = 256; bool use_hdr = false; @@ -59,7 +59,7 @@ class GradientTexture1D : public Texture2D { void set_use_hdr(bool p_enabled); bool is_using_hdr() const; - virtual RID get_rid() const override { return texture; } + virtual RID get_rid() const override; virtual int get_height() const override { return 1; } virtual bool has_alpha() const override { return true; }