#ifndef HGL_GRAPH_VULKAN_MATERIAL_INCLUDE #define HGL_GRAPH_VULKAN_MATERIAL_INCLUDE #include #include #include VK_NAMESPACE_BEGIN class DescriptorSetLayoutCreater; using ShaderModuleMap=hgl::Map; /** * 材质类
* 用于管理shader,提供DescriptorSetLayoutCreater */ class Material { Device *device; ShaderModuleMap *shader_maps; VertexShaderModule *vertex_sm; List *shader_stage_list; DescriptorSetLayoutCreater *dsl_creater; VertexAttributeBinding *vab; public: Material(Device *dev,ShaderModuleMap *smm,List *,DescriptorSetLayoutCreater *dslc); ~Material(); const VertexShaderModule *GetVertexShaderModule()const{return vertex_sm;} const int GetBinding(VkDescriptorType,const AnsiString &)const; #define GET_BO_BINDING(name,vk_name) const int Get##name(const AnsiString &obj_name)const{return GetBinding(VK_DESCRIPTOR_TYPE_##vk_name,obj_name);} // GET_BO_BINDING(Sampler, SAMPLER) GET_BO_BINDING(Sampler, COMBINED_IMAGE_SAMPLER) // GET_BO_BINDING(SampledImage, SAMPLED_IMAGE) GET_BO_BINDING(StorageImage, STORAGE_IMAGE) GET_BO_BINDING(UTBO, UNIFORM_TEXEL_BUFFER) GET_BO_BINDING(SSTBO, STORAGE_TEXEL_BUFFER) GET_BO_BINDING(UBO, UNIFORM_BUFFER) GET_BO_BINDING(SSBO, STORAGE_BUFFER) GET_BO_BINDING(UBODynamic, UNIFORM_BUFFER_DYNAMIC) GET_BO_BINDING(SSBODynamic, STORAGE_BUFFER_DYNAMIC) GET_BO_BINDING(InputAttachment, INPUT_ATTACHMENT) #undef GET_BO_BINDING const uint32_t GetStageCount ()const{return shader_stage_list->GetCount();} const VkPipelineShaderStageCreateInfo * GetStages ()const{return shader_stage_list->GetData();} const VkPipelineLayout GetPipelineLayout ()const; DescriptorSets * CreateDescriptorSets()const; void Write(VkPipelineVertexInputStateCreateInfo &vis)const; Renderable *CreateRenderable(const uint32_t draw_count=0); MaterialInstance *CreateInstance(); };//class Material VK_NAMESPACE_END #endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE