ULRE/inc/hgl/graph/VKMaterial.h

66 lines
2.4 KiB
C
Raw Normal View History

2019-04-25 10:09:56 +08:00
#ifndef HGL_GRAPH_VULKAN_MATERIAL_INCLUDE
#define HGL_GRAPH_VULKAN_MATERIAL_INCLUDE
#include<hgl/graph/VK.h>
#include<hgl/type/Map.h>
2020-09-05 17:54:21 +08:00
#include<hgl/type/String.h>
#include<hgl/graph/VKShaderModuleMap.h>
#include<hgl/graph/VKVertexAttributeBinding.h>
2019-04-25 10:09:56 +08:00
VK_NAMESPACE_BEGIN
2020-01-20 15:39:39 +08:00
class DescriptorSetLayoutCreater;
2019-04-25 10:09:56 +08:00
/**
* <br>
* shaderDescriptorSetLayoutCreater
*/
class Material
{
UTF8String mtl_name;
ShaderModuleMap *shader_maps;
2021-09-13 20:39:25 +08:00
MaterialDescriptorSets *mds;
VertexShaderModule *vertex_sm;
2021-09-13 20:39:25 +08:00
List<VkPipelineShaderStageCreateInfo> shader_stage_list;
2019-04-27 02:07:06 +08:00
DescriptorSetLayoutCreater *dsl_creater;
MaterialParameters *mp_m,*mp_g,*mp_r;
VertexAttributeBinding *vab;
2019-04-25 10:09:56 +08:00
public:
2021-09-13 20:39:25 +08:00
Material(const UTF8String &name,ShaderModuleMap *smm,MaterialDescriptorSets *_mds,DescriptorSetLayoutCreater *);
2019-04-25 10:09:56 +08:00
~Material();
const UTF8String & GetName ()const{return mtl_name;}
const VertexShaderModule * GetVertexShaderModule ()const{return vertex_sm;}
2021-09-13 20:39:25 +08:00
const uint32_t GetStageCount ()const{return shader_stage_list.GetCount();}
const VkPipelineShaderStageCreateInfo * GetStages ()const{return shader_stage_list.GetData();}
const VkPipelineLayout GetPipelineLayout ()const;
const VertexAttributeBinding * GetVAB ()const{return vab;}
const uint32_t GetVertexAttrCount ()const{return vab->GetVertexAttrCount();}
const VkVertexInputBindingDescription * GetVertexBindingList ()const{return vab->GetVertexBindingList();}
const VkVertexInputAttributeDescription * GetVertexAttributeList ()const{return vab->GetVertexAttributeList();}
public:
MaterialParameters * CreateMP (const DescriptorSetType &type)const;
MaterialParameters * GetMP (const DescriptorSetType &type)
{
if(type==DescriptorSetType::Material )return mp_m;else
if(type==DescriptorSetType::Renderable )return mp_r;else
if(type==DescriptorSetType::Global )return mp_g;else
return(nullptr);
}
MaterialInstance * CreateInstance();
};//class Material
2019-04-25 10:09:56 +08:00
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE