summaryrefslogtreecommitdiffstats
path: root/scene/resources/visual_shader_nodes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/resources/visual_shader_nodes.cpp')
-rw-r--r--scene/resources/visual_shader_nodes.cpp79
1 files changed, 79 insertions, 0 deletions
diff --git a/scene/resources/visual_shader_nodes.cpp b/scene/resources/visual_shader_nodes.cpp
index ccd730eef2..d5394c8af5 100644
--- a/scene/resources/visual_shader_nodes.cpp
+++ b/scene/resources/visual_shader_nodes.cpp
@@ -8150,3 +8150,82 @@ VisualShaderNodeRotationByAxis::VisualShaderNodeRotationByAxis() {
simple_decl = false;
}
+
+String VisualShaderNodeReroute::get_caption() const {
+ return "Reroute";
+}
+
+int VisualShaderNodeReroute::get_input_port_count() const {
+ return 1;
+}
+
+VisualShaderNodeReroute::PortType VisualShaderNodeReroute::get_input_port_type(int p_port) const {
+ return input_port_type;
+}
+
+String VisualShaderNodeReroute::get_input_port_name(int p_port) const {
+ return String();
+}
+
+int VisualShaderNodeReroute::get_output_port_count() const {
+ return 1;
+}
+
+VisualShaderNodeReroute::PortType VisualShaderNodeReroute::get_output_port_type(int p_port) const {
+ return input_port_type;
+}
+
+String VisualShaderNodeReroute::get_output_port_name(int p_port) const {
+ return String();
+}
+
+String VisualShaderNodeReroute::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const {
+ String code;
+ for (int i = 0; i < get_output_port_count(); i++) {
+ if (input_port_type == PORT_TYPE_SAMPLER) {
+ continue;
+ }
+
+ String input = p_input_vars[0];
+ if (input.is_empty()) {
+ code += vformat(" %s;\n", p_output_vars[i]);
+ continue;
+ }
+ code += vformat(" %s = %s;\n", p_output_vars[i], input);
+ }
+ return code;
+}
+
+void VisualShaderNodeReroute::_set_port_type(PortType p_type) {
+ input_port_type = p_type;
+ switch (p_type) {
+ case PORT_TYPE_SCALAR:
+ set_input_port_default_value(0, 0.0);
+ break;
+ case PORT_TYPE_VECTOR_2D:
+ set_input_port_default_value(0, Vector2());
+ break;
+ case PORT_TYPE_VECTOR_3D:
+ set_input_port_default_value(0, Vector3());
+ break;
+ case PORT_TYPE_VECTOR_4D:
+ set_input_port_default_value(0, Vector4());
+ break;
+ case PORT_TYPE_TRANSFORM:
+ set_input_port_default_value(0, Transform3D());
+ break;
+ default:
+ break;
+ }
+}
+
+void VisualShaderNodeReroute::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("_set_port_type", "port_type"), &VisualShaderNodeReroute::_set_port_type);
+ ClassDB::bind_method(D_METHOD("get_port_type"), &VisualShaderNodeReroute::get_port_type);
+
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "port_type", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_port_type", "get_port_type");
+}
+
+VisualShaderNodeReroute::VisualShaderNodeReroute() {
+ set_input_port_default_value(0, 0.0);
+}