#pragma once #include #include #include using namespace hgl; using namespace hgl::graph; SHADERGEN_NAMESPACE_BEGIN /** * 材质描述符管理

* 该类使用于SHADER生成前,用于统计编号set/binding */ class MaterialDescriptorInfo { ShaderDescriptorSetArray desc_set_array; Map struct_map; Map ubo_map; Map sampler_map; public: MaterialDescriptorInfo(); ~MaterialDescriptorInfo()=default; bool AddStruct(const AnsiString &name,const AnsiString &code) { struct_map.Add(name,code); return(true); } bool GetStruct(const AnsiString &name,AnsiString &code) const { return(struct_map.Get(name,code)); } bool hasStruct(const AnsiString &name) const { return(struct_map.KeyExist(name)); } const UBODescriptor *AddUBO(VkShaderStageFlagBits ssb,DescriptorSetType set_type,UBODescriptor *sd); const SamplerDescriptor *AddSampler(VkShaderStageFlagBits ssb,DescriptorSetType set_type,SamplerDescriptor *sd); UBODescriptor *GetUBO(const AnsiString &name); SamplerDescriptor *GetSampler(const AnsiString &name); const DescriptorSetType GetSetType(const AnsiString &)const; void Resort(); //排序产生set号与binding号 const ShaderDescriptorSetArray &Get()const { return desc_set_array; } const bool hasSet(const DescriptorSetType &type)const { return desc_set_array[size_t(type)].count>0; } }; SHADERGEN_NAMESPACE_END