diff --git a/inc/hgl/graph/shader/node/combo_vector.h b/inc/hgl/graph/shader/node/combo_vector.h new file mode 100644 index 00000000..609624f9 --- /dev/null +++ b/inc/hgl/graph/shader/node/combo_vector.h @@ -0,0 +1,113 @@ +#ifndef HGL_GRAPH_SHADER_NODE_COMBO_VECTOR_INCLUDE +#define HGL_GRAPH_SHADER_NODE_COMBO_VECTOR_INCLUDE + +#include +BEGIN_SHADER_NODE_NAMESPACE +class ComboVector1to2:public Node +{ + param::InputParam *ip_x,*ip_y; + param::OutputParam *op_xy; + +public: + + ComboVector1to2():Node(NodeType::ComboVector) + { + ip_x=SHADER_INPUT_PARAM(false,X,Float1) + ip_y=SHADER_INPUT_PARAM(false,Y,Float1) + + op_xy=SHADER_OUTPUT_PARAM(XY,Float2) + } + + bool GenOutputParamCode(UTF8StringList &)override; + //bool GenCode(UTF8StringList &) override; +};//class ComboVector1to2:public Node + +class ComboVector1to3:public Node +{ + param::InputParam *ip_x,*ip_y,*ip_z; + +public: + + ComboVector1to3():Node(NodeType::ComboVector) + { + ip_x=SHADER_INPUT_PARAM(false,X,Float1) + ip_y=SHADER_INPUT_PARAM(false,Y,Float1) + ip_z=SHADER_INPUT_PARAM(false,Z,Float1) + + SHADER_OUTPUT_PARAM(XYZ,Float3) + } + + bool GenCode(UTF8StringList &) override; +};//class ComboVector1to3:public Node + +class ComboVector1to4:public Node +{ + param::InputParam *ip_x,*ip_y,*ip_z,*ip_w; + +public: + + ComboVector1to4():Node(NodeType::ComboVector) + { + ip_x=SHADER_INPUT_PARAM(false,X,Float1) + ip_y=SHADER_INPUT_PARAM(false,Y,Float1) + ip_z=SHADER_INPUT_PARAM(false,Z,Float1) + ip_w=SHADER_INPUT_PARAM(false,W,Float1) + + SHADER_OUTPUT_PARAM(XYZW,Float4) + } + + bool GenCode(UTF8StringList &) override; +};//class ComboVector1to4:public Node + +class ComboVector12to3:public Node +{ + param::InputParam *ip_xy,*ip_z; + +public: + + ComboVector12to3():Node(NodeType::ComboVector) + { + ip_xy=SHADER_INPUT_PARAM(false,XY,Float2) + ip_z =SHADER_INPUT_PARAM(false,Z,Float1) + + SHADER_OUTPUT_PARAM(XYZ,Float3) + } + + bool GenCode(UTF8StringList &) override; +};//class ComboVector2to3:public Node + +class ComboVector13to4:public Node +{ + param::InputParam *ip_xyz,*ip_w; + +public: + + ComboVector13to4():Node(NodeType::ComboVector) + { + ip_xyz=SHADER_INPUT_PARAM(false,XYZ,Float3) + ip_w =SHADER_INPUT_PARAM(false,W,Float1) + + SHADER_OUTPUT_PARAM(XYZW,Float4) + } + + bool GenCode(UTF8StringList &) override; +};//class ComboVector13to4:public Node + +class ComboVector22to4:public Node +{ + param::InputParam *ip_xy,*ip_zw; + +public: + + ComboVector22to4():Node(NodeType::ComboVector) + { + ip_xy=SHADER_INPUT_PARAM(false,XY,Float2) + ip_zw=SHADER_INPUT_PARAM(false,ZW,Float2) + + SHADER_OUTPUT_PARAM(XYZW,Float4) + } + + bool GenCode(UTF8StringList &) override; +};//class ComboVector22to4:public Node +END_SHADER_NODE_NAMESPACE +#endif//HGL_GRAPH_SHADER_NODE_COMBO_VECTOR_INCLUDE diff --git a/inc/hgl/graph/shader/node/node.h b/inc/hgl/graph/shader/node/node.h index cd6385a1..60680d56 100644 --- a/inc/hgl/graph/shader/node/node.h +++ b/inc/hgl/graph/shader/node/node.h @@ -38,7 +38,7 @@ protected: protected: virtual bool GenInputParamCode(UTF8StringList &); - virtual bool GenOutputParamCode(UTF8StringList &); + virtual bool GenOutputParamCode(UTF8StringList &){return true;} protected: diff --git a/inc/hgl/graph/shader/node/op.h b/inc/hgl/graph/shader/node/op.h new file mode 100644 index 00000000..ed01dc8f --- /dev/null +++ b/inc/hgl/graph/shader/node/op.h @@ -0,0 +1,68 @@ +#ifndef HGL_GRAPH_SHADER_NODE_OP_INCLUDE +#define HGL_GRAPH_SHADER_NODE_OP_INCLUDE + +#include +BEGIN_SHADER_NODE_NAMESPACE +enum class ScalarOpType:uint +{ + Add=0, Sub, Mul, Div, + Mod, Pow, Min, Max, + Sin, Cos, Atan, Step, + + BEGIN_OP_RANGE=Add, + END_OP_RANGE=Step, + RANGE_SIZE=(END_OP_RANGE-BEGIN_OP_RANGE)+1 +};//enum class OpType:uint + +class ScalarOp:public Node +{ +public: +};//class ScalarOp:public Node + +class ComboVectorOp1to2:public Node +{ +public: + + ComboVectorOp1to2():Node(NodeType::ComboVector) + { + SHADER_INPUT_PARAM(false,X,Float1) + SHADER_INPUT_PARAM(false,Y,Float1) + + SHADER_OUTPUT_PARAM(XY,Float2) + } +};//class ComboVectorOp1to2:public Node + +enum class VectorOpType:uint +{ + Add=0, Sub, Mul, Div, + Mod, Pow, Min, Max, + Cross, Atan, Reflect,Step, + + BEGIN_OP_RANGE=Add, + END_OP_RANGE=Step, + RANGE_SIZE=(END_OP_RANGE-BEGIN_OP_RANGE)+1 +};//enum class VectorOpType:uint + +class VectorOp:public Node +{ +public: +};//class VectorOp:public Node + +enum class ColorOpType:uint +{ + Screen=0, + Difference, + Darken, + Lighten, + Overlay, + Dodge, + Burn, + SoftLight, + HardLight, + + BEGIN_OP_RANGE=Screen, + END_OP_RANGE=HardLight, + RANGE_SIZE=(END_OP_RANGE-BEGIN_OP_RANGE)+1 +};//enum class ColorOpType:uint +END_SHADER_NODE_NAMESPACE +#endif//HGL_GRAPH_SHADER_NODE_OP_INCLUDE diff --git a/inc/hgl/graph/shader/node/split_vector.h b/inc/hgl/graph/shader/node/split_vector.h new file mode 100644 index 00000000..53090205 --- /dev/null +++ b/inc/hgl/graph/shader/node/split_vector.h @@ -0,0 +1,87 @@ +#ifndef HGL_GRAPH_SHADER_NODE_SPLIT_VECTOR_INCLUDE +#define HGL_GRAPH_SHADER_NODE_SPLIT_VECTOR_INCLUDE + +#include +BEGIN_SHADER_NODE_NAMESPACE +class SplitVector2to1:public Node +{ +public: + + SplitVector2to1():Node(NodeType::SplitVector) + { + SHADER_OUTPUT_PARAM(X,Float1) + SHADER_OUTPUT_PARAM(Y,Float1) + + SHADER_INPUT_PARAM(true,XY,Float2) + } +};//class SplitVector2to1:public Node + +class SplitVector3to1:public Node +{ +public: + + SplitVector3to1():Node(NodeType::SplitVector) + { + SHADER_OUTPUT_PARAM(X,Float1) + SHADER_OUTPUT_PARAM(Y,Float1) + SHADER_OUTPUT_PARAM(Z,Float1) + + SHADER_INPUT_PARAM(true,XYZ,Float3) + } +};//class SplitVector3to1:public Node + +class SplitVector4to1:public Node +{ +public: + + SplitVector4to1():Node(NodeType::SplitVector) + { + SHADER_OUTPUT_PARAM(X,Float1) + SHADER_OUTPUT_PARAM(Y,Float1) + SHADER_OUTPUT_PARAM(Z,Float1) + SHADER_OUTPUT_PARAM(W,Float1) + + SHADER_INPUT_PARAM(true,XYZW,Float4) + } +};//class SplitVector4to1:public Node + +class SplitVector3to12:public Node +{ +public: + + SplitVector3to12():Node(NodeType::SplitVector) + { + SHADER_OUTPUT_PARAM(XY,Float2) + SHADER_OUTPUT_PARAM(Z,Float1) + + SHADER_INPUT_PARAM(true,XYZ,Float3) + } +};//class SplitVector2to3:public Node + +class SplitVector4to13:public Node +{ +public: + + SplitVector4to13():Node(NodeType::SplitVector) + { + SHADER_OUTPUT_PARAM(XYZ,Float3) + SHADER_OUTPUT_PARAM(W,Float1) + + SHADER_INPUT_PARAM(true,XYZW,Float4) + } +};//class SplitVector4to13:public Node + +class SplitVector4to22:public Node +{ +public: + + SplitVector4to22():Node(NodeType::SplitVector) + { + SHADER_OUTPUT_PARAM(XY,Float2) + SHADER_OUTPUT_PARAM(ZW,Float2) + + SHADER_INPUT_PARAM(true,XYZW,Float4) + } +};//class SplitVector4to22:public Node +END_SHADER_NODE_NAMESPACE +#endif//HGL_GRAPH_SHADER_NODE_SPLIT_VECTOR_INCLUDE diff --git a/inc/hgl/graph/shader/node/type.h b/inc/hgl/graph/shader/node/type.h index 77715327..26688e93 100644 --- a/inc/hgl/graph/shader/node/type.h +++ b/inc/hgl/graph/shader/node/type.h @@ -8,6 +8,11 @@ enum class NodeType:int { VertexInput=0, ///<顶点输入流节点 + ComboVector, ///<向量合成 + SplitVector, ///<向量折解 + + ShaderFunction, /// + +BEGIN_SHADER_NODE_NAMESPACE +bool ComboVector1to2::GenOutputParamCode(UTF8StringList &sl) +{ + UTF8String name_x,name_y; + UTF8String name_output; + + if(!GetInputParamName(name_x,ip_x))return(false); + if(!GetInputParamName(name_y,ip_y))return(false); + + if(!GetOutputParamName(name_output,op_xy))return(false); + + sl.Add(name_output+"=vec2("+name_x+","+name_y+");"); + + return(true); +} +END_SHADER_NODE_NAMESPACE diff --git a/src/RenderDevice/Shader/node/shader_node.cpp b/src/RenderDevice/Shader/node/shader_node.cpp index 2c14b95b..a679d1be 100644 --- a/src/RenderDevice/Shader/node/shader_node.cpp +++ b/src/RenderDevice/Shader/node/shader_node.cpp @@ -113,11 +113,6 @@ bool Node::GenInputParamCode(UTF8StringList &sl) return(true); } -bool Node::GenOutputParamCode(UTF8StringList &) -{ - return true; -} - #define SHADER_NODE_TEMP_VALUE_COMMENT ";\t\t\t// temp value of ["+node_name+"]" bool Node::GenTempValueDefine(UTF8StringList &sl) @@ -138,11 +133,11 @@ bool Node::GenTempValueDefine(UTF8StringList &sl) sl.Add("\t"+UTF8String(param::GetTypename(pt))+" "+value_name+SHADER_NODE_TEMP_VALUE_COMMENT); else sl.Add("\t"+UTF8String(param::GetTypename(pt))+" "+value_name+"="+(*ip)->GetDefaultValue()+SHADER_NODE_TEMP_VALUE_COMMENT); - + ++ip; } - return(true); + return(true); } bool Node::GenCode(UTF8StringList &sl)