#ifndef HGL_GRAPH_VULKAN_MATERIAL_INCLUDE #define HGL_GRAPH_VULKAN_MATERIAL_INCLUDE #include #include #include #include #include VK_NAMESPACE_BEGIN using ShaderStageCreateInfoList=List; /** * 材质类
* 用于管理shader,提供DescriptorSetLayoutCreater */ class Material { AnsiString name; VertexInput *vertex_input; ShaderModuleMap *shader_maps; MaterialDescriptorManager *desc_manager; ShaderStageCreateInfoList shader_stage_list; PipelineLayoutData *pipeline_layout_data; MaterialParameters *mp_array[DESCRIPTOR_SET_TYPE_COUNT]; uint32_t mi_data_bytes; ///<实例数据大小 uint32_t mi_max_count; ///<最大实例数量(注:代表一次drawcall大小,而不是整个的大小) private: friend class RenderResource; public: Material(const AnsiString &); virtual ~Material(); const UTF8String & GetName ()const{return name;} const VertexInput * GetVertexInput ()const{return vertex_input;} const ShaderStageCreateInfoList & GetStageList ()const{return shader_stage_list;} const MaterialDescriptorManager * GetDescriptorSets ()const{return desc_manager;} const VkPipelineLayout GetPipelineLayout ()const; const PipelineLayoutData * GetPipelineLayoutData ()const{return pipeline_layout_data;} public: MaterialParameters * GetMP (const DescriptorSetType &type) { RANGE_CHECK_RETURN_NULLPTR(type) return mp_array[size_t(type)]; } const bool hasSet (const DescriptorSetType &type)const; VIL * CreateVIL(const VILConfig *format_map=nullptr); bool Release(VIL *); const uint GetVILCount(); public: MaterialInstance *CreateMI(const VILConfig *vil_cfg=nullptr); };//class Material using MaterialSets=SortedSets; VK_NAMESPACE_END #endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE