Browse Source

Check is the ref shader valid in visual shader's update_option_menu

jsjtxietian 1 year ago
parent
commit
ff089f8cea

+ 1 - 1
editor/plugins/visual_shader_editor_plugin.cpp

@@ -1791,7 +1791,7 @@ void VisualShaderEditor::_update_options_menu() {
 					}
 					}
 
 
 					Ref<VisualShaderNodeParameterRef> parameter_ref = Object::cast_to<VisualShaderNodeParameterRef>(vsn.ptr());
 					Ref<VisualShaderNodeParameterRef> parameter_ref = Object::cast_to<VisualShaderNodeParameterRef>(vsn.ptr());
-					if (parameter_ref.is_valid()) {
+					if (parameter_ref.is_valid() && parameter_ref->is_shader_valid()) {
 						check_result = -1;
 						check_result = -1;
 
 
 						if (members_input_port_type != VisualShaderNode::PORT_TYPE_MAX) {
 						if (members_input_port_type != VisualShaderNode::PORT_TYPE_MAX) {

+ 4 - 0
scene/resources/visual_shader.cpp

@@ -3591,6 +3591,10 @@ String VisualShaderNodeParameterRef::get_output_port_name(int p_port) const {
 	return "";
 	return "";
 }
 }
 
 
+bool VisualShaderNodeParameterRef::is_shader_valid() const {
+	return shader_rid.is_valid();
+}
+
 void VisualShaderNodeParameterRef::set_shader_rid(const RID &p_shader_rid) {
 void VisualShaderNodeParameterRef::set_shader_rid(const RID &p_shader_rid) {
 	shader_rid = p_shader_rid;
 	shader_rid = p_shader_rid;
 }
 }

+ 1 - 0
scene/resources/visual_shader.h

@@ -640,6 +640,7 @@ public:
 	virtual PortType get_output_port_type(int p_port) const override;
 	virtual PortType get_output_port_type(int p_port) const override;
 	virtual String get_output_port_name(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_shader_rid(const RID &p_shader);
 
 
 	void set_parameter_name(const String &p_name);
 	void set_parameter_name(const String &p_name);