add comboVector and splitVector node

This commit is contained in:
hyzboy 2019-12-19 18:08:27 +08:00
parent 7dd42cb369
commit f6417e79d0
7 changed files with 294 additions and 8 deletions

View File

@ -0,0 +1,113 @@
#ifndef HGL_GRAPH_SHADER_NODE_COMBO_VECTOR_INCLUDE
#define HGL_GRAPH_SHADER_NODE_COMBO_VECTOR_INCLUDE
#include<hgl/graph/shader/node/node.h>
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

View File

@ -38,7 +38,7 @@ protected:
protected: protected:
virtual bool GenInputParamCode(UTF8StringList &); virtual bool GenInputParamCode(UTF8StringList &);
virtual bool GenOutputParamCode(UTF8StringList &); virtual bool GenOutputParamCode(UTF8StringList &){return true;}
protected: protected:

View File

@ -0,0 +1,68 @@
#ifndef HGL_GRAPH_SHADER_NODE_OP_INCLUDE
#define HGL_GRAPH_SHADER_NODE_OP_INCLUDE
#include<hgl/graph/shader/node/node.h>
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

View File

@ -0,0 +1,87 @@
#ifndef HGL_GRAPH_SHADER_NODE_SPLIT_VECTOR_INCLUDE
#define HGL_GRAPH_SHADER_NODE_SPLIT_VECTOR_INCLUDE
#include<hgl/graph/shader/node/node.h>
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

View File

@ -8,6 +8,11 @@ enum class NodeType:int
{ {
VertexInput=0, ///<顶点输入流节点 VertexInput=0, ///<顶点输入流节点
ComboVector, ///<向量合成
SplitVector, ///<向量折解
ShaderFunction, ///<shader原生函数
Const, ///<固定数据输入 Const, ///<固定数据输入
Param, ///<参数输入 Param, ///<参数输入

View File

@ -0,0 +1,18 @@
#include<hgl/graph/shader/node/combo_vector.h>
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

View File

@ -113,11 +113,6 @@ bool Node::GenInputParamCode(UTF8StringList &sl)
return(true); return(true);
} }
bool Node::GenOutputParamCode(UTF8StringList &)
{
return true;
}
#define SHADER_NODE_TEMP_VALUE_COMMENT ";\t\t\t// temp value of ["+node_name+"]" #define SHADER_NODE_TEMP_VALUE_COMMENT ";\t\t\t// temp value of ["+node_name+"]"
bool Node::GenTempValueDefine(UTF8StringList &sl) bool Node::GenTempValueDefine(UTF8StringList &sl)