ULRE/inc/hgl/graph/VKMaterial.h

78 lines
2.1 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>;
using MaterialParameterArray=MaterialParameters *[size_t(DescriptorSetType::RANGE_SIZE)];
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;
ShaderModuleMap *shader_maps;
2021-09-13 20:39:25 +08:00
MaterialDescriptorSets *mds;
VertexShaderModule *vertex_sm;
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;
MaterialData *GetMaterialData(){return data;}
2019-04-25 10:09:56 +08:00
public:
2021-09-14 20:31:15 +08:00
Material(MaterialData *md):data(md){}
2019-04-25 10:09:56 +08:00
~Material();
2021-09-14 20:31:15 +08:00
const UTF8String & GetName ()const{return data->name;}
VertexShaderModule * GetVertexShaderModule () {return data->vertex_sm;}
const ShaderStageCreateInfoList & GetStageList ()const{return data->shader_stage_list;}
2021-09-14 20:31:15 +08:00
const MaterialDescriptorSets * GetDescriptorSets ()const{return data->mds;}
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;
};//class Material
2019-04-25 10:09:56 +08:00
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE