#ifndef HGL_GRAPH_SHADER_NODE_COMBO_VECTOR_INCLUDE
#define HGL_GRAPH_SHADER_NODE_COMBO_VECTOR_INCLUDE

#include<hgl/graph/shader/node/node.h>
SHADER_NODE_NAMESPACE_BEGIN
class ComboVector1to2:public Node
{
    param::InputParam *ip_x,*ip_y;
    param::OutputParam *op_xy;

public:

    ComboVector1to2():Node(NodeType::ComboVector,"ComboVector1to2")
    {
        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;
    param::OutputParam *op_xyz;

public:

    ComboVector1to3():Node(NodeType::ComboVector,"ComboVector1to3")
    {
        ip_x=SHADER_INPUT_PARAM(false,X,Float1)
        ip_y=SHADER_INPUT_PARAM(false,Y,Float1)
        ip_z=SHADER_INPUT_PARAM(false,Z,Float1)

        op_xyz=SHADER_OUTPUT_PARAM(XYZ,Float3)
    }
    
    bool GenOutputParamCode(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,"ComboVector1to4")
    {
        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,"ComboVector12to3")
    {
        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,"ComboVector13to4")
    {
        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,"ComboVector22to4")
    {
        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
SHADER_NODE_NAMESPACE_END
#endif//HGL_GRAPH_SHADER_NODE_COMBO_VECTOR_INCLUDE
