You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-11 13:10:58 +00:00
Fix auto-connection from output node to input (VisualShaders)
This commit is contained in:
@@ -2315,6 +2315,13 @@ void VisualShaderEditor::_add_node(int p_idx, int p_op_idx, String p_resource_pa
|
|||||||
undo_redo->add_do_method(graph_plugin.ptr(), "connect_nodes", type, _from_node, _from_slot, to_node, to_slot);
|
undo_redo->add_do_method(graph_plugin.ptr(), "connect_nodes", type, _from_node, _from_slot, to_node, to_slot);
|
||||||
undo_redo->add_undo_method(graph_plugin.ptr(), "disconnect_nodes", type, _from_node, _from_slot, to_node, to_slot);
|
undo_redo->add_undo_method(graph_plugin.ptr(), "disconnect_nodes", type, _from_node, _from_slot, to_node, to_slot);
|
||||||
} else {
|
} else {
|
||||||
|
// Need to setting up Input node properly before committing since `is_port_types_compatible` (calling below) is using `mode` and `shader_type`.
|
||||||
|
VisualShaderNodeInput *input = Object::cast_to<VisualShaderNodeInput>(vsnode.ptr());
|
||||||
|
if (input) {
|
||||||
|
input->set_shader_mode(visual_shader->get_mode());
|
||||||
|
input->set_shader_type(visual_shader->get_shader_type());
|
||||||
|
}
|
||||||
|
|
||||||
// Attempting to connect to the first correct port.
|
// Attempting to connect to the first correct port.
|
||||||
for (int i = 0; i < vsnode->get_output_port_count(); i++) {
|
for (int i = 0; i < vsnode->get_output_port_count(); i++) {
|
||||||
if (visual_shader->is_port_types_compatible(vsnode->get_output_port_type(i), input_port_type)) {
|
if (visual_shader->is_port_types_compatible(vsnode->get_output_port_type(i), input_port_type)) {
|
||||||
|
|||||||
@@ -2533,6 +2533,14 @@ Vector<StringName> VisualShaderNodeInput::get_editable_properties() const {
|
|||||||
return props;
|
return props;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VisualShaderNodeInput::set_shader_type(VisualShader::Type p_shader_type) {
|
||||||
|
shader_type = p_shader_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
void VisualShaderNodeInput::set_shader_mode(Shader::Mode p_shader_mode) {
|
||||||
|
shader_mode = p_shader_mode;
|
||||||
|
}
|
||||||
|
|
||||||
void VisualShaderNodeInput::_bind_methods() {
|
void VisualShaderNodeInput::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("set_input_name", "name"), &VisualShaderNodeInput::set_input_name);
|
ClassDB::bind_method(D_METHOD("set_input_name", "name"), &VisualShaderNodeInput::set_input_name);
|
||||||
ClassDB::bind_method(D_METHOD("get_input_name"), &VisualShaderNodeInput::get_input_name);
|
ClassDB::bind_method(D_METHOD("get_input_name"), &VisualShaderNodeInput::get_input_name);
|
||||||
|
|||||||
@@ -350,6 +350,10 @@ class VisualShaderNodeInput : public VisualShaderNode {
|
|||||||
|
|
||||||
String input_name = "[None]";
|
String input_name = "[None]";
|
||||||
|
|
||||||
|
public:
|
||||||
|
void set_shader_type(VisualShader::Type p_shader_type);
|
||||||
|
void set_shader_mode(Shader::Mode p_shader_mode);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
void _validate_property(PropertyInfo &property) const override;
|
void _validate_property(PropertyInfo &property) const override;
|
||||||
|
|||||||
Reference in New Issue
Block a user