ULRE/inc/hgl/graph/VKMaterial.h

72 lines
2.8 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
{
ShaderModuleMap *shader_maps;
VertexShaderModule *vertex_sm;
List<VkPipelineShaderStageCreateInfo> *shader_stage_list;
2019-04-27 02:07:06 +08:00
DescriptorSetLayoutCreater *dsl_creater;
VertexAttributeBinding *vab;
2019-04-25 10:09:56 +08:00
public:
Material(ShaderModuleMap *smm,List<VkPipelineShaderStageCreateInfo> *,DescriptorSetLayoutCreater *dslc);
2019-04-25 10:09:56 +08:00
~Material();
2019-05-22 18:10:13 +08:00
const VertexShaderModule *GetVertexShaderModule()const{return vertex_sm;}
2020-07-07 19:16:23 +08:00
const int GetBinding(VkDescriptorType,const AnsiString &)const;
2020-07-07 19:16:23 +08:00
#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)
//shader中并不区分普通UBO和动态UBO所以Material/ShaderResource中的数据只有UBO
// 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;
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:
MaterialInstance * CreateInstance ();
};//class Material
2019-04-25 10:09:56 +08:00
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE