Merge pull request #57367 from Chaosus/vs_derivative
This commit is contained in:
commit
d7822cbf21
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
<class name="VisualShaderNodeScalarDerivativeFunc" inherits="VisualShaderNode" version="4.0">
|
<class name="VisualShaderNodeDerivativeFunc" inherits="VisualShaderNode" version="4.0">
|
||||||
<brief_description>
|
<brief_description>
|
||||||
Calculates a scalar derivative within the visual shader graph.
|
Calculates a derivative within the visual shader graph.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<description>
|
<description>
|
||||||
This node is only available in [code]Fragment[/code] and [code]Light[/code] visual shaders.
|
This node is only available in [code]Fragment[/code] and [code]Light[/code] visual shaders.
|
||||||
|
@ -9,11 +9,23 @@
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<members>
|
<members>
|
||||||
<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeScalarDerivativeFunc.Function" default="0">
|
<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeDerivativeFunc.Function" default="0">
|
||||||
The derivative type. See [enum Function] for options.
|
A derivative function type. See [enum Function] for options.
|
||||||
|
</member>
|
||||||
|
<member name="op_type" type="int" setter="set_op_type" getter="get_op_type" enum="VisualShaderNodeDerivativeFunc.OpType" default="0">
|
||||||
|
A type of operands and returned value. See [enum OpType] for options.
|
||||||
</member>
|
</member>
|
||||||
</members>
|
</members>
|
||||||
<constants>
|
<constants>
|
||||||
|
<constant name="OP_TYPE_SCALAR" value="0" enum="OpType">
|
||||||
|
A floating-point scalar.
|
||||||
|
</constant>
|
||||||
|
<constant name="OP_TYPE_VECTOR" value="1" enum="OpType">
|
||||||
|
A 3D vector type.
|
||||||
|
</constant>
|
||||||
|
<constant name="OP_TYPE_MAX" value="2" enum="OpType">
|
||||||
|
Represents the size of the [enum OpType] enum.
|
||||||
|
</constant>
|
||||||
<constant name="FUNC_SUM" value="0" enum="Function">
|
<constant name="FUNC_SUM" value="0" enum="Function">
|
||||||
Sum of absolute derivative in [code]x[/code] and [code]y[/code].
|
Sum of absolute derivative in [code]x[/code] and [code]y[/code].
|
||||||
</constant>
|
</constant>
|
|
@ -1,30 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
|
||||||
<class name="VisualShaderNodeVectorDerivativeFunc" inherits="VisualShaderNode" version="4.0">
|
|
||||||
<brief_description>
|
|
||||||
Calculates a vector derivative within the visual shader graph.
|
|
||||||
</brief_description>
|
|
||||||
<description>
|
|
||||||
This node is only available in [code]Fragment[/code] and [code]Light[/code] visual shaders.
|
|
||||||
</description>
|
|
||||||
<tutorials>
|
|
||||||
</tutorials>
|
|
||||||
<members>
|
|
||||||
<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeVectorDerivativeFunc.Function" default="0">
|
|
||||||
A derivative type. See [enum Function] for options.
|
|
||||||
</member>
|
|
||||||
</members>
|
|
||||||
<constants>
|
|
||||||
<constant name="FUNC_SUM" value="0" enum="Function">
|
|
||||||
Sum of absolute derivative in [code]x[/code] and [code]y[/code].
|
|
||||||
</constant>
|
|
||||||
<constant name="FUNC_X" value="1" enum="Function">
|
|
||||||
Derivative in [code]x[/code] using local differencing.
|
|
||||||
</constant>
|
|
||||||
<constant name="FUNC_Y" value="2" enum="Function">
|
|
||||||
Derivative in [code]y[/code] using local differencing.
|
|
||||||
</constant>
|
|
||||||
<constant name="FUNC_MAX" value="3" enum="Function">
|
|
||||||
Represents the size of the [enum Function] enum.
|
|
||||||
</constant>
|
|
||||||
</constants>
|
|
||||||
</class>
|
|
|
@ -2345,19 +2345,13 @@ void VisualShaderEditor::_setup_node(VisualShaderNode *p_node, const Vector<Vari
|
||||||
|
|
||||||
// DERIVATIVE
|
// DERIVATIVE
|
||||||
{
|
{
|
||||||
VisualShaderNodeScalarDerivativeFunc *sderFunc = Object::cast_to<VisualShaderNodeScalarDerivativeFunc>(p_node);
|
VisualShaderNodeDerivativeFunc *derFunc = Object::cast_to<VisualShaderNodeDerivativeFunc>(p_node);
|
||||||
|
|
||||||
if (sderFunc) {
|
if (derFunc) {
|
||||||
ERR_FAIL_COND(p_ops[0].get_type() != Variant::INT);
|
ERR_FAIL_COND(p_ops[0].get_type() != Variant::INT);
|
||||||
sderFunc->set_function((VisualShaderNodeScalarDerivativeFunc::Function)(int)p_ops[0]);
|
ERR_FAIL_COND(p_ops[1].get_type() != Variant::INT);
|
||||||
return;
|
derFunc->set_function((VisualShaderNodeDerivativeFunc::Function)(int)p_ops[0]);
|
||||||
}
|
derFunc->set_op_type((VisualShaderNodeDerivativeFunc::OpType)(int)p_ops[1]);
|
||||||
|
|
||||||
VisualShaderNodeVectorDerivativeFunc *vderFunc = Object::cast_to<VisualShaderNodeVectorDerivativeFunc>(p_node);
|
|
||||||
|
|
||||||
if (vderFunc) {
|
|
||||||
ERR_FAIL_COND(p_ops[0].get_type() != Variant::INT);
|
|
||||||
vderFunc->set_function((VisualShaderNodeVectorDerivativeFunc::Function)(int)p_ops[0]);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4547,8 +4541,8 @@ VisualShaderEditor::VisualShaderEditor() {
|
||||||
// SCALAR
|
// SCALAR
|
||||||
|
|
||||||
add_options.push_back(AddOption("FloatFunc", "Scalar", "Common", "VisualShaderNodeFloatFunc", TTR("Float function."), {}, VisualShaderNode::PORT_TYPE_SCALAR));
|
add_options.push_back(AddOption("FloatFunc", "Scalar", "Common", "VisualShaderNodeFloatFunc", TTR("Float function."), {}, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||||
add_options.push_back(AddOption("IntFunc", "Scalar", "Common", "VisualShaderNodeIntFunc", TTR("Integer function."), {}, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
|
||||||
add_options.push_back(AddOption("FloatOp", "Scalar", "Common", "VisualShaderNodeFloatOp", TTR("Float operator."), {}, VisualShaderNode::PORT_TYPE_SCALAR));
|
add_options.push_back(AddOption("FloatOp", "Scalar", "Common", "VisualShaderNodeFloatOp", TTR("Float operator."), {}, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||||
|
add_options.push_back(AddOption("IntFunc", "Scalar", "Common", "VisualShaderNodeIntFunc", TTR("Integer function."), {}, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||||
add_options.push_back(AddOption("IntOp", "Scalar", "Common", "VisualShaderNodeIntOp", TTR("Integer operator."), {}, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
add_options.push_back(AddOption("IntOp", "Scalar", "Common", "VisualShaderNodeIntOp", TTR("Integer operator."), {}, VisualShaderNode::PORT_TYPE_SCALAR_INT));
|
||||||
|
|
||||||
// CONSTANTS
|
// CONSTANTS
|
||||||
|
@ -4574,6 +4568,8 @@ VisualShaderEditor::VisualShaderEditor() {
|
||||||
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("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("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("Degrees", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Converts a quantity in radians to degrees."), { VisualShaderNodeFloatFunc::FUNC_DEGREES }, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||||
|
add_options.push_back(AddOption("DFdX", "Scalar", "Functions", "VisualShaderNodeDerivativeFunc", TTR("(Fragment/Light mode only) (Scalar) Derivative in 'x' using local differencing."), { VisualShaderNodeDerivativeFunc::FUNC_X, VisualShaderNodeDerivativeFunc::OP_TYPE_SCALAR }, VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_FRAGMENT | TYPE_FLAGS_LIGHT, -1, true));
|
||||||
|
add_options.push_back(AddOption("DFdY", "Scalar", "Functions", "VisualShaderNodeDerivativeFunc", TTR("(Fragment/Light mode only) (Scalar) Derivative in 'y' using local differencing."), { VisualShaderNodeDerivativeFunc::FUNC_Y, VisualShaderNodeDerivativeFunc::OP_TYPE_SCALAR }, VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_FRAGMENT | TYPE_FLAGS_LIGHT, -1, true));
|
||||||
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("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("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("Floor", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Finds the nearest integer less than or equal to the parameter."), { VisualShaderNodeFloatFunc::FUNC_FLOOR }, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||||
|
@ -4601,6 +4597,7 @@ VisualShaderEditor::VisualShaderEditor() {
|
||||||
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("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", "VisualShaderNodeSmoothStep", 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."), { VisualShaderNodeSmoothStep::OP_TYPE_SCALAR }, VisualShaderNode::PORT_TYPE_SCALAR));
|
add_options.push_back(AddOption("SmoothStep", "Scalar", "Functions", "VisualShaderNodeSmoothStep", 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."), { VisualShaderNodeSmoothStep::OP_TYPE_SCALAR }, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||||
add_options.push_back(AddOption("Step", "Scalar", "Functions", "VisualShaderNodeStep", TTR("Step function( scalar(edge), scalar(x) ).\n\nReturns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."), { VisualShaderNodeStep::OP_TYPE_SCALAR }, VisualShaderNode::PORT_TYPE_SCALAR));
|
add_options.push_back(AddOption("Step", "Scalar", "Functions", "VisualShaderNodeStep", TTR("Step function( scalar(edge), scalar(x) ).\n\nReturns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."), { VisualShaderNodeStep::OP_TYPE_SCALAR }, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||||
|
add_options.push_back(AddOption("Sum", "Scalar", "Functions", "VisualShaderNodeDerivativeFunc", TTR("(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and 'y'."), { VisualShaderNodeDerivativeFunc::FUNC_SUM, VisualShaderNodeDerivativeFunc::OP_TYPE_SCALAR }, VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_FRAGMENT | TYPE_FLAGS_LIGHT, -1, true));
|
||||||
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("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("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("Trunc", "Scalar", "Functions", "VisualShaderNodeFloatFunc", TTR("Finds the truncated value of the parameter."), { VisualShaderNodeFloatFunc::FUNC_TRUNC }, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||||
|
@ -4706,6 +4703,8 @@ VisualShaderEditor::VisualShaderEditor() {
|
||||||
add_options.push_back(AddOption("CosH", "Vector", "Functions", "VisualShaderNodeVectorFunc", TTR("Returns the hyperbolic cosine of the parameter."), { VisualShaderNodeVectorFunc::FUNC_COSH }, VisualShaderNode::PORT_TYPE_VECTOR));
|
add_options.push_back(AddOption("CosH", "Vector", "Functions", "VisualShaderNodeVectorFunc", TTR("Returns the hyperbolic cosine of the parameter."), { VisualShaderNodeVectorFunc::FUNC_COSH }, VisualShaderNode::PORT_TYPE_VECTOR));
|
||||||
add_options.push_back(AddOption("Cross", "Vector", "Functions", "VisualShaderNodeVectorOp", TTR("Calculates the cross product of two vectors."), { VisualShaderNodeVectorOp::OP_CROSS }, VisualShaderNode::PORT_TYPE_VECTOR));
|
add_options.push_back(AddOption("Cross", "Vector", "Functions", "VisualShaderNodeVectorOp", TTR("Calculates the cross product of two vectors."), { VisualShaderNodeVectorOp::OP_CROSS }, VisualShaderNode::PORT_TYPE_VECTOR));
|
||||||
add_options.push_back(AddOption("Degrees", "Vector", "Functions", "VisualShaderNodeVectorFunc", TTR("Converts a quantity in radians to degrees."), { VisualShaderNodeVectorFunc::FUNC_DEGREES }, VisualShaderNode::PORT_TYPE_VECTOR));
|
add_options.push_back(AddOption("Degrees", "Vector", "Functions", "VisualShaderNodeVectorFunc", TTR("Converts a quantity in radians to degrees."), { VisualShaderNodeVectorFunc::FUNC_DEGREES }, VisualShaderNode::PORT_TYPE_VECTOR));
|
||||||
|
add_options.push_back(AddOption("DFdX", "Vector", "Functions", "VisualShaderNodeDerivativeFunc", TTR("(Fragment/Light mode only) (Vector) Derivative in 'x' using local differencing."), { VisualShaderNodeDerivativeFunc::FUNC_X, VisualShaderNodeDerivativeFunc::OP_TYPE_VECTOR }, VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT | TYPE_FLAGS_LIGHT, -1, true));
|
||||||
|
add_options.push_back(AddOption("DFdY", "Vector", "Functions", "VisualShaderNodeDerivativeFunc", TTR("(Fragment/Light mode only) (Vector) Derivative in 'y' using local differencing."), { VisualShaderNodeDerivativeFunc::FUNC_Y, VisualShaderNodeDerivativeFunc::OP_TYPE_VECTOR }, VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT | TYPE_FLAGS_LIGHT, -1, true));
|
||||||
add_options.push_back(AddOption("Distance", "Vector", "Functions", "VisualShaderNodeVectorDistance", TTR("Returns the distance between two points."), {}, VisualShaderNode::PORT_TYPE_SCALAR));
|
add_options.push_back(AddOption("Distance", "Vector", "Functions", "VisualShaderNodeVectorDistance", TTR("Returns the distance between two points."), {}, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||||
add_options.push_back(AddOption("Dot", "Vector", "Functions", "VisualShaderNodeDotProduct", TTR("Calculates the dot product of two vectors."), {}, VisualShaderNode::PORT_TYPE_SCALAR));
|
add_options.push_back(AddOption("Dot", "Vector", "Functions", "VisualShaderNodeDotProduct", TTR("Calculates the dot product of two vectors."), {}, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||||
add_options.push_back(AddOption("Exp", "Vector", "Functions", "VisualShaderNodeVectorFunc", TTR("Base-e Exponential."), { VisualShaderNodeVectorFunc::FUNC_EXP }, VisualShaderNode::PORT_TYPE_VECTOR));
|
add_options.push_back(AddOption("Exp", "Vector", "Functions", "VisualShaderNodeVectorFunc", TTR("Base-e Exponential."), { VisualShaderNodeVectorFunc::FUNC_EXP }, VisualShaderNode::PORT_TYPE_VECTOR));
|
||||||
|
@ -4741,6 +4740,7 @@ VisualShaderEditor::VisualShaderEditor() {
|
||||||
add_options.push_back(AddOption("SmoothStepS", "Vector", "Functions", "VisualShaderNodeSmoothStep", TTR("SmoothStep function( scalar(edge0), scalar(edge1), vector(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."), { VisualShaderNodeSmoothStep::OP_TYPE_VECTOR_SCALAR }, VisualShaderNode::PORT_TYPE_VECTOR));
|
add_options.push_back(AddOption("SmoothStepS", "Vector", "Functions", "VisualShaderNodeSmoothStep", TTR("SmoothStep function( scalar(edge0), scalar(edge1), vector(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."), { VisualShaderNodeSmoothStep::OP_TYPE_VECTOR_SCALAR }, VisualShaderNode::PORT_TYPE_VECTOR));
|
||||||
add_options.push_back(AddOption("Step", "Vector", "Functions", "VisualShaderNodeStep", TTR("Step function( vector(edge), vector(x) ).\n\nReturns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."), { VisualShaderNodeStep::OP_TYPE_VECTOR }, VisualShaderNode::PORT_TYPE_VECTOR));
|
add_options.push_back(AddOption("Step", "Vector", "Functions", "VisualShaderNodeStep", TTR("Step function( vector(edge), vector(x) ).\n\nReturns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."), { VisualShaderNodeStep::OP_TYPE_VECTOR }, VisualShaderNode::PORT_TYPE_VECTOR));
|
||||||
add_options.push_back(AddOption("StepS", "Vector", "Functions", "VisualShaderNodeStep", TTR("Step function( scalar(edge), vector(x) ).\n\nReturns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."), { VisualShaderNodeStep::OP_TYPE_VECTOR_SCALAR }, VisualShaderNode::PORT_TYPE_VECTOR));
|
add_options.push_back(AddOption("StepS", "Vector", "Functions", "VisualShaderNodeStep", TTR("Step function( scalar(edge), vector(x) ).\n\nReturns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."), { VisualShaderNodeStep::OP_TYPE_VECTOR_SCALAR }, VisualShaderNode::PORT_TYPE_VECTOR));
|
||||||
|
add_options.push_back(AddOption("Sum", "Vector", "Functions", "VisualShaderNodeDerivativeFunc", TTR("(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and 'y'."), { VisualShaderNodeDerivativeFunc::FUNC_SUM, VisualShaderNodeDerivativeFunc::OP_TYPE_VECTOR }, VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT | TYPE_FLAGS_LIGHT, -1, true));
|
||||||
add_options.push_back(AddOption("Tan", "Vector", "Functions", "VisualShaderNodeVectorFunc", TTR("Returns the tangent of the parameter."), { VisualShaderNodeVectorFunc::FUNC_TAN }, VisualShaderNode::PORT_TYPE_VECTOR));
|
add_options.push_back(AddOption("Tan", "Vector", "Functions", "VisualShaderNodeVectorFunc", TTR("Returns the tangent of the parameter."), { VisualShaderNodeVectorFunc::FUNC_TAN }, VisualShaderNode::PORT_TYPE_VECTOR));
|
||||||
add_options.push_back(AddOption("TanH", "Vector", "Functions", "VisualShaderNodeVectorFunc", TTR("Returns the hyperbolic tangent of the parameter."), { VisualShaderNodeVectorFunc::FUNC_TANH }, VisualShaderNode::PORT_TYPE_VECTOR));
|
add_options.push_back(AddOption("TanH", "Vector", "Functions", "VisualShaderNodeVectorFunc", TTR("Returns the hyperbolic tangent of the parameter."), { VisualShaderNodeVectorFunc::FUNC_TANH }, VisualShaderNode::PORT_TYPE_VECTOR));
|
||||||
add_options.push_back(AddOption("Trunc", "Vector", "Functions", "VisualShaderNodeVectorFunc", TTR("Finds the truncated value of the parameter."), { VisualShaderNodeVectorFunc::FUNC_TRUNC }, VisualShaderNode::PORT_TYPE_VECTOR));
|
add_options.push_back(AddOption("Trunc", "Vector", "Functions", "VisualShaderNodeVectorFunc", TTR("Finds the truncated value of the parameter."), { VisualShaderNodeVectorFunc::FUNC_TRUNC }, VisualShaderNode::PORT_TYPE_VECTOR));
|
||||||
|
@ -4757,20 +4757,12 @@ VisualShaderEditor::VisualShaderEditor() {
|
||||||
// SPECIAL
|
// SPECIAL
|
||||||
|
|
||||||
add_options.push_back(AddOption("Comment", "Special", "", "VisualShaderNodeComment", TTR("A rectangular area with a description string for better graph organization.")));
|
add_options.push_back(AddOption("Comment", "Special", "", "VisualShaderNodeComment", TTR("A rectangular area with a description string for better graph organization.")));
|
||||||
|
add_options.push_back(AddOption("DerivativeFunc", "Special", "", "VisualShaderNodeDerivativeFunc", TTR("(Fragment/Light mode only) Derivative function."), {}, VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_FRAGMENT | TYPE_FLAGS_LIGHT, -1, true));
|
||||||
add_options.push_back(AddOption("Expression", "Special", "", "VisualShaderNodeExpression", TTR("Custom Godot Shader Language expression, with custom amount of input and output ports. This is a direct injection of code into the vertex/fragment/light function, do not use it to write the function declarations inside.")));
|
add_options.push_back(AddOption("Expression", "Special", "", "VisualShaderNodeExpression", TTR("Custom Godot Shader Language expression, with custom amount of input and output ports. This is a direct injection of code into the vertex/fragment/light function, do not use it to write the function declarations inside.")));
|
||||||
add_options.push_back(AddOption("Fresnel", "Special", "", "VisualShaderNodeFresnel", TTR("Returns falloff based on the dot product of surface normal and view direction of camera (pass associated inputs to it)."), {}, VisualShaderNode::PORT_TYPE_SCALAR));
|
add_options.push_back(AddOption("Fresnel", "Special", "", "VisualShaderNodeFresnel", TTR("Returns falloff based on the dot product of surface normal and view direction of camera (pass associated inputs to it)."), {}, VisualShaderNode::PORT_TYPE_SCALAR));
|
||||||
add_options.push_back(AddOption("GlobalExpression", "Special", "", "VisualShaderNodeGlobalExpression", TTR("Custom Godot Shader Language expression, which is placed on top of the resulted shader. You can place various function definitions inside and call it later in the Expressions. You can also declare varyings, uniforms and constants.")));
|
add_options.push_back(AddOption("GlobalExpression", "Special", "", "VisualShaderNodeGlobalExpression", TTR("Custom Godot Shader Language expression, which is placed on top of the resulted shader. You can place various function definitions inside and call it later in the Expressions. You can also declare varyings, uniforms and constants.")));
|
||||||
add_options.push_back(AddOption("UniformRef", "Special", "", "VisualShaderNodeUniformRef", TTR("A reference to an existing uniform.")));
|
add_options.push_back(AddOption("UniformRef", "Special", "", "VisualShaderNodeUniformRef", TTR("A reference to an existing uniform.")));
|
||||||
|
|
||||||
add_options.push_back(AddOption("ScalarDerivativeFunc", "Special", "Common", "VisualShaderNodeScalarDerivativeFunc", TTR("(Fragment/Light mode only) Scalar derivative function."), {}, VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_FRAGMENT | TYPE_FLAGS_LIGHT, -1, true));
|
|
||||||
add_options.push_back(AddOption("VectorDerivativeFunc", "Special", "Common", "VisualShaderNodeVectorDerivativeFunc", TTR("(Fragment/Light mode only) Vector derivative function."), {}, VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT | TYPE_FLAGS_LIGHT, -1, true));
|
|
||||||
|
|
||||||
add_options.push_back(AddOption("DdX", "Special", "Derivative", "VisualShaderNodeVectorDerivativeFunc", TTR("(Fragment/Light mode only) (Vector) Derivative in 'x' using local differencing."), { VisualShaderNodeVectorDerivativeFunc::FUNC_X }, VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT | TYPE_FLAGS_LIGHT, -1, true));
|
|
||||||
add_options.push_back(AddOption("DdXS", "Special", "Derivative", "VisualShaderNodeScalarDerivativeFunc", TTR("(Fragment/Light mode only) (Scalar) Derivative in 'x' using local differencing."), { VisualShaderNodeScalarDerivativeFunc::FUNC_X }, VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_FRAGMENT | TYPE_FLAGS_LIGHT, -1, true));
|
|
||||||
add_options.push_back(AddOption("DdY", "Special", "Derivative", "VisualShaderNodeVectorDerivativeFunc", TTR("(Fragment/Light mode only) (Vector) Derivative in 'y' using local differencing."), { VisualShaderNodeVectorDerivativeFunc::FUNC_Y }, VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT | TYPE_FLAGS_LIGHT, -1, true));
|
|
||||||
add_options.push_back(AddOption("DdYS", "Special", "Derivative", "VisualShaderNodeScalarDerivativeFunc", TTR("(Fragment/Light mode only) (Scalar) Derivative in 'y' using local differencing."), { VisualShaderNodeScalarDerivativeFunc::FUNC_Y }, VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_FRAGMENT | TYPE_FLAGS_LIGHT, -1, true));
|
|
||||||
add_options.push_back(AddOption("Sum", "Special", "Derivative", "VisualShaderNodeVectorDerivativeFunc", TTR("(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and 'y'."), { VisualShaderNodeVectorDerivativeFunc::FUNC_SUM }, VisualShaderNode::PORT_TYPE_VECTOR, TYPE_FLAGS_FRAGMENT | TYPE_FLAGS_LIGHT, -1, true));
|
|
||||||
add_options.push_back(AddOption("SumS", "Special", "Derivative", "VisualShaderNodeScalarDerivativeFunc", TTR("(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and 'y'."), { VisualShaderNodeScalarDerivativeFunc::FUNC_SUM }, VisualShaderNode::PORT_TYPE_SCALAR, TYPE_FLAGS_FRAGMENT | TYPE_FLAGS_LIGHT, -1, true));
|
|
||||||
custom_node_option_idx = add_options.size();
|
custom_node_option_idx = add_options.size();
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -577,8 +577,7 @@ void register_scene_types() {
|
||||||
GDREGISTER_CLASS(VisualShaderNodeDotProduct);
|
GDREGISTER_CLASS(VisualShaderNodeDotProduct);
|
||||||
GDREGISTER_CLASS(VisualShaderNodeVectorLen);
|
GDREGISTER_CLASS(VisualShaderNodeVectorLen);
|
||||||
GDREGISTER_CLASS(VisualShaderNodeDeterminant);
|
GDREGISTER_CLASS(VisualShaderNodeDeterminant);
|
||||||
GDREGISTER_CLASS(VisualShaderNodeScalarDerivativeFunc);
|
GDREGISTER_CLASS(VisualShaderNodeDerivativeFunc);
|
||||||
GDREGISTER_CLASS(VisualShaderNodeVectorDerivativeFunc);
|
|
||||||
GDREGISTER_CLASS(VisualShaderNodeClamp);
|
GDREGISTER_CLASS(VisualShaderNodeClamp);
|
||||||
GDREGISTER_CLASS(VisualShaderNodeFaceForward);
|
GDREGISTER_CLASS(VisualShaderNodeFaceForward);
|
||||||
GDREGISTER_CLASS(VisualShaderNodeOuterProduct);
|
GDREGISTER_CLASS(VisualShaderNodeOuterProduct);
|
||||||
|
@ -1024,6 +1023,8 @@ void register_scene_types() {
|
||||||
ClassDB::add_compatibility_class("VisualShaderNodeVectorScalarStep", "VisualShaderNodeStep");
|
ClassDB::add_compatibility_class("VisualShaderNodeVectorScalarStep", "VisualShaderNodeStep");
|
||||||
ClassDB::add_compatibility_class("VisualShaderNodeScalarSwitch", "VisualShaderNodeSwitch");
|
ClassDB::add_compatibility_class("VisualShaderNodeScalarSwitch", "VisualShaderNodeSwitch");
|
||||||
ClassDB::add_compatibility_class("VisualShaderNodeScalarTransformMult", "VisualShaderNodeTransformOp");
|
ClassDB::add_compatibility_class("VisualShaderNodeScalarTransformMult", "VisualShaderNodeTransformOp");
|
||||||
|
ClassDB::add_compatibility_class("VisualShaderNodeScalarDerivativeFunc", "VisualShaderNodeDerivativeFunc");
|
||||||
|
ClassDB::add_compatibility_class("VisualShaderNodeVectorDerivativeFunc", "VisualShaderNodeDerivativeFunc");
|
||||||
ClassDB::add_compatibility_class("World", "World3D");
|
ClassDB::add_compatibility_class("World", "World3D");
|
||||||
#endif /* DISABLE_DEPRECATED */
|
#endif /* DISABLE_DEPRECATED */
|
||||||
|
|
||||||
|
|
|
@ -2996,37 +2996,43 @@ VisualShaderNodeDeterminant::VisualShaderNodeDeterminant() {
|
||||||
set_input_port_default_value(0, Transform3D());
|
set_input_port_default_value(0, Transform3D());
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////// Scalar Derivative Function
|
////////////// Derivative Function
|
||||||
|
|
||||||
String VisualShaderNodeScalarDerivativeFunc::get_caption() const {
|
String VisualShaderNodeDerivativeFunc::get_caption() const {
|
||||||
return "ScalarDerivativeFunc";
|
return "DerivativeFunc";
|
||||||
}
|
}
|
||||||
|
|
||||||
int VisualShaderNodeScalarDerivativeFunc::get_input_port_count() const {
|
int VisualShaderNodeDerivativeFunc::get_input_port_count() const {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
VisualShaderNodeScalarDerivativeFunc::PortType VisualShaderNodeScalarDerivativeFunc::get_input_port_type(int p_port) const {
|
VisualShaderNodeDerivativeFunc::PortType VisualShaderNodeDerivativeFunc::get_input_port_type(int p_port) const {
|
||||||
|
if (op_type == OP_TYPE_VECTOR) {
|
||||||
|
return PORT_TYPE_VECTOR;
|
||||||
|
}
|
||||||
return PORT_TYPE_SCALAR;
|
return PORT_TYPE_SCALAR;
|
||||||
}
|
}
|
||||||
|
|
||||||
String VisualShaderNodeScalarDerivativeFunc::get_input_port_name(int p_port) const {
|
String VisualShaderNodeDerivativeFunc::get_input_port_name(int p_port) const {
|
||||||
return "";
|
return "p";
|
||||||
}
|
}
|
||||||
|
|
||||||
int VisualShaderNodeScalarDerivativeFunc::get_output_port_count() const {
|
int VisualShaderNodeDerivativeFunc::get_output_port_count() const {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
VisualShaderNodeScalarDerivativeFunc::PortType VisualShaderNodeScalarDerivativeFunc::get_output_port_type(int p_port) const {
|
VisualShaderNodeDerivativeFunc::PortType VisualShaderNodeDerivativeFunc::get_output_port_type(int p_port) const {
|
||||||
|
if (op_type == OP_TYPE_VECTOR) {
|
||||||
|
return PORT_TYPE_VECTOR;
|
||||||
|
}
|
||||||
return PORT_TYPE_SCALAR;
|
return PORT_TYPE_SCALAR;
|
||||||
}
|
}
|
||||||
|
|
||||||
String VisualShaderNodeScalarDerivativeFunc::get_output_port_name(int p_port) const {
|
String VisualShaderNodeDerivativeFunc::get_output_port_name(int p_port) const {
|
||||||
return "";
|
return "result";
|
||||||
}
|
}
|
||||||
|
|
||||||
String VisualShaderNodeScalarDerivativeFunc::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 VisualShaderNodeDerivativeFunc::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 *functions[FUNC_MAX] = {
|
static const char *functions[FUNC_MAX] = {
|
||||||
"fwidth($)",
|
"fwidth($)",
|
||||||
"dFdx($)",
|
"dFdx($)",
|
||||||
|
@ -3038,7 +3044,30 @@ String VisualShaderNodeScalarDerivativeFunc::generate_code(Shader::Mode p_mode,
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VisualShaderNodeScalarDerivativeFunc::set_function(Function p_func) {
|
void VisualShaderNodeDerivativeFunc::set_op_type(OpType p_op_type) {
|
||||||
|
ERR_FAIL_INDEX((int)p_op_type, int(OP_TYPE_MAX));
|
||||||
|
if (op_type == p_op_type) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch (p_op_type) {
|
||||||
|
case OP_TYPE_SCALAR:
|
||||||
|
set_input_port_default_value(0, 0.0);
|
||||||
|
break;
|
||||||
|
case OP_TYPE_VECTOR:
|
||||||
|
set_input_port_default_value(0, Vector3(0.0, 0.0, 0.0));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
op_type = p_op_type;
|
||||||
|
emit_changed();
|
||||||
|
}
|
||||||
|
|
||||||
|
VisualShaderNodeDerivativeFunc::OpType VisualShaderNodeDerivativeFunc::get_op_type() const {
|
||||||
|
return op_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
void VisualShaderNodeDerivativeFunc::set_function(Function p_func) {
|
||||||
ERR_FAIL_INDEX(int(p_func), int(FUNC_MAX));
|
ERR_FAIL_INDEX(int(p_func), int(FUNC_MAX));
|
||||||
if (func == p_func) {
|
if (func == p_func) {
|
||||||
return;
|
return;
|
||||||
|
@ -3047,109 +3076,41 @@ void VisualShaderNodeScalarDerivativeFunc::set_function(Function p_func) {
|
||||||
emit_changed();
|
emit_changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
VisualShaderNodeScalarDerivativeFunc::Function VisualShaderNodeScalarDerivativeFunc::get_function() const {
|
VisualShaderNodeDerivativeFunc::Function VisualShaderNodeDerivativeFunc::get_function() const {
|
||||||
return func;
|
return func;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<StringName> VisualShaderNodeScalarDerivativeFunc::get_editable_properties() const {
|
Vector<StringName> VisualShaderNodeDerivativeFunc::get_editable_properties() const {
|
||||||
Vector<StringName> props;
|
Vector<StringName> props;
|
||||||
|
props.push_back("op_type");
|
||||||
props.push_back("function");
|
props.push_back("function");
|
||||||
return props;
|
return props;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VisualShaderNodeScalarDerivativeFunc::_bind_methods() {
|
void VisualShaderNodeDerivativeFunc::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("set_function", "func"), &VisualShaderNodeScalarDerivativeFunc::set_function);
|
ClassDB::bind_method(D_METHOD("set_op_type", "type"), &VisualShaderNodeDerivativeFunc::set_op_type);
|
||||||
ClassDB::bind_method(D_METHOD("get_function"), &VisualShaderNodeScalarDerivativeFunc::get_function);
|
ClassDB::bind_method(D_METHOD("get_op_type"), &VisualShaderNodeDerivativeFunc::get_op_type);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("set_function", "func"), &VisualShaderNodeDerivativeFunc::set_function);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_function"), &VisualShaderNodeDerivativeFunc::get_function);
|
||||||
|
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "op_type", PROPERTY_HINT_ENUM, "Scalar,Vector"), "set_op_type", "get_op_type");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "function", PROPERTY_HINT_ENUM, "Sum,X,Y"), "set_function", "get_function");
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "function", PROPERTY_HINT_ENUM, "Sum,X,Y"), "set_function", "get_function");
|
||||||
|
|
||||||
|
BIND_ENUM_CONSTANT(OP_TYPE_SCALAR);
|
||||||
|
BIND_ENUM_CONSTANT(OP_TYPE_VECTOR);
|
||||||
|
BIND_ENUM_CONSTANT(OP_TYPE_MAX);
|
||||||
|
|
||||||
BIND_ENUM_CONSTANT(FUNC_SUM);
|
BIND_ENUM_CONSTANT(FUNC_SUM);
|
||||||
BIND_ENUM_CONSTANT(FUNC_X);
|
BIND_ENUM_CONSTANT(FUNC_X);
|
||||||
BIND_ENUM_CONSTANT(FUNC_Y);
|
BIND_ENUM_CONSTANT(FUNC_Y);
|
||||||
BIND_ENUM_CONSTANT(FUNC_MAX);
|
BIND_ENUM_CONSTANT(FUNC_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
VisualShaderNodeScalarDerivativeFunc::VisualShaderNodeScalarDerivativeFunc() {
|
VisualShaderNodeDerivativeFunc::VisualShaderNodeDerivativeFunc() {
|
||||||
set_input_port_default_value(0, 0.0);
|
set_input_port_default_value(0, 0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////// Vector Derivative Function
|
|
||||||
|
|
||||||
String VisualShaderNodeVectorDerivativeFunc::get_caption() const {
|
|
||||||
return "VectorDerivativeFunc";
|
|
||||||
}
|
|
||||||
|
|
||||||
int VisualShaderNodeVectorDerivativeFunc::get_input_port_count() const {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
VisualShaderNodeVectorDerivativeFunc::PortType VisualShaderNodeVectorDerivativeFunc::get_input_port_type(int p_port) const {
|
|
||||||
return PORT_TYPE_VECTOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
String VisualShaderNodeVectorDerivativeFunc::get_input_port_name(int p_port) const {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
int VisualShaderNodeVectorDerivativeFunc::get_output_port_count() const {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
VisualShaderNodeVectorDerivativeFunc::PortType VisualShaderNodeVectorDerivativeFunc::get_output_port_type(int p_port) const {
|
|
||||||
return PORT_TYPE_VECTOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
String VisualShaderNodeVectorDerivativeFunc::get_output_port_name(int p_port) const {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
String VisualShaderNodeVectorDerivativeFunc::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 *functions[FUNC_MAX] = {
|
|
||||||
"fwidth($)",
|
|
||||||
"dFdx($)",
|
|
||||||
"dFdy($)"
|
|
||||||
};
|
|
||||||
|
|
||||||
String code;
|
|
||||||
code += " " + p_output_vars[0] + " = " + String(functions[func]).replace("$", p_input_vars[0]) + ";\n";
|
|
||||||
return code;
|
|
||||||
}
|
|
||||||
|
|
||||||
void VisualShaderNodeVectorDerivativeFunc::set_function(Function p_func) {
|
|
||||||
ERR_FAIL_INDEX(int(p_func), int(FUNC_MAX));
|
|
||||||
if (func == p_func) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
func = p_func;
|
|
||||||
emit_changed();
|
|
||||||
}
|
|
||||||
|
|
||||||
VisualShaderNodeVectorDerivativeFunc::Function VisualShaderNodeVectorDerivativeFunc::get_function() const {
|
|
||||||
return func;
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector<StringName> VisualShaderNodeVectorDerivativeFunc::get_editable_properties() const {
|
|
||||||
Vector<StringName> props;
|
|
||||||
props.push_back("function");
|
|
||||||
return props;
|
|
||||||
}
|
|
||||||
|
|
||||||
void VisualShaderNodeVectorDerivativeFunc::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("set_function", "func"), &VisualShaderNodeVectorDerivativeFunc::set_function);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_function"), &VisualShaderNodeVectorDerivativeFunc::get_function);
|
|
||||||
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "function", PROPERTY_HINT_ENUM, "Sum,X,Y"), "set_function", "get_function");
|
|
||||||
|
|
||||||
BIND_ENUM_CONSTANT(FUNC_SUM);
|
|
||||||
BIND_ENUM_CONSTANT(FUNC_X);
|
|
||||||
BIND_ENUM_CONSTANT(FUNC_Y);
|
|
||||||
BIND_ENUM_CONSTANT(FUNC_MAX);
|
|
||||||
}
|
|
||||||
|
|
||||||
VisualShaderNodeVectorDerivativeFunc::VisualShaderNodeVectorDerivativeFunc() {
|
|
||||||
set_input_port_default_value(0, Vector3());
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////// Clamp
|
////////////// Clamp
|
||||||
|
|
||||||
String VisualShaderNodeClamp::get_caption() const {
|
String VisualShaderNodeClamp::get_caption() const {
|
||||||
|
|
|
@ -1235,13 +1235,19 @@ public:
|
||||||
VARIANT_ENUM_CAST(VisualShaderNodeClamp::OpType)
|
VARIANT_ENUM_CAST(VisualShaderNodeClamp::OpType)
|
||||||
|
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
/// DERIVATIVE FUNCTIONS
|
/// DERIVATIVE FUNCTION
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
|
|
||||||
class VisualShaderNodeScalarDerivativeFunc : public VisualShaderNode {
|
class VisualShaderNodeDerivativeFunc : public VisualShaderNode {
|
||||||
GDCLASS(VisualShaderNodeScalarDerivativeFunc, VisualShaderNode);
|
GDCLASS(VisualShaderNodeDerivativeFunc, VisualShaderNode);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
enum OpType {
|
||||||
|
OP_TYPE_SCALAR,
|
||||||
|
OP_TYPE_VECTOR,
|
||||||
|
OP_TYPE_MAX,
|
||||||
|
};
|
||||||
|
|
||||||
enum Function {
|
enum Function {
|
||||||
FUNC_SUM,
|
FUNC_SUM,
|
||||||
FUNC_X,
|
FUNC_X,
|
||||||
|
@ -1250,8 +1256,10 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
OpType op_type = OP_TYPE_SCALAR;
|
||||||
Function func = FUNC_SUM;
|
Function func = FUNC_SUM;
|
||||||
|
|
||||||
|
protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -1267,56 +1275,19 @@ public:
|
||||||
|
|
||||||
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 override;
|
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 override;
|
||||||
|
|
||||||
void set_function(Function p_func);
|
void set_op_type(OpType p_op_type);
|
||||||
Function get_function() const;
|
OpType get_op_type() const;
|
||||||
|
|
||||||
virtual Vector<StringName> get_editable_properties() const override;
|
|
||||||
|
|
||||||
VisualShaderNodeScalarDerivativeFunc();
|
|
||||||
};
|
|
||||||
|
|
||||||
VARIANT_ENUM_CAST(VisualShaderNodeScalarDerivativeFunc::Function)
|
|
||||||
|
|
||||||
///////////////////////////////////////
|
|
||||||
|
|
||||||
class VisualShaderNodeVectorDerivativeFunc : public VisualShaderNode {
|
|
||||||
GDCLASS(VisualShaderNodeVectorDerivativeFunc, VisualShaderNode);
|
|
||||||
|
|
||||||
public:
|
|
||||||
enum Function {
|
|
||||||
FUNC_SUM,
|
|
||||||
FUNC_X,
|
|
||||||
FUNC_Y,
|
|
||||||
FUNC_MAX,
|
|
||||||
};
|
|
||||||
|
|
||||||
protected:
|
|
||||||
Function func = FUNC_SUM;
|
|
||||||
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
public:
|
|
||||||
virtual String get_caption() const override;
|
|
||||||
|
|
||||||
virtual int get_input_port_count() const override;
|
|
||||||
virtual PortType get_input_port_type(int p_port) const override;
|
|
||||||
virtual String get_input_port_name(int p_port) const override;
|
|
||||||
|
|
||||||
virtual int get_output_port_count() const override;
|
|
||||||
virtual PortType get_output_port_type(int p_port) const override;
|
|
||||||
virtual String get_output_port_name(int p_port) const override;
|
|
||||||
|
|
||||||
virtual String 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 override;
|
|
||||||
|
|
||||||
void set_function(Function p_func);
|
void set_function(Function p_func);
|
||||||
Function get_function() const;
|
Function get_function() const;
|
||||||
|
|
||||||
virtual Vector<StringName> get_editable_properties() const override;
|
virtual Vector<StringName> get_editable_properties() const override;
|
||||||
|
|
||||||
VisualShaderNodeVectorDerivativeFunc();
|
VisualShaderNodeDerivativeFunc();
|
||||||
};
|
};
|
||||||
|
|
||||||
VARIANT_ENUM_CAST(VisualShaderNodeVectorDerivativeFunc::Function)
|
VARIANT_ENUM_CAST(VisualShaderNodeDerivativeFunc::OpType)
|
||||||
|
VARIANT_ENUM_CAST(VisualShaderNodeDerivativeFunc::Function)
|
||||||
|
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
/// FACEFORWARD
|
/// FACEFORWARD
|
||||||
|
|
Loading…
Reference in New Issue