diff --git a/inc/hgl/shadergen/MaterialCreateInfo.h b/inc/hgl/shadergen/MaterialCreateInfo.h index f8dbf411..8a6e4e9b 100644 --- a/inc/hgl/shadergen/MaterialCreateInfo.h +++ b/inc/hgl/shadergen/MaterialCreateInfo.h @@ -83,10 +83,11 @@ namespace hgl{namespace graph bool AddStruct(const AnsiString &ubo_typename,const AnsiString &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 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(); };//class MaterialCreateInfo diff --git a/src/ShaderGen/MaterialCreateInfo.cpp b/src/ShaderGen/MaterialCreateInfo.cpp index f12968ff..089d0066 100644 --- a/src/ShaderGen/MaterialCreateInfo.cpp +++ b/src/ShaderGen/MaterialCreateInfo.cpp @@ -43,12 +43,12 @@ bool MaterialCreateInfo::AddStruct(const AnsiString &struct_name,const AnsiStrin 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)) return(false); - if(!mdi.hasStruct(type_name)) + if(!mdi.hasStruct(struct_name)) return(false); ShaderCreateInfo *sc=shader_map[flag_bit]; @@ -60,7 +60,7 @@ bool MaterialCreateInfo::AddUBO(const VkShaderStageFlagBits flag_bit,const Descr if(ubo) { - if(ubo->type!=type_name) + if(ubo->type!=struct_name) return(false); ubo->stage_flag|=flag_bit; @@ -71,13 +71,35 @@ bool MaterialCreateInfo::AddUBO(const VkShaderStageFlagBits flag_bit,const Descr { ubo=new UBODescriptor(); - ubo->type=type_name; + ubo->type=struct_name; hgl::strcpy(ubo->name,DESCRIPTOR_NAME_MAX_LENGTH,name); 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