added a newly AddUBO() in MaterialCreateInfo
This commit is contained in:
parent
cc9e756ece
commit
f0848541c2
@ -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
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user