diff --git a/inc/hgl/shadergen/MaterialCreateInfo.h b/inc/hgl/shadergen/MaterialCreateInfo.h index a60b2e91..b612665b 100644 --- a/inc/hgl/shadergen/MaterialCreateInfo.h +++ b/inc/hgl/shadergen/MaterialCreateInfo.h @@ -30,7 +30,7 @@ protected: MaterialDescriptorInfo mdi; ///<材质描述符管理器 AnsiString mi_codes; ///hasSet(DescriptorSetType::PerMaterial)) - //{ - // data->mi_size - // data->mi_data=new uint8[data->mi_size*256]; - //} - //else + if(desc_manager->hasSet(DescriptorSetType::PerMaterial)) + { + uint size; + + if(ubo_range>=64*1024) + size=64*1024; + else + size=ubo_range; + + data->mi_size=0; + data->mi_data=new uint8[size]; + } + else { data->mi_size=0; data->mi_data=nullptr; diff --git a/src/ShaderGen/MaterialCreateInfo.cpp b/src/ShaderGen/MaterialCreateInfo.cpp index 53cb93fb..8ad48961 100644 --- a/src/ShaderGen/MaterialCreateInfo.cpp +++ b/src/ShaderGen/MaterialCreateInfo.cpp @@ -16,6 +16,8 @@ MaterialCreateInfo::MaterialCreateInfo(const AnsiString &n,const RenderTargetOut if(hasVertex ())shader_map.Add(vert=new ShaderCreateInfoVertex (&mdi));else vert=nullptr; if(hasGeometry ())shader_map.Add(geom=new ShaderCreateInfoGeometry(&mdi));else geom=nullptr; if(hasFragment ())shader_map.Add(frag=new ShaderCreateInfoFragment(&mdi));else frag=nullptr; + + mi_length=0; } bool MaterialCreateInfo::AddStruct(const AnsiString &struct_name,const AnsiString &codes) @@ -97,11 +99,40 @@ 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(uint i=0;i0) + { + AddUBO( shader_stage, + DescriptorSetType::Global, + mtl::SBS_MaterialInstance); + } + mdi.Resort(); ShaderCreateInfo *sc,*last=nullptr;