update struct

This commit is contained in:
hyzboy 2019-12-12 22:25:40 +08:00
parent 47ccb2c3c6
commit c3a3275f12
18 changed files with 266 additions and 198 deletions

2
CMCore

@ -1 +1 @@
Subproject commit 2d9765839e0446292ae96ce126c01ffb04bc30a7
Subproject commit 328e6d2f26f0cbd15104dd817798f20cc624ea80

View File

@ -1,8 +1,18 @@
#ifndef HGL_GRAPH_SHADER_MAKER_INCLUDE
#define HGL_GRAPH_SHADER_MAKER_INCLUDE
namespace hgl
#include<hgl/graph/shader/node/finished.h>
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

View File

@ -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

View File

@ -1,18 +1,18 @@
#ifndef HGL_GRAPH_SHADER_NODE_FINISHED_INCLUDE
#define HGL_GRAPH_SHADER_NODE_FINISHED_INCLUDE
#include<hgl/graph/shader/node/in.h>
#include<hgl/graph/shader/node/node.h>
#include<hgl/graph/shader/param/in.h>
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

View File

@ -1,23 +0,0 @@
#ifndef HGL_GRAPH_SHADER_NODE_INPUT_INCLUDE
#define HGL_GRAPH_SHADER_NODE_INPUT_INCLUDE
#include<hgl/graph/shader/node/node.h>
#include<hgl/graph/shader/param/in.h>
BEGIN_SHADER_NODE_NAMESPACE
/**
*
*/
class Input:public Node
{
protected:
ObjectList<param::InputParam> input_params;
public:
using Node::Node;
virtual ~Input()=default;
};//class InputNode
END_SHADER_NODE_NAMESPACE
#endif//HGL_GRAPH_SHADER_NODE_INPUT_INCLUDE

View File

@ -1,24 +0,0 @@
#ifndef HGL_GRAPH_SHADER_NODE_INOUT_INCLUDE
#define HGL_GRAPH_SHADER_NODE_INOUT_INCLUDE
#include<hgl/graph/shader/node/node.h>
#include<hgl/graph/shader/param/in.h>
#include<hgl/graph/shader/param/out.h>
BEGIN_SHADER_NODE_NAMESPACE
/**
*
*/
class InputOutput:public Node
{
protected:
ObjectList<InputParam> input_params;
ObjectList<OutputParam> output_params;
public:
using Node::Node;
virtual ~InputOutput()=default;
};//class InputOutput:public Node
END_SHADER_NODE_NAMESPACE
#endif//HGL_GRAPH_SHADER_NODE_INOUT_INCLUDE

View File

@ -12,12 +12,29 @@ BEGIN_SHADER_NODE_NAMESPACE
class Node
{
UTF8String type_name; ///<节点类型本身的名称
protected:
UTF8String name; ///<节点用户自定义名称
ObjectList<param::InputParam> input_params;
ObjectList<param::OutputParam> 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

View File

@ -1,22 +0,0 @@
#ifndef HGL_GRAPH_SHADER_NODE_OUTPUT_INCLUDE
#define HGL_GRAPH_SHADER_NODE_OUTPUT_INCLUDE
#include<hgl/graph/shader/node/node.h>
#include<hgl/graph/shader/param/out.h>
BEGIN_SHADER_NODE_NAMESPACE
/**
*
*/
class Output:public Node
{
protected:
ObjectList<OutputParam> output_params;
public:
using Node::Node;
virtual ~Output()=default;
};//class Output:public Node
END_SHADER_NODE_NAMESPACE
#endif//HGL_GRAPH_SHADER_NODE_OUTPUT_INCLUDE

View File

@ -0,0 +1,28 @@
#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,6 +1,8 @@
#ifndef HGL_GRAPH_SHADER_PARAM_INPUT_INCLUDE
#define HGL_GRAPH_SHADER_PARAM_INPUT_INCLUDE
#include<hgl/graph/shader/node/node.h>
#include<hgl/graph/shader/param/out.h>
#include<hgl/graph/shader/param/param.h>
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<typename T>
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

View File

@ -1,8 +1,7 @@
#ifndef HGL_GRAPH_SHADER_PARAM_OUTPUT_INCLUDE
#define HGL_GRAPH_SHADER_PARAM_OUTPUT_INCLUDE
#include<hgl/graph/shader/param/in.h>
#include<hgl/graph/shader/node/node.h>
#include<hgl/graph/shader/param/param.h>
#include<hgl/type/Set.h>
#include<hgl/type/Pair.h>
@ -10,8 +9,6 @@ BEGIN_SHADER_PARAM_NAMESPACE
using namespace hgl;
using InputNode=Pair<node::Node *,InputParam *>;
#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<node::Node *,InputParam *>;
*/
class OutputParam:public Param
{
Set<InputNode> 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

View File

@ -5,87 +5,23 @@
#include<hgl/graph/shader/common.h>
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

View File

@ -0,0 +1,72 @@
#ifndef HGL_GRAPH_SHADER_PARAM_INCLUDE
#define HGL_GRAPH_SHADER_PARAM_INCLUDE
#include<hgl/graph/shader/common.h>
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

View File

@ -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})

View File

@ -1,11 +1,21 @@
#include<hgl/graph/shader/param/out.h>
#include<hgl/graph/shader/param/in.h>
#include<hgl/graph/shader/param/out.h>
#include<hgl/graph/shader/node/finished.h>
#include<hgl/graph/shader/ShaderMaker.h>
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

View File

@ -0,0 +1,14 @@
#include<hgl/graph/shader/ShaderMaker.h>
BEGIN_SHADER_NAMESPACE
bool ShaderMaker::Make()
{
if(!fin_node)
return(false);
if(!fin_node->CheckInputParam())
return(false);
return(true);
}
END_SHADER_NAMESPACE

View File

@ -0,0 +1,17 @@
#include<hgl/graph/shader/node/node.h>
BEGIN_SHADER_NODE_NAMESPACE
bool Node::CheckInputParam()
{
const int count=input_params.GetCount();
param::InputParam **ip=input_params.GetData();
for(int i=0;i<count;i++)
if(!(*ip)->Check())
return(false);
else
++ip;
return(true);
}
END_SHADER_NODE_NAMESPACE

View File

@ -0,0 +1,24 @@
#include<hgl/graph/shader/param/in.h>
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