updated shadergen
This commit is contained in:
@@ -6,7 +6,7 @@ using namespace hgl::shadergen;
|
||||
|
||||
bool PureColor2DMaterial()
|
||||
{
|
||||
MaterialCreater mc(1); //一个新材质,1个RT输出,默认使用Vertex/Fragment shader
|
||||
MaterialCreater mc(1,false); //一个新材质,1个RT输出,默认使用Vertex/Fragment shader
|
||||
|
||||
//vertex部分
|
||||
{
|
||||
@@ -61,12 +61,14 @@ void main()
|
||||
})");
|
||||
}
|
||||
|
||||
mc.CompileShader();
|
||||
mc.CreateShader();
|
||||
|
||||
return(false);
|
||||
}
|
||||
|
||||
int MaterialCreaterTest()
|
||||
int main()
|
||||
{
|
||||
PureColor2DMaterial();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -50,6 +50,6 @@ public:
|
||||
bool AddUBO(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const AnsiString &type_name,const AnsiString &name);
|
||||
bool AddSampler(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name);
|
||||
|
||||
bool CompileShader();
|
||||
bool CreateShader();
|
||||
};//class MaterialCreater
|
||||
SHADERGEN_NAMESPACE_END
|
||||
|
@@ -44,9 +44,6 @@ public:
|
||||
|
||||
bool AddStruct(const AnsiString &name,const AnsiString &code)
|
||||
{
|
||||
if(struct_map.KeyExist(name))
|
||||
return(false);
|
||||
|
||||
struct_map.Add(name,code);
|
||||
return(true);
|
||||
}
|
||||
|
@@ -62,6 +62,8 @@ public:
|
||||
|
||||
bool CreateShader(ShaderCreater *);
|
||||
|
||||
const AnsiString &GetShaderSource()const{return final_shader;}
|
||||
|
||||
bool CompileToSPV();
|
||||
};//class ShaderCreater
|
||||
SHADERGEN_NAMESPACE_END
|
||||
|
@@ -95,25 +95,27 @@ bool MaterialCreater::AddSampler(const VkShaderStageFlagBits flag_bit,const Desc
|
||||
}
|
||||
}
|
||||
|
||||
bool MaterialCreater::CompileShader()
|
||||
bool MaterialCreater::CreateShader()
|
||||
{
|
||||
if(shader_map.IsEmpty())
|
||||
return(false);
|
||||
|
||||
//mdm.Resort();
|
||||
|
||||
ShaderCreater *sc,*last=nullptr;
|
||||
|
||||
for(int i=0;i<shader_map.GetCount();i++)
|
||||
{
|
||||
if(!shader_map.GetValue(i,sc))
|
||||
return(false);
|
||||
|
||||
sc->CreateShader(last);
|
||||
|
||||
//if(!sc->CompileToSPV())
|
||||
//for(int i=0;i<shader_map.GetCount();i++)
|
||||
//{
|
||||
// if(!shader_map.GetValue(i,sc))
|
||||
// return(false);
|
||||
|
||||
last=sc;
|
||||
}
|
||||
// sc->CreateShader(last);
|
||||
|
||||
// last=sc;
|
||||
//}
|
||||
|
||||
//vert->CreateShader(nullptr);
|
||||
frag->CreateShader(vert);
|
||||
|
||||
return(true);
|
||||
}
|
||||
|
@@ -34,8 +34,8 @@ bool ShaderCreater::ProcSubpassInput()
|
||||
if(sil.IsEmpty())
|
||||
return(true);
|
||||
|
||||
const auto si=sil.GetData();
|
||||
const int si_count=sil.GetCount();
|
||||
auto si=sil.GetData();
|
||||
int si_count=sil.GetCount();
|
||||
|
||||
for(int i=0;i<si_count;i++)
|
||||
{
|
||||
@@ -46,6 +46,8 @@ bool ShaderCreater::ProcSubpassInput()
|
||||
final_shader+=") uniform subpassInput ";
|
||||
final_shader+=(*si)->name;
|
||||
final_shader+=";\n";
|
||||
|
||||
++si;
|
||||
}
|
||||
|
||||
final_shader+="\n";
|
||||
@@ -73,14 +75,16 @@ bool ShaderCreater::ProcInput(ShaderCreater *last_sc)
|
||||
|
||||
bool ShaderCreater::ProcOutput()
|
||||
{
|
||||
final_shader+="layout(location=0) out ";
|
||||
|
||||
output_struct.Clear();
|
||||
|
||||
const ShaderStageList &ssl=sdm.GetShaderStageIO().output;
|
||||
|
||||
if(ssl.GetCount()<=0)return(true);
|
||||
|
||||
output_struct=GetShaderStageName(shader_stage);
|
||||
output_struct+="_Output\n{\n";
|
||||
|
||||
for(auto *ss:sdm.GetShaderStageIO().output)
|
||||
for(auto *ss:ssl)
|
||||
{
|
||||
output_struct+="\t";
|
||||
output_struct+=GetShaderStageTypeName(ss);
|
||||
@@ -91,6 +95,7 @@ bool ShaderCreater::ProcOutput()
|
||||
|
||||
output_struct+="}";
|
||||
|
||||
final_shader+="layout(location=0) out ";
|
||||
final_shader+=output_struct;
|
||||
final_shader+="Output;\n\n";
|
||||
|
||||
@@ -112,7 +117,7 @@ bool ShaderCreater::ProcStruct()
|
||||
final_shader+=*str;
|
||||
final_shader+="\n{\n";
|
||||
final_shader+=codes;
|
||||
final_shader+="};\n\n";
|
||||
final_shader+="\n};\n\n";
|
||||
}
|
||||
|
||||
return(true);
|
||||
@@ -153,7 +158,8 @@ bool ShaderCreater::ProcSSBO()
|
||||
}
|
||||
|
||||
bool ShaderCreater::ProcConst()
|
||||
{auto const_list=sdm.GetConstList();
|
||||
{
|
||||
auto const_list=sdm.GetConstList();
|
||||
|
||||
const int count=const_list.GetCount();
|
||||
|
||||
@@ -220,14 +226,14 @@ bool ShaderCreater::CreateShader(ShaderCreater *last_sc)
|
||||
if(!ProcStruct())
|
||||
return(false);
|
||||
|
||||
if(!ProcUBO())
|
||||
return(false);
|
||||
//if(!ProcSSBO())
|
||||
//if(!ProcUBO())
|
||||
// return(false);
|
||||
////if(!ProcSSBO())
|
||||
// //return(false);
|
||||
//if(!ProcConst())
|
||||
// return(false);
|
||||
//if(!ProcSampler())
|
||||
// return(false);
|
||||
if(!ProcConst())
|
||||
return(false);
|
||||
if(!ProcSampler())
|
||||
return(false);
|
||||
|
||||
ProcOutput();
|
||||
|
||||
|
@@ -41,7 +41,7 @@ bool ShaderCreaterVertex::ProcInput(ShaderCreater *)
|
||||
final_shader+=UTF8String::numberOf(ss->location);
|
||||
final_shader+=") in ";
|
||||
final_shader+=UTF8String(GetShaderStageTypeName(ss));
|
||||
final_shader+="\t"+UTF8String(ss->name);
|
||||
final_shader+=" "+UTF8String(ss->name);
|
||||
final_shader+=";\n";
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user