From ff089f8cea5ac874f1d81f73c6ac83a1b4715858 Mon Sep 17 00:00:00 2001 From: jsjtxietian Date: Fri, 19 Jan 2024 12:32:44 +0800 Subject: [PATCH] Check is the ref shader valid in visual shader's update_option_menu --- editor/plugins/visual_shader_editor_plugin.cpp | 2 +- scene/resources/visual_shader.cpp | 4 ++++ scene/resources/visual_shader.h | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp index 89fff008ea34..bc02232b3575 100644 --- a/editor/plugins/visual_shader_editor_plugin.cpp +++ b/editor/plugins/visual_shader_editor_plugin.cpp @@ -1791,7 +1791,7 @@ void VisualShaderEditor::_update_options_menu() { } Ref parameter_ref = Object::cast_to(vsn.ptr()); - if (parameter_ref.is_valid()) { + if (parameter_ref.is_valid() && parameter_ref->is_shader_valid()) { check_result = -1; if (members_input_port_type != VisualShaderNode::PORT_TYPE_MAX) { diff --git a/scene/resources/visual_shader.cpp b/scene/resources/visual_shader.cpp index 41660767abb1..2ed859617aba 100644 --- a/scene/resources/visual_shader.cpp +++ b/scene/resources/visual_shader.cpp @@ -3591,6 +3591,10 @@ String VisualShaderNodeParameterRef::get_output_port_name(int p_port) const { return ""; } +bool VisualShaderNodeParameterRef::is_shader_valid() const { + return shader_rid.is_valid(); +} + void VisualShaderNodeParameterRef::set_shader_rid(const RID &p_shader_rid) { shader_rid = p_shader_rid; } diff --git a/scene/resources/visual_shader.h b/scene/resources/visual_shader.h index 7faebb86ab80..d4d77e7609c4 100644 --- a/scene/resources/visual_shader.h +++ b/scene/resources/visual_shader.h @@ -640,6 +640,7 @@ class VisualShaderNodeParameterRef : public VisualShaderNode { virtual PortType get_output_port_type(int p_port) const override; virtual String get_output_port_name(int p_port) const override; + bool is_shader_valid() const; void set_shader_rid(const RID &p_shader); void set_parameter_name(const String &p_name);