ULRE/inc/hgl/graph/VKMaterial.h

83 lines
2.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef HGL_GRAPH_VULKAN_MATERIAL_INCLUDE
#define HGL_GRAPH_VULKAN_MATERIAL_INCLUDE
#include<hgl/graph/VK.h>
#include<hgl/type/Map.h>
#include<hgl/type/String.h>
#include<hgl/graph/VKShaderModuleMap.h>
#include<hgl/graph/VKDescriptorSetType.h>
VK_NAMESPACE_BEGIN
using ShaderStageCreateInfoList=List<VkPipelineShaderStageCreateInfo>;
using MaterialParameterArray=MaterialParameters *[DESCRIPTOR_SET_TYPE_COUNT];
struct MaterialData
{
UTF8String name;
VertexInput *vertex_input;
ShaderModuleMap *shader_maps;
MaterialDescriptorManager *desc_manager;
ShaderStageCreateInfoList shader_stage_list;
PipelineLayoutData *pipeline_layout_data;
MaterialParameterArray mp_array;
private:
friend class Material;
~MaterialData();
};//struct MaterialData
/**
* 材质类<br>
* 用于管理shader提供DescriptorSetLayoutCreater
*/
class Material
{
MaterialData *data;
private:
friend GPUDevice;
public:
Material(MaterialData *md):data(md){}
virtual ~Material();
const UTF8String & GetName ()const{return data->name;}
const VertexInput * GetVertexInput ()const{return data->vertex_input;}
const ShaderStageCreateInfoList & GetStageList ()const{return data->shader_stage_list;}
const MaterialDescriptorManager * GetDescriptorSets ()const{return data->desc_manager;}
const VkPipelineLayout GetPipelineLayout ()const;
const PipelineLayoutData * GetPipelineLayoutData ()const{return data->pipeline_layout_data;}
public:
MaterialParameters * GetMP (const DescriptorSetType &type)
{
RANGE_CHECK_RETURN_NULLPTR(type)
return data->mp_array[size_t(type)];
}
const bool hasSet (const DescriptorSetType &type)const;
VIL * CreateVIL(const VILConfig *format_map=nullptr);
bool Release(VIL *);
const uint GetVILCount();
};//class Material
using MaterialSets=SortedSets<Material *>;
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE