Add support for 2D vector type to visual shaders
This commit is contained in:
parent
bf12719cca
commit
59af063636
25 changed files with 1969 additions and 659 deletions
|
|
@ -33,6 +33,49 @@
|
|||
|
||||
#include "scene/resources/visual_shader.h"
|
||||
|
||||
///////////////////////////////////////
|
||||
/// Vector Base Node
|
||||
///////////////////////////////////////
|
||||
|
||||
class VisualShaderNodeVectorBase : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeVectorBase, VisualShaderNode);
|
||||
|
||||
public:
|
||||
enum OpType {
|
||||
OP_TYPE_VECTOR_2D,
|
||||
OP_TYPE_VECTOR_3D,
|
||||
OP_TYPE_MAX,
|
||||
};
|
||||
|
||||
protected:
|
||||
OpType op_type = OP_TYPE_VECTOR_3D;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
virtual String get_caption() const override = 0;
|
||||
|
||||
virtual int get_input_port_count() const override = 0;
|
||||
virtual PortType get_input_port_type(int p_port) const override;
|
||||
virtual String get_input_port_name(int p_port) const override = 0;
|
||||
|
||||
virtual int get_output_port_count() const override = 0;
|
||||
virtual PortType get_output_port_type(int p_port) const override;
|
||||
virtual String get_output_port_name(int p_port) const override = 0;
|
||||
|
||||
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 = 0;
|
||||
|
||||
virtual void set_op_type(OpType p_op_type);
|
||||
OpType get_op_type() const;
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
VisualShaderNodeVectorBase();
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VisualShaderNodeVectorBase::OpType)
|
||||
|
||||
///////////////////////////////////////
|
||||
/// CONSTANTS
|
||||
///////////////////////////////////////
|
||||
|
|
@ -177,6 +220,36 @@ public:
|
|||
|
||||
///////////////////////////////////////
|
||||
|
||||
class VisualShaderNodeVec2Constant : public VisualShaderNodeConstant {
|
||||
GDCLASS(VisualShaderNodeVec2Constant, VisualShaderNodeConstant);
|
||||
Vector2 constant;
|
||||
|
||||
protected:
|
||||
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_constant(const Vector2 &p_constant);
|
||||
Vector2 get_constant() const;
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
VisualShaderNodeVec2Constant();
|
||||
};
|
||||
|
||||
///////////////////////////////////////
|
||||
|
||||
class VisualShaderNodeVec3Constant : public VisualShaderNodeConstant {
|
||||
GDCLASS(VisualShaderNodeVec3Constant, VisualShaderNodeConstant);
|
||||
Vector3 constant;
|
||||
|
|
@ -615,8 +688,8 @@ public:
|
|||
|
||||
VARIANT_ENUM_CAST(VisualShaderNodeIntOp::Operator)
|
||||
|
||||
class VisualShaderNodeVectorOp : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeVectorOp, VisualShaderNode);
|
||||
class VisualShaderNodeVectorOp : public VisualShaderNodeVectorBase {
|
||||
GDCLASS(VisualShaderNodeVectorOp, VisualShaderNodeVectorBase);
|
||||
|
||||
public:
|
||||
enum Operator {
|
||||
|
|
@ -644,19 +717,20 @@ 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;
|
||||
|
||||
virtual void set_op_type(OpType p_op_type) override;
|
||||
|
||||
void set_operator(Operator p_op);
|
||||
Operator get_operator() const;
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
String get_warning(Shader::Mode p_mode, VisualShader::Type p_type) const override;
|
||||
|
||||
VisualShaderNodeVectorOp();
|
||||
};
|
||||
|
|
@ -923,8 +997,10 @@ VARIANT_ENUM_CAST(VisualShaderNodeIntFunc::Function)
|
|||
/// VECTOR FUNC
|
||||
///////////////////////////////////////
|
||||
|
||||
class VisualShaderNodeVectorFunc : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeVectorFunc, VisualShaderNode);
|
||||
class VisualShaderNodeVectorFunc : public VisualShaderNodeVectorBase {
|
||||
GDCLASS(VisualShaderNodeVectorFunc, VisualShaderNodeVectorBase);
|
||||
|
||||
void _update_default_input_values();
|
||||
|
||||
public:
|
||||
enum Function {
|
||||
|
|
@ -975,19 +1051,20 @@ 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;
|
||||
|
||||
virtual void set_op_type(OpType p_op_type) override;
|
||||
|
||||
void set_function(Function p_func);
|
||||
Function get_function() const;
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
String get_warning(Shader::Mode p_mode, VisualShader::Type p_type) const override;
|
||||
|
||||
VisualShaderNodeVectorFunc();
|
||||
};
|
||||
|
|
@ -1150,20 +1227,20 @@ public:
|
|||
/// LENGTH
|
||||
///////////////////////////////////////
|
||||
|
||||
class VisualShaderNodeVectorLen : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeVectorLen, VisualShaderNode);
|
||||
class VisualShaderNodeVectorLen : public VisualShaderNodeVectorBase {
|
||||
GDCLASS(VisualShaderNodeVectorLen, VisualShaderNodeVectorBase);
|
||||
|
||||
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 void set_op_type(OpType p_op_type) 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;
|
||||
|
||||
VisualShaderNodeVectorLen();
|
||||
|
|
@ -1203,7 +1280,8 @@ public:
|
|||
enum OpType {
|
||||
OP_TYPE_FLOAT,
|
||||
OP_TYPE_INT,
|
||||
OP_TYPE_VECTOR,
|
||||
OP_TYPE_VECTOR_2D,
|
||||
OP_TYPE_VECTOR_3D,
|
||||
OP_TYPE_MAX,
|
||||
};
|
||||
|
||||
|
|
@ -1244,7 +1322,8 @@ class VisualShaderNodeDerivativeFunc : public VisualShaderNode {
|
|||
public:
|
||||
enum OpType {
|
||||
OP_TYPE_SCALAR,
|
||||
OP_TYPE_VECTOR,
|
||||
OP_TYPE_VECTOR_2D,
|
||||
OP_TYPE_VECTOR_3D,
|
||||
OP_TYPE_MAX,
|
||||
};
|
||||
|
||||
|
|
@ -1293,20 +1372,19 @@ VARIANT_ENUM_CAST(VisualShaderNodeDerivativeFunc::Function)
|
|||
/// FACEFORWARD
|
||||
///////////////////////////////////////
|
||||
|
||||
class VisualShaderNodeFaceForward : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeFaceForward, VisualShaderNode);
|
||||
class VisualShaderNodeFaceForward : public VisualShaderNodeVectorBase {
|
||||
GDCLASS(VisualShaderNodeFaceForward, VisualShaderNodeVectorBase);
|
||||
|
||||
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 void set_op_type(OpType p_op_type) 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;
|
||||
|
||||
VisualShaderNodeFaceForward();
|
||||
|
|
@ -1345,8 +1423,10 @@ class VisualShaderNodeStep : public VisualShaderNode {
|
|||
public:
|
||||
enum OpType {
|
||||
OP_TYPE_SCALAR,
|
||||
OP_TYPE_VECTOR,
|
||||
OP_TYPE_VECTOR_SCALAR,
|
||||
OP_TYPE_VECTOR_2D,
|
||||
OP_TYPE_VECTOR_2D_SCALAR,
|
||||
OP_TYPE_VECTOR_3D,
|
||||
OP_TYPE_VECTOR_3D_SCALAR,
|
||||
OP_TYPE_MAX,
|
||||
};
|
||||
|
||||
|
|
@ -1387,8 +1467,10 @@ class VisualShaderNodeSmoothStep : public VisualShaderNode {
|
|||
public:
|
||||
enum OpType {
|
||||
OP_TYPE_SCALAR,
|
||||
OP_TYPE_VECTOR,
|
||||
OP_TYPE_VECTOR_SCALAR,
|
||||
OP_TYPE_VECTOR_2D,
|
||||
OP_TYPE_VECTOR_2D_SCALAR,
|
||||
OP_TYPE_VECTOR_3D,
|
||||
OP_TYPE_VECTOR_3D_SCALAR,
|
||||
OP_TYPE_MAX,
|
||||
};
|
||||
|
||||
|
|
@ -1423,20 +1505,20 @@ VARIANT_ENUM_CAST(VisualShaderNodeSmoothStep::OpType)
|
|||
/// DISTANCE
|
||||
///////////////////////////////////////
|
||||
|
||||
class VisualShaderNodeVectorDistance : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeVectorDistance, VisualShaderNode);
|
||||
class VisualShaderNodeVectorDistance : public VisualShaderNodeVectorBase {
|
||||
GDCLASS(VisualShaderNodeVectorDistance, VisualShaderNodeVectorBase);
|
||||
|
||||
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 void set_op_type(OpType p_op_type) 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;
|
||||
|
||||
VisualShaderNodeVectorDistance();
|
||||
|
|
@ -1475,8 +1557,10 @@ class VisualShaderNodeMix : public VisualShaderNode {
|
|||
public:
|
||||
enum OpType {
|
||||
OP_TYPE_SCALAR,
|
||||
OP_TYPE_VECTOR,
|
||||
OP_TYPE_VECTOR_SCALAR,
|
||||
OP_TYPE_VECTOR_2D,
|
||||
OP_TYPE_VECTOR_2D_SCALAR,
|
||||
OP_TYPE_VECTOR_3D,
|
||||
OP_TYPE_VECTOR_3D_SCALAR,
|
||||
OP_TYPE_MAX,
|
||||
};
|
||||
|
||||
|
|
@ -1511,8 +1595,8 @@ VARIANT_ENUM_CAST(VisualShaderNodeMix::OpType)
|
|||
/// COMPOSE
|
||||
///////////////////////////////////////
|
||||
|
||||
class VisualShaderNodeVectorCompose : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeVectorCompose, VisualShaderNode);
|
||||
class VisualShaderNodeVectorCompose : public VisualShaderNodeVectorBase {
|
||||
GDCLASS(VisualShaderNodeVectorCompose, VisualShaderNodeVectorBase);
|
||||
|
||||
public:
|
||||
virtual String get_caption() const override;
|
||||
|
|
@ -1522,9 +1606,9 @@ public:
|
|||
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 void set_op_type(OpType p_op_type) 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;
|
||||
|
||||
VisualShaderNodeVectorCompose();
|
||||
|
|
@ -1555,20 +1639,20 @@ public:
|
|||
/// DECOMPOSE
|
||||
///////////////////////////////////////
|
||||
|
||||
class VisualShaderNodeVectorDecompose : public VisualShaderNode {
|
||||
GDCLASS(VisualShaderNodeVectorDecompose, VisualShaderNode);
|
||||
class VisualShaderNodeVectorDecompose : public VisualShaderNodeVectorBase {
|
||||
GDCLASS(VisualShaderNodeVectorDecompose, VisualShaderNodeVectorBase);
|
||||
|
||||
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 void set_op_type(OpType p_op_type) 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;
|
||||
|
||||
VisualShaderNodeVectorDecompose();
|
||||
|
|
@ -1820,6 +1904,49 @@ public:
|
|||
|
||||
///////////////////////////////////////
|
||||
|
||||
class VisualShaderNodeVec2Uniform : public VisualShaderNodeUniform {
|
||||
GDCLASS(VisualShaderNodeVec2Uniform, VisualShaderNodeUniform);
|
||||
|
||||
private:
|
||||
bool default_value_enabled = false;
|
||||
Vector2 default_value;
|
||||
|
||||
protected:
|
||||
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_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) 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;
|
||||
|
||||
virtual bool is_show_prop_names() const override;
|
||||
virtual bool is_use_prop_slots() const override;
|
||||
|
||||
void set_default_value_enabled(bool p_enabled);
|
||||
bool is_default_value_enabled() const;
|
||||
|
||||
void set_default_value(const Vector2 &p_value);
|
||||
Vector2 get_default_value() const;
|
||||
|
||||
bool is_qualifier_supported(Qualifier p_qual) const override;
|
||||
bool is_convertible_to_constant() const override;
|
||||
|
||||
virtual Vector<StringName> get_editable_properties() const override;
|
||||
|
||||
VisualShaderNodeVec2Uniform();
|
||||
};
|
||||
|
||||
///////////////////////////////////////
|
||||
|
||||
class VisualShaderNodeVec3Uniform : public VisualShaderNodeUniform {
|
||||
GDCLASS(VisualShaderNodeVec3Uniform, VisualShaderNodeUniform);
|
||||
|
||||
|
|
@ -2119,7 +2246,8 @@ public:
|
|||
enum OpType {
|
||||
OP_TYPE_FLOAT,
|
||||
OP_TYPE_INT,
|
||||
OP_TYPE_VECTOR,
|
||||
OP_TYPE_VECTOR_2D,
|
||||
OP_TYPE_VECTOR_3D,
|
||||
OP_TYPE_BOOLEAN,
|
||||
OP_TYPE_TRANSFORM,
|
||||
OP_TYPE_MAX,
|
||||
|
|
@ -2232,7 +2360,8 @@ public:
|
|||
enum ComparisonType {
|
||||
CTYPE_SCALAR,
|
||||
CTYPE_SCALAR_INT,
|
||||
CTYPE_VECTOR,
|
||||
CTYPE_VECTOR_2D,
|
||||
CTYPE_VECTOR_3D,
|
||||
CTYPE_BOOLEAN,
|
||||
CTYPE_TRANSFORM,
|
||||
CTYPE_MAX,
|
||||
|
|
@ -2300,7 +2429,8 @@ class VisualShaderNodeMultiplyAdd : public VisualShaderNode {
|
|||
public:
|
||||
enum OpType {
|
||||
OP_TYPE_SCALAR,
|
||||
OP_TYPE_VECTOR,
|
||||
OP_TYPE_VECTOR_2D,
|
||||
OP_TYPE_VECTOR_3D,
|
||||
OP_TYPE_MAX,
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue