mirror of
https://github.com/godotengine/godot.git
synced 2024-11-22 04:06:14 +00:00
Merge pull request #36536 from Chaosus/vs_int
Add support for integer type in visual shaders
This commit is contained in:
commit
1e57b558f2
@ -61,19 +61,22 @@
|
||||
<constant name="PORT_TYPE_SCALAR" value="0" enum="PortType">
|
||||
Floating-point scalar. Translated to [code]float[/code] type in shader code.
|
||||
</constant>
|
||||
<constant name="PORT_TYPE_VECTOR" value="1" enum="PortType">
|
||||
<constant name="PORT_TYPE_SCALAR_INT" value="1" enum="PortType">
|
||||
Integer scalar. Translated to [code]int[/code] type in shader code.
|
||||
</constant>
|
||||
<constant name="PORT_TYPE_VECTOR" value="2" enum="PortType">
|
||||
3D vector of floating-point values. Translated to [code]vec3[/code] type in shader code.
|
||||
</constant>
|
||||
<constant name="PORT_TYPE_BOOLEAN" value="2" enum="PortType">
|
||||
<constant name="PORT_TYPE_BOOLEAN" value="3" enum="PortType">
|
||||
Boolean type. Translated to [code]bool[/code] type in shader code.
|
||||
</constant>
|
||||
<constant name="PORT_TYPE_TRANSFORM" value="3" enum="PortType">
|
||||
<constant name="PORT_TYPE_TRANSFORM" value="4" enum="PortType">
|
||||
Transform type. Translated to [code]mat4[/code] type in shader code.
|
||||
</constant>
|
||||
<constant name="PORT_TYPE_SAMPLER" value="4" enum="PortType">
|
||||
<constant name="PORT_TYPE_SAMPLER" value="5" enum="PortType">
|
||||
Sampler type. Translated to reference of sampler uniform in shader code. Can only be used for input ports in non-uniform nodes.
|
||||
</constant>
|
||||
<constant name="PORT_TYPE_MAX" value="5" enum="PortType">
|
||||
<constant name="PORT_TYPE_MAX" value="6" enum="PortType">
|
||||
Represents the size of the [enum PortType] enum.
|
||||
</constant>
|
||||
</constants>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeScalarConstant" inherits="VisualShaderNode" version="4.0">
|
||||
<class name="VisualShaderNodeFloatConstant" inherits="VisualShaderNode" version="4.0">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeScalarFunc" inherits="VisualShaderNode" version="4.0">
|
||||
<class name="VisualShaderNodeFloatFunc" inherits="VisualShaderNode" version="4.0">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
@ -9,7 +9,7 @@
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeScalarFunc.Function" default="13">
|
||||
<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeFloatFunc.Function" default="13">
|
||||
</member>
|
||||
</members>
|
||||
<constants>
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeScalarOp" inherits="VisualShaderNode" version="4.0">
|
||||
<class name="VisualShaderNodeFloatOp" inherits="VisualShaderNode" version="4.0">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
@ -9,7 +9,7 @@
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeScalarOp.Operator" default="0">
|
||||
<member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeFloatOp.Operator" default="0">
|
||||
</member>
|
||||
</members>
|
||||
<constants>
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeScalarUniform" inherits="VisualShaderNodeUniform" version="4.0">
|
||||
<class name="VisualShaderNodeFloatUniform" inherits="VisualShaderNodeUniform" version="4.0">
|
||||
<brief_description>
|
||||
A scalar uniform to be used within the visual shader graph.
|
||||
A scalar float uniform to be used within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
Translated to [code]uniform float[/code] in the shader language.
|
||||
@ -11,7 +11,7 @@
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="hint" type="int" setter="set_hint" getter="get_hint" enum="VisualShaderNodeScalarUniform.Hint" default="0">
|
||||
<member name="hint" type="int" setter="set_hint" getter="get_hint" enum="VisualShaderNodeFloatUniform.Hint" default="0">
|
||||
A hint applied to the uniform, which controls the values it can take when set through the inspector.
|
||||
</member>
|
||||
<member name="max" type="float" setter="set_max" getter="get_max" default="1.0">
|
17
doc/classes/VisualShaderNodeIntConstant.xml
Normal file
17
doc/classes/VisualShaderNodeIntConstant.xml
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeIntConstant" inherits="VisualShaderNode" version="4.0">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="constant" type="int" setter="set_constant" getter="get_constant" default="0">
|
||||
</member>
|
||||
</members>
|
||||
<constants>
|
||||
</constants>
|
||||
</class>
|
25
doc/classes/VisualShaderNodeIntFunc.xml
Normal file
25
doc/classes/VisualShaderNodeIntFunc.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeIntFunc" inherits="VisualShaderNode" version="4.0">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeIntFunc.Function" default="0">
|
||||
</member>
|
||||
</members>
|
||||
<constants>
|
||||
<constant name="FUNC_ABS" value="0" enum="Function">
|
||||
</constant>
|
||||
<constant name="FUNC_CLAMP" value="1" enum="Function">
|
||||
</constant>
|
||||
<constant name="FUNC_NEGATE" value="2" enum="Function">
|
||||
</constant>
|
||||
<constant name="FUNC_SIGN" value="3" enum="Function">
|
||||
</constant>
|
||||
</constants>
|
||||
</class>
|
31
doc/classes/VisualShaderNodeIntOp.xml
Normal file
31
doc/classes/VisualShaderNodeIntOp.xml
Normal file
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeIntOp" inherits="VisualShaderNode" version="4.0">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeIntOp.Operator" default="0">
|
||||
</member>
|
||||
</members>
|
||||
<constants>
|
||||
<constant name="OP_ADD" value="0" enum="Operator">
|
||||
</constant>
|
||||
<constant name="OP_SUB" value="1" enum="Operator">
|
||||
</constant>
|
||||
<constant name="OP_MUL" value="2" enum="Operator">
|
||||
</constant>
|
||||
<constant name="OP_DIV" value="3" enum="Operator">
|
||||
</constant>
|
||||
<constant name="OP_MOD" value="4" enum="Operator">
|
||||
</constant>
|
||||
<constant name="OP_MAX" value="5" enum="Operator">
|
||||
</constant>
|
||||
<constant name="OP_MIN" value="6" enum="Operator">
|
||||
</constant>
|
||||
</constants>
|
||||
</class>
|
38
doc/classes/VisualShaderNodeIntUniform.xml
Normal file
38
doc/classes/VisualShaderNodeIntUniform.xml
Normal file
@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeIntUniform" inherits="VisualShaderNodeUniform" version="4.0">
|
||||
<brief_description>
|
||||
A scalar integer uniform to be used within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
Translated to [code]uniform int[/code] in the shader language.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="hint" type="int" setter="set_hint" getter="get_hint" enum="VisualShaderNodeIntUniform.Hint" default="0">
|
||||
A hint applied to the uniform, which controls the values it can take when set through the inspector.
|
||||
</member>
|
||||
<member name="max" type="int" setter="set_max" getter="get_max" default="100">
|
||||
Minimum value for range hints. Used if [member hint] is set to [constant HINT_RANGE] or [constant HINT_RANGE_STEP].
|
||||
</member>
|
||||
<member name="min" type="int" setter="set_min" getter="get_min" default="0">
|
||||
Maximum value for range hints. Used if [member hint] is set to [constant HINT_RANGE] or [constant HINT_RANGE_STEP].
|
||||
</member>
|
||||
<member name="step" type="int" setter="set_step" getter="get_step" default="1">
|
||||
Step (increment) value for the range hint with step. Used if [member hint] is set to [constant HINT_RANGE_STEP].
|
||||
</member>
|
||||
</members>
|
||||
<constants>
|
||||
<constant name="HINT_NONE" value="0" enum="Hint">
|
||||
No hint used.
|
||||
</constant>
|
||||
<constant name="HINT_RANGE" value="1" enum="Hint">
|
||||
A range hint for scalar value, which limits possible input values between [member min] and [member max]. Translated to [code]hint_range(min, max)[/code] in shader code.
|
||||
</constant>
|
||||
<constant name="HINT_RANGE_STEP" value="2" enum="Hint">
|
||||
A range hint for scalar value with step, which limits possible input values between [member min] and [member max], with a step (increment) of [member step]). Translated to [code]hint_range(min, max, step)[/code] in shader code.
|
||||
</constant>
|
||||
</constants>
|
||||
</class>
|
@ -35,6 +35,7 @@
|
||||
#include "core/os/input.h"
|
||||
#include "core/os/keyboard.h"
|
||||
#include "core/project_settings.h"
|
||||
#include "core/version.h"
|
||||
#include "editor/editor_log.h"
|
||||
#include "editor/editor_properties.h"
|
||||
#include "editor/editor_scale.h"
|
||||
@ -75,6 +76,12 @@ void VisualShaderEditor::edit(VisualShader *p_visual_shader) {
|
||||
if (!visual_shader->is_connected_compat("changed", this, "_update_preview")) {
|
||||
visual_shader->connect_compat("changed", this, "_update_preview");
|
||||
}
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
String version = VERSION_BRANCH;
|
||||
if (visual_shader->get_version() != version) {
|
||||
visual_shader->update_version(version);
|
||||
}
|
||||
#endif
|
||||
visual_shader->set_graph_offset(graph->get_scroll_ofs() / EDSCALE);
|
||||
} else {
|
||||
if (visual_shader.is_valid()) {
|
||||
@ -380,6 +387,9 @@ void VisualShaderEditor::_update_options_menu() {
|
||||
case VisualShaderNode::PORT_TYPE_SCALAR:
|
||||
item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("float", "EditorIcons"));
|
||||
break;
|
||||
case VisualShaderNode::PORT_TYPE_SCALAR_INT:
|
||||
item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("int", "EditorIcons"));
|
||||
break;
|
||||
case VisualShaderNode::PORT_TYPE_VECTOR:
|
||||
item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("Vector3", "EditorIcons"));
|
||||
break;
|
||||
@ -462,12 +472,13 @@ void VisualShaderEditor::_update_graph() {
|
||||
}
|
||||
}
|
||||
|
||||
static const Color type_color[5] = {
|
||||
Color(0.38, 0.85, 0.96), // scalar
|
||||
static const Color type_color[6] = {
|
||||
Color(0.38, 0.85, 0.96), // scalar (float)
|
||||
Color(0.49, 0.78, 0.94), // scalar (int)
|
||||
Color(0.84, 0.49, 0.93), // vector
|
||||
Color(0.55, 0.65, 0.94), // boolean
|
||||
Color(0.96, 0.66, 0.43), // transform
|
||||
Color(1.0, 1.0, 0.0) // sampler
|
||||
Color(1.0, 1.0, 0.0), // sampler
|
||||
};
|
||||
|
||||
List<VisualShader::Connection> connections;
|
||||
@ -528,7 +539,8 @@ void VisualShaderEditor::_update_graph() {
|
||||
}
|
||||
|
||||
Ref<VisualShaderNodeUniform> uniform = vsnode;
|
||||
Ref<VisualShaderNodeScalarUniform> scalar_uniform = vsnode;
|
||||
Ref<VisualShaderNodeFloatUniform> float_uniform = vsnode;
|
||||
Ref<VisualShaderNodeIntUniform> int_uniform = vsnode;
|
||||
if (uniform.is_valid()) {
|
||||
graph->add_child(node);
|
||||
_update_created_node(node);
|
||||
@ -543,7 +555,7 @@ void VisualShaderEditor::_update_graph() {
|
||||
//shortcut
|
||||
VisualShaderNode::PortType port_right = vsnode->get_output_port_type(0);
|
||||
node->set_slot(0, false, VisualShaderNode::PORT_TYPE_SCALAR, Color(), true, port_right, type_color[port_right]);
|
||||
if (!scalar_uniform.is_valid()) {
|
||||
if (!float_uniform.is_valid() && !int_uniform.is_valid()) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -557,13 +569,13 @@ void VisualShaderEditor::_update_graph() {
|
||||
}
|
||||
}
|
||||
|
||||
if (custom_editor && !scalar_uniform.is_valid() && vsnode->get_output_port_count() > 0 && vsnode->get_output_port_name(0) == "" && (vsnode->get_input_port_count() == 0 || vsnode->get_input_port_name(0) == "")) {
|
||||
if (custom_editor && !float_uniform.is_valid() && !int_uniform.is_valid() && vsnode->get_output_port_count() > 0 && vsnode->get_output_port_name(0) == "" && (vsnode->get_input_port_count() == 0 || vsnode->get_input_port_name(0) == "")) {
|
||||
//will be embedded in first port
|
||||
} else if (custom_editor) {
|
||||
|
||||
port_offset++;
|
||||
node->add_child(custom_editor);
|
||||
if (scalar_uniform.is_valid()) {
|
||||
if (float_uniform.is_valid() || int_uniform.is_valid()) {
|
||||
custom_editor->call_deferred("_show_prop_names", true);
|
||||
continue;
|
||||
}
|
||||
@ -670,7 +682,8 @@ void VisualShaderEditor::_update_graph() {
|
||||
if (is_group) {
|
||||
OptionButton *type_box = memnew(OptionButton);
|
||||
hb->add_child(type_box);
|
||||
type_box->add_item(TTR("Scalar"));
|
||||
type_box->add_item(TTR("Float"));
|
||||
type_box->add_item(TTR("Int"));
|
||||
type_box->add_item(TTR("Vector"));
|
||||
type_box->add_item(TTR("Boolean"));
|
||||
type_box->add_item(TTR("Transform"));
|
||||
@ -732,7 +745,8 @@ void VisualShaderEditor::_update_graph() {
|
||||
|
||||
OptionButton *type_box = memnew(OptionButton);
|
||||
hb->add_child(type_box);
|
||||
type_box->add_item(TTR("Scalar"));
|
||||
type_box->add_item(TTR("Float"));
|
||||
type_box->add_item(TTR("Int"));
|
||||
type_box->add_item(TTR("Vector"));
|
||||
type_box->add_item(TTR("Boolean"));
|
||||
type_box->add_item(TTR("Transform"));
|
||||
@ -1295,7 +1309,7 @@ VisualShaderNode *VisualShaderEditor::_add_node(int p_idx, int p_op_idx) {
|
||||
VisualShaderNode *vsn = Object::cast_to<VisualShaderNode>(ClassDB::instance(add_options[p_idx].type));
|
||||
ERR_FAIL_COND_V(!vsn, NULL);
|
||||
|
||||
VisualShaderNodeScalarConstant *constant = Object::cast_to<VisualShaderNodeScalarConstant>(vsn);
|
||||
VisualShaderNodeFloatConstant *constant = Object::cast_to<VisualShaderNodeFloatConstant>(vsn);
|
||||
|
||||
if (constant) {
|
||||
if ((int)add_options[p_idx].value != -1)
|
||||
@ -1334,16 +1348,28 @@ VisualShaderNode *VisualShaderEditor::_add_node(int p_idx, int p_op_idx) {
|
||||
colorFunc->set_function((VisualShaderNodeColorFunc::Function)p_op_idx);
|
||||
}
|
||||
|
||||
VisualShaderNodeScalarOp *scalarOp = Object::cast_to<VisualShaderNodeScalarOp>(vsn);
|
||||
VisualShaderNodeFloatOp *floatOp = Object::cast_to<VisualShaderNodeFloatOp>(vsn);
|
||||
|
||||
if (scalarOp) {
|
||||
scalarOp->set_operator((VisualShaderNodeScalarOp::Operator)p_op_idx);
|
||||
if (floatOp) {
|
||||
floatOp->set_operator((VisualShaderNodeFloatOp::Operator)p_op_idx);
|
||||
}
|
||||
|
||||
VisualShaderNodeScalarFunc *scalarFunc = Object::cast_to<VisualShaderNodeScalarFunc>(vsn);
|
||||
VisualShaderNodeIntOp *intOp = Object::cast_to<VisualShaderNodeIntOp>(vsn);
|
||||
|
||||
if (scalarFunc) {
|
||||
scalarFunc->set_function((VisualShaderNodeScalarFunc::Function)p_op_idx);
|
||||
if (intOp) {
|
||||
intOp->set_operator((VisualShaderNodeIntOp::Operator)p_op_idx);
|
||||
}
|
||||
|
||||
VisualShaderNodeFloatFunc *floatFunc = Object::cast_to<VisualShaderNodeFloatFunc>(vsn);
|
||||
|
||||
if (floatFunc) {
|
||||
floatFunc->set_function((VisualShaderNodeFloatFunc::Function)p_op_idx);
|
||||
}
|
||||
|
||||
VisualShaderNodeIntFunc *intFunc = Object::cast_to<VisualShaderNodeIntFunc>(vsn);
|
||||
|
||||
if (intFunc) {
|
||||
intFunc->set_function((VisualShaderNodeIntFunc::Function)p_op_idx);
|
||||
}
|
||||
|
||||
VisualShaderNodeVectorOp *vecOp = Object::cast_to<VisualShaderNodeVectorOp>(vsn);
|
||||
@ -2290,6 +2316,7 @@ VisualShaderEditor::VisualShaderEditor() {
|
||||
main_box->add_child(graph);
|
||||
graph->set_drag_forwarding(this);
|
||||
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_SCALAR);
|
||||
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_SCALAR_INT);
|
||||
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_BOOLEAN);
|
||||
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_VECTOR);
|
||||
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_TRANSFORM);
|
||||
@ -2308,12 +2335,19 @@ VisualShaderEditor::VisualShaderEditor() {
|
||||
graph->connect_compat("connection_to_empty", this, "_connection_to_empty");
|
||||
graph->connect_compat("connection_from_empty", this, "_connection_from_empty");
|
||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_SCALAR, VisualShaderNode::PORT_TYPE_SCALAR);
|
||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_SCALAR, VisualShaderNode::PORT_TYPE_SCALAR_INT);
|
||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_SCALAR, VisualShaderNode::PORT_TYPE_VECTOR);
|
||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_SCALAR, VisualShaderNode::PORT_TYPE_BOOLEAN);
|
||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_SCALAR_INT, VisualShaderNode::PORT_TYPE_SCALAR_INT);
|
||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_SCALAR_INT, VisualShaderNode::PORT_TYPE_SCALAR);
|
||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_SCALAR_INT, VisualShaderNode::PORT_TYPE_VECTOR);
|
||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_SCALAR_INT, VisualShaderNode::PORT_TYPE_BOOLEAN);
|
||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_VECTOR, VisualShaderNode::PORT_TYPE_SCALAR);
|
||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_VECTOR, VisualShaderNode::PORT_TYPE_SCALAR_INT);
|
||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_VECTOR, VisualShaderNode::PORT_TYPE_VECTOR);
|
||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_VECTOR, VisualShaderNode::PORT_TYPE_BOOLEAN);
|
||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_BOOLEAN, VisualShaderNode::PORT_TYPE_SCALAR);
|
||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_BOOLEAN, VisualShaderNode::PORT_TYPE_SCALAR_INT);
|
||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_BOOLEAN, VisualShaderNode::PORT_TYPE_VECTOR);
|
||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_BOOLEAN, VisualShaderNode::PORT_TYPE_BOOLEAN);
|
||||
graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_TRANSFORM, VisualShaderNode::PORT_TYPE_TRANSFORM);
|
||||
@ -2611,71 +2645,84 @@ VisualShaderEditor::VisualShaderEditor() {
|
||||
|
||||
// SCALAR
|
||||
|
||||
add_options.push_back(AddOption("ScalarFunc", "Scalar", "Common", "VisualShaderNodeScalarFunc", TTR("Scalar function."), -1, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("ScalarOp", "Scalar", "Common", "VisualShaderNodeScalarOp", TTR("Scalar operator."), -1, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("FloatFunc", "Scalar", "Common", "VisualShaderNodeFloatFunc", TTR("Float function."), -1, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("IntFunc", "Scalar", "Common", "VisualShaderNodeIntFunc", TTR("Integer function."), -1, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
add_options.push_back(AddOption("FloatOp", "Scalar", "Common", "VisualShaderNodeFloatOp", TTR("Float operator."), -1, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("IntOp", "Scalar", "Common", "VisualShaderNodeIntOp", TTR("Integer operator."), -1, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
|
||||
//CONSTANTS
|
||||
|
||||
add_options.push_back(AddOption("E", "Scalar", "Constants", "VisualShaderNodeScalarConstant", TTR("E constant (2.718282). Represents the base of the natural logarithm."), -1, VisualShaderNode::PORT_TYPE_SCALAR, -1, -1, Math_E));
|
||||
add_options.push_back(AddOption("Epsilon", "Scalar", "Constants", "VisualShaderNodeScalarConstant", TTR("Epsilon constant (0.00001). Smallest possible scalar number."), -1, VisualShaderNode::PORT_TYPE_SCALAR, -1, -1, CMP_EPSILON));
|
||||
add_options.push_back(AddOption("Phi", "Scalar", "Constants", "VisualShaderNodeScalarConstant", TTR("Phi constant (1.618034). Golden ratio."), -1, VisualShaderNode::PORT_TYPE_SCALAR, -1, -1, 1.618034f));
|
||||
add_options.push_back(AddOption("Pi/4", "Scalar", "Constants", "VisualShaderNodeScalarConstant", TTR("Pi/4 constant (0.785398) or 45 degrees."), -1, VisualShaderNode::PORT_TYPE_SCALAR, -1, -1, Math_PI / 4));
|
||||
add_options.push_back(AddOption("Pi/2", "Scalar", "Constants", "VisualShaderNodeScalarConstant", TTR("Pi/2 constant (1.570796) or 90 degrees."), -1, VisualShaderNode::PORT_TYPE_SCALAR, -1, -1, Math_PI / 2));
|
||||
add_options.push_back(AddOption("Pi", "Scalar", "Constants", "VisualShaderNodeScalarConstant", TTR("Pi constant (3.141593) or 180 degrees."), -1, VisualShaderNode::PORT_TYPE_SCALAR, -1, -1, Math_PI));
|
||||
add_options.push_back(AddOption("Tau", "Scalar", "Constants", "VisualShaderNodeScalarConstant", TTR("Tau constant (6.283185) or 360 degrees."), -1, VisualShaderNode::PORT_TYPE_SCALAR, -1, -1, Math_TAU));
|
||||
add_options.push_back(AddOption("Sqrt2", "Scalar", "Constants", "VisualShaderNodeScalarConstant", TTR("Sqrt2 constant (1.414214). Square root of 2."), -1, VisualShaderNode::PORT_TYPE_SCALAR, -1, -1, Math_SQRT2));
|
||||
add_options.push_back(AddOption("E", "Scalar", "Constants", "VisualShaderNodeFloatConstant", TTR("E constant (2.718282). Represents the base of the natural logarithm."), -1, VisualShaderNode::PORT_TYPE_SCALAR, -1, -1, Math_E));
|
||||
add_options.push_back(AddOption("Epsilon", "Scalar", "Constants", "VisualShaderNodeFloatConstant", TTR("Epsilon constant (0.00001). Smallest possible scalar number."), -1, VisualShaderNode::PORT_TYPE_SCALAR, -1, -1, CMP_EPSILON));
|
||||
add_options.push_back(AddOption("Phi", "Scalar", "Constants", "VisualShaderNodeFloatConstant", TTR("Phi constant (1.618034). Golden ratio."), -1, VisualShaderNode::PORT_TYPE_SCALAR, -1, -1, 1.618034f));
|
||||
add_options.push_back(AddOption("Pi/4", "Scalar", "Constants", "VisualShaderNodeFloatConstant", TTR("Pi/4 constant (0.785398) or 45 degrees."), -1, VisualShaderNode::PORT_TYPE_SCALAR, -1, -1, Math_PI / 4));
|
||||
add_options.push_back(AddOption("Pi/2", "Scalar", "Constants", "VisualShaderNodeFloatConstant", TTR("Pi/2 constant (1.570796) or 90 degrees."), -1, VisualShaderNode::PORT_TYPE_SCALAR, -1, -1, Math_PI / 2));
|
||||
add_options.push_back(AddOption("Pi", "Scalar", "Constants", "VisualShaderNodeFloatConstant", TTR("Pi constant (3.141593) or 180 degrees."), -1, VisualShaderNode::PORT_TYPE_SCALAR, -1, -1, Math_PI));
|
||||
add_options.push_back(AddOption("Tau", "Scalar", "Constants", "VisualShaderNodeFloatConstant", TTR("Tau constant (6.283185) or 360 degrees."), -1, VisualShaderNode::PORT_TYPE_SCALAR, -1, -1, Math_TAU));
|
||||
add_options.push_back(AddOption("Sqrt2", "Scalar", "Constants", "VisualShaderNodeFloatConstant", TTR("Sqrt2 constant (1.414214). Square root of 2."), -1, VisualShaderNode::PORT_TYPE_SCALAR, -1, -1, Math_SQRT2));
|
||||
|
||||
// FUNCTIONS
|
||||
|
||||
add_options.push_back(AddOption("Abs", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Returns the absolute value of the parameter."), VisualShaderNodeScalarFunc::FUNC_ABS, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("ACos", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Returns the arc-cosine of the parameter."), VisualShaderNodeScalarFunc::FUNC_ACOS, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("ACosH", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Returns the inverse hyperbolic cosine of the parameter."), VisualShaderNodeScalarFunc::FUNC_ACOSH, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("ASin", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Returns the arc-sine of the parameter."), VisualShaderNodeScalarFunc::FUNC_ASIN, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("ASinH", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Returns the inverse hyperbolic sine of the parameter."), VisualShaderNodeScalarFunc::FUNC_ASINH, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("ATan", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Returns the arc-tangent of the parameter."), VisualShaderNodeScalarFunc::FUNC_ATAN, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("ATan2", "Scalar", "Functions", "VisualShaderNodeScalarOp", TTR("Returns the arc-tangent of the parameters."), VisualShaderNodeScalarOp::OP_ATAN2, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("ATanH", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Returns the inverse hyperbolic tangent of the parameter."), VisualShaderNodeScalarFunc::FUNC_ATANH, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Ceil", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Finds the nearest integer that is greater than or equal to the parameter."), VisualShaderNodeScalarFunc::FUNC_CEIL, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Abs", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Returns the absolute value of the parameter."), VisualShaderNodeFloatFunc::FUNC_ABS, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Abs", "Scalar", "Functions", "VisualShaderNodeIntFunc", TTR("Returns the absolute value of the parameter."), VisualShaderNodeIntFunc::FUNC_ABS, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
add_options.push_back(AddOption("ACos", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Returns the arc-cosine of the parameter."), VisualShaderNodeFloatFunc::FUNC_ACOS, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("ACosH", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Returns the inverse hyperbolic cosine of the parameter."), VisualShaderNodeFloatFunc::FUNC_ACOSH, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("ASin", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Returns the arc-sine of the parameter."), VisualShaderNodeFloatFunc::FUNC_ASIN, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("ASinH", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Returns the inverse hyperbolic sine of the parameter."), VisualShaderNodeFloatFunc::FUNC_ASINH, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("ATan", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Returns the arc-tangent of the parameter."), VisualShaderNodeFloatFunc::FUNC_ATAN, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("ATan2", "Scalar", "Functions", "VisualShaderNodeFloatOp", TTR("Returns the arc-tangent of the parameters."), VisualShaderNodeFloatOp::OP_ATAN2, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("ATanH", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Returns the inverse hyperbolic tangent of the parameter."), VisualShaderNodeFloatFunc::FUNC_ATANH, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Ceil", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Finds the nearest integer that is greater than or equal to the parameter."), VisualShaderNodeFloatFunc::FUNC_CEIL, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Clamp", "Scalar", "Functions", "VisualShaderNodeScalarClamp", TTR("Constrains a value to lie between two further values."), -1, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Cos", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Returns the cosine of the parameter."), VisualShaderNodeScalarFunc::FUNC_COS, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("CosH", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Returns the hyperbolic cosine of the parameter."), VisualShaderNodeScalarFunc::FUNC_COSH, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Degrees", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Converts a quantity in radians to degrees."), VisualShaderNodeScalarFunc::FUNC_DEGREES, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Exp", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Base-e Exponential."), VisualShaderNodeScalarFunc::FUNC_EXP, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Exp2", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Base-2 Exponential."), VisualShaderNodeScalarFunc::FUNC_EXP2, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Floor", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Finds the nearest integer less than or equal to the parameter."), VisualShaderNodeScalarFunc::FUNC_FLOOR, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Fract", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Computes the fractional part of the argument."), VisualShaderNodeScalarFunc::FUNC_FRAC, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("InverseSqrt", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Returns the inverse of the square root of the parameter."), VisualShaderNodeScalarFunc::FUNC_INVERSE_SQRT, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Log", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Natural logarithm."), VisualShaderNodeScalarFunc::FUNC_LOG, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Log2", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Base-2 logarithm."), VisualShaderNodeScalarFunc::FUNC_LOG2, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Max", "Scalar", "Functions", "VisualShaderNodeScalarOp", TTR("Returns the greater of two values."), VisualShaderNodeScalarOp::OP_MAX, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Min", "Scalar", "Functions", "VisualShaderNodeScalarOp", TTR("Returns the lesser of two values."), VisualShaderNodeScalarOp::OP_MIN, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Clamp", "Scalar", "Functions", "VisualShaderNodeIntFunc", TTR("Constrains a value to lie between two further values."), VisualShaderNodeIntFunc::FUNC_CLAMP, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
add_options.push_back(AddOption("Cos", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Returns the cosine of the parameter."), VisualShaderNodeFloatFunc::FUNC_COS, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("CosH", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Returns the hyperbolic cosine of the parameter."), VisualShaderNodeFloatFunc::FUNC_COSH, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Degrees", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Converts a quantity in radians to degrees."), VisualShaderNodeFloatFunc::FUNC_DEGREES, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Exp", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Base-e Exponential."), VisualShaderNodeFloatFunc::FUNC_EXP, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Exp2", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Base-2 Exponential."), VisualShaderNodeFloatFunc::FUNC_EXP2, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Floor", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Finds the nearest integer less than or equal to the parameter."), VisualShaderNodeFloatFunc::FUNC_FLOOR, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Fract", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Computes the fractional part of the argument."), VisualShaderNodeFloatFunc::FUNC_FRAC, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("InverseSqrt", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Returns the inverse of the square root of the parameter."), VisualShaderNodeFloatFunc::FUNC_INVERSE_SQRT, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Log", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Natural logarithm."), VisualShaderNodeFloatFunc::FUNC_LOG, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Log2", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Base-2 logarithm."), VisualShaderNodeFloatFunc::FUNC_LOG2, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Max", "Scalar", "Functions", "VisualShaderNodeFloatOp", TTR("Returns the greater of two values."), VisualShaderNodeFloatOp::OP_MAX, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Min", "Scalar", "Functions", "VisualShaderNodeFloatOp", TTR("Returns the lesser of two values."), VisualShaderNodeFloatOp::OP_MIN, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Mix", "Scalar", "Functions", "VisualShaderNodeScalarInterp", TTR("Linear interpolation between two scalars."), -1, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Negate", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Returns the opposite value of the parameter."), VisualShaderNodeScalarFunc::FUNC_NEGATE, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("OneMinus", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("1.0 - scalar"), VisualShaderNodeScalarFunc::FUNC_ONEMINUS, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Pow", "Scalar", "Functions", "VisualShaderNodeScalarOp", TTR("Returns the value of the first parameter raised to the power of the second."), VisualShaderNodeScalarOp::OP_POW, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Radians", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Converts a quantity in degrees to radians."), VisualShaderNodeScalarFunc::FUNC_RADIANS, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Reciprocal", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("1.0 / scalar"), VisualShaderNodeScalarFunc::FUNC_RECIPROCAL, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Round", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Finds the nearest integer to the parameter."), VisualShaderNodeScalarFunc::FUNC_ROUND, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("RoundEven", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Finds the nearest even integer to the parameter."), VisualShaderNodeScalarFunc::FUNC_ROUNDEVEN, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Saturate", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Clamps the value between 0.0 and 1.0."), VisualShaderNodeScalarFunc::FUNC_SATURATE, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Sign", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Extracts the sign of the parameter."), VisualShaderNodeScalarFunc::FUNC_SIGN, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Sin", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Returns the sine of the parameter."), VisualShaderNodeScalarFunc::FUNC_SIN, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("SinH", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Returns the hyperbolic sine of the parameter."), VisualShaderNodeScalarFunc::FUNC_SINH, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Sqrt", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Returns the square root of the parameter."), VisualShaderNodeScalarFunc::FUNC_SQRT, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Negate", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Returns the opposite value of the parameter."), VisualShaderNodeFloatFunc::FUNC_NEGATE, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Negate", "Scalar", "Functions", "VisualShaderNodeIntFunc", TTR("Returns the opposite value of the parameter."), VisualShaderNodeIntFunc::FUNC_NEGATE, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
add_options.push_back(AddOption("OneMinus", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("1.0 - scalar"), VisualShaderNodeFloatFunc::FUNC_ONEMINUS, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Pow", "Scalar", "Functions", "VisualShaderNodeFloatOp", TTR("Returns the value of the first parameter raised to the power of the second."), VisualShaderNodeFloatOp::OP_POW, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Radians", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Converts a quantity in degrees to radians."), VisualShaderNodeFloatFunc::FUNC_RADIANS, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Reciprocal", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("1.0 / scalar"), VisualShaderNodeFloatFunc::FUNC_RECIPROCAL, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Round", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Finds the nearest integer to the parameter."), VisualShaderNodeFloatFunc::FUNC_ROUND, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("RoundEven", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Finds the nearest even integer to the parameter."), VisualShaderNodeFloatFunc::FUNC_ROUNDEVEN, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Saturate", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Clamps the value between 0.0 and 1.0."), VisualShaderNodeFloatFunc::FUNC_SATURATE, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Sign", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Extracts the sign of the parameter."), VisualShaderNodeFloatFunc::FUNC_SIGN, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Sign", "Scalar", "Functions", "VisualShaderNodeIntFunc", TTR("Extracts the sign of the parameter."), VisualShaderNodeIntFunc::FUNC_SIGN, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
add_options.push_back(AddOption("Sin", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Returns the sine of the parameter."), VisualShaderNodeFloatFunc::FUNC_SIN, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("SinH", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Returns the hyperbolic sine of the parameter."), VisualShaderNodeFloatFunc::FUNC_SINH, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Sqrt", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Returns the square root of the parameter."), VisualShaderNodeFloatFunc::FUNC_SQRT, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("SmoothStep", "Scalar", "Functions", "VisualShaderNodeScalarSmoothStep", TTR("SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n\nReturns 0.0 if 'x' is smaller than 'edge0' and 1.0 if x is larger than 'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 using Hermite polynomials."), -1, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Step", "Scalar", "Functions", "VisualShaderNodeScalarOp", TTR("Step function( scalar(edge), scalar(x) ).\n\nReturns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."), VisualShaderNodeScalarOp::OP_STEP, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Tan", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Returns the tangent of the parameter."), VisualShaderNodeScalarFunc::FUNC_TAN, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("TanH", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Returns the hyperbolic tangent of the parameter."), VisualShaderNodeScalarFunc::FUNC_TANH, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Trunc", "Scalar", "Functions", "VisualShaderNodeScalarFunc", TTR("Finds the truncated value of the parameter."), VisualShaderNodeScalarFunc::FUNC_TRUNC, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Step", "Scalar", "Functions", "VisualShaderNodeFloatOp", TTR("Step function( scalar(edge), scalar(x) ).\n\nReturns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."), VisualShaderNodeFloatOp::OP_STEP, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Tan", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Returns the tangent of the parameter."), VisualShaderNodeFloatFunc::FUNC_TAN, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("TanH", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Returns the hyperbolic tangent of the parameter."), VisualShaderNodeFloatFunc::FUNC_TANH, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Trunc", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Finds the truncated value of the parameter."), VisualShaderNodeFloatFunc::FUNC_TRUNC, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
|
||||
add_options.push_back(AddOption("Add", "Scalar", "Operators", "VisualShaderNodeScalarOp", TTR("Adds scalar to scalar."), VisualShaderNodeScalarOp::OP_ADD, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Divide", "Scalar", "Operators", "VisualShaderNodeScalarOp", TTR("Divides scalar by scalar."), VisualShaderNodeScalarOp::OP_DIV, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Multiply", "Scalar", "Operators", "VisualShaderNodeScalarOp", TTR("Multiplies scalar by scalar."), VisualShaderNodeScalarOp::OP_MUL, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Remainder", "Scalar", "Operators", "VisualShaderNodeScalarOp", TTR("Returns the remainder of the two scalars."), VisualShaderNodeScalarOp::OP_MOD, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Subtract", "Scalar", "Operators", "VisualShaderNodeScalarOp", TTR("Subtracts scalar from scalar."), VisualShaderNodeScalarOp::OP_SUB, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Add", "Scalar", "Operators", "VisualShaderNodeFloatOp", TTR("Sums two floating-point scalars."), VisualShaderNodeFloatOp::OP_ADD, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Add", "Scalar", "Operators", "VisualShaderNodeIntOp", TTR("Sums two integer scalars."), VisualShaderNodeIntOp::OP_ADD, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
add_options.push_back(AddOption("Divide", "Scalar", "Operators", "VisualShaderNodeFloatOp", TTR("Divides two floating-point scalars."), VisualShaderNodeFloatOp::OP_DIV, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Divide", "Scalar", "Operators", "VisualShaderNodeIntOp", TTR("Divides two integer scalars."), VisualShaderNodeIntOp::OP_DIV, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
add_options.push_back(AddOption("Multiply", "Scalar", "Operators", "VisualShaderNodeFloatOp", TTR("Multiplies two floating-point scalars."), VisualShaderNodeFloatOp::OP_MUL, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Multiply", "Scalar", "Operators", "VisualShaderNodeIntOp", TTR("Multiplies two integer scalars."), VisualShaderNodeIntOp::OP_MUL, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
add_options.push_back(AddOption("Remainder", "Scalar", "Operators", "VisualShaderNodeFloatOp", TTR("Returns the remainder of the two floating-point scalars."), VisualShaderNodeFloatOp::OP_MOD, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Remainder", "Scalar", "Operators", "VisualShaderNodeIntOp", TTR("Returns the remainder of the two integer scalars."), VisualShaderNodeIntOp::OP_MOD, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
add_options.push_back(AddOption("Subtract", "Scalar", "Operators", "VisualShaderNodeFloatOp", TTR("Subtracts two floating-point scalars."), VisualShaderNodeFloatOp::OP_SUB, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Subtract", "Scalar", "Operators", "VisualShaderNodeIntOp", TTR("Subtracts two integer scalars."), VisualShaderNodeIntOp::OP_SUB, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
|
||||
add_options.push_back(AddOption("ScalarConstant", "Scalar", "Variables", "VisualShaderNodeScalarConstant", TTR("Scalar constant."), -1, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("ScalarUniform", "Scalar", "Variables", "VisualShaderNodeScalarUniform", TTR("Scalar uniform."), -1, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("FloatConstant", "Scalar", "Variables", "VisualShaderNodeFloatConstant", TTR("Scalar floating-point constant."), -1, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("IntConstant", "Scalar", "Variables", "VisualShaderNodeIntConstant", TTR("Scalar integer constant."), -1, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
add_options.push_back(AddOption("FloatUniform", "Scalar", "Variables", "VisualShaderNodeFloatUniform", TTR("Scalar floating-point uniform."), -1, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("IntUniform", "Scalar", "Variables", "VisualShaderNodeIntUniform", TTR("Scalar integer uniform."), -1, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
|
||||
// TEXTURES
|
||||
|
||||
@ -2881,8 +2928,9 @@ public:
|
||||
|
||||
void setup(const Ref<VisualShaderNodeInput> &p_input) {
|
||||
input = p_input;
|
||||
Ref<Texture2D> type_icon[5] = {
|
||||
Ref<Texture2D> type_icon[6] = {
|
||||
EditorNode::get_singleton()->get_gui_base()->get_icon("float", "EditorIcons"),
|
||||
EditorNode::get_singleton()->get_gui_base()->get_icon("int", "EditorIcons"),
|
||||
EditorNode::get_singleton()->get_gui_base()->get_icon("Vector3", "EditorIcons"),
|
||||
EditorNode::get_singleton()->get_gui_base()->get_icon("bool", "EditorIcons"),
|
||||
EditorNode::get_singleton()->get_gui_base()->get_icon("Transform", "EditorIcons"),
|
||||
|
@ -488,17 +488,20 @@ void register_scene_types() {
|
||||
ClassDB::register_class<VisualShaderNodeInput>();
|
||||
ClassDB::register_virtual_class<VisualShaderNodeOutput>();
|
||||
ClassDB::register_class<VisualShaderNodeGroupBase>();
|
||||
ClassDB::register_class<VisualShaderNodeScalarConstant>();
|
||||
ClassDB::register_class<VisualShaderNodeFloatConstant>();
|
||||
ClassDB::register_class<VisualShaderNodeIntConstant>();
|
||||
ClassDB::register_class<VisualShaderNodeBooleanConstant>();
|
||||
ClassDB::register_class<VisualShaderNodeColorConstant>();
|
||||
ClassDB::register_class<VisualShaderNodeVec3Constant>();
|
||||
ClassDB::register_class<VisualShaderNodeTransformConstant>();
|
||||
ClassDB::register_class<VisualShaderNodeScalarOp>();
|
||||
ClassDB::register_class<VisualShaderNodeFloatOp>();
|
||||
ClassDB::register_class<VisualShaderNodeIntOp>();
|
||||
ClassDB::register_class<VisualShaderNodeVectorOp>();
|
||||
ClassDB::register_class<VisualShaderNodeColorOp>();
|
||||
ClassDB::register_class<VisualShaderNodeTransformMult>();
|
||||
ClassDB::register_class<VisualShaderNodeTransformVecMult>();
|
||||
ClassDB::register_class<VisualShaderNodeScalarFunc>();
|
||||
ClassDB::register_class<VisualShaderNodeFloatFunc>();
|
||||
ClassDB::register_class<VisualShaderNodeIntFunc>();
|
||||
ClassDB::register_class<VisualShaderNodeVectorFunc>();
|
||||
ClassDB::register_class<VisualShaderNodeColorFunc>();
|
||||
ClassDB::register_class<VisualShaderNodeTransformFunc>();
|
||||
@ -527,7 +530,8 @@ void register_scene_types() {
|
||||
ClassDB::register_class<VisualShaderNodeTexture>();
|
||||
ClassDB::register_class<VisualShaderNodeCubemap>();
|
||||
ClassDB::register_virtual_class<VisualShaderNodeUniform>();
|
||||
ClassDB::register_class<VisualShaderNodeScalarUniform>();
|
||||
ClassDB::register_class<VisualShaderNodeFloatUniform>();
|
||||
ClassDB::register_class<VisualShaderNodeIntUniform>();
|
||||
ClassDB::register_class<VisualShaderNodeBooleanUniform>();
|
||||
ClassDB::register_class<VisualShaderNodeColorUniform>();
|
||||
ClassDB::register_class<VisualShaderNodeVec3Uniform>();
|
||||
@ -738,6 +742,10 @@ void register_scene_types() {
|
||||
ClassDB::add_compatibility_class("SpatialMaterial", "StandardMaterial3D");
|
||||
ClassDB::add_compatibility_class("Mesh", "ArrayMesh");
|
||||
ClassDB::add_compatibility_class("AnimationTreePlayer", "AnimationTree");
|
||||
ClassDB::add_compatibility_class("VisualShaderNodeScalarConstant", "VisualShaderNodeFloatConstant");
|
||||
ClassDB::add_compatibility_class("VisualShaderNodeScalarUniform", "VisualShaderNodeFloatUniform");
|
||||
ClassDB::add_compatibility_class("VisualShaderNodeScalarOp", "VisualShaderNodeFloatOp");
|
||||
ClassDB::add_compatibility_class("VisualShaderNodeScalarFunc", "VisualShaderNodeFloatFunc");
|
||||
#endif
|
||||
|
||||
OS::get_singleton()->yield(); //may take time to init
|
||||
|
@ -32,6 +32,7 @@
|
||||
|
||||
#include "core/vmap.h"
|
||||
#include "servers/visual/shader_types.h"
|
||||
#include "visual_shader_nodes.h"
|
||||
|
||||
bool VisualShaderNode::is_simple_decl() const {
|
||||
return simple_decl;
|
||||
@ -127,6 +128,7 @@ void VisualShaderNode::_bind_methods() {
|
||||
ADD_SIGNAL(MethodInfo("editor_refresh_request"));
|
||||
|
||||
BIND_ENUM_CONSTANT(PORT_TYPE_SCALAR);
|
||||
BIND_ENUM_CONSTANT(PORT_TYPE_SCALAR_INT);
|
||||
BIND_ENUM_CONSTANT(PORT_TYPE_VECTOR);
|
||||
BIND_ENUM_CONSTANT(PORT_TYPE_BOOLEAN);
|
||||
BIND_ENUM_CONSTANT(PORT_TYPE_TRANSFORM);
|
||||
@ -284,6 +286,49 @@ VisualShaderNodeCustom::VisualShaderNodeCustom() {
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
void VisualShader::set_version(const String &p_version) {
|
||||
version = p_version;
|
||||
}
|
||||
|
||||
String VisualShader::get_version() const {
|
||||
return version;
|
||||
}
|
||||
|
||||
void VisualShader::update_version(const String &p_new_version) {
|
||||
if (version == "") {
|
||||
for (int i = 0; i < TYPE_MAX; i++) {
|
||||
for (Map<int, Node>::Element *E = graph[i].nodes.front(); E; E = E->next()) {
|
||||
Ref<VisualShaderNodeExpression> expression = Object::cast_to<VisualShaderNodeExpression>(E->get().node.ptr());
|
||||
if (expression.is_valid()) {
|
||||
for (int j = 0; j < expression->get_input_port_count(); j++) {
|
||||
int type = expression->get_input_port_type(j);
|
||||
if (type > 0) { // + PORT_TYPE_SCALAR_INT
|
||||
type += 1;
|
||||
}
|
||||
expression->set_input_port_type(j, type);
|
||||
}
|
||||
for (int j = 0; j < expression->get_output_port_count(); j++) {
|
||||
int type = expression->get_output_port_type(j);
|
||||
if (type > 0) { // + PORT_TYPE_SCALAR_INT
|
||||
type += 1;
|
||||
}
|
||||
expression->set_output_port_type(j, type);
|
||||
}
|
||||
}
|
||||
Ref<VisualShaderNodeCompare> compare = Object::cast_to<VisualShaderNodeCompare>(E->get().node.ptr());
|
||||
if (compare.is_valid()) {
|
||||
int ctype = int(compare->get_comparison_type());
|
||||
if (int(ctype) > 0) { // + PORT_TYPE_SCALAR_INT
|
||||
ctype += 1;
|
||||
}
|
||||
compare->set_comparison_type(VisualShaderNodeCompare::ComparisonType(ctype));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
set_version(p_new_version);
|
||||
}
|
||||
|
||||
void VisualShader::add_node(Type p_type, const Ref<VisualShaderNode> &p_node, const Vector2 &p_position, int p_id) {
|
||||
ERR_FAIL_COND(p_node.is_null());
|
||||
ERR_FAIL_COND(p_id < 2);
|
||||
@ -469,7 +514,7 @@ bool VisualShader::can_connect_nodes(Type p_type, int p_from_node, int p_from_po
|
||||
}
|
||||
|
||||
bool VisualShader::is_port_types_compatible(int p_a, int p_b) const {
|
||||
return MAX(0, p_a - 2) == (MAX(0, p_b - 2));
|
||||
return MAX(0, p_a - 3) == (MAX(0, p_b - 3));
|
||||
}
|
||||
|
||||
void VisualShader::connect_nodes_forced(Type p_type, int p_from_node, int p_from_port, int p_to_node, int p_to_port) {
|
||||
@ -697,9 +742,11 @@ String VisualShader::generate_preview_shader(Type p_type, int p_node, int p_port
|
||||
ERR_FAIL_COND_V(err != OK, String());
|
||||
|
||||
if (node->get_output_port_type(p_port) == VisualShaderNode::PORT_TYPE_SCALAR) {
|
||||
code += "\tCOLOR.rgb = vec3( n_out" + itos(p_node) + "p" + itos(p_port) + " );\n";
|
||||
code += "\tCOLOR.rgb = vec3(n_out" + itos(p_node) + "p" + itos(p_port) + " );\n";
|
||||
} else if (node->get_output_port_type(p_port) == VisualShaderNode::PORT_TYPE_SCALAR_INT) {
|
||||
code += "\tCOLOR.rgb = vec3(float(n_out" + itos(p_node) + "p" + itos(p_port) + "));\n";
|
||||
} else if (node->get_output_port_type(p_port) == VisualShaderNode::PORT_TYPE_BOOLEAN) {
|
||||
code += "\tCOLOR.rgb = vec3( n_out" + itos(p_node) + "p" + itos(p_port) + " ? 1.0 : 0.0 );\n";
|
||||
code += "\tCOLOR.rgb = vec3(n_out" + itos(p_node) + "p" + itos(p_port) + " ? 1.0 : 0.0);\n";
|
||||
} else {
|
||||
code += "\tCOLOR.rgb = n_out" + itos(p_node) + "p" + itos(p_port) + ";\n";
|
||||
}
|
||||
@ -984,8 +1031,8 @@ bool VisualShader::_get(const StringName &p_name, Variant &r_ret) const {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
void VisualShader::_get_property_list(List<PropertyInfo> *p_list) const {
|
||||
|
||||
void VisualShader::_get_property_list(List<PropertyInfo> *p_list) const {
|
||||
//mode
|
||||
p_list->push_back(PropertyInfo(Variant::INT, "mode", PROPERTY_HINT_ENUM, "Spatial,CanvasItem,Particles"));
|
||||
//render modes
|
||||
@ -994,7 +1041,6 @@ void VisualShader::_get_property_list(List<PropertyInfo> *p_list) const {
|
||||
Set<String> toggles;
|
||||
|
||||
for (int i = 0; i < ShaderTypes::get_singleton()->get_modes(VisualServer::ShaderMode(shader_mode)).size(); i++) {
|
||||
|
||||
String mode = ShaderTypes::get_singleton()->get_modes(VisualServer::ShaderMode(shader_mode))[i];
|
||||
int idx = 0;
|
||||
bool in_enum = false;
|
||||
@ -1019,7 +1065,6 @@ void VisualShader::_get_property_list(List<PropertyInfo> *p_list) const {
|
||||
}
|
||||
|
||||
for (Map<String, String>::Element *E = blend_mode_enums.front(); E; E = E->next()) {
|
||||
|
||||
p_list->push_back(PropertyInfo(Variant::INT, "modes/" + E->key(), PROPERTY_HINT_ENUM, E->get()));
|
||||
}
|
||||
|
||||
@ -1112,24 +1157,40 @@ Error VisualShader::_write_node(Type type, StringBuilder &global_code, StringBui
|
||||
inputs[i] = src_var;
|
||||
} else if (in_type == VisualShaderNode::PORT_TYPE_SCALAR && out_type == VisualShaderNode::PORT_TYPE_VECTOR) {
|
||||
inputs[i] = "dot(" + src_var + ", vec3(0.333333, 0.333333, 0.333333))";
|
||||
} else if (in_type == VisualShaderNode::PORT_TYPE_SCALAR_INT && out_type == VisualShaderNode::PORT_TYPE_VECTOR) {
|
||||
inputs[i] = "dot(float(" + src_var + "), vec3(0.333333, 0.333333, 0.333333))";
|
||||
} else if (in_type == VisualShaderNode::PORT_TYPE_VECTOR && out_type == VisualShaderNode::PORT_TYPE_SCALAR) {
|
||||
inputs[i] = "vec3(" + src_var + ")";
|
||||
} else if (in_type == VisualShaderNode::PORT_TYPE_VECTOR && out_type == VisualShaderNode::PORT_TYPE_SCALAR_INT) {
|
||||
inputs[i] = "vec3(float(" + src_var + "))";
|
||||
} else if (in_type == VisualShaderNode::PORT_TYPE_BOOLEAN && out_type == VisualShaderNode::PORT_TYPE_VECTOR) {
|
||||
inputs[i] = "all(bvec3(" + src_var + "))";
|
||||
} else if (in_type == VisualShaderNode::PORT_TYPE_BOOLEAN && out_type == VisualShaderNode::PORT_TYPE_SCALAR) {
|
||||
inputs[i] = src_var + " > 0.0 ? true : false";
|
||||
} else if (in_type == VisualShaderNode::PORT_TYPE_BOOLEAN && out_type == VisualShaderNode::PORT_TYPE_SCALAR_INT) {
|
||||
inputs[i] = src_var + " > 0 ? true : false";
|
||||
} else if (in_type == VisualShaderNode::PORT_TYPE_SCALAR && out_type == VisualShaderNode::PORT_TYPE_BOOLEAN) {
|
||||
inputs[i] = src_var + " ? 1.0 : 0.0";
|
||||
} else if (in_type == VisualShaderNode::PORT_TYPE_SCALAR_INT && out_type == VisualShaderNode::PORT_TYPE_BOOLEAN) {
|
||||
inputs[i] = src_var + " ? 1 : 0";
|
||||
} else if (in_type == VisualShaderNode::PORT_TYPE_VECTOR && out_type == VisualShaderNode::PORT_TYPE_BOOLEAN) {
|
||||
inputs[i] = "vec3(" + src_var + " ? 1.0 : 0.0)";
|
||||
} else if (in_type == VisualShaderNode::PORT_TYPE_SCALAR && out_type == VisualShaderNode::PORT_TYPE_SCALAR_INT) {
|
||||
inputs[i] = "float(" + src_var + ")";
|
||||
} else if (in_type == VisualShaderNode::PORT_TYPE_SCALAR_INT && out_type == VisualShaderNode::PORT_TYPE_SCALAR) {
|
||||
inputs[i] = "int(" + src_var + ")";
|
||||
}
|
||||
} else {
|
||||
|
||||
Variant defval = vsnode->get_input_port_default_value(i);
|
||||
if (defval.get_type() == Variant::FLOAT || defval.get_type() == Variant::INT) {
|
||||
if (defval.get_type() == Variant::FLOAT) {
|
||||
float val = defval;
|
||||
inputs[i] = "n_in" + itos(node) + "p" + itos(i);
|
||||
code += "\tfloat " + inputs[i] + " = " + vformat("%.5f", val) + ";\n";
|
||||
} else if (defval.get_type() == Variant::INT) {
|
||||
int val = defval;
|
||||
inputs[i] = "n_in" + itos(node) + "p" + itos(i);
|
||||
code += "\tint " + inputs[i] + " = " + itos(val) + ";\n";
|
||||
} else if (defval.get_type() == Variant::BOOL) {
|
||||
bool val = defval;
|
||||
inputs[i] = "n_in" + itos(node) + "p" + itos(i);
|
||||
@ -1169,6 +1230,7 @@ Error VisualShader::_write_node(Type type, StringBuilder &global_code, StringBui
|
||||
String var_name = "n_out" + itos(node) + "p" + itos(i);
|
||||
switch (vsnode->get_output_port_type(i)) {
|
||||
case VisualShaderNode::PORT_TYPE_SCALAR: outputs[i] = "float " + var_name; break;
|
||||
case VisualShaderNode::PORT_TYPE_SCALAR_INT: outputs[i] = "int " + var_name; break;
|
||||
case VisualShaderNode::PORT_TYPE_VECTOR: outputs[i] = "vec3 " + var_name; break;
|
||||
case VisualShaderNode::PORT_TYPE_BOOLEAN: outputs[i] = "bool " + var_name; break;
|
||||
case VisualShaderNode::PORT_TYPE_TRANSFORM: outputs[i] = "mat4 " + var_name; break;
|
||||
@ -1182,6 +1244,7 @@ Error VisualShader::_write_node(Type type, StringBuilder &global_code, StringBui
|
||||
outputs[i] = "n_out" + itos(node) + "p" + itos(i);
|
||||
switch (vsnode->get_output_port_type(i)) {
|
||||
case VisualShaderNode::PORT_TYPE_SCALAR: code += String() + "\tfloat " + outputs[i] + ";\n"; break;
|
||||
case VisualShaderNode::PORT_TYPE_SCALAR_INT: code += String() + "\tint " + outputs[i] + ";\n"; break;
|
||||
case VisualShaderNode::PORT_TYPE_VECTOR: code += String() + "\tvec3 " + outputs[i] + ";\n"; break;
|
||||
case VisualShaderNode::PORT_TYPE_BOOLEAN: code += String() + "\tbool " + outputs[i] + ";\n"; break;
|
||||
case VisualShaderNode::PORT_TYPE_TRANSFORM: code += String() + "\tmat4 " + outputs[i] + ";\n"; break;
|
||||
@ -1411,6 +1474,9 @@ void VisualShader::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_node_connections", "type"), &VisualShader::_get_node_connections);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_version", "version"), &VisualShader::set_version);
|
||||
ClassDB::bind_method(D_METHOD("get_version"), &VisualShader::get_version);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_graph_offset", "offset"), &VisualShader::set_graph_offset);
|
||||
ClassDB::bind_method(D_METHOD("get_graph_offset"), &VisualShader::get_graph_offset);
|
||||
|
||||
@ -1420,6 +1486,7 @@ void VisualShader::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("_input_type_changed"), &VisualShader::_input_type_changed);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "graph_offset", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_graph_offset", "get_graph_offset");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "version", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_version", "get_version");
|
||||
|
||||
BIND_ENUM_CONSTANT(TYPE_VERTEX);
|
||||
BIND_ENUM_CONSTANT(TYPE_FRAGMENT);
|
||||
@ -1683,17 +1750,20 @@ String VisualShaderNodeInput::generate_code(Shader::Mode p_mode, VisualShader::T
|
||||
switch (get_output_port_type(0)) {
|
||||
case PORT_TYPE_SCALAR: {
|
||||
code = "\t" + p_output_vars[0] + " = 0.0;\n";
|
||||
} break; //default (none found) is scalar
|
||||
} break;
|
||||
case PORT_TYPE_SCALAR_INT: {
|
||||
code = "\t" + p_output_vars[0] + " = 0;\n";
|
||||
} break;
|
||||
case PORT_TYPE_VECTOR: {
|
||||
code = "\t" + p_output_vars[0] + " = vec3(0.0);\n";
|
||||
} break; //default (none found) is scalar
|
||||
} break;
|
||||
case PORT_TYPE_TRANSFORM: {
|
||||
code = "\t" + p_output_vars[0] + " = mat4( vec4(1.0,0.0,0.0,0.0), vec4(0.0,1.0,0.0,0.0), vec4(0.0,0.0,1.0,0.0), vec4(0.0,0.0,0.0,1.0) );\n";
|
||||
} break; //default (none found) is scalar
|
||||
} break;
|
||||
case PORT_TYPE_BOOLEAN: {
|
||||
code = "\t" + p_output_vars[0] + " = false;\n";
|
||||
} break;
|
||||
default:
|
||||
default: //default (none found) is scalar
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -2625,6 +2695,9 @@ String VisualShaderNodeExpression::generate_code(Shader::Mode p_mode, VisualShad
|
||||
case PORT_TYPE_SCALAR:
|
||||
tk = "0.0";
|
||||
break;
|
||||
case PORT_TYPE_SCALAR_INT:
|
||||
tk = "0";
|
||||
break;
|
||||
case PORT_TYPE_VECTOR:
|
||||
tk = "vec3(0.0, 0.0, 0.0)";
|
||||
break;
|
||||
|
@ -41,6 +41,10 @@ class VisualShaderNode;
|
||||
class VisualShader : public Shader {
|
||||
GDCLASS(VisualShader, Shader);
|
||||
|
||||
friend class VisualShaderNodeVersionChecker;
|
||||
|
||||
String version = "";
|
||||
|
||||
public:
|
||||
enum Type {
|
||||
TYPE_VERTEX,
|
||||
@ -118,6 +122,11 @@ protected:
|
||||
void _get_property_list(List<PropertyInfo> *p_list) const;
|
||||
|
||||
public:
|
||||
void set_version(const String &p_version);
|
||||
String get_version() const;
|
||||
|
||||
void update_version(const String &p_new_version);
|
||||
|
||||
enum {
|
||||
NODE_ID_INVALID = -1,
|
||||
NODE_ID_OUTPUT = 0,
|
||||
@ -182,6 +191,7 @@ protected:
|
||||
public:
|
||||
enum PortType {
|
||||
PORT_TYPE_SCALAR,
|
||||
PORT_TYPE_SCALAR_INT,
|
||||
PORT_TYPE_VECTOR,
|
||||
PORT_TYPE_BOOLEAN,
|
||||
PORT_TYPE_TRANSFORM,
|
||||
|
@ -30,66 +30,127 @@
|
||||
|
||||
#include "visual_shader_nodes.h"
|
||||
|
||||
////////////// Scalar
|
||||
////////////// Scalar(Float)
|
||||
|
||||
String VisualShaderNodeScalarConstant::get_caption() const {
|
||||
return "Scalar";
|
||||
String VisualShaderNodeFloatConstant::get_caption() const {
|
||||
return "ScalarFloat";
|
||||
}
|
||||
|
||||
int VisualShaderNodeScalarConstant::get_input_port_count() const {
|
||||
int VisualShaderNodeFloatConstant::get_input_port_count() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
VisualShaderNodeScalarConstant::PortType VisualShaderNodeScalarConstant::get_input_port_type(int p_port) const {
|
||||
VisualShaderNodeFloatConstant::PortType VisualShaderNodeFloatConstant::get_input_port_type(int p_port) const {
|
||||
return PORT_TYPE_SCALAR;
|
||||
}
|
||||
|
||||
String VisualShaderNodeScalarConstant::get_input_port_name(int p_port) const {
|
||||
String VisualShaderNodeFloatConstant::get_input_port_name(int p_port) const {
|
||||
return String();
|
||||
}
|
||||
|
||||
int VisualShaderNodeScalarConstant::get_output_port_count() const {
|
||||
int VisualShaderNodeFloatConstant::get_output_port_count() const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
VisualShaderNodeScalarConstant::PortType VisualShaderNodeScalarConstant::get_output_port_type(int p_port) const {
|
||||
VisualShaderNodeFloatConstant::PortType VisualShaderNodeFloatConstant::get_output_port_type(int p_port) const {
|
||||
return PORT_TYPE_SCALAR;
|
||||
}
|
||||
|
||||
String VisualShaderNodeScalarConstant::get_output_port_name(int p_port) const {
|
||||
String VisualShaderNodeFloatConstant::get_output_port_name(int p_port) const {
|
||||
return ""; //no output port means the editor will be used as port
|
||||
}
|
||||
|
||||
String VisualShaderNodeScalarConstant::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 VisualShaderNodeFloatConstant::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 {
|
||||
return "\t" + p_output_vars[0] + " = " + vformat("%.6f", constant) + ";\n";
|
||||
}
|
||||
|
||||
void VisualShaderNodeScalarConstant::set_constant(float p_value) {
|
||||
void VisualShaderNodeFloatConstant::set_constant(float p_value) {
|
||||
|
||||
constant = p_value;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
float VisualShaderNodeScalarConstant::get_constant() const {
|
||||
float VisualShaderNodeFloatConstant::get_constant() const {
|
||||
|
||||
return constant;
|
||||
}
|
||||
|
||||
Vector<StringName> VisualShaderNodeScalarConstant::get_editable_properties() const {
|
||||
Vector<StringName> VisualShaderNodeFloatConstant::get_editable_properties() const {
|
||||
Vector<StringName> props;
|
||||
props.push_back("constant");
|
||||
return props;
|
||||
}
|
||||
|
||||
void VisualShaderNodeScalarConstant::_bind_methods() {
|
||||
void VisualShaderNodeFloatConstant::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_constant", "value"), &VisualShaderNodeScalarConstant::set_constant);
|
||||
ClassDB::bind_method(D_METHOD("get_constant"), &VisualShaderNodeScalarConstant::get_constant);
|
||||
ClassDB::bind_method(D_METHOD("set_constant", "value"), &VisualShaderNodeFloatConstant::set_constant);
|
||||
ClassDB::bind_method(D_METHOD("get_constant"), &VisualShaderNodeFloatConstant::get_constant);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "constant"), "set_constant", "get_constant");
|
||||
}
|
||||
|
||||
VisualShaderNodeScalarConstant::VisualShaderNodeScalarConstant() {
|
||||
VisualShaderNodeFloatConstant::VisualShaderNodeFloatConstant() {
|
||||
constant = 0.0;
|
||||
}
|
||||
|
||||
////////////// Scalar(Int)
|
||||
|
||||
String VisualShaderNodeIntConstant::get_caption() const {
|
||||
return "ScalarInt";
|
||||
}
|
||||
|
||||
int VisualShaderNodeIntConstant::get_input_port_count() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
VisualShaderNodeIntConstant::PortType VisualShaderNodeIntConstant::get_input_port_type(int p_port) const {
|
||||
return PORT_TYPE_SCALAR_INT;
|
||||
}
|
||||
|
||||
String VisualShaderNodeIntConstant::get_input_port_name(int p_port) const {
|
||||
return String();
|
||||
}
|
||||
|
||||
int VisualShaderNodeIntConstant::get_output_port_count() const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
VisualShaderNodeIntConstant::PortType VisualShaderNodeIntConstant::get_output_port_type(int p_port) const {
|
||||
return PORT_TYPE_SCALAR_INT;
|
||||
}
|
||||
|
||||
String VisualShaderNodeIntConstant::get_output_port_name(int p_port) const {
|
||||
return ""; //no output port means the editor will be used as port
|
||||
}
|
||||
|
||||
String VisualShaderNodeIntConstant::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 {
|
||||
return "\t" + p_output_vars[0] + " = " + itos(constant) + ";\n";
|
||||
}
|
||||
|
||||
void VisualShaderNodeIntConstant::set_constant(int p_value) {
|
||||
constant = p_value;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
int VisualShaderNodeIntConstant::get_constant() const {
|
||||
return constant;
|
||||
}
|
||||
|
||||
Vector<StringName> VisualShaderNodeIntConstant::get_editable_properties() const {
|
||||
Vector<StringName> props;
|
||||
props.push_back("constant");
|
||||
return props;
|
||||
}
|
||||
|
||||
void VisualShaderNodeIntConstant::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_constant", "value"), &VisualShaderNodeIntConstant::set_constant);
|
||||
ClassDB::bind_method(D_METHOD("get_constant"), &VisualShaderNodeIntConstant::get_constant);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "constant"), "set_constant", "get_constant");
|
||||
}
|
||||
|
||||
VisualShaderNodeIntConstant::VisualShaderNodeIntConstant() {
|
||||
constant = 0;
|
||||
}
|
||||
|
||||
@ -936,37 +997,37 @@ VisualShaderNodeCubemap::VisualShaderNodeCubemap() {
|
||||
simple_decl = false;
|
||||
}
|
||||
|
||||
////////////// Scalar Op
|
||||
////////////// Float Op
|
||||
|
||||
String VisualShaderNodeScalarOp::get_caption() const {
|
||||
return "ScalarOp";
|
||||
String VisualShaderNodeFloatOp::get_caption() const {
|
||||
return "FloatOp";
|
||||
}
|
||||
|
||||
int VisualShaderNodeScalarOp::get_input_port_count() const {
|
||||
int VisualShaderNodeFloatOp::get_input_port_count() const {
|
||||
return 2;
|
||||
}
|
||||
|
||||
VisualShaderNodeScalarOp::PortType VisualShaderNodeScalarOp::get_input_port_type(int p_port) const {
|
||||
VisualShaderNodeFloatOp::PortType VisualShaderNodeFloatOp::get_input_port_type(int p_port) const {
|
||||
return PORT_TYPE_SCALAR;
|
||||
}
|
||||
|
||||
String VisualShaderNodeScalarOp::get_input_port_name(int p_port) const {
|
||||
String VisualShaderNodeFloatOp::get_input_port_name(int p_port) const {
|
||||
return p_port == 0 ? "a" : "b";
|
||||
}
|
||||
|
||||
int VisualShaderNodeScalarOp::get_output_port_count() const {
|
||||
int VisualShaderNodeFloatOp::get_output_port_count() const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
VisualShaderNodeScalarOp::PortType VisualShaderNodeScalarOp::get_output_port_type(int p_port) const {
|
||||
VisualShaderNodeFloatOp::PortType VisualShaderNodeFloatOp::get_output_port_type(int p_port) const {
|
||||
return PORT_TYPE_SCALAR;
|
||||
}
|
||||
|
||||
String VisualShaderNodeScalarOp::get_output_port_name(int p_port) const {
|
||||
String VisualShaderNodeFloatOp::get_output_port_name(int p_port) const {
|
||||
return "op"; //no output port means the editor will be used as port
|
||||
}
|
||||
|
||||
String VisualShaderNodeScalarOp::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 VisualShaderNodeFloatOp::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 = "\t" + p_output_vars[0] + " = ";
|
||||
switch (op) {
|
||||
@ -986,27 +1047,27 @@ String VisualShaderNodeScalarOp::generate_code(Shader::Mode p_mode, VisualShader
|
||||
return code;
|
||||
}
|
||||
|
||||
void VisualShaderNodeScalarOp::set_operator(Operator p_op) {
|
||||
void VisualShaderNodeFloatOp::set_operator(Operator p_op) {
|
||||
|
||||
op = p_op;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
VisualShaderNodeScalarOp::Operator VisualShaderNodeScalarOp::get_operator() const {
|
||||
VisualShaderNodeFloatOp::Operator VisualShaderNodeFloatOp::get_operator() const {
|
||||
|
||||
return op;
|
||||
}
|
||||
|
||||
Vector<StringName> VisualShaderNodeScalarOp::get_editable_properties() const {
|
||||
Vector<StringName> VisualShaderNodeFloatOp::get_editable_properties() const {
|
||||
Vector<StringName> props;
|
||||
props.push_back("operator");
|
||||
return props;
|
||||
}
|
||||
|
||||
void VisualShaderNodeScalarOp::_bind_methods() {
|
||||
void VisualShaderNodeFloatOp::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_operator", "op"), &VisualShaderNodeScalarOp::set_operator);
|
||||
ClassDB::bind_method(D_METHOD("get_operator"), &VisualShaderNodeScalarOp::get_operator);
|
||||
ClassDB::bind_method(D_METHOD("set_operator", "op"), &VisualShaderNodeFloatOp::set_operator);
|
||||
ClassDB::bind_method(D_METHOD("get_operator"), &VisualShaderNodeFloatOp::get_operator);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "operator", PROPERTY_HINT_ENUM, "Add,Sub,Multiply,Divide,Remainder,Power,Max,Min,Atan2,Step"), "set_operator", "get_operator");
|
||||
|
||||
@ -1022,12 +1083,97 @@ void VisualShaderNodeScalarOp::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(OP_STEP);
|
||||
}
|
||||
|
||||
VisualShaderNodeScalarOp::VisualShaderNodeScalarOp() {
|
||||
VisualShaderNodeFloatOp::VisualShaderNodeFloatOp() {
|
||||
op = OP_ADD;
|
||||
set_input_port_default_value(0, 0.0);
|
||||
set_input_port_default_value(1, 0.0);
|
||||
}
|
||||
|
||||
////////////// Integer Op
|
||||
|
||||
String VisualShaderNodeIntOp::get_caption() const {
|
||||
return "IntOp";
|
||||
}
|
||||
|
||||
int VisualShaderNodeIntOp::get_input_port_count() const {
|
||||
return 2;
|
||||
}
|
||||
|
||||
VisualShaderNodeIntOp::PortType VisualShaderNodeIntOp::get_input_port_type(int p_port) const {
|
||||
return PORT_TYPE_SCALAR_INT;
|
||||
}
|
||||
|
||||
String VisualShaderNodeIntOp::get_input_port_name(int p_port) const {
|
||||
return p_port == 0 ? "a" : "b";
|
||||
}
|
||||
|
||||
int VisualShaderNodeIntOp::get_output_port_count() const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
VisualShaderNodeIntOp::PortType VisualShaderNodeIntOp::get_output_port_type(int p_port) const {
|
||||
return PORT_TYPE_SCALAR_INT;
|
||||
}
|
||||
|
||||
String VisualShaderNodeIntOp::get_output_port_name(int p_port) const {
|
||||
return "op"; //no output port means the editor will be used as port
|
||||
}
|
||||
|
||||
String VisualShaderNodeIntOp::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 = "\t" + p_output_vars[0] + " = ";
|
||||
switch (op) {
|
||||
|
||||
case OP_ADD: code += p_input_vars[0] + " + " + p_input_vars[1] + ";\n"; break;
|
||||
case OP_SUB: code += p_input_vars[0] + " - " + p_input_vars[1] + ";\n"; break;
|
||||
case OP_MUL: code += p_input_vars[0] + " * " + p_input_vars[1] + ";\n"; break;
|
||||
case OP_DIV: code += p_input_vars[0] + " / " + p_input_vars[1] + ";\n"; break;
|
||||
case OP_MOD: code += p_input_vars[0] + " % " + p_input_vars[1] + ";\n"; break;
|
||||
case OP_MAX: code += "max(" + p_input_vars[0] + ", " + p_input_vars[1] + ");\n"; break;
|
||||
case OP_MIN: code += "min(" + p_input_vars[0] + ", " + p_input_vars[1] + ");\n"; break;
|
||||
}
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
void VisualShaderNodeIntOp::set_operator(Operator p_op) {
|
||||
|
||||
op = p_op;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
VisualShaderNodeIntOp::Operator VisualShaderNodeIntOp::get_operator() const {
|
||||
return op;
|
||||
}
|
||||
|
||||
Vector<StringName> VisualShaderNodeIntOp::get_editable_properties() const {
|
||||
Vector<StringName> props;
|
||||
props.push_back("operator");
|
||||
return props;
|
||||
}
|
||||
|
||||
void VisualShaderNodeIntOp::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_operator", "op"), &VisualShaderNodeIntOp::set_operator);
|
||||
ClassDB::bind_method(D_METHOD("get_operator"), &VisualShaderNodeIntOp::get_operator);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "operator", PROPERTY_HINT_ENUM, "Add,Sub,Multiply,Divide,Remainder,Max,Min"), "set_operator", "get_operator");
|
||||
|
||||
BIND_ENUM_CONSTANT(OP_ADD);
|
||||
BIND_ENUM_CONSTANT(OP_SUB);
|
||||
BIND_ENUM_CONSTANT(OP_MUL);
|
||||
BIND_ENUM_CONSTANT(OP_DIV);
|
||||
BIND_ENUM_CONSTANT(OP_MOD);
|
||||
BIND_ENUM_CONSTANT(OP_MAX);
|
||||
BIND_ENUM_CONSTANT(OP_MIN);
|
||||
}
|
||||
|
||||
VisualShaderNodeIntOp::VisualShaderNodeIntOp() {
|
||||
op = OP_ADD;
|
||||
set_input_port_default_value(0, 0);
|
||||
set_input_port_default_value(1, 0);
|
||||
}
|
||||
|
||||
////////////// Vector Op
|
||||
|
||||
String VisualShaderNodeVectorOp::get_caption() const {
|
||||
@ -1462,37 +1608,37 @@ VisualShaderNodeTransformVecMult::VisualShaderNodeTransformVecMult() {
|
||||
set_input_port_default_value(1, Vector3());
|
||||
}
|
||||
|
||||
////////////// Scalar Func
|
||||
////////////// Float Func
|
||||
|
||||
String VisualShaderNodeScalarFunc::get_caption() const {
|
||||
return "ScalarFunc";
|
||||
String VisualShaderNodeFloatFunc::get_caption() const {
|
||||
return "FloatFunc";
|
||||
}
|
||||
|
||||
int VisualShaderNodeScalarFunc::get_input_port_count() const {
|
||||
int VisualShaderNodeFloatFunc::get_input_port_count() const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
VisualShaderNodeScalarFunc::PortType VisualShaderNodeScalarFunc::get_input_port_type(int p_port) const {
|
||||
VisualShaderNodeFloatFunc::PortType VisualShaderNodeFloatFunc::get_input_port_type(int p_port) const {
|
||||
return PORT_TYPE_SCALAR;
|
||||
}
|
||||
|
||||
String VisualShaderNodeScalarFunc::get_input_port_name(int p_port) const {
|
||||
String VisualShaderNodeFloatFunc::get_input_port_name(int p_port) const {
|
||||
return "";
|
||||
}
|
||||
|
||||
int VisualShaderNodeScalarFunc::get_output_port_count() const {
|
||||
int VisualShaderNodeFloatFunc::get_output_port_count() const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
VisualShaderNodeScalarFunc::PortType VisualShaderNodeScalarFunc::get_output_port_type(int p_port) const {
|
||||
VisualShaderNodeFloatFunc::PortType VisualShaderNodeFloatFunc::get_output_port_type(int p_port) const {
|
||||
return PORT_TYPE_SCALAR;
|
||||
}
|
||||
|
||||
String VisualShaderNodeScalarFunc::get_output_port_name(int p_port) const {
|
||||
String VisualShaderNodeFloatFunc::get_output_port_name(int p_port) const {
|
||||
return ""; //no output port means the editor will be used as port
|
||||
}
|
||||
|
||||
String VisualShaderNodeScalarFunc::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 VisualShaderNodeFloatFunc::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 {
|
||||
|
||||
static const char *scalar_func_id[FUNC_ONEMINUS + 1] = {
|
||||
"sin($)",
|
||||
@ -1532,27 +1678,27 @@ String VisualShaderNodeScalarFunc::generate_code(Shader::Mode p_mode, VisualShad
|
||||
return "\t" + p_output_vars[0] + " = " + String(scalar_func_id[func]).replace("$", p_input_vars[0]) + ";\n";
|
||||
}
|
||||
|
||||
void VisualShaderNodeScalarFunc::set_function(Function p_func) {
|
||||
void VisualShaderNodeFloatFunc::set_function(Function p_func) {
|
||||
|
||||
func = p_func;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
VisualShaderNodeScalarFunc::Function VisualShaderNodeScalarFunc::get_function() const {
|
||||
VisualShaderNodeFloatFunc::Function VisualShaderNodeFloatFunc::get_function() const {
|
||||
|
||||
return func;
|
||||
}
|
||||
|
||||
Vector<StringName> VisualShaderNodeScalarFunc::get_editable_properties() const {
|
||||
Vector<StringName> VisualShaderNodeFloatFunc::get_editable_properties() const {
|
||||
Vector<StringName> props;
|
||||
props.push_back("function");
|
||||
return props;
|
||||
}
|
||||
|
||||
void VisualShaderNodeScalarFunc::_bind_methods() {
|
||||
void VisualShaderNodeFloatFunc::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_function", "func"), &VisualShaderNodeScalarFunc::set_function);
|
||||
ClassDB::bind_method(D_METHOD("get_function"), &VisualShaderNodeScalarFunc::get_function);
|
||||
ClassDB::bind_method(D_METHOD("set_function", "func"), &VisualShaderNodeFloatFunc::set_function);
|
||||
ClassDB::bind_method(D_METHOD("get_function"), &VisualShaderNodeFloatFunc::get_function);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "function", PROPERTY_HINT_ENUM, "Sin,Cos,Tan,ASin,ACos,ATan,SinH,CosH,TanH,Log,Exp,Sqrt,Abs,Sign,Floor,Round,Ceil,Frac,Saturate,Negate,ACosH,ASinH,ATanH,Degrees,Exp2,InverseSqrt,Log2,Radians,Reciprocal,RoundEven,Trunc,OneMinus"), "set_function", "get_function");
|
||||
|
||||
@ -1590,11 +1736,108 @@ void VisualShaderNodeScalarFunc::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(FUNC_ONEMINUS);
|
||||
}
|
||||
|
||||
VisualShaderNodeScalarFunc::VisualShaderNodeScalarFunc() {
|
||||
VisualShaderNodeFloatFunc::VisualShaderNodeFloatFunc() {
|
||||
func = FUNC_SIGN;
|
||||
set_input_port_default_value(0, 0.0);
|
||||
}
|
||||
|
||||
////////////// Int Func
|
||||
|
||||
String VisualShaderNodeIntFunc::get_caption() const {
|
||||
return "IntFunc";
|
||||
}
|
||||
|
||||
int VisualShaderNodeIntFunc::get_input_port_count() const {
|
||||
if (func == FUNC_CLAMP) {
|
||||
return 3;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
VisualShaderNodeIntFunc::PortType VisualShaderNodeIntFunc::get_input_port_type(int p_port) const {
|
||||
return PORT_TYPE_SCALAR_INT;
|
||||
}
|
||||
|
||||
String VisualShaderNodeIntFunc::get_input_port_name(int p_port) const {
|
||||
if (func == FUNC_CLAMP) {
|
||||
if (p_port == 0) {
|
||||
return "";
|
||||
} else if (p_port == 1) {
|
||||
return "min";
|
||||
} else if (p_port == 2) {
|
||||
return "max";
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
int VisualShaderNodeIntFunc::get_output_port_count() const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
VisualShaderNodeIntFunc::PortType VisualShaderNodeIntFunc::get_output_port_type(int p_port) const {
|
||||
return PORT_TYPE_SCALAR_INT;
|
||||
}
|
||||
|
||||
String VisualShaderNodeIntFunc::get_output_port_name(int p_port) const {
|
||||
return ""; //no output port means the editor will be used as port
|
||||
}
|
||||
|
||||
String VisualShaderNodeIntFunc::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 {
|
||||
if (func == FUNC_CLAMP) {
|
||||
return "\t" + p_output_vars[0] + " = clamp(" + p_input_vars[0] + ", " + p_input_vars[1] + ", " + p_input_vars[2] + ");\n";
|
||||
}
|
||||
|
||||
static const char *int_func_id[FUNC_SIGN + 1] = {
|
||||
"abs($)",
|
||||
"",
|
||||
"-($)",
|
||||
"sign($)"
|
||||
};
|
||||
|
||||
return "\t" + p_output_vars[0] + " = " + String(int_func_id[func]).replace("$", p_input_vars[0]) + ";\n";
|
||||
}
|
||||
|
||||
void VisualShaderNodeIntFunc::set_function(Function p_func) {
|
||||
if (func != p_func) {
|
||||
if (p_func == FUNC_CLAMP) {
|
||||
set_input_port_default_value(1, 0);
|
||||
set_input_port_default_value(2, 0);
|
||||
}
|
||||
}
|
||||
func = p_func;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
VisualShaderNodeIntFunc::Function VisualShaderNodeIntFunc::get_function() const {
|
||||
|
||||
return func;
|
||||
}
|
||||
|
||||
Vector<StringName> VisualShaderNodeIntFunc::get_editable_properties() const {
|
||||
Vector<StringName> props;
|
||||
props.push_back("function");
|
||||
return props;
|
||||
}
|
||||
|
||||
void VisualShaderNodeIntFunc::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_function", "func"), &VisualShaderNodeIntFunc::set_function);
|
||||
ClassDB::bind_method(D_METHOD("get_function"), &VisualShaderNodeIntFunc::get_function);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "function", PROPERTY_HINT_ENUM, "Abs,Clamp,Negate,Sign"), "set_function", "get_function");
|
||||
|
||||
BIND_ENUM_CONSTANT(FUNC_ABS);
|
||||
BIND_ENUM_CONSTANT(FUNC_CLAMP);
|
||||
BIND_ENUM_CONSTANT(FUNC_NEGATE);
|
||||
BIND_ENUM_CONSTANT(FUNC_SIGN);
|
||||
}
|
||||
|
||||
VisualShaderNodeIntFunc::VisualShaderNodeIntFunc() {
|
||||
func = FUNC_SIGN;
|
||||
set_input_port_default_value(0, 0);
|
||||
}
|
||||
|
||||
////////////// Vector Func
|
||||
|
||||
String VisualShaderNodeVectorFunc::get_caption() const {
|
||||
@ -3008,37 +3251,37 @@ VisualShaderNodeTransformDecompose::VisualShaderNodeTransformDecompose() {
|
||||
set_input_port_default_value(0, Transform());
|
||||
}
|
||||
|
||||
////////////// Scalar Uniform
|
||||
////////////// Float Uniform
|
||||
|
||||
String VisualShaderNodeScalarUniform::get_caption() const {
|
||||
return "ScalarUniform";
|
||||
String VisualShaderNodeFloatUniform::get_caption() const {
|
||||
return "FloatUniform";
|
||||
}
|
||||
|
||||
int VisualShaderNodeScalarUniform::get_input_port_count() const {
|
||||
int VisualShaderNodeFloatUniform::get_input_port_count() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
VisualShaderNodeScalarUniform::PortType VisualShaderNodeScalarUniform::get_input_port_type(int p_port) const {
|
||||
VisualShaderNodeFloatUniform::PortType VisualShaderNodeFloatUniform::get_input_port_type(int p_port) const {
|
||||
return PORT_TYPE_SCALAR;
|
||||
}
|
||||
|
||||
String VisualShaderNodeScalarUniform::get_input_port_name(int p_port) const {
|
||||
String VisualShaderNodeFloatUniform::get_input_port_name(int p_port) const {
|
||||
return String();
|
||||
}
|
||||
|
||||
int VisualShaderNodeScalarUniform::get_output_port_count() const {
|
||||
int VisualShaderNodeFloatUniform::get_output_port_count() const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
VisualShaderNodeScalarUniform::PortType VisualShaderNodeScalarUniform::get_output_port_type(int p_port) const {
|
||||
VisualShaderNodeFloatUniform::PortType VisualShaderNodeFloatUniform::get_output_port_type(int p_port) const {
|
||||
return PORT_TYPE_SCALAR;
|
||||
}
|
||||
|
||||
String VisualShaderNodeScalarUniform::get_output_port_name(int p_port) const {
|
||||
String VisualShaderNodeFloatUniform::get_output_port_name(int p_port) const {
|
||||
return ""; //no output port means the editor will be used as port
|
||||
}
|
||||
|
||||
String VisualShaderNodeScalarUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const {
|
||||
String VisualShaderNodeFloatUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const {
|
||||
if (hint == HINT_RANGE) {
|
||||
return "uniform float " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ");\n";
|
||||
} else if (hint == HINT_RANGE_STEP) {
|
||||
@ -3047,58 +3290,58 @@ String VisualShaderNodeScalarUniform::generate_global(Shader::Mode p_mode, Visua
|
||||
return "uniform float " + get_uniform_name() + ";\n";
|
||||
}
|
||||
|
||||
String VisualShaderNodeScalarUniform::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 VisualShaderNodeFloatUniform::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 {
|
||||
return "\t" + p_output_vars[0] + " = " + get_uniform_name() + ";\n";
|
||||
}
|
||||
|
||||
void VisualShaderNodeScalarUniform::set_hint(Hint p_hint) {
|
||||
void VisualShaderNodeFloatUniform::set_hint(Hint p_hint) {
|
||||
hint = p_hint;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
VisualShaderNodeScalarUniform::Hint VisualShaderNodeScalarUniform::get_hint() const {
|
||||
VisualShaderNodeFloatUniform::Hint VisualShaderNodeFloatUniform::get_hint() const {
|
||||
return hint;
|
||||
}
|
||||
|
||||
void VisualShaderNodeScalarUniform::set_min(float p_value) {
|
||||
void VisualShaderNodeFloatUniform::set_min(float p_value) {
|
||||
hint_range_min = p_value;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
float VisualShaderNodeScalarUniform::get_min() const {
|
||||
float VisualShaderNodeFloatUniform::get_min() const {
|
||||
return hint_range_min;
|
||||
}
|
||||
|
||||
void VisualShaderNodeScalarUniform::set_max(float p_value) {
|
||||
void VisualShaderNodeFloatUniform::set_max(float p_value) {
|
||||
hint_range_max = p_value;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
float VisualShaderNodeScalarUniform::get_max() const {
|
||||
float VisualShaderNodeFloatUniform::get_max() const {
|
||||
return hint_range_max;
|
||||
}
|
||||
|
||||
void VisualShaderNodeScalarUniform::set_step(float p_value) {
|
||||
void VisualShaderNodeFloatUniform::set_step(float p_value) {
|
||||
hint_range_step = p_value;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
float VisualShaderNodeScalarUniform::get_step() const {
|
||||
float VisualShaderNodeFloatUniform::get_step() const {
|
||||
return hint_range_step;
|
||||
}
|
||||
|
||||
void VisualShaderNodeScalarUniform::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_hint", "hint"), &VisualShaderNodeScalarUniform::set_hint);
|
||||
ClassDB::bind_method(D_METHOD("get_hint"), &VisualShaderNodeScalarUniform::get_hint);
|
||||
void VisualShaderNodeFloatUniform::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_hint", "hint"), &VisualShaderNodeFloatUniform::set_hint);
|
||||
ClassDB::bind_method(D_METHOD("get_hint"), &VisualShaderNodeFloatUniform::get_hint);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_min", "value"), &VisualShaderNodeScalarUniform::set_min);
|
||||
ClassDB::bind_method(D_METHOD("get_min"), &VisualShaderNodeScalarUniform::get_min);
|
||||
ClassDB::bind_method(D_METHOD("set_min", "value"), &VisualShaderNodeFloatUniform::set_min);
|
||||
ClassDB::bind_method(D_METHOD("get_min"), &VisualShaderNodeFloatUniform::get_min);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_max", "value"), &VisualShaderNodeScalarUniform::set_max);
|
||||
ClassDB::bind_method(D_METHOD("get_max"), &VisualShaderNodeScalarUniform::get_max);
|
||||
ClassDB::bind_method(D_METHOD("set_max", "value"), &VisualShaderNodeFloatUniform::set_max);
|
||||
ClassDB::bind_method(D_METHOD("get_max"), &VisualShaderNodeFloatUniform::get_max);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_step", "value"), &VisualShaderNodeScalarUniform::set_step);
|
||||
ClassDB::bind_method(D_METHOD("get_step"), &VisualShaderNodeScalarUniform::get_step);
|
||||
ClassDB::bind_method(D_METHOD("set_step", "value"), &VisualShaderNodeFloatUniform::set_step);
|
||||
ClassDB::bind_method(D_METHOD("get_step"), &VisualShaderNodeFloatUniform::get_step);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "hint", PROPERTY_HINT_ENUM, "None,Range,Range+Step"), "set_hint", "get_hint");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "min"), "set_min", "get_min");
|
||||
@ -3110,7 +3353,7 @@ void VisualShaderNodeScalarUniform::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(HINT_RANGE_STEP);
|
||||
}
|
||||
|
||||
Vector<StringName> VisualShaderNodeScalarUniform::get_editable_properties() const {
|
||||
Vector<StringName> VisualShaderNodeFloatUniform::get_editable_properties() const {
|
||||
Vector<StringName> props;
|
||||
props.push_back("hint");
|
||||
if (hint == HINT_RANGE || hint == HINT_RANGE_STEP) {
|
||||
@ -3123,13 +3366,135 @@ Vector<StringName> VisualShaderNodeScalarUniform::get_editable_properties() cons
|
||||
return props;
|
||||
}
|
||||
|
||||
VisualShaderNodeScalarUniform::VisualShaderNodeScalarUniform() {
|
||||
VisualShaderNodeFloatUniform::VisualShaderNodeFloatUniform() {
|
||||
hint = HINT_NONE;
|
||||
hint_range_min = 0.0;
|
||||
hint_range_max = 1.0;
|
||||
hint_range_step = 0.1;
|
||||
}
|
||||
|
||||
////////////// Integer Uniform
|
||||
|
||||
String VisualShaderNodeIntUniform::get_caption() const {
|
||||
return "IntUniform";
|
||||
}
|
||||
|
||||
int VisualShaderNodeIntUniform::get_input_port_count() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
VisualShaderNodeIntUniform::PortType VisualShaderNodeIntUniform::get_input_port_type(int p_port) const {
|
||||
return PORT_TYPE_SCALAR_INT;
|
||||
}
|
||||
|
||||
String VisualShaderNodeIntUniform::get_input_port_name(int p_port) const {
|
||||
return String();
|
||||
}
|
||||
|
||||
int VisualShaderNodeIntUniform::get_output_port_count() const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
VisualShaderNodeIntUniform::PortType VisualShaderNodeIntUniform::get_output_port_type(int p_port) const {
|
||||
return PORT_TYPE_SCALAR_INT;
|
||||
}
|
||||
|
||||
String VisualShaderNodeIntUniform::get_output_port_name(int p_port) const {
|
||||
return ""; //no output port means the editor will be used as port
|
||||
}
|
||||
|
||||
String VisualShaderNodeIntUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const {
|
||||
if (hint == HINT_RANGE) {
|
||||
return "uniform int " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ");\n";
|
||||
} else if (hint == HINT_RANGE_STEP) {
|
||||
return "uniform int " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ", " + rtos(hint_range_step) + ");\n";
|
||||
}
|
||||
return "uniform int " + get_uniform_name() + ";\n";
|
||||
}
|
||||
|
||||
String VisualShaderNodeIntUniform::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 {
|
||||
return "\t" + p_output_vars[0] + " = " + get_uniform_name() + ";\n";
|
||||
}
|
||||
|
||||
void VisualShaderNodeIntUniform::set_hint(Hint p_hint) {
|
||||
hint = p_hint;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
VisualShaderNodeIntUniform::Hint VisualShaderNodeIntUniform::get_hint() const {
|
||||
return hint;
|
||||
}
|
||||
|
||||
void VisualShaderNodeIntUniform::set_min(int p_value) {
|
||||
hint_range_min = p_value;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
int VisualShaderNodeIntUniform::get_min() const {
|
||||
return hint_range_min;
|
||||
}
|
||||
|
||||
void VisualShaderNodeIntUniform::set_max(int p_value) {
|
||||
hint_range_max = p_value;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
int VisualShaderNodeIntUniform::get_max() const {
|
||||
return hint_range_max;
|
||||
}
|
||||
|
||||
void VisualShaderNodeIntUniform::set_step(int p_value) {
|
||||
hint_range_step = p_value;
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
int VisualShaderNodeIntUniform::get_step() const {
|
||||
return hint_range_step;
|
||||
}
|
||||
|
||||
void VisualShaderNodeIntUniform::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_hint", "hint"), &VisualShaderNodeIntUniform::set_hint);
|
||||
ClassDB::bind_method(D_METHOD("get_hint"), &VisualShaderNodeIntUniform::get_hint);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_min", "value"), &VisualShaderNodeIntUniform::set_min);
|
||||
ClassDB::bind_method(D_METHOD("get_min"), &VisualShaderNodeIntUniform::get_min);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_max", "value"), &VisualShaderNodeIntUniform::set_max);
|
||||
ClassDB::bind_method(D_METHOD("get_max"), &VisualShaderNodeIntUniform::get_max);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_step", "value"), &VisualShaderNodeIntUniform::set_step);
|
||||
ClassDB::bind_method(D_METHOD("get_step"), &VisualShaderNodeIntUniform::get_step);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "hint", PROPERTY_HINT_ENUM, "None,Range,Range+Step"), "set_hint", "get_hint");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "min"), "set_min", "get_min");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "max"), "set_max", "get_max");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "step"), "set_step", "get_step");
|
||||
|
||||
BIND_ENUM_CONSTANT(HINT_NONE);
|
||||
BIND_ENUM_CONSTANT(HINT_RANGE);
|
||||
BIND_ENUM_CONSTANT(HINT_RANGE_STEP);
|
||||
}
|
||||
|
||||
Vector<StringName> VisualShaderNodeIntUniform::get_editable_properties() const {
|
||||
Vector<StringName> props;
|
||||
props.push_back("hint");
|
||||
if (hint == HINT_RANGE || hint == HINT_RANGE_STEP) {
|
||||
props.push_back("min");
|
||||
props.push_back("max");
|
||||
}
|
||||
if (hint == HINT_RANGE_STEP) {
|
||||
props.push_back("step");
|
||||
}
|
||||
return props;
|
||||
}
|
||||
|
||||
VisualShaderNodeIntUniform::VisualShaderNodeIntUniform() {
|
||||
hint = HINT_NONE;
|
||||
hint_range_min = 0;
|
||||
hint_range_max = 100;
|
||||
hint_range_step = 1;
|
||||
}
|
||||
|
||||
////////////// Boolean Uniform
|
||||
|
||||
String VisualShaderNodeBooleanUniform::get_caption() const {
|
||||
@ -3968,6 +4333,8 @@ VisualShaderNodeCompare::PortType VisualShaderNodeCompare::get_input_port_type(i
|
||||
switch (ctype) {
|
||||
case CTYPE_SCALAR:
|
||||
return PORT_TYPE_SCALAR;
|
||||
case CTYPE_SCALAR_INT:
|
||||
return PORT_TYPE_SCALAR_INT;
|
||||
case CTYPE_VECTOR:
|
||||
return PORT_TYPE_VECTOR;
|
||||
case CTYPE_BOOLEAN:
|
||||
@ -4046,10 +4413,14 @@ String VisualShaderNodeCompare::generate_code(Shader::Mode p_mode, VisualShader:
|
||||
} else if (func == FUNC_NOT_EQUAL) {
|
||||
code += "\t" + p_output_vars[0] + " = !(abs(" + p_input_vars[0] + " - " + p_input_vars[1] + ") < " + p_input_vars[2] + ");";
|
||||
} else {
|
||||
code += "\t" + p_output_vars[0] + " = " + (p_input_vars[0] + "$" + p_input_vars[1]).replace("$", ops[func]) + ";\n";
|
||||
code += "\t" + p_output_vars[0] + " = " + (p_input_vars[0] + " $ " + p_input_vars[1]).replace("$", ops[func]) + ";\n";
|
||||
}
|
||||
break;
|
||||
|
||||
case CTYPE_SCALAR_INT:
|
||||
code += "\t" + p_output_vars[0] + " = " + (p_input_vars[0] + " $ " + p_input_vars[1]).replace("$", ops[func]) + ";\n";
|
||||
break;
|
||||
|
||||
case CTYPE_VECTOR:
|
||||
code += "\t{\n";
|
||||
code += "\t\tbvec3 _bv = " + String(funcs[func]).replace("$", p_input_vars[0] + ", " + p_input_vars[1]) + ";\n";
|
||||
@ -4085,6 +4456,11 @@ void VisualShaderNodeCompare::set_comparison_type(ComparisonType p_type) {
|
||||
set_input_port_default_value(1, 0.0);
|
||||
simple_decl = true;
|
||||
break;
|
||||
case CTYPE_SCALAR_INT:
|
||||
set_input_port_default_value(0, 0);
|
||||
set_input_port_default_value(1, 0);
|
||||
simple_decl = true;
|
||||
break;
|
||||
case CTYPE_VECTOR:
|
||||
set_input_port_default_value(0, Vector3(0.0, 0.0, 0.0));
|
||||
set_input_port_default_value(1, Vector3(0.0, 0.0, 0.0));
|
||||
@ -4151,11 +4527,12 @@ void VisualShaderNodeCompare::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_condition", "condition"), &VisualShaderNodeCompare::set_condition);
|
||||
ClassDB::bind_method(D_METHOD("get_condition"), &VisualShaderNodeCompare::get_condition);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "type", PROPERTY_HINT_ENUM, "Scalar,Vector,Boolean,Transform"), "set_comparison_type", "get_comparison_type");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "type", PROPERTY_HINT_ENUM, "Float,Int,Vector,Boolean,Transform"), "set_comparison_type", "get_comparison_type");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "function", PROPERTY_HINT_ENUM, "a == b,a != b,a > b,a >= b,a < b,a <= b"), "set_function", "get_function");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "condition", PROPERTY_HINT_ENUM, "All,Any"), "set_condition", "get_condition");
|
||||
|
||||
BIND_ENUM_CONSTANT(CTYPE_SCALAR);
|
||||
BIND_ENUM_CONSTANT(CTYPE_SCALAR_INT);
|
||||
BIND_ENUM_CONSTANT(CTYPE_VECTOR);
|
||||
BIND_ENUM_CONSTANT(CTYPE_BOOLEAN);
|
||||
BIND_ENUM_CONSTANT(CTYPE_TRANSFORM);
|
||||
|
@ -37,8 +37,8 @@
|
||||
/// CONSTANTS
|
||||
///////////////////////////////////////
|
||||
|
||||
class VisualShaderNodeScalarConstant : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeScalarConstant, VisualShaderNode);
|
||||
class VisualShaderNodeFloatConstant : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeFloatConstant, VisualShaderNode);
|
||||
float constant;
|
||||
|
||||
protected:
|
||||
@ -62,7 +62,37 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const;
|
||||
|
||||
VisualShaderNodeScalarConstant();
|
||||
VisualShaderNodeFloatConstant();
|
||||
};
|
||||
|
||||
///////////////////////////////////////
|
||||
|
||||
class VisualShaderNodeIntConstant : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeIntConstant, VisualShaderNode);
|
||||
int constant;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
virtual String get_caption() const;
|
||||
|
||||
virtual int get_input_port_count() const;
|
||||
virtual PortType get_input_port_type(int p_port) const;
|
||||
virtual String get_input_port_name(int p_port) const;
|
||||
|
||||
virtual int get_output_port_count() const;
|
||||
virtual PortType get_output_port_type(int p_port) const;
|
||||
virtual String get_output_port_name(int p_port) const;
|
||||
|
||||
virtual String 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 = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty
|
||||
|
||||
void set_constant(int p_value);
|
||||
int get_constant() const;
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const;
|
||||
|
||||
VisualShaderNodeIntConstant();
|
||||
};
|
||||
|
||||
///////////////////////////////////////
|
||||
@ -314,8 +344,8 @@ VARIANT_ENUM_CAST(VisualShaderNodeCubemap::Source)
|
||||
/// OPS
|
||||
///////////////////////////////////////
|
||||
|
||||
class VisualShaderNodeScalarOp : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeScalarOp, VisualShaderNode);
|
||||
class VisualShaderNodeFloatOp : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeFloatOp, VisualShaderNode);
|
||||
|
||||
public:
|
||||
enum Operator {
|
||||
@ -354,10 +384,52 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const;
|
||||
|
||||
VisualShaderNodeScalarOp();
|
||||
VisualShaderNodeFloatOp();
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VisualShaderNodeScalarOp::Operator)
|
||||
VARIANT_ENUM_CAST(VisualShaderNodeFloatOp::Operator)
|
||||
|
||||
class VisualShaderNodeIntOp : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeIntOp, VisualShaderNode);
|
||||
|
||||
public:
|
||||
enum Operator {
|
||||
OP_ADD,
|
||||
OP_SUB,
|
||||
OP_MUL,
|
||||
OP_DIV,
|
||||
OP_MOD,
|
||||
OP_MAX,
|
||||
OP_MIN,
|
||||
};
|
||||
|
||||
protected:
|
||||
Operator op;
|
||||
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
virtual String get_caption() const;
|
||||
|
||||
virtual int get_input_port_count() const;
|
||||
virtual PortType get_input_port_type(int p_port) const;
|
||||
virtual String get_input_port_name(int p_port) const;
|
||||
|
||||
virtual int get_output_port_count() const;
|
||||
virtual PortType get_output_port_type(int p_port) const;
|
||||
virtual String get_output_port_name(int p_port) const;
|
||||
|
||||
virtual String 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 = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty
|
||||
|
||||
void set_operator(Operator p_op);
|
||||
Operator get_operator() const;
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const;
|
||||
|
||||
VisualShaderNodeIntOp();
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VisualShaderNodeIntOp::Operator)
|
||||
|
||||
class VisualShaderNodeVectorOp : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeVectorOp, VisualShaderNode);
|
||||
@ -539,11 +611,11 @@ public:
|
||||
VARIANT_ENUM_CAST(VisualShaderNodeTransformVecMult::Operator)
|
||||
|
||||
///////////////////////////////////////
|
||||
/// SCALAR FUNC
|
||||
/// FLOAT FUNC
|
||||
///////////////////////////////////////
|
||||
|
||||
class VisualShaderNodeScalarFunc : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeScalarFunc, VisualShaderNode);
|
||||
class VisualShaderNodeFloatFunc : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeFloatFunc, VisualShaderNode);
|
||||
|
||||
public:
|
||||
enum Function {
|
||||
@ -604,10 +676,53 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const;
|
||||
|
||||
VisualShaderNodeScalarFunc();
|
||||
VisualShaderNodeFloatFunc();
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VisualShaderNodeScalarFunc::Function)
|
||||
VARIANT_ENUM_CAST(VisualShaderNodeFloatFunc::Function)
|
||||
|
||||
///////////////////////////////////////
|
||||
/// INT FUNC
|
||||
///////////////////////////////////////
|
||||
|
||||
class VisualShaderNodeIntFunc : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeIntFunc, VisualShaderNode);
|
||||
|
||||
public:
|
||||
enum Function {
|
||||
FUNC_ABS,
|
||||
FUNC_CLAMP,
|
||||
FUNC_NEGATE,
|
||||
FUNC_SIGN,
|
||||
};
|
||||
|
||||
protected:
|
||||
Function func;
|
||||
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
virtual String get_caption() const;
|
||||
|
||||
virtual int get_input_port_count() const;
|
||||
virtual PortType get_input_port_type(int p_port) const;
|
||||
virtual String get_input_port_name(int p_port) const;
|
||||
|
||||
virtual int get_output_port_count() const;
|
||||
virtual PortType get_output_port_type(int p_port) const;
|
||||
virtual String get_output_port_name(int p_port) const;
|
||||
|
||||
virtual String 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 = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty
|
||||
|
||||
void set_function(Function p_func);
|
||||
Function get_function() const;
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const;
|
||||
|
||||
VisualShaderNodeIntFunc();
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VisualShaderNodeIntFunc::Function)
|
||||
|
||||
///////////////////////////////////////
|
||||
/// VECTOR FUNC
|
||||
@ -1297,8 +1412,8 @@ public:
|
||||
/// UNIFORMS
|
||||
///////////////////////////////////////
|
||||
|
||||
class VisualShaderNodeScalarUniform : public VisualShaderNodeUniform {
|
||||
GDCLASS(VisualShaderNodeScalarUniform, VisualShaderNodeUniform);
|
||||
class VisualShaderNodeFloatUniform : public VisualShaderNodeUniform {
|
||||
GDCLASS(VisualShaderNodeFloatUniform, VisualShaderNodeUniform);
|
||||
|
||||
public:
|
||||
enum Hint {
|
||||
@ -1344,10 +1459,62 @@ public:
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const;
|
||||
|
||||
VisualShaderNodeScalarUniform();
|
||||
VisualShaderNodeFloatUniform();
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VisualShaderNodeScalarUniform::Hint)
|
||||
VARIANT_ENUM_CAST(VisualShaderNodeFloatUniform::Hint)
|
||||
|
||||
class VisualShaderNodeIntUniform : public VisualShaderNodeUniform {
|
||||
GDCLASS(VisualShaderNodeIntUniform, VisualShaderNodeUniform);
|
||||
|
||||
public:
|
||||
enum Hint {
|
||||
HINT_NONE,
|
||||
HINT_RANGE,
|
||||
HINT_RANGE_STEP,
|
||||
};
|
||||
|
||||
private:
|
||||
Hint hint;
|
||||
int hint_range_min;
|
||||
int hint_range_max;
|
||||
int hint_range_step;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
virtual String get_caption() const;
|
||||
|
||||
virtual int get_input_port_count() const;
|
||||
virtual PortType get_input_port_type(int p_port) const;
|
||||
virtual String get_input_port_name(int p_port) const;
|
||||
|
||||
virtual int get_output_port_count() const;
|
||||
virtual PortType get_output_port_type(int p_port) const;
|
||||
virtual String get_output_port_name(int p_port) const;
|
||||
|
||||
virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const;
|
||||
virtual String 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 = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty
|
||||
|
||||
void set_hint(Hint p_hint);
|
||||
Hint get_hint() const;
|
||||
|
||||
void set_min(int p_value);
|
||||
int get_min() const;
|
||||
|
||||
void set_max(int p_value);
|
||||
int get_max() const;
|
||||
|
||||
void set_step(int p_value);
|
||||
int get_step() const;
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const;
|
||||
|
||||
VisualShaderNodeIntUniform();
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VisualShaderNodeIntUniform::Hint)
|
||||
|
||||
///////////////////////////////////////
|
||||
|
||||
@ -1669,9 +1836,10 @@ class VisualShaderNodeCompare : public VisualShaderNode {
|
||||
public:
|
||||
enum ComparisonType {
|
||||
CTYPE_SCALAR,
|
||||
CTYPE_SCALAR_INT,
|
||||
CTYPE_VECTOR,
|
||||
CTYPE_BOOLEAN,
|
||||
CTYPE_TRANSFORM
|
||||
CTYPE_TRANSFORM,
|
||||
};
|
||||
|
||||
enum Function {
|
||||
|
Loading…
Reference in New Issue
Block a user