first finished check function of ShaderMaker.wait test.
This commit is contained in:
parent
c3a3275f12
commit
2fa918c00d
2
CMCore
2
CMCore
@ -1 +1 @@
|
|||||||
Subproject commit 328e6d2f26f0cbd15104dd817798f20cc624ea80
|
Subproject commit e3a58db799b9588d0e10e3eb804ba3403f18dff4
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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,8 +25,8 @@ protected:
|
|||||||
|
|
||||||
UTF8String name; ///<节点用户自定义名称
|
UTF8String name; ///<节点用户自定义名称
|
||||||
|
|
||||||
ObjectList<param::InputParam> input_params;
|
InputParamList input_params;
|
||||||
ObjectList<param::OutputParam> output_params;
|
OutputParamList output_params;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -30,11 +38,14 @@ public:
|
|||||||
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
|
||||||
|
@ -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
|
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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();
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user