diff --git a/CMCore b/CMCore index 2d8da351..2d976583 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit 2d8da351ba88ffa0d5dee39268215090ac4785b7 +Subproject commit 2d9765839e0446292ae96ce126c01ffb04bc30a7 diff --git a/CMPlatform b/CMPlatform index 17b14af9..ddf56c70 160000 --- a/CMPlatform +++ b/CMPlatform @@ -1 +1 @@ -Subproject commit 17b14af957b057de41e00752df9e9e58cf970eec +Subproject commit ddf56c70160fcb96b12af58beceed22e1a1a1aea diff --git a/inc/hgl/graph/shader/ShaderMaker.h b/inc/hgl/graph/shader/ShaderMaker.h index 36224995..ad5143f9 100644 --- a/inc/hgl/graph/shader/ShaderMaker.h +++ b/inc/hgl/graph/shader/ShaderMaker.h @@ -1,8 +1,8 @@ -#ifndef HGL_SHADER_MAKER_INCLUDE -#define HGL_SHADER_MAKER_INCLUDE +#ifndef HGL_GRAPH_SHADER_MAKER_INCLUDE +#define HGL_GRAPH_SHADER_MAKER_INCLUDE namespace hgl { }//namespace hgl -#endif//HGL_SHADER_MAKER_INCLUDE +#endif//HGL_GRAPH_SHADER_MAKER_INCLUDE diff --git a/inc/hgl/graph/shader/ShaderNode.h b/inc/hgl/graph/shader/ShaderNode.h deleted file mode 100644 index 64d3f88b..00000000 --- a/inc/hgl/graph/shader/ShaderNode.h +++ /dev/null @@ -1,80 +0,0 @@ -#ifndef HGL_SHADER_NODE_INCLUDE -#define HGL_SHADER_NODE_INCLUDE - -#define SHADER_NODE_NAMESPACE hgl::graph::shader::node -#define BEGIN_SHADER_NODE_NAMESPACE namespace hgl{namespace graph{namespace shader{namespace node{ -#define END_SHADER_NODE_NAMESPACE }}}} - -BEGIN_SHADER_NODE_NAMESPACE - /** - * Shader 节点是所有Shader的基础,它可以是一个简单的计算,也可以是一段复杂的函数 - */ - class Node - { - UTF8String type_name; ///<节点类型本身的名称 - UTF8String name; ///<节点用户自定义名称 - - public: - - Node(const UTF8String &n){type_name=n;} - virtual ~Node()=default; - };//class Node - - /** - * 纯输入节点 - */ - class Input:virtual public Node - { - public: - - ObjectList input_params; - - public: - - using Node::Node; - virtual ~InputNode()=default; - };//class InputNode - - /** - * 纯输出节点,用于固管行为的向下一级节点输入数据,无输入部分 - */ - class Output:virtual public Node - { - public: - - ObjectList output_params; - - public: - - using Node::Node; - virtual ~OutputNode()=default; - };// - - /** - * 输入输出节点 - */ - class InputOutput:public Node - { - public: - - ObjectList input_params; - ObjectList output_params; - - public: - - using Node::Node; - virtual ~InputOutputNode()=default; - };// - - /** - * 最终节点,用于最终结果的一类节点,无输出部分 - */ - class Finish:virtual public InputNode - { - public: - - using InputNode::InputNode; - virtual ~FinishNode()=default; - };// -BEGIN_SHADER_NODE_NAMESPACE -#endif//HGL_SHADER_NODE_INCLUDE diff --git a/inc/hgl/graph/shader/ShaderNodeDefine.h b/inc/hgl/graph/shader/ShaderNodeDefine.h deleted file mode 100644 index ae74b6db..00000000 --- a/inc/hgl/graph/shader/ShaderNodeDefine.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef HGL_SHADER_NODE_DEFINE_INCLUDE -#define HGL_SHADER_NODE_DEFINE_INCLUDE - -BEGIN_SHADER_NODE_NAMESPACE -class Bool -{ -public: - - -};//class Bool -END_SHADER_NODE_NAMESPACE -#endif//HGL_SHADER_NODE_DEFINE_INCLUDE diff --git a/inc/hgl/graph/shader/node/define.h b/inc/hgl/graph/shader/node/define.h new file mode 100644 index 00000000..d47b5b29 --- /dev/null +++ b/inc/hgl/graph/shader/node/define.h @@ -0,0 +1,12 @@ +#ifndef HGL_GRAPH_SHADER_NODE_DEFINE_INCLUDE +#define HGL_GRAPH_SHADER_NODE_DEFINE_INCLUDE + +BEGIN_SHADER_NODE_NAMESPACE +class Bool +{ +public: + + +};//class Bool +END_SHADER_NODE_NAMESPACE +#endif//HGL_GRAPH_SHADER_NODE_DEFINE_INCLUDE diff --git a/inc/hgl/graph/shader/node/finished.h b/inc/hgl/graph/shader/node/finished.h new file mode 100644 index 00000000..0f8914b6 --- /dev/null +++ b/inc/hgl/graph/shader/node/finished.h @@ -0,0 +1,61 @@ +#ifndef HGL_GRAPH_SHADER_NODE_FINISHED_INCLUDE +#define HGL_GRAPH_SHADER_NODE_FINISHED_INCLUDE + +#include +#include + +BEGIN_SHADER_NODE_NAMESPACE +/** + * 最终节点,用于最终结果的一类节点,无输出部分 + */ +class Finished:public Input +{ +public: + + using Input::Input; + virtual ~Finished()=default; +};//class Finished:public Input + +/** + * 顶点最终输出节点 + */ +class VertexFinished:public Finished +{ +public: + + VertexFinished():Finished("Vertex Output") + { + } +};//class VertexFinished:public FinishedNode + +/** + * 前向渲染最终输出节点 + */ + class ForwardFinished:public Finished + { + public: + + ForwardFinished():Finished("Forward Output") + { + } + };//class ForwardFinished:public Finished + +/** + * GBuffer最终输出节点 + */ +class GBufferFinished:public Finished +{ +public: + + GBufferFinished():Finished("GBuffer 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) + } +};//class GBufferFinished:public FinishedNode +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 new file mode 100644 index 00000000..79f7bc58 --- /dev/null +++ b/inc/hgl/graph/shader/node/in.h @@ -0,0 +1,23 @@ +#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 new file mode 100644 index 00000000..a452f4d3 --- /dev/null +++ b/inc/hgl/graph/shader/node/inout.h @@ -0,0 +1,24 @@ +#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 new file mode 100644 index 00000000..247353c7 --- /dev/null +++ b/inc/hgl/graph/shader/node/node.h @@ -0,0 +1,26 @@ +#ifndef HGL_GRAPH_SHADER_NODE_INCLUDE +#define HGL_GRAPH_SHADER_NODE_INCLUDE + +#include +#include + +#define SHADER_NODE_NAMESPACE hgl::graph::shader::node +#define BEGIN_SHADER_NODE_NAMESPACE namespace hgl{namespace graph{namespace shader{namespace node{ +#define END_SHADER_NODE_NAMESPACE }}}} + +BEGIN_SHADER_NODE_NAMESPACE + /** + * Shader 节点是所有Shader的基础,它可以是一个简单的计算,也可以是一段复杂的函数 + */ + class Node + { + UTF8String type_name; ///<节点类型本身的名称 + UTF8String name; ///<节点用户自定义名称 + + public: + + Node(const UTF8String &n){type_name=n;} + virtual ~Node()=default; + };//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 new file mode 100644 index 00000000..12a56629 --- /dev/null +++ b/inc/hgl/graph/shader/node/out.h @@ -0,0 +1,22 @@ +#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/TextureNode.h b/inc/hgl/graph/shader/node/texture.h similarity index 73% rename from inc/hgl/graph/shader/TextureNode.h rename to inc/hgl/graph/shader/node/texture.h index cde0ef06..c8700d04 100644 --- a/inc/hgl/graph/shader/TextureNode.h +++ b/inc/hgl/graph/shader/node/texture.h @@ -1,7 +1,8 @@ -#ifndef HGL_SHADER_TEXTURE_NODE_INCLUDE -#define HGL_SHADER_TEXTURE_NODE_INCLUDE +#ifndef HGL_GRAPH_SHADER_NODE_TEXTURE_INCLUDE +#define HGL_GRAPH_SHADER_NODE_TEXTURE_INCLUDE -#include +#include +#include BEGIN_SHADER_NODE_NAMESPACE class texture1D:public InputOutput { @@ -33,7 +34,7 @@ public: } };//class texture3D:public InputOutput -class TextureCube:public InputOutput +class textureCube:public InputOutput { public: @@ -43,4 +44,4 @@ public: } };//class TextureCube:public InputOutput END_SHADER_NODE_NAMESPACE -#endif//HGL_SHADER_TEXTURE_NODE_INCLUDE +#endif//HGL_GRAPH_SHADER_NODE_TEXTURE_INCLUDE diff --git a/inc/hgl/graph/shader/VectorNode.h b/inc/hgl/graph/shader/node/vector.h similarity index 71% rename from inc/hgl/graph/shader/VectorNode.h rename to inc/hgl/graph/shader/node/vector.h index 249b7b72..5d71c168 100644 --- a/inc/hgl/graph/shader/VectorNode.h +++ b/inc/hgl/graph/shader/node/vector.h @@ -1,9 +1,10 @@ -#ifndef HGL_GRAPH_SHADER_VECTOR_NODE_INCLUDE -#define HGL_GRAPH_SHADER_VECTOR_NODE_INCLUDE +#ifndef HGL_GRAPH_SHADER_NODE_VECTOR_INCLUDE +#define HGL_GRAPH_SHADER_NODE_VECTOR_INCLUDE -#include -#include -BEGIN_SHADER_NAMESPACE +#include +#include + +BEGIN_SHADER_NODE_NAMESPACE class float1:public Output { float x; @@ -51,5 +52,5 @@ public: SHADER_OUTPUT_PARAM(XYZW,FLOAT_4) } };//class float4:public Output -END_SHADER_NAMESPACE -#endif//HGL_GRAPH_SHADER_VECTOR_NODE_INCLUDE +END_SHADER_NODE_NAMESPACE +#endif//HGL_GRAPH_SHADER_NODE_VECTOR_INCLUDE diff --git a/inc/hgl/graph/shader/param/in.h b/inc/hgl/graph/shader/param/in.h new file mode 100644 index 00000000..41026107 --- /dev/null +++ b/inc/hgl/graph/shader/param/in.h @@ -0,0 +1,35 @@ +#ifndef HGL_GRAPH_SHADER_INPUT_PARAM_INCLUDE +#define HGL_GRAPH_SHADER_INPUT_PARAM_INCLUDE + +#include + +BEGIN_SHADER_NODE_NAMESPACE + +#define SHADER_INPUT_PARAM(name,type) input_params.Add(new InputParam(#name,ParamType::type)); + +/** + * 输入参数定义 + */ +class InputParam:public Param +{ +public: + + using Param::Param; + virtual ~InputParam()=default; +};//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_NODE_NAMESPACE +#endif//HGL_GRAPH_SHADER_INPUT_PARAM_INCLUDE diff --git a/inc/hgl/graph/shader/param/out.h b/inc/hgl/graph/shader/param/out.h new file mode 100644 index 00000000..3dcd0900 --- /dev/null +++ b/inc/hgl/graph/shader/param/out.h @@ -0,0 +1,35 @@ +#ifndef HGL_GRAPH_SHADER_OUTPUT_PARAM_INCLUDE +#define HGL_GRAPH_SHADER_OUTPUT_PARAM_INCLUDE + +#include +#include +#include +#include + +BEGIN_SHADER_NODE_NAMESPACE + +#define SHADER_OUTPUT_PARAM(name,type) output_params.Add(new Param(#name,ParamType::type)); + +using namespace hgl; + +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_NODE_NAMESPACE +#endif//HGL_GRAPH_SHADER_OUTPUT_PARAM_INCLUDE diff --git a/inc/hgl/graph/shader/ShaderParam.h b/inc/hgl/graph/shader/param/param.h similarity index 64% rename from inc/hgl/graph/shader/ShaderParam.h rename to inc/hgl/graph/shader/param/param.h index 67634703..0d277074 100644 --- a/inc/hgl/graph/shader/ShaderParam.h +++ b/inc/hgl/graph/shader/param/param.h @@ -1,8 +1,11 @@ -#ifndef HGL_SHADER_PARAM_TYPE_INCLUDE -#define HGL_SHADER_PARAM_TYPE_INCLUDE +#ifndef HGL_GRAPH_SHADER_PARAM_INCLUDE +#define HGL_GRAPH_SHADER_PARAM_INCLUDE -#define BEGIN_SHADER_NAMESPACE namespace hgl{namespace graph{namespace shader{ -#undef END_SHADER_NAMESPACE }}} +#include + +#define SHADER_NAMESPACE hgl::graph::shader +#define BEGIN_SHADER_NAMESPACE namespace hgl{namespace graph{namespace shader{ +#define END_SHADER_NAMESPACE }}} BEGIN_SHADER_NAMESPACE /** @@ -65,30 +68,27 @@ BEGIN_SHADER_NAMESPACE BEGIN_RANGE =FLOAT_1, END_RANGE =NODE, - RANGE_SIZE =(END_RAGE-BEGIN_RANGE+1) + RANGE_SIZE =(END_RANGE-BEGIN_RANGE+1) };//enum class ParamType /** * 参数定义 */ - struct Param + class Param { UTF8String name; //参数名称 ParamType type; //类型 - };//struct Param - /** - * 数值类输入参数定义 - */ - template - struct ParamNumber:public Param - { - bool is_const; - T min_value; - T max_value; - };//struct ParamNumber:public Param -#define SHADER_INPUT_PARAM(name,type) input_params.Add(new Param(#name,ParamType::type); -#define SHADER_OUTPUT_PARAM(name,type) output_params.Add(new Param(#name,ParamType::type); + public: + + Param(const UTF8String &n,const ParamType &t) + { + name=n; + type=t; + } + + virtual ~Param()=default; + };//class Param END_SHADER_NAMESPACE -#endif//HGL_SHADER_PARAM_TYPE_INCLUDE +#endif//HGL_GRAPH_SHADER_PARAM_INCLUDE diff --git a/src/RenderDevice/Shader/CMakeLists.txt b/src/RenderDevice/Shader/CMakeLists.txt index ff82cf6d..eb4780a9 100644 --- a/src/RenderDevice/Shader/CMakeLists.txt +++ b/src/RenderDevice/Shader/CMakeLists.txt @@ -1,11 +1,26 @@ -SET(GRAPH_SHADER_INCLUDE ${ROOT_INCLUDE_PATH}/hgl/graph/shader) +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 ${GRAPH_SHADER_INCLUDE}/glsl2spv.h) +file(GLOB GRAPH_SHADER_NODE_HEADER_FILES ${GRAPH_SHADER_NODE_PATH}/*.h) -SET(GRAPH_SHADER_SOURCE glsl2spv.cpp) +source_group("Shader Maker\\Node" FILES ${GRAPH_SHADER_NODE_HEADER_FILES}) -SOURCE_GROUP("Header Files" FILES ${GRAPH_SHADER_HEADER}) -SOURCE_GROUP("Source Files" FILES ${GRAPH_SHADER_SOURCE}) +file(GLOB GRAPH_SHADER_PARAM_HEADER_FILES ${GRAPH_SHADER_PARAM_PATH}/*.h) -add_cm_library(ULRE.Shader "ULRE" ${GRAPH_SHADER_HEADER} - ${GRAPH_SHADER_SOURCE}) \ No newline at end of file +source_group("Shader Maker\\Param" FILES ${GRAPH_SHADER_PARAM_HEADER_FILES}) + +SET(GRAPH_SHADER_MAKER_SOURCE DefaultShader.cpp) + +source_group("Shader Maker" FILES ${GRAPH_SHADER_MAKER_SOURCE}) + +SET(GRAPH_SPV_SOURCE ${GRAPH_SHADER_HEADER_PATH}/glsl2spv.h + glsl2spv.cpp) + +SOURCE_GROUP("SPIR-V" FILES ${GRAPH_SPV_SOURCE}) + +add_cm_library(ULRE.Shader "ULRE" ${GRAPH_SHADER_NODE_HEADER_FILES} + ${GRAPH_SHADER_PARAM_HEADER_FILES} + ${GRAPH_SHADER_MAKER_SOURCE} + ${GRAPH_SPV_SOURCE}) + diff --git a/src/RenderDevice/Shader/DefaultShader.cpp b/src/RenderDevice/Shader/DefaultShader.cpp new file mode 100644 index 00000000..fcbe46e3 --- /dev/null +++ b/src/RenderDevice/Shader/DefaultShader.cpp @@ -0,0 +1,11 @@ +#include + +BEGIN_SHADER_NAMESPACE +bool CreateDefaultMaterial() +{ + node::Finished *vs_fin=new node::VertexFinished(); + node::Finished *fs_fin=new node::ForwardFinished(); + + return(false); +} +END_SHADER_NAMESPACE