2019-12-10 21:52:10 +08:00
|
|
|
|
#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>
|
2019-12-14 20:52:58 +08:00
|
|
|
|
#include<hgl/graph/shader/node/vertex_input.h>
|
2019-12-16 20:35:51 +08:00
|
|
|
|
#include<hgl/type/StringList.h>
|
2020-01-14 18:09:40 +08:00
|
|
|
|
SHADER_NAMESPACE_BEGIN
|
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;
|
|
|
|
|
|
2019-12-14 20:52:58 +08:00
|
|
|
|
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-14 20:52:58 +08:00
|
|
|
|
|
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
|
|
|
|
|
2019-12-14 20:52:58 +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
|
2020-01-14 18:09:40 +08:00
|
|
|
|
SHADER_NAMESPACE_END
|
2019-12-10 21:52:10 +08:00
|
|
|
|
#endif//HGL_GRAPH_SHADER_MAKER_INCLUDE
|