diff --git a/CMCore b/CMCore index 2d976583..328e6d2f 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit 2d9765839e0446292ae96ce126c01ffb04bc30a7 +Subproject commit 328e6d2f26f0cbd15104dd817798f20cc624ea80 diff --git a/inc/hgl/graph/shader/ShaderMaker.h b/inc/hgl/graph/shader/ShaderMaker.h index ad5143f9..7f8540b7 100644 --- a/inc/hgl/graph/shader/ShaderMaker.h +++ b/inc/hgl/graph/shader/ShaderMaker.h @@ -1,8 +1,18 @@ #ifndef HGL_GRAPH_SHADER_MAKER_INCLUDE #define HGL_GRAPH_SHADER_MAKER_INCLUDE -namespace hgl +#include +BEGIN_SHADER_NAMESPACE +class ShaderMaker { + node::Finished *fin_node; -}//namespace hgl +public: + + ShaderMaker(node::Finished *fn){fin_node=fn;} + ~ShaderMaker(); + + bool Make(); +};//class ShaderMaker +END_SHADER_NAMESPACE #endif//HGL_GRAPH_SHADER_MAKER_INCLUDE diff --git a/inc/hgl/graph/shader/common.h b/inc/hgl/graph/shader/common.h index 48ecdc9d..dc38b2dd 100644 --- a/inc/hgl/graph/shader/common.h +++ b/inc/hgl/graph/shader/common.h @@ -13,4 +13,13 @@ #define BEGIN_SHADER_PARAM_NAMESPACE namespace hgl{namespace graph{namespace shader{namespace param{ #define END_SHADER_PARAM_NAMESPACE }}}} +BEGIN_SHADER_NODE_NAMESPACE +class Node; +END_SHADER_NODE_NAMESPACE + +BEGIN_SHADER_PARAM_NAMESPACE +class Param; +class InputParam:public Param; +class OutputParam:public Param; +END_SHADER_PARAM_NAMESPACE #endif//HGL_GRAPH_SHADER_COMMON_INCLUDE diff --git a/inc/hgl/graph/shader/node/finished.h b/inc/hgl/graph/shader/node/finished.h index c7195730..009b6e3e 100644 --- a/inc/hgl/graph/shader/node/finished.h +++ b/inc/hgl/graph/shader/node/finished.h @@ -1,18 +1,18 @@ #ifndef HGL_GRAPH_SHADER_NODE_FINISHED_INCLUDE #define HGL_GRAPH_SHADER_NODE_FINISHED_INCLUDE -#include +#include #include BEGIN_SHADER_NODE_NAMESPACE /** * 最终节点,用于最终结果的一类节点,无输出部分 */ -class Finished:public Input +class Finished:public Node { public: - using Input::Input; + using Node::Node; virtual ~Finished()=default; };//class Finished:public Input @@ -25,7 +25,10 @@ public: VertexFinished():Finished("Vertex Output") { + SHADER_INPUT_PARAM(Position, Float3) } + + ~VertexFinished()=default; };//class VertexFinished:public FinishedNode /** @@ -37,13 +40,15 @@ public: FragmentFinished():Finished("Fragment Output") { - SHADER_INPUT_PARAM(BaseColor, FLOAT_3) - SHADER_INPUT_PARAM(Normal, FLOAT_3) - SHADER_INPUT_PARAM(Metallic, FLOAT_1) - SHADER_INPUT_PARAM(Roughness, FLOAT_1) - SHADER_INPUT_PARAM(Opacity, FLOAT_1) - SHADER_INPUT_PARAM(DepthOffset, FLOAT_1) + SHADER_INPUT_PARAM(BaseColor, Float3) + SHADER_INPUT_PARAM(Normal, Float3) + SHADER_INPUT_PARAM(Metallic, Float1) + SHADER_INPUT_PARAM(Roughness, Float1) + SHADER_INPUT_PARAM(Opacity, Float1) + SHADER_INPUT_PARAM(DepthOffset, Float1) } + + ~FragmentFinished()=default; };//class FragmentFinished:public Finished END_SHADER_NODE_NAMESPACE #endif//HGL_GRAPH_SHADER_NODE_FINISHED_INCLUDE diff --git a/inc/hgl/graph/shader/node/in.h b/inc/hgl/graph/shader/node/in.h deleted file mode 100644 index e84d57aa..00000000 --- a/inc/hgl/graph/shader/node/in.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef HGL_GRAPH_SHADER_NODE_INPUT_INCLUDE -#define HGL_GRAPH_SHADER_NODE_INPUT_INCLUDE - -#include -#include - -BEGIN_SHADER_NODE_NAMESPACE -/** - * 纯输入节点 - */ -class Input:public Node -{ -protected: - - ObjectList input_params; - -public: - - using Node::Node; - virtual ~Input()=default; -};//class InputNode -END_SHADER_NODE_NAMESPACE -#endif//HGL_GRAPH_SHADER_NODE_INPUT_INCLUDE diff --git a/inc/hgl/graph/shader/node/inout.h b/inc/hgl/graph/shader/node/inout.h deleted file mode 100644 index a452f4d3..00000000 --- a/inc/hgl/graph/shader/node/inout.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef HGL_GRAPH_SHADER_NODE_INOUT_INCLUDE -#define HGL_GRAPH_SHADER_NODE_INOUT_INCLUDE - -#include -#include -#include -BEGIN_SHADER_NODE_NAMESPACE -/** - * 输入输出节点 - */ -class InputOutput:public Node -{ -protected: - - ObjectList input_params; - ObjectList output_params; - -public: - - using Node::Node; - virtual ~InputOutput()=default; -};//class InputOutput:public Node -END_SHADER_NODE_NAMESPACE -#endif//HGL_GRAPH_SHADER_NODE_INOUT_INCLUDE diff --git a/inc/hgl/graph/shader/node/node.h b/inc/hgl/graph/shader/node/node.h index cd7c8bae..6ea78094 100644 --- a/inc/hgl/graph/shader/node/node.h +++ b/inc/hgl/graph/shader/node/node.h @@ -12,12 +12,29 @@ BEGIN_SHADER_NODE_NAMESPACE class Node { UTF8String type_name; ///<节点类型本身的名称 + +protected: + UTF8String name; ///<节点用户自定义名称 + ObjectList input_params; + ObjectList output_params; + public: Node(const UTF8String &n){type_name=n;} virtual ~Node()=default; + + const UTF8String & GetTypename()const{return type_name;} + + const UTF8String & GetName()const{return name;} + void SetName(const UTF8String &n){name=n;} + +public: //参数相关 + + virtual bool IsOutputParam(param::OutputParam *); + + virtual bool CheckInputParam(); };//class Node END_SHADER_NODE_NAMESPACE #endif//HGL_GRAPH_SHADER_NODE_INCLUDE diff --git a/inc/hgl/graph/shader/node/out.h b/inc/hgl/graph/shader/node/out.h deleted file mode 100644 index fdd2c5ed..00000000 --- a/inc/hgl/graph/shader/node/out.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef HGL_GRAPH_SHADER_NODE_OUTPUT_INCLUDE -#define HGL_GRAPH_SHADER_NODE_OUTPUT_INCLUDE - -#include -#include -BEGIN_SHADER_NODE_NAMESPACE -/** - * 纯输出节点,用于固定行为的向下一级节点输入数据,无输入部分 - */ -class Output:public Node -{ -protected: - - ObjectList output_params; - -public: - - using Node::Node; - virtual ~Output()=default; -};//class Output:public Node -END_SHADER_NODE_NAMESPACE -#endif//HGL_GRAPH_SHADER_NODE_OUTPUT_INCLUDE diff --git a/inc/hgl/graph/shader/param/data.h b/inc/hgl/graph/shader/param/data.h new file mode 100644 index 00000000..f341ff50 --- /dev/null +++ b/inc/hgl/graph/shader/param/data.h @@ -0,0 +1,28 @@ +#ifndef HGL_GRAPH_SHADER_PARAM_DATA_INCLUDE +#define HGL_GRAPH_SHADER_PARAM_DATA_INCLUDE + +#include + +BEGIN_SHADER_PARAM_NAMESPACE +class ParamData +{ + ParamType type; + +public: + + ParamData(); + virtual ~ParamData(); + + /** + * 比较当前类型是否接收外部参数的输入 + * @param in 外部传入的参数 + */ + virtual bool JoinCheck(const ParamData *in) + { + if(!in)return(false); + + return(type==in->type); + } +};//class ParamData +END_SHADER_PARAM_NAMESPACE +#endif//HGL_GRAPH_SHADER_PARAM_DATA_INCLUDE diff --git a/inc/hgl/graph/shader/param/in.h b/inc/hgl/graph/shader/param/in.h index 7fa6a089..60a556b7 100644 --- a/inc/hgl/graph/shader/param/in.h +++ b/inc/hgl/graph/shader/param/in.h @@ -1,6 +1,8 @@ #ifndef HGL_GRAPH_SHADER_PARAM_INPUT_INCLUDE #define HGL_GRAPH_SHADER_PARAM_INPUT_INCLUDE +#include +#include #include BEGIN_SHADER_PARAM_NAMESPACE @@ -12,24 +14,19 @@ BEGIN_SHADER_PARAM_NAMESPACE */ class InputParam:public Param { + node::Node *input_node; + param::OutputParam *output_param; + public: using Param::Param; virtual ~InputParam()=default; + + virtual bool Join(node::Node *,OutputParam *); ///<增加一个输入节点 + virtual void Break(); ///<断开一个输入节点 + + virtual bool Check(); ///<检测当前节点是否可用 };//class InputParam:public Param -/** - * 数值类输入参数定义 - */ -template -class InputParamNumber:public InputParam -{ - bool is_const; - T min_value; - T max_value; - -public: -};//class InputParamNumber:public InputParam - END_SHADER_PARAM_NAMESPACE #endif//#ifndef HGL_GRAPH_SHADER_PARAM_INPUT_INCLUDE diff --git a/inc/hgl/graph/shader/param/out.h b/inc/hgl/graph/shader/param/out.h index f8f8323f..63ffea79 100644 --- a/inc/hgl/graph/shader/param/out.h +++ b/inc/hgl/graph/shader/param/out.h @@ -1,8 +1,7 @@ #ifndef HGL_GRAPH_SHADER_PARAM_OUTPUT_INCLUDE #define HGL_GRAPH_SHADER_PARAM_OUTPUT_INCLUDE -#include -#include +#include #include #include @@ -10,8 +9,6 @@ BEGIN_SHADER_PARAM_NAMESPACE using namespace hgl; -using InputNode=Pair; - #define SHADER_OUTPUT_PARAM(name,type) output_params.Add(new SHADER_PARAM_NAMESPACE::Param(#name,SHADER_PARAM_NAMESPACE::ParamType::type)); /** @@ -19,16 +16,11 @@ using InputNode=Pair; */ class OutputParam:public Param { - Set join_param; //对应的多个输入节点 public: using Param::Param; virtual ~OutputParam()=default; - - bool Join(node::Node *,InputParam *ip); //增加一个输入节点 - void Break(node::Node *,InputParam *ip); //断开一个输入节点 - void BreakAll(); //断开所有输入节点 };//class OutputParam:public Param END_SHADER_PARAM_NAMESPACE diff --git a/inc/hgl/graph/shader/param/param.h b/inc/hgl/graph/shader/param/param.h index 6b920a36..fa1d25e8 100644 --- a/inc/hgl/graph/shader/param/param.h +++ b/inc/hgl/graph/shader/param/param.h @@ -5,87 +5,23 @@ #include BEGIN_SHADER_PARAM_NAMESPACE - /** - * 参数类型 - */ - enum class ParamType +/** + * 参数定义 + */ +class Param +{ + UTF8String name; //参数名称 + ParamType type; //类型 + +public: + + Param(const UTF8String &n,const ParamType &t) { - BOOL=1, - - FLOAT,INT,UINT,MATRIX, //不区分1/2/3/4通道数量的类型 - - FLOAT_1, - FLOAT_2, - FLOAT_3, - FLOAT_4, - - INT_1, - INT_2, - INT_3, - INT_4, - - UINT_1, - UINT_2, - UINT_3, - UINT_4, - - MAT3x3, - MAT3x4, - MAT4x4, - - TEXTURE_1D, - TEXTURE_2D, - TEXTURE_3D, - TEXTURE_CUBE, - - TEXTURE_1D_ARRAY, - TEXTURE_2D_ARRAY, - TEXTURE_CUBE_ARRAY, - - FLOAT_1_STREAM, - FLOAT_2_STREAM, - FLOAT_3_STREAM, - FLOAT_4_STREAM, - - INT_1_STREAM, - INT_2_STREAM, - INT_3_STREAM, - INT_4_STREAM, - - UINT_1_STREAM, - UINT_2_STREAM, - UINT_3_STREAM, - UINT_4_STREAM, - - ARRAY_1D, //阵列 - ARRAY_2D, //2D阵列 - - UBO, //UBO name - NODE, //另一个节点,只可做为输入参数 - - BEGIN_RANGE =FLOAT_1, - END_RANGE =NODE, - RANGE_SIZE =(END_RANGE-BEGIN_RANGE+1) - };//enum class ParamType - - /** - * 参数定义 - */ - class Param - { - UTF8String name; //参数名称 - ParamType type; //类型 - - public: - - Param(const UTF8String &n,const ParamType &t) - { - name=n; - type=t; - } - - virtual ~Param()=default; - };//class Param + name=n; + type=t; + } + virtual ~Param()=default; +};//class Param END_SHADER_PARAM_NAMESPACE #endif//HGL_GRAPH_SHADER_PARAM_INCLUDE diff --git a/inc/hgl/graph/shader/param/type.h b/inc/hgl/graph/shader/param/type.h new file mode 100644 index 00000000..63679f3d --- /dev/null +++ b/inc/hgl/graph/shader/param/type.h @@ -0,0 +1,72 @@ +#ifndef HGL_GRAPH_SHADER_PARAM_INCLUDE +#define HGL_GRAPH_SHADER_PARAM_INCLUDE + +#include + +BEGIN_SHADER_PARAM_NAMESPACE +/** + * 参数类型 + */ +enum class ParamType +{ + BOOL=1, + + FLOAT,INT,UINT,MATRIX, //不区分1/2/3/4通道数量的类型 + + Float1, + Float2, + Float3, + Float4, + + Integer1, + Integer2, + Integer3, + Integer4, + + UInteger1, + UInteger2, + UInteger3, + UInteger4, + + Matrix3x3, + Matrix3x4, + Matrix4x4, + + Texture1D, + Texture2D, + Texture3D, + TextureCube, + TextureRect, + + Texture1DArray, + Texture2DArray, + TextureCubeArray, + + FLOAT_1_STREAM, + FLOAT_2_STREAM, + FLOAT_3_STREAM, + FLOAT_4_STREAM, + + INT_1_STREAM, + INT_2_STREAM, + INT_3_STREAM, + INT_4_STREAM, + + UINT_1_STREAM, + UINT_2_STREAM, + UINT_3_STREAM, + UINT_4_STREAM, + + ARRAY_1D, //阵列 + ARRAY_2D, //2D阵列 + + UBO, //UBO name + NODE, //另一个节点,只可做为输入参数 + + BEGIN_RANGE =Float1, + END_RANGE =NODE, + RANGE_SIZE =(END_RANGE-BEGIN_RANGE+1) +};//enum class ParamType +END_SHADER_PARAM_NAMESPACE +#endif//HGL_GRAPH_SHADER_PARAM_INCLUDE + diff --git a/src/RenderDevice/Shader/CMakeLists.txt b/src/RenderDevice/Shader/CMakeLists.txt index d2702032..0916edde 100644 --- a/src/RenderDevice/Shader/CMakeLists.txt +++ b/src/RenderDevice/Shader/CMakeLists.txt @@ -1,16 +1,22 @@ -SET(GRAPH_SHADER_HEADER_PATH ${ROOT_INCLUDE_PATH}/hgl/graph/shader) -SET(GRAPH_SHADER_NODE_PATH ${GRAPH_SHADER_HEADER_PATH}/node) -SET(GRAPH_SHADER_PARAM_PATH ${GRAPH_SHADER_HEADER_PATH}/param) +SET(GRAPH_SHADER_HEADER_PATH ${ROOT_INCLUDE_PATH}/hgl/graph/shader) +SET(GRAPH_SHADER_NODE_HEADER_PATH ${GRAPH_SHADER_HEADER_PATH}/node) +SET(GRAPH_SHADER_PARAM_HEADER_PATH ${GRAPH_SHADER_HEADER_PATH}/param) -file(GLOB GRAPH_SHADER_NODE_HEADER_FILES ${GRAPH_SHADER_NODE_PATH}/*.h) +file(GLOB GRAPH_SHADER_NODE_HEADER_FILES ${GRAPH_SHADER_NODE_HEADER_PATH}/*.h) +file(GLOB GRAPH_SHADER_PARAM_HEADER_FILES ${GRAPH_SHADER_PARAM_HEADER_PATH}/*.h) -source_group("Shader Maker\\Node" FILES ${GRAPH_SHADER_NODE_HEADER_FILES}) +file(GLOB GRAPH_SHADER_NODE_SOURCE_FILES FILES node/*.*) +file(GLOB GRAPH_SHADER_PARAM_SOURCE_FILES FILES param/*.*) -file(GLOB GRAPH_SHADER_PARAM_HEADER_FILES ${GRAPH_SHADER_PARAM_PATH}/*.h) +SET(GRAPH_SHADER_NODE_FILES ${GRAPH_SHADER_NODE_HEADER_FILES} ${GRAPH_SHADER_NODE_SOURCE_FILES}) +SET(GRAPH_SHADER_PARAM_FILES ${GRAPH_SHADER_PARAM_HEADER_FILES} ${GRAPH_SHADER_PARAM_SOURCE_FILES}) -source_group("Shader Maker\\Param" FILES ${GRAPH_SHADER_PARAM_HEADER_FILES}) +source_group("Shader Maker\\Node" FILES ${GRAPH_SHADER_NODE_FILES}) +source_group("Shader Maker\\Param" FILES ${GRAPH_SHADER_PARAM_FILES}) -SET(GRAPH_SHADER_MAKER_SOURCE DefaultShader.cpp) +SET(GRAPH_SHADER_MAKER_SOURCE ${GRAPH_SHADER_HEADER_PATH}/ShaderMaker.h + ShaderMaker.cpp + DefaultShader.cpp) source_group("Shader Maker" FILES ${GRAPH_SHADER_MAKER_SOURCE}) @@ -20,8 +26,8 @@ SET(GRAPH_SPV_SOURCE ${GRAPH_SHADER_HEADER_PATH}/glsl2spv.h SOURCE_GROUP("SPIR-V" FILES ${GRAPH_SPV_SOURCE}) add_cm_library(ULRE.Shader "ULRE" ${GRAPH_SHADER_HEADER_PATH}/common.h - ${GRAPH_SHADER_NODE_HEADER_FILES} - ${GRAPH_SHADER_PARAM_HEADER_FILES} + ${GRAPH_SHADER_NODE_FILES} + ${GRAPH_SHADER_PARAM_FILES} ${GRAPH_SHADER_MAKER_SOURCE} ${GRAPH_SPV_SOURCE}) - + diff --git a/src/RenderDevice/Shader/DefaultShader.cpp b/src/RenderDevice/Shader/DefaultShader.cpp index 208846b9..f4c90326 100644 --- a/src/RenderDevice/Shader/DefaultShader.cpp +++ b/src/RenderDevice/Shader/DefaultShader.cpp @@ -1,11 +1,21 @@ -#include +#include +#include #include +#include + BEGIN_SHADER_NAMESPACE bool CreateDefaultMaterial() { - node::Finished *vs_fin=new node::VertexFinished(); - node::Finished *fs_fin=new node::ForwardFinished(); + ShaderMaker vs_maker(new node::VertexFinished()); - return(false); + if(!vs_maker.Make()) + return(false); + + ShaderMaker fs_maker(new node::FragmentFinished()); + + if(!fs_maker.Make()) + return(false); + + return(true); } END_SHADER_NAMESPACE diff --git a/src/RenderDevice/Shader/ShaderMaker.cpp b/src/RenderDevice/Shader/ShaderMaker.cpp new file mode 100644 index 00000000..efd39971 --- /dev/null +++ b/src/RenderDevice/Shader/ShaderMaker.cpp @@ -0,0 +1,14 @@ +#include + +BEGIN_SHADER_NAMESPACE +bool ShaderMaker::Make() +{ + if(!fin_node) + return(false); + + if(!fin_node->CheckInputParam()) + return(false); + + return(true); +} +END_SHADER_NAMESPACE diff --git a/src/RenderDevice/Shader/node/shader_node.cpp b/src/RenderDevice/Shader/node/shader_node.cpp new file mode 100644 index 00000000..7b72dba1 --- /dev/null +++ b/src/RenderDevice/Shader/node/shader_node.cpp @@ -0,0 +1,17 @@ +#include + +BEGIN_SHADER_NODE_NAMESPACE +bool Node::CheckInputParam() +{ + const int count=input_params.GetCount(); + param::InputParam **ip=input_params.GetData(); + + for(int i=0;iCheck()) + return(false); + else + ++ip; + + return(true); +} +END_SHADER_NODE_NAMESPACE diff --git a/src/RenderDevice/Shader/param/shader_param_in.cpp b/src/RenderDevice/Shader/param/shader_param_in.cpp new file mode 100644 index 00000000..5bce3872 --- /dev/null +++ b/src/RenderDevice/Shader/param/shader_param_in.cpp @@ -0,0 +1,24 @@ +#include + +BEGIN_SHADER_PARAM_NAMESPACE +bool InputParam::Join(node::Node *n,OutputParam *op) +{ + if(!n||!op)return(false); + + if(!n->IsOutputParam(op)) + return(false); + + input_node=n; + output_param=op; + + return(true); +} + +void InputParam::Break() +{ +} + +bool InputParam::Check() +{ +} +END_SHADER_PARAM_NAMESPACE