Merge pull request #55576 from Chaosus/vs_new_int_ops
Add bitwise operators to `VisualShaderNodeIntOp`
This commit is contained in:
commit
c033ed21b0
5 changed files with 57 additions and 5 deletions
|
@ -23,7 +23,10 @@
|
|||
<constant name="FUNC_SIGN" value="2" enum="Function">
|
||||
Extracts the sign of the parameter. Translates to [code]sign(x)[/code] in the Godot Shader Language.
|
||||
</constant>
|
||||
<constant name="FUNC_MAX" value="3" enum="Function">
|
||||
<constant name="FUNC_BITWISE_NOT" value="3" enum="Function">
|
||||
Returns the result of bitwise [code]NOT[/code] operation on the integer. Translates to [code]~a[/code] in the Godot Shader Language.
|
||||
</constant>
|
||||
<constant name="FUNC_MAX" value="4" enum="Function">
|
||||
Represents the size of the [enum Function] enum.
|
||||
</constant>
|
||||
</constants>
|
||||
|
|
|
@ -35,7 +35,22 @@
|
|||
<constant name="OP_MIN" value="6" enum="Operator">
|
||||
Returns the lesser of two numbers. Translates to [code]max(a, b)[/code] in the Godot Shader Language.
|
||||
</constant>
|
||||
<constant name="OP_ENUM_SIZE" value="7" enum="Operator">
|
||||
<constant name="OP_BITWISE_AND" value="7" enum="Operator">
|
||||
Returns the result of bitwise [code]AND[/code] operation on the integer. Translates to [code]a & b[/code] in the Godot Shader Language.
|
||||
</constant>
|
||||
<constant name="OP_BITWISE_OR" value="8" enum="Operator">
|
||||
Returns the result of bitwise [code]OR[/code] operation for two integers. Translates to [code]a | b[/code] in the Godot Shader Language.
|
||||
</constant>
|
||||
<constant name="OP_BITWISE_XOR" value="9" enum="Operator">
|
||||
Returns the result of bitwise [code]XOR[/code] operation for two integers. Translates to [code]a ^ b[/code] in the Godot Shader Language.
|
||||
</constant>
|
||||
<constant name="OP_BITWISE_LEFT_SHIFT" value="10" enum="Operator">
|
||||
Returns the result of bitwise left shift operation on the integer. Translates to [code]a << b[/code] in the Godot Shader Language.
|
||||
</constant>
|
||||
<constant name="OP_BITWISE_RIGHT_SHIFT" value="11" enum="Operator">
|
||||
Returns the result of bitwise right shift operation on the integer. Translates to [code]a >> b[/code] in the Godot Shader Language.
|
||||
</constant>
|
||||
<constant name="OP_ENUM_SIZE" value="12" enum="Operator">
|
||||
Represents the size of the [enum Operator] enum.
|
||||
</constant>
|
||||
</constants>
|
||||
|
|
|
@ -4556,6 +4556,7 @@ VisualShaderEditor::VisualShaderEditor() {
|
|||
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("BitwiseNOT", "Scalar", "Functions", "VisualShaderNodeIntFunc", TTR("Returns the result of bitwise NOT (~a) operation on the integer."), VisualShaderNodeIntFunc::FUNC_BITWISE_NOT, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
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", "VisualShaderNodeClamp", TTR("Constrains a value to lie between two further values."), VisualShaderNodeClamp::OP_TYPE_FLOAT, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||
add_options.push_back(AddOption("Clamp", "Scalar", "Functions", "VisualShaderNodeClamp", TTR("Constrains a value to lie between two further values."), VisualShaderNodeClamp::OP_TYPE_INT, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
|
@ -4595,6 +4596,11 @@ VisualShaderEditor::VisualShaderEditor() {
|
|||
|
||||
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("BitwiseAND", "Scalar", "Operators", "VisualShaderNodeIntOp", TTR("Returns the result of bitwise AND (a & b) operation for two integers."), VisualShaderNodeIntOp::OP_BITWISE_AND, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
add_options.push_back(AddOption("BitwiseLeftShift", "Scalar", "Operators", "VisualShaderNodeIntOp", TTR("Returns the result of bitwise left shift (a << b) operation on the integer."), VisualShaderNodeIntOp::OP_BITWISE_LEFT_SHIFT, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
add_options.push_back(AddOption("BitwiseOR", "Scalar", "Operators", "VisualShaderNodeIntOp", TTR("Returns the result of bitwise OR (a | b) operation for two integers."), VisualShaderNodeIntOp::OP_BITWISE_OR, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
add_options.push_back(AddOption("BitwiseRightShift", "Scalar", "Operators", "VisualShaderNodeIntOp", TTR("Returns the result of bitwise right shift (a >> b) operation on the integer."), VisualShaderNodeIntOp::OP_BITWISE_RIGHT_SHIFT, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||
add_options.push_back(AddOption("BitwiseXOR", "Scalar", "Operators", "VisualShaderNodeIntOp", TTR("Returns the result of bitwise XOR (a ^ b) operation on the integer."), VisualShaderNodeIntOp::OP_BITWISE_XOR, 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));
|
||||
|
|
|
@ -1647,6 +1647,21 @@ String VisualShaderNodeIntOp::generate_code(Shader::Mode p_mode, VisualShader::T
|
|||
case OP_MIN:
|
||||
code += "min(" + p_input_vars[0] + ", " + p_input_vars[1] + ");\n";
|
||||
break;
|
||||
case OP_BITWISE_AND:
|
||||
code += p_input_vars[0] + " & " + p_input_vars[1] + ";\n";
|
||||
break;
|
||||
case OP_BITWISE_OR:
|
||||
code += p_input_vars[0] + " | " + p_input_vars[1] + ";\n";
|
||||
break;
|
||||
case OP_BITWISE_XOR:
|
||||
code += p_input_vars[0] + " ^ " + p_input_vars[1] + ";\n";
|
||||
break;
|
||||
case OP_BITWISE_LEFT_SHIFT:
|
||||
code += p_input_vars[0] + " << " + p_input_vars[1] + ";\n";
|
||||
break;
|
||||
case OP_BITWISE_RIGHT_SHIFT:
|
||||
code += p_input_vars[0] + " >> " + p_input_vars[1] + ";\n";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -1677,7 +1692,7 @@ 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,Subtract,Multiply,Divide,Remainder,Max,Min"), "set_operator", "get_operator");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "operator", PROPERTY_HINT_ENUM, "Add,Subtract,Multiply,Divide,Remainder,Max,Min,Bitwise AND,Bitwise OR,Bitwise XOR,Bitwise Left Shift,Bitwise Right Shift"), "set_operator", "get_operator");
|
||||
|
||||
BIND_ENUM_CONSTANT(OP_ADD);
|
||||
BIND_ENUM_CONSTANT(OP_SUB);
|
||||
|
@ -1686,6 +1701,11 @@ void VisualShaderNodeIntOp::_bind_methods() {
|
|||
BIND_ENUM_CONSTANT(OP_MOD);
|
||||
BIND_ENUM_CONSTANT(OP_MAX);
|
||||
BIND_ENUM_CONSTANT(OP_MIN);
|
||||
BIND_ENUM_CONSTANT(OP_BITWISE_AND);
|
||||
BIND_ENUM_CONSTANT(OP_BITWISE_OR);
|
||||
BIND_ENUM_CONSTANT(OP_BITWISE_XOR);
|
||||
BIND_ENUM_CONSTANT(OP_BITWISE_LEFT_SHIFT);
|
||||
BIND_ENUM_CONSTANT(OP_BITWISE_RIGHT_SHIFT);
|
||||
BIND_ENUM_CONSTANT(OP_ENUM_SIZE);
|
||||
}
|
||||
|
||||
|
@ -2333,7 +2353,8 @@ String VisualShaderNodeIntFunc::generate_code(Shader::Mode p_mode, VisualShader:
|
|||
static const char *functions[FUNC_MAX] = {
|
||||
"abs($)",
|
||||
"-($)",
|
||||
"sign($)"
|
||||
"sign($)",
|
||||
"~($)"
|
||||
};
|
||||
|
||||
return " " + p_output_vars[0] + " = " + String(functions[func]).replace("$", p_input_vars[0]) + ";\n";
|
||||
|
@ -2362,11 +2383,12 @@ 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,Negate,Sign"), "set_function", "get_function");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "function", PROPERTY_HINT_ENUM, "Abs,Negate,Sign,Bitwise NOT"), "set_function", "get_function");
|
||||
|
||||
BIND_ENUM_CONSTANT(FUNC_ABS);
|
||||
BIND_ENUM_CONSTANT(FUNC_NEGATE);
|
||||
BIND_ENUM_CONSTANT(FUNC_SIGN);
|
||||
BIND_ENUM_CONSTANT(FUNC_BITWISE_NOT);
|
||||
BIND_ENUM_CONSTANT(FUNC_MAX);
|
||||
}
|
||||
|
||||
|
|
|
@ -579,6 +579,11 @@ public:
|
|||
OP_MOD,
|
||||
OP_MAX,
|
||||
OP_MIN,
|
||||
OP_BITWISE_AND,
|
||||
OP_BITWISE_OR,
|
||||
OP_BITWISE_XOR,
|
||||
OP_BITWISE_LEFT_SHIFT,
|
||||
OP_BITWISE_RIGHT_SHIFT,
|
||||
OP_ENUM_SIZE,
|
||||
};
|
||||
|
||||
|
@ -882,6 +887,7 @@ public:
|
|||
FUNC_ABS,
|
||||
FUNC_NEGATE,
|
||||
FUNC_SIGN,
|
||||
FUNC_BITWISE_NOT,
|
||||
FUNC_MAX,
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue