From 02857570d396b9c94297d2fa041f28e2b445a6e0 Mon Sep 17 00:00:00 2001 From: kobewi Date: Thu, 31 Aug 2023 15:53:32 +0200 Subject: [PATCH] Add placeholder RID to GradientTexture1D --- scene/resources/gradient_texture.cpp | 11 +++++++++-- scene/resources/gradient_texture.h | 4 ++-- 2 files changed, 11 insertions(+), 4 deletions(-) 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; }