#pragma once #include #include #include #include #include #include #include #include #include namespace hgl::graph { struct VulkanDevAttr; struct UBODescriptor; namespace mtl { class MaterialCreateInfo { protected: const MaterialCreateConfig *config; uint32_t ubo_range; uint32_t ssbo_range; MaterialDescriptorInfo mdi; ///<材质描述符管理器 AnsiString mi_codes; ///shader_stage_flag_bit;} bool hasShader (const VkShaderStageFlagBits ss)const{return config->shader_stage_flag_bit&ss;} bool hasVertex ()const{return hasShader(VK_SHADER_STAGE_VERTEX_BIT);} // bool hasTessCtrl ()const{return hasShader(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT);} // bool hasTessEval ()const{return hasShader(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT);} bool hasGeometry ()const{return hasShader(VK_SHADER_STAGE_GEOMETRY_BIT);} bool hasFragment ()const{return hasShader(VK_SHADER_STAGE_FRAGMENT_BIT);} // bool hasCompute ()const{return hasShader(VK_SHADER_STAGE_COMPUTE_BIT);} ShaderCreateInfoVertex * GetVS()const{return vert;} ShaderCreateInfoGeometry * GetGS()const{return geom;} ShaderCreateInfoFragment * GetFS()const{return frag;} const ShaderCreateInfoMap &GetShaderMap()const{return shader_map;} public: const MaterialDescriptorInfo &GetMDI()const{return mdi;} const uint32_t GetMIDataBytes ()const{return mi_data_bytes;} const uint32_t GetMIMaxCount ()const{return mi_max_count;} public: MaterialCreateInfo(const MaterialCreateConfig *); ~MaterialCreateInfo()=default; bool SetMaterialInstance(const AnsiString &mi_glsl_codes,const uint32_t mi_struct_bytes,const uint32_t shader_stage_flag_bits); bool SetLocalToWorld(const uint32_t shader_stage_flag_bits); 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 &struct_name,const AnsiString &name); 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 AddSampler(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name); bool CreateShader(const VulkanDevAttr *dev_attr); };//class MaterialCreateInfo }//namespace mtl }//namespace hgl::graph