ULRE/inc/hgl/graph/VKMaterial.h

77 lines
2.0 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>
2019-04-25 10:09:56 +08:00
VK_NAMESPACE_BEGIN
using ShaderStageCreateInfoList=List<VkPipelineShaderStageCreateInfo>;
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;
2021-09-14 20:31:15 +08:00
struct
{
MaterialParameters *m,*g,*r;
}mp;
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 DescriptorSetsType &type)
{
if(type==DescriptorSetsType::Material )return data->mp.m;else
if(type==DescriptorSetsType::Renderable )return data->mp.r;else
if(type==DescriptorSetsType::Global )return data->mp.g;else
return(nullptr);
}
};//class Material
2019-04-25 10:09:56 +08:00
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE