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部分
|
||||
{
|
||||
@@ -14,7 +14,7 @@ bool PureColor2DMaterial()
|
||||
|
||||
//以下代码会被展开为
|
||||
/*
|
||||
layout(location=?) in vec3 Position; //位置属性
|
||||
layout(location=?) in vec3 Position; //位置属性
|
||||
*/
|
||||
vsc->AddInput("vec2","Position"); //添加一个vec3类型的position属性输入
|
||||
|
||||
@@ -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
|
||||
|
@@ -20,7 +20,7 @@ class ShaderDescriptorManager
|
||||
VkShaderStageFlagBits shader_stage;
|
||||
|
||||
ShaderStageIO stage_io;
|
||||
|
||||
|
||||
AnsiStringList struct_list; //用到的结构列表
|
||||
|
||||
//ubo/object在这里以及MaterialDescriptorManager中均有一份,mdm中的用于产生set/binding号,这里的用于产生shader
|
||||
@@ -39,7 +39,7 @@ public:
|
||||
|
||||
const VkShaderStageFlagBits GetStageBits()const { return shader_stage; }
|
||||
const AnsiString GetStageName()const { return AnsiString(GetShaderStageName(shader_stage)); }
|
||||
|
||||
|
||||
public:
|
||||
|
||||
const ShaderStageIO & GetShaderStageIO()const{return stage_io;}
|
||||
@@ -51,8 +51,8 @@ public:
|
||||
|
||||
const ObjectList<ConstValueDescriptor> & GetConstList()const{return const_value_list;}
|
||||
|
||||
const ObjectList<SubpassInputDescriptor> & GetSubpassInputList()const { return subpass_input; }
|
||||
|
||||
const ObjectList<SubpassInputDescriptor> & GetSubpassInputList()const{return subpass_input;}
|
||||
|
||||
public:
|
||||
|
||||
bool AddInput(ShaderStage *);
|
||||
|
@@ -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);
|
||||
//for(int i=0;i<shader_map.GetCount();i++)
|
||||
//{
|
||||
// if(!shader_map.GetValue(i,sc))
|
||||
// return(false);
|
||||
|
||||
sc->CreateShader(last);
|
||||
// sc->CreateShader(last);
|
||||
|
||||
//if(!sc->CompileToSPV())
|
||||
//return(false);
|
||||
// last=sc;
|
||||
//}
|
||||
|
||||
last=sc;
|
||||
}
|
||||
//vert->CreateShader(nullptr);
|
||||
frag->CreateShader(vert);
|
||||
|
||||
return(true);
|
||||
}
|
||||
|
@@ -43,7 +43,7 @@ ShaderDescriptor *MaterialDescriptorManager::ShaderDescriptorSet::AddDescriptor(
|
||||
new_sd->set_type=set_type;
|
||||
new_sd->stage_flag=ssb;
|
||||
|
||||
descriptor_map.Add(new_sd->name, new_sd);
|
||||
descriptor_map.Add(new_sd->name,new_sd);
|
||||
|
||||
count++;
|
||||
|
||||
|
@@ -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())
|
||||
//return(false);
|
||||
if(!ProcConst())
|
||||
return(false);
|
||||
if(!ProcSampler())
|
||||
return(false);
|
||||
//if(!ProcUBO())
|
||||
// return(false);
|
||||
////if(!ProcSSBO())
|
||||
// //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