ULRE/inc/hgl/graph/shader/ShaderMaker.h

80 lines
1.5 KiB
C
Raw Normal View History

#ifndef HGL_GRAPH_SHADER_MAKER_INCLUDE
#define HGL_GRAPH_SHADER_MAKER_INCLUDE
2019-12-06 21:47:17 +08:00
2019-12-12 22:25:40 +08:00
#include<hgl/graph/shader/node/finished.h>
#include<hgl/graph/shader/node/vertex_input.h>
2019-12-16 20:35:51 +08:00
#include<hgl/type/StringList.h>
2019-12-12 22:25:40 +08:00
BEGIN_SHADER_NAMESPACE
2019-12-15 20:51:11 +08:00
using NodeList=List<node::Node *>;
2019-12-16 20:35:51 +08:00
enum class API
{
OpenGLCore,
OpenGLES,
Vulkan
};
2020-01-10 18:04:52 +08:00
/**
*
*/
enum class ShaderDefaultBinding
{
WorldMatrix=0,
};
2019-12-12 22:25:40 +08:00
class ShaderMaker
2019-12-06 21:47:17 +08:00
{
2019-12-16 20:35:51 +08:00
protected:
API api;
uint api_version;
UTF8StringList shader_source;
protected:
node::VertexInput *vi_node;
2019-12-12 22:25:40 +08:00
node::Finished *fin_node;
2019-12-06 21:47:17 +08:00
2019-12-16 20:35:51 +08:00
List<node::Node *> node_stack;
protected:
2019-12-15 20:51:11 +08:00
NodeList node_list[node::NodeType::NODE_TYPE_RANGE_SIZE];
2019-12-16 20:35:51 +08:00
uint in_location=0;
uint out_location=0;
uint binding=0;
2019-12-15 20:51:11 +08:00
protected:
2019-12-16 20:35:51 +08:00
virtual bool MakeHeader();
virtual bool MakeVertexInput();
2019-12-15 20:51:11 +08:00
virtual void MakeConstValue(const NodeList &);
2020-01-10 18:04:52 +08:00
virtual void MakeScalarValue(const NodeList &);
2019-12-15 20:51:11 +08:00
virtual void MakeTextureInput(const NodeList &);
virtual void MakeUBOInput(const NodeList &);
virtual void MakeOutput();
virtual void MakeFinished();
2019-12-12 22:25:40 +08:00
public:
2019-12-16 20:35:51 +08:00
ShaderMaker(const API &a,const uint av,node::Finished *fn,node::VertexInput *vi=nullptr)
{
api=a;
api_version=av;
fin_node=fn;
vi_node=vi;
}
2019-12-13 17:55:20 +08:00
virtual ~ShaderMaker()=default;
2019-12-12 22:25:40 +08:00
virtual bool Check();
2019-12-13 17:55:20 +08:00
virtual bool Make();
2019-12-16 20:35:51 +08:00
virtual bool SaveToFile(const OSString &);
2019-12-12 22:25:40 +08:00
};//class ShaderMaker
END_SHADER_NAMESPACE
#endif//HGL_GRAPH_SHADER_MAKER_INCLUDE