first finished check function of ShaderMaker.wait test.

This commit is contained in:
hyzboy 2019-12-13 11:20:08 +08:00
parent c3a3275f12
commit 2fa918c00d
12 changed files with 122 additions and 81 deletions

2
CMCore

@ -1 +1 @@
Subproject commit 328e6d2f26f0cbd15104dd817798f20cc624ea80 Subproject commit e3a58db799b9588d0e10e3eb804ba3403f18dff4

View File

@ -19,7 +19,6 @@ END_SHADER_NODE_NAMESPACE
BEGIN_SHADER_PARAM_NAMESPACE BEGIN_SHADER_PARAM_NAMESPACE
class Param; class Param;
class InputParam:public Param;
class OutputParam:public Param;
END_SHADER_PARAM_NAMESPACE END_SHADER_PARAM_NAMESPACE
#endif//HGL_GRAPH_SHADER_COMMON_INCLUDE #endif//HGL_GRAPH_SHADER_COMMON_INCLUDE

View File

@ -25,7 +25,7 @@ public:
VertexFinished():Finished("Vertex Output") VertexFinished():Finished("Vertex Output")
{ {
SHADER_INPUT_PARAM(Position, Float3) SHADER_INPUT_PARAM(true,Position, Float3)
} }
~VertexFinished()=default; ~VertexFinished()=default;
@ -40,12 +40,12 @@ public:
FragmentFinished():Finished("Fragment Output") FragmentFinished():Finished("Fragment Output")
{ {
SHADER_INPUT_PARAM(BaseColor, Float3) SHADER_INPUT_PARAM(false,BaseColor, Float3)
SHADER_INPUT_PARAM(Normal, Float3) SHADER_INPUT_PARAM(false,Normal, Float3)
SHADER_INPUT_PARAM(Metallic, Float1) SHADER_INPUT_PARAM(false,Metallic, Float1)
SHADER_INPUT_PARAM(Roughness, Float1) SHADER_INPUT_PARAM(false,Roughness, Float1)
SHADER_INPUT_PARAM(Opacity, Float1) SHADER_INPUT_PARAM(false,Opacity, Float1)
SHADER_INPUT_PARAM(DepthOffset, Float1) SHADER_INPUT_PARAM(false,DepthOffset, Float1)
} }
~FragmentFinished()=default; ~FragmentFinished()=default;

View File

@ -3,9 +3,17 @@
#include<hgl/type/BaseString.h> #include<hgl/type/BaseString.h>
#include<hgl/type/List.h> #include<hgl/type/List.h>
#include<hgl/graph/shader/common.h> #include<hgl/graph/shader/param/in.h>
#include<hgl/graph/shader/param/out.h>
BEGIN_SHADER_NODE_NAMESPACE BEGIN_SHADER_NODE_NAMESPACE
#define SHADER_INPUT_PARAM(mj,name,type) input_params.Add(new SHADER_PARAM_NAMESPACE::InputParam(mj,#name,SHADER_PARAM_NAMESPACE::ParamType::type));
#define SHADER_OUTPUT_PARAM(name,type) output_params.Add(new SHADER_PARAM_NAMESPACE::Param(#name,SHADER_PARAM_NAMESPACE::ParamType::type));
using InputParamList=ObjectList<param::InputParam>;
using OutputParamList=ObjectList<param::OutputParam>;
/** /**
* Shader Shader的基础 * Shader Shader的基础
*/ */
@ -17,24 +25,27 @@ protected:
UTF8String name; ///<节点用户自定义名称 UTF8String name; ///<节点用户自定义名称
ObjectList<param::InputParam> input_params; InputParamList input_params;
ObjectList<param::OutputParam> output_params; OutputParamList output_params;
public: public:
Node(const UTF8String &n){type_name=n;} Node(const UTF8String &n){type_name=n;}
virtual ~Node()=default; virtual ~Node()=default;
const UTF8String & GetTypename()const{return type_name;} const UTF8String & GetTypename ()const{return type_name;}
const UTF8String & GetName()const{return name;} const UTF8String & GetName ()const{return name;}
void SetName(const UTF8String &n){name=n;} void SetName (const UTF8String &n){name=n;}
InputParamList & GetInputParamList (){return input_params;}
OutputParamList & GetOutputParamList (){return output_params;}
public: //参数相关 public: //参数相关
virtual bool IsOutputParam(param::OutputParam *); virtual bool IsOutputParam(param::OutputParam *);
virtual bool CheckInputParam(); virtual bool Check(); ///<检测当前节点是否可用
};//class Node };//class Node
END_SHADER_NODE_NAMESPACE END_SHADER_NODE_NAMESPACE
#endif//HGL_GRAPH_SHADER_NODE_INCLUDE #endif//HGL_GRAPH_SHADER_NODE_INCLUDE

View File

@ -1,28 +0,0 @@
#ifndef HGL_GRAPH_SHADER_PARAM_DATA_INCLUDE
#define HGL_GRAPH_SHADER_PARAM_DATA_INCLUDE
#include<hgl/graph/shader/param/type.h>
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

View File

@ -1,32 +1,51 @@
#ifndef HGL_GRAPH_SHADER_PARAM_INPUT_INCLUDE #ifndef HGL_GRAPH_SHADER_PARAM_INPUT_INCLUDE
#define HGL_GRAPH_SHADER_PARAM_INPUT_INCLUDE #define HGL_GRAPH_SHADER_PARAM_INPUT_INCLUDE
#include<hgl/graph/shader/node/node.h> #include<hgl/graph/shader/common.h>
#include<hgl/graph/shader/param/out.h> #include<hgl/graph/shader/param/out.h>
#include<hgl/graph/shader/param/param.h> #include<hgl/graph/shader/param/param.h>
BEGIN_SHADER_PARAM_NAMESPACE BEGIN_SHADER_PARAM_NAMESPACE
#define SHADER_INPUT_PARAM(name,type) input_params.Add(new SHADER_PARAM_NAMESPACE::InputParam(#name,SHADER_PARAM_NAMESPACE::ParamType::type));
/** /**
* *
*/ */
class InputParam:public Param class InputParam:public Param
{ {
node::Node *input_node; bool must_join; //是否必须有接入
param::OutputParam *output_param;
protected:
node::Node *join_node;
param::OutputParam *join_param;
protected:
/**
*
*/
virtual bool JoinCheck(node::Node *n,param::OutputParam *op)
{
return(op->GetType()==this->GetType());
}
public: //属性
node::Node * GetJoinNode (){return join_node;} ///<取得接入节点
param::OutputParam *GetJoinParam(){return join_param;} ///<取得接入节点参数
public: public:
using Param::Param; InputParam(const bool mj,const UTF8String &n,const ParamType &t):Param(n,t)
{
must_join=mj;
}
virtual ~InputParam()=default; virtual ~InputParam()=default;
virtual bool Join(node::Node *,OutputParam *); ///<增加一个输入节点 virtual bool Join(node::Node *,param::OutputParam *); ///<增加一个关联节点
virtual void Break(); ///<断开一个输入节点 virtual void Break(){join_node=nullptr;join_param=nullptr;} ///<断开一个关联节点
virtual bool Check(); ///<检测当前节点是否可用 virtual bool Check(){return(must_join?join_param:true);} ///<检测当前节点是否可用
};//class InputParam:public Param };//class InputParam:public Param
END_SHADER_PARAM_NAMESPACE END_SHADER_PARAM_NAMESPACE
#endif//#ifndef HGL_GRAPH_SHADER_PARAM_INPUT_INCLUDE #endif//#ifndef HGL_GRAPH_SHADER_PARAM_INPUT_INCLUDE

View File

@ -2,21 +2,16 @@
#define HGL_GRAPH_SHADER_PARAM_OUTPUT_INCLUDE #define HGL_GRAPH_SHADER_PARAM_OUTPUT_INCLUDE
#include<hgl/graph/shader/param/param.h> #include<hgl/graph/shader/param/param.h>
#include<hgl/type/Set.h>
#include<hgl/type/Pair.h>
BEGIN_SHADER_PARAM_NAMESPACE BEGIN_SHADER_PARAM_NAMESPACE
using namespace hgl; using namespace hgl;
#define SHADER_OUTPUT_PARAM(name,type) output_params.Add(new SHADER_PARAM_NAMESPACE::Param(#name,SHADER_PARAM_NAMESPACE::ParamType::type));
/** /**
* *
*/ */
class OutputParam:public Param class OutputParam:public Param
{ {
public: public:
using Param::Param; using Param::Param;

View File

@ -3,6 +3,7 @@
#include<hgl/type/BaseString.h> #include<hgl/type/BaseString.h>
#include<hgl/graph/shader/common.h> #include<hgl/graph/shader/common.h>
#include<hgl/graph/shader/param/type.h>
BEGIN_SHADER_PARAM_NAMESPACE BEGIN_SHADER_PARAM_NAMESPACE
/** /**
@ -22,6 +23,9 @@ public:
} }
virtual ~Param()=default; virtual ~Param()=default;
const UTF8String & GetName()const{return name;}
const ParamType GetType()const{return type;}
};//class Param };//class Param
END_SHADER_PARAM_NAMESPACE END_SHADER_PARAM_NAMESPACE
#endif//HGL_GRAPH_SHADER_PARAM_INCLUDE #endif//HGL_GRAPH_SHADER_PARAM_INCLUDE

View File

@ -1,5 +1,5 @@
#ifndef HGL_GRAPH_SHADER_PARAM_INCLUDE #ifndef HGL_GRAPH_SHADER_PARAM_TYPE_INCLUDE
#define HGL_GRAPH_SHADER_PARAM_INCLUDE #define HGL_GRAPH_SHADER_PARAM_TYPE_INCLUDE
#include<hgl/graph/shader/common.h> #include<hgl/graph/shader/common.h>
@ -68,5 +68,4 @@ enum class ParamType
RANGE_SIZE =(END_RANGE-BEGIN_RANGE+1) RANGE_SIZE =(END_RANGE-BEGIN_RANGE+1)
};//enum class ParamType };//enum class ParamType
END_SHADER_PARAM_NAMESPACE END_SHADER_PARAM_NAMESPACE
#endif//HGL_GRAPH_SHADER_PARAM_INCLUDE #endif//HGL_GRAPH_SHADER_PARAM_TYPE_INCLUDE

View File

@ -1,4 +1,6 @@
#include<hgl/graph/shader/ShaderMaker.h> #include<hgl/graph/shader/ShaderMaker.h>
#include<hgl/graph/shader/param/in.h>
#include<hgl/type/Set.h>
BEGIN_SHADER_NAMESPACE BEGIN_SHADER_NAMESPACE
bool ShaderMaker::Make() bool ShaderMaker::Make()
@ -6,9 +8,46 @@ bool ShaderMaker::Make()
if(!fin_node) if(!fin_node)
return(false); return(false);
if(!fin_node->CheckInputParam()) Set<node::Node *> post; //完成检测的节点合集
Set<node::Node *> prev; //等待检测的节点合集
node::Node *cur,*nn;
node::InputParamList *ipl;
int i,count;
param::InputParam **ip;
prev.Add(fin_node);
while(prev.GetEnd(cur))
{
ipl =&(cur->GetInputParamList());
count =ipl->GetCount();
ip =ipl->GetData();
for(i=0;i<count;i++)
{
if(!(*ip)->Check())
return(false); return(false);
nn=(*ip)->GetJoinNode();
if(nn)
{
if(!post.IsMember(nn)
&&!prev.IsMember(nn)
&&nn!=cur)
{
prev.Add(nn);
}
}
ip++;
}
prev.Delete(cur);
post.Add(cur);
}
return(true); return(true);
} }
END_SHADER_NAMESPACE END_SHADER_NAMESPACE

View File

@ -1,7 +1,14 @@
#include<hgl/graph/shader/node/node.h> #include<hgl/graph/shader/node/node.h>
BEGIN_SHADER_NODE_NAMESPACE BEGIN_SHADER_NODE_NAMESPACE
bool Node::CheckInputParam() bool Node::IsOutputParam(param::OutputParam *op)
{
if(!op)return(false);
return output_params.IsExist(op);
}
bool Node::Check()
{ {
const int count=input_params.GetCount(); const int count=input_params.GetCount();
param::InputParam **ip=input_params.GetData(); param::InputParam **ip=input_params.GetData();

View File

@ -1,24 +1,20 @@
#include<hgl/graph/shader/param/in.h> #include<hgl/graph/shader/param/in.h>
#include<hgl/graph/shader/node/node.h>
BEGIN_SHADER_PARAM_NAMESPACE BEGIN_SHADER_PARAM_NAMESPACE
bool InputParam::Join(node::Node *n,OutputParam *op) bool InputParam::Join(node::Node *n,param::OutputParam *op)
{ {
if(!n||!op)return(false); if(!n||!op)return(false);
if(!n->IsOutputParam(op)) if(!n->IsOutputParam(op))
return(false); return(false);
input_node=n; if(!JoinCheck(n,op))
output_param=op; return(false);
join_node=n;
join_param=op;
return(true); return(true);
} }
void InputParam::Break()
{
}
bool InputParam::Check()
{
}
END_SHADER_PARAM_NAMESPACE END_SHADER_PARAM_NAMESPACE