diff --git a/inc/hgl/graph/shader/ShaderMaker.h b/inc/hgl/graph/shader/ShaderMaker.h index 6625a734..2417879d 100644 --- a/inc/hgl/graph/shader/ShaderMaker.h +++ b/inc/hgl/graph/shader/ShaderMaker.h @@ -4,16 +4,26 @@ #include #include BEGIN_SHADER_NAMESPACE + +using NodeList=List; + class ShaderMaker { node::Finished *fin_node; protected: - List vi_list; ///<顶点输入节点列表 -// List tex_list; ///<纹理输入节点列表 -// List ubo_list; /// func_list; ///<材质函数节点列表 + NodeList node_list[node::NodeType::NODE_TYPE_RANGE_SIZE]; + +protected: + + virtual void MakeHeader(); + virtual void MakeVertexInput(const NodeList &); + virtual void MakeConstValue(const NodeList &); + virtual void MakeTextureInput(const NodeList &); + virtual void MakeUBOInput(const NodeList &); + virtual void MakeOutput(); + virtual void MakeFinished(); public: diff --git a/inc/hgl/graph/shader/node/type.h b/inc/hgl/graph/shader/node/type.h index 18c04b55..77715327 100644 --- a/inc/hgl/graph/shader/node/type.h +++ b/inc/hgl/graph/shader/node/type.h @@ -4,7 +4,7 @@ #include BEGIN_SHADER_NODE_NAMESPACE -enum class NodeType +enum class NodeType:int { VertexInput=0, ///<顶点输入流节点 diff --git a/src/RenderDevice/Shader/ShaderMaker.cpp b/src/RenderDevice/Shader/ShaderMaker.cpp index a301f348..85f1ab43 100644 --- a/src/RenderDevice/Shader/ShaderMaker.cpp +++ b/src/RenderDevice/Shader/ShaderMaker.cpp @@ -1,6 +1,7 @@ #include #include #include +#include BEGIN_SHADER_NAMESPACE bool ShaderMaker::Check() @@ -12,6 +13,7 @@ bool ShaderMaker::Check() Set prev; //等待检测的节点合集 node::Node *cur,*nn; + node::NodeType type; node::InputParamList *ipl; int i,count; param::InputParam **ip; @@ -26,6 +28,15 @@ bool ShaderMaker::Check() for(i=0;iGetNodeType(); + + if(typenode::NodeType::END_NODE_TYPE_RANGE) + { + LOG_ERROR(U8_TEXT("node type error!")); + return(false); + } + if(!(*ip)->Check()) return(false); @@ -43,7 +54,8 @@ bool ShaderMaker::Check() ip++; } - + + node_list[int(type)-int(node::NodeType::BEGIN_NODE_TYPE_RANGE)].Add(cur); prev.Delete(cur); post.Add(cur); } @@ -51,11 +63,47 @@ bool ShaderMaker::Check() return(true); } +void ShaderMaker::MakeHeader() +{ +} + +void ShaderMaker::MakeVertexInput(const NodeList &nl) +{ +} + +void ShaderMaker::MakeConstValue(const NodeList &nl) +{ +} + +void ShaderMaker::MakeTextureInput(const NodeList &nl) +{ +} + +void ShaderMaker::MakeUBOInput(const NodeList &nl) +{ +} + +void ShaderMaker::MakeOutput() +{ +} + +void ShaderMaker::MakeFinished() +{ +} + bool ShaderMaker::Make() { if(!Check()) return(false); + MakeHeader(); + MakeVertexInput( node_list[int(node::NodeType::VertexInput )-int(node::NodeType::BEGIN_NODE_TYPE_RANGE)]); + MakeConstValue( node_list[int(node::NodeType::Const )-int(node::NodeType::BEGIN_NODE_TYPE_RANGE)]); + MakeTextureInput( node_list[int(node::NodeType::Texture )-int(node::NodeType::BEGIN_NODE_TYPE_RANGE)]); + MakeUBOInput( node_list[int(node::NodeType::UBO )-int(node::NodeType::BEGIN_NODE_TYPE_RANGE)]); + MakeOutput(); + MakeFinished(); + return(true); } END_SHADER_NAMESPACE