ULRE/inc/hgl/graph/VKMaterial.h

91 lines
2.7 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>
namespace hgl
{
class ActiveMemoryBlockManager;
}
2019-04-25 10:09:56 +08:00
VK_NAMESPACE_BEGIN
using ShaderStageCreateInfoList=List<VkPipelineShaderStageCreateInfo>;
2023-06-14 18:20:23 +08:00
/**
* <br>
* shaderDescriptorSetLayoutCreater
*/
class Material
2019-04-25 10:09:56 +08:00
{
2023-06-14 16:49:19 +08:00
AnsiString 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-06-05 21:39:12 +08:00
MaterialParameters *mp_array[DESCRIPTOR_SET_TYPE_COUNT];
2023-06-14 16:49:19 +08:00
uint32_t mi_data_bytes; ///<实例数据大小
2023-09-19 21:44:48 +08:00
uint32_t mi_max_count; ///<实例一次渲染最大数量限制
ActiveMemoryBlockManager *mi_data_manager;
2021-09-14 20:31:15 +08:00
private:
2023-06-14 18:20:23 +08:00
friend class RenderResource;
2021-09-14 20:31:15 +08:00
Material(const AnsiString &);
2019-04-25 10:09:56 +08:00
public:
2023-05-09 22:03:02 +08:00
virtual ~Material();
2019-04-25 10:09:56 +08:00
2023-06-14 18:20:23 +08:00
const UTF8String & GetName ()const{return name;}
2023-06-14 18:20:23 +08:00
const VertexInput * GetVertexInput ()const{return vertex_input;}
2023-06-14 18:20:23 +08:00
const ShaderStageCreateInfoList & GetStageList ()const{return shader_stage_list;}
2023-06-14 18:20:23 +08:00
const MaterialDescriptorManager * GetDescriptorSets ()const{return desc_manager;}
const VkPipelineLayout GetPipelineLayout ()const;
2023-06-14 18:20:23 +08:00
const PipelineLayoutData * GetPipelineLayoutData ()const{return pipeline_layout_data;}
public:
MaterialParameters * GetMP (const DescriptorSetType &type)
{
2023-02-22 21:50:18 +08:00
RANGE_CHECK_RETURN_NULLPTR(type)
2023-06-14 18:20:23 +08:00
return 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();
public:
2023-09-07 18:09:31 +08:00
const uint32_t GetMIDataBytes ()const{return mi_data_bytes;}
2023-09-19 21:44:48 +08:00
const uint32_t GetMIMaxCount ()const{return mi_max_count;}
void ReleaseMI(int); ///<释放材质实例
void *GetMIData(int); ///<取得指定ID号的材质实例数据访问指针
2023-09-07 18:09:31 +08:00
MaterialInstance *CreateMI(const VILConfig *vil_cfg=nullptr);
};//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