ULRE/inc/hgl/graph/VKMaterial.h

83 lines
2.3 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/VKDescriptorSetType.h>
2019-04-25 10:09:56 +08:00
VK_NAMESPACE_BEGIN
using ShaderStageCreateInfoList=List<VkPipelineShaderStageCreateInfo>;
2023-03-20 13:35:04 +08:00
using MaterialParameterArray=MaterialParameters *[DESCRIPTOR_SET_TYPE_COUNT];
2023-02-22 21:50:18 +08:00
2021-09-14 20:31:15 +08:00
struct MaterialData
2019-04-25 10:09:56 +08:00
{
2021-09-14 20:31:15 +08:00
UTF8String name;
VertexInput *vertex_input;
ShaderModuleMap *shader_maps;
2021-09-13 20:39:25 +08:00
2023-03-21 21:46:16 +08:00
MaterialDescriptorManager *desc_manager;
2021-09-14 20:31:15 +08:00
ShaderStageCreateInfoList shader_stage_list;
2021-09-14 20:31:15 +08:00
PipelineLayoutData *pipeline_layout_data;
2023-02-22 21:50:18 +08:00
MaterialParameterArray mp_array;
2021-09-14 20:31:15 +08:00
private:
friend class Material;
~MaterialData();
};//struct MaterialData
/**
* <br>
* shaderDescriptorSetLayoutCreater
*/
class Material
{
MaterialData *data;
private:
friend GPUDevice;
2019-04-25 10:09:56 +08:00
public:
2023-05-12 21:36:52 +08:00
Material(MaterialData *md):data(md){}
2023-05-09 22:03:02 +08:00
virtual ~Material();
2019-04-25 10:09:56 +08:00
2021-09-14 20:31:15 +08:00
const UTF8String & GetName ()const{return data->name;}
const VertexInput * GetVertexInput ()const{return data->vertex_input;}
const ShaderStageCreateInfoList & GetStageList ()const{return data->shader_stage_list;}
2023-03-21 21:46:16 +08:00
const MaterialDescriptorManager * GetDescriptorSets ()const{return data->desc_manager;}
const VkPipelineLayout GetPipelineLayout ()const;
2021-09-14 20:31:15 +08:00
const PipelineLayoutData * GetPipelineLayoutData ()const{return data->pipeline_layout_data;}
public:
MaterialParameters * GetMP (const DescriptorSetType &type)
{
2023-02-22 21:50:18 +08:00
RANGE_CHECK_RETURN_NULLPTR(type)
return data->mp_array[size_t(type)];
}
2023-02-22 21:50:18 +08:00
const bool hasSet (const DescriptorSetType &type)const;
VIL * CreateVIL(const VILConfig *format_map=nullptr);
bool Release(VIL *);
const uint GetVILCount();
};//class Material
2023-03-24 22:14:43 +08:00
using MaterialSets=SortedSets<Material *>;
2019-04-25 10:09:56 +08:00
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE