2023-03-06 14:06:20 +08:00
|
|
|
#ifndef HGL_SHADER_CREATER_INCLUDE
|
|
|
|
#define HGL_SHADER_CREATER_INCLUDE
|
|
|
|
|
|
|
|
#include<hgl/shadergen/ShaderDescriptorManager.h>
|
|
|
|
|
|
|
|
SHADERGEN_NAMESPACE_BEGIN
|
|
|
|
class ShaderCreater
|
|
|
|
{
|
2023-03-09 23:21:52 +08:00
|
|
|
protected:
|
|
|
|
|
2023-03-06 14:06:20 +08:00
|
|
|
VkShaderStageFlagBits shader_stage; ///<着色器阶段
|
|
|
|
|
2023-03-09 23:21:52 +08:00
|
|
|
MaterialDescriptorManager *mdm;
|
|
|
|
|
2023-03-06 14:06:20 +08:00
|
|
|
protected:
|
|
|
|
|
2023-03-06 21:30:32 +08:00
|
|
|
AnsiString shader_codes;
|
2023-03-06 14:06:20 +08:00
|
|
|
|
2023-03-08 21:41:57 +08:00
|
|
|
AnsiString output_struct;
|
|
|
|
|
|
|
|
AnsiString final_shader;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
2023-03-09 23:21:52 +08:00
|
|
|
virtual bool ProcHeader(){return(true);}
|
|
|
|
virtual bool ProcSubpassInput();
|
|
|
|
virtual bool ProcInput(ShaderCreater *);
|
|
|
|
virtual bool ProcOutput();
|
|
|
|
|
|
|
|
virtual bool ProcStruct();
|
|
|
|
|
|
|
|
virtual bool ProcUBO();
|
|
|
|
virtual bool ProcSSBO();
|
|
|
|
virtual bool ProcConst();
|
2023-03-08 21:41:57 +08:00
|
|
|
|
2023-03-06 14:06:20 +08:00
|
|
|
public:
|
|
|
|
|
|
|
|
ShaderDescriptorManager sdm;
|
|
|
|
|
|
|
|
VkShaderStageFlagBits GetShaderStage()const{return shader_stage;}
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
2023-03-09 23:21:52 +08:00
|
|
|
ShaderCreater(VkShaderStageFlagBits ss,MaterialDescriptorManager *m):sdm(ss)
|
2023-03-06 14:06:20 +08:00
|
|
|
{
|
|
|
|
shader_stage=ss;
|
2023-03-09 23:21:52 +08:00
|
|
|
mdm=m;
|
2023-03-06 14:06:20 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
virtual ~ShaderCreater()=default;
|
|
|
|
|
|
|
|
int AddOutput(const VAT &type,const AnsiString &name);
|
|
|
|
int AddOutput(const AnsiString &type,const AnsiString &name);
|
|
|
|
|
2023-03-06 21:30:32 +08:00
|
|
|
void SetShaderCodes(const AnsiString &str)
|
|
|
|
{
|
2023-03-08 14:02:51 +08:00
|
|
|
shader_codes=str;
|
2023-03-06 21:30:32 +08:00
|
|
|
}
|
|
|
|
|
2023-03-08 21:41:57 +08:00
|
|
|
const AnsiString &GetOutputStruct()const{return output_struct;}
|
|
|
|
|
|
|
|
bool CreateShader(ShaderCreater *);
|
|
|
|
|
2023-03-06 21:30:32 +08:00
|
|
|
bool CompileToSPV();
|
2023-03-06 14:06:20 +08:00
|
|
|
};//class ShaderCreater
|
|
|
|
SHADERGEN_NAMESPACE_END
|
2023-03-06 21:30:32 +08:00
|
|
|
#endif//HGL_SHADER_CREATER_INCLUDE
|