added a newly AddUBO() in MaterialCreateInfo

This commit is contained in:
hyzboy 2024-03-09 22:25:03 +08:00
parent cc9e756ece
commit f0848541c2
2 changed files with 29 additions and 28 deletions

View File

@ -83,10 +83,11 @@ namespace hgl{namespace graph
bool AddStruct(const AnsiString &ubo_typename,const AnsiString &codes); bool AddStruct(const AnsiString &ubo_typename,const AnsiString &codes);
bool AddStruct(const ShaderBufferSource &ss){return AddStruct(ss.struct_name,ss.codes);} bool AddStruct(const ShaderBufferSource &ss){return AddStruct(ss.struct_name,ss.codes);}
bool AddUBO(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const AnsiString &type_name,const AnsiString &name); bool AddUBO(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const AnsiString &struct_name,const AnsiString &name);
bool AddSampler(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name); bool AddSampler(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name);
bool AddUBO(const uint32_t flag_bits,const DescriptorSetType &set_type,const ShaderBufferSource &ss); bool AddUBO(const uint32_t flag_bits,const DescriptorSetType &set_type,const AnsiString &struct_name,const AnsiString &name);
bool AddUBO(const uint32_t flag_bits,const DescriptorSetType &set_type,const ShaderBufferSource &ss){return AddUBO(flag_bits,set_type,ss.struct_name,ss.name);}
bool CreateShader(); bool CreateShader();
};//class MaterialCreateInfo };//class MaterialCreateInfo

View File

@ -43,12 +43,12 @@ bool MaterialCreateInfo::AddStruct(const AnsiString &struct_name,const AnsiStrin
return mdi.AddStruct(struct_name,codes); return mdi.AddStruct(struct_name,codes);
} }
bool MaterialCreateInfo::AddUBO(const VkShaderStageFlagBits flag_bit,const DescriptorSetType set_type,const AnsiString &type_name,const AnsiString &name) bool MaterialCreateInfo::AddUBO(const VkShaderStageFlagBits flag_bit,const DescriptorSetType set_type,const AnsiString &struct_name,const AnsiString &name)
{ {
if(!shader_map.KeyExist(flag_bit)) if(!shader_map.KeyExist(flag_bit))
return(false); return(false);
if(!mdi.hasStruct(type_name)) if(!mdi.hasStruct(struct_name))
return(false); return(false);
ShaderCreateInfo *sc=shader_map[flag_bit]; ShaderCreateInfo *sc=shader_map[flag_bit];
@ -60,7 +60,7 @@ bool MaterialCreateInfo::AddUBO(const VkShaderStageFlagBits flag_bit,const Descr
if(ubo) if(ubo)
{ {
if(ubo->type!=type_name) if(ubo->type!=struct_name)
return(false); return(false);
ubo->stage_flag|=flag_bit; ubo->stage_flag|=flag_bit;
@ -71,13 +71,35 @@ bool MaterialCreateInfo::AddUBO(const VkShaderStageFlagBits flag_bit,const Descr
{ {
ubo=new UBODescriptor(); ubo=new UBODescriptor();
ubo->type=type_name; ubo->type=struct_name;
hgl::strcpy(ubo->name,DESCRIPTOR_NAME_MAX_LENGTH,name); hgl::strcpy(ubo->name,DESCRIPTOR_NAME_MAX_LENGTH,name);
return sc->sdm->AddUBO(set_type,mdi.AddUBO(flag_bit,set_type,ubo)); return sc->sdm->AddUBO(set_type,mdi.AddUBO(flag_bit,set_type,ubo));
} }
} }
bool MaterialCreateInfo::AddUBO(const uint32_t flag_bits,const DescriptorSetType &set_type,const AnsiString &struct_name,const AnsiString &name)
{
if(flag_bits==0)return(false); //没有任何SHADER用?
if(!mdi.hasStruct(struct_name))
return(false);
uint result=0;
VkShaderStageFlagBits bit;
for(int i=0;i<shader_map.GetCount();i++)
{
shader_map.GetKey(i,bit);
if(flag_bits&bit)
if(AddUBO(bit,set_type,struct_name,name))
++result;
}
return(result==shader_map.GetCount());
}
bool MaterialCreateInfo::AddSampler(const VkShaderStageFlagBits flag_bit,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name) bool MaterialCreateInfo::AddSampler(const VkShaderStageFlagBits flag_bit,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name)
{ {
if(!shader_map.KeyExist(flag_bit)) if(!shader_map.KeyExist(flag_bit))
@ -114,28 +136,6 @@ bool MaterialCreateInfo::AddSampler(const VkShaderStageFlagBits flag_bit,const D
} }
} }
bool MaterialCreateInfo::AddUBO(const uint32_t flag_bits,const DescriptorSetType &set_type,const ShaderBufferSource &ss)
{
if(flag_bits==0)return(false); //没有任何SHADER用
if(!mdi.hasStruct(ss.struct_name))
mdi.AddStruct(ss.struct_name,ss.codes);
uint result=0;
VkShaderStageFlagBits bit;
for(int i=0;i<shader_map.GetCount();i++)
{
shader_map.GetKey(i,bit);
if(flag_bits&bit)
if(AddUBO(bit,set_type,ss.struct_name,ss.name))
++result;
}
return(result==shader_map.GetCount());
}
namespace namespace
{ {
UBODescriptor *CreateUBODescriptor(const ShaderBufferSource &sbs,const uint32_t flag_bits) UBODescriptor *CreateUBODescriptor(const ShaderBufferSource &sbs,const uint32_t flag_bits)