removed MaterialData

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-06-14 18:20:23 +08:00
parent 3de67f8cf1
commit d05f1109b5
3 changed files with 38 additions and 53 deletions

View File

@ -9,7 +9,11 @@
VK_NAMESPACE_BEGIN VK_NAMESPACE_BEGIN
using ShaderStageCreateInfoList=List<VkPipelineShaderStageCreateInfo>; using ShaderStageCreateInfoList=List<VkPipelineShaderStageCreateInfo>;
struct MaterialData /**
* <br>
* shaderDescriptorSetLayoutCreater
*/
class Material
{ {
AnsiString name; AnsiString name;
@ -28,38 +32,24 @@ struct MaterialData
uint32_t mi_data_bytes; ///<实例数据大小 uint32_t mi_data_bytes; ///<实例数据大小
uint32_t mi_max_count; ///<最大实例数量(注代表一次drawcall大小而不是整个的大小) uint32_t mi_max_count; ///<最大实例数量(注代表一次drawcall大小而不是整个的大小)
public:
MaterialData(const AnsiString &n);
~MaterialData();
};//struct MaterialData
/**
* <br>
* shaderDescriptorSetLayoutCreater
*/
class Material
{
MaterialData *data;
private: private:
friend GPUDevice; friend class RenderResource;
public: public:
Material(MaterialData *md):data(md){} Material(const AnsiString &);
virtual ~Material(); virtual ~Material();
const UTF8String & GetName ()const{return data->name;} const UTF8String & GetName ()const{return name;}
const VertexInput * GetVertexInput ()const{return data->vertex_input;} const VertexInput * GetVertexInput ()const{return vertex_input;}
const ShaderStageCreateInfoList & GetStageList ()const{return data->shader_stage_list;} const ShaderStageCreateInfoList & GetStageList ()const{return shader_stage_list;}
const MaterialDescriptorManager * GetDescriptorSets ()const{return data->desc_manager;} const MaterialDescriptorManager * GetDescriptorSets ()const{return desc_manager;}
const VkPipelineLayout GetPipelineLayout ()const; const VkPipelineLayout GetPipelineLayout ()const;
const PipelineLayoutData * GetPipelineLayoutData ()const{return data->pipeline_layout_data;} const PipelineLayoutData * GetPipelineLayoutData ()const{return pipeline_layout_data;}
public: public:
@ -67,7 +57,7 @@ public:
{ {
RANGE_CHECK_RETURN_NULLPTR(type) RANGE_CHECK_RETURN_NULLPTR(type)
return data->mp_array[size_t(type)]; return mp_array[size_t(type)];
} }
const bool hasSet (const DescriptorSetType &type)const; const bool hasSet (const DescriptorSetType &type)const;

View File

@ -4,7 +4,7 @@
#include<hgl/graph/VKVertexInput.h> #include<hgl/graph/VKVertexInput.h>
#include"VKPipelineLayoutData.h" #include"VKPipelineLayoutData.h"
VK_NAMESPACE_BEGIN VK_NAMESPACE_BEGIN
MaterialData::MaterialData(const AnsiString &n) Material::Material(const AnsiString &n)
{ {
name=n; name=n;
@ -19,7 +19,7 @@ MaterialData::MaterialData(const AnsiString &n)
mi_max_count=0; mi_max_count=0;
} }
MaterialData::~MaterialData() Material::~Material()
{ {
SAFE_CLEAR(vertex_input); SAFE_CLEAR(vertex_input);
delete shader_maps; //不用SAFE_CLEAR是因为这个一定会有 delete shader_maps; //不用SAFE_CLEAR是因为这个一定会有
@ -33,34 +33,28 @@ MaterialData::~MaterialData()
mi_max_count=0; mi_max_count=0;
} }
Material::~Material()
{
delete data->pipeline_layout_data;
delete data;
}
const VkPipelineLayout Material::GetPipelineLayout()const const VkPipelineLayout Material::GetPipelineLayout()const
{ {
return data->pipeline_layout_data->pipeline_layout; return pipeline_layout_data->pipeline_layout;
} }
const bool Material::hasSet(const DescriptorSetType &dst)const const bool Material::hasSet(const DescriptorSetType &dst)const
{ {
return data->desc_manager->hasSet(dst); return desc_manager->hasSet(dst);
} }
VIL *Material::CreateVIL(const VILConfig *format_map) VIL *Material::CreateVIL(const VILConfig *format_map)
{ {
return data->vertex_input->CreateVIL(format_map); return vertex_input->CreateVIL(format_map);
} }
bool Material::Release(VIL *vil) bool Material::Release(VIL *vil)
{ {
return data->vertex_input->Release(vil); return vertex_input->Release(vil);
} }
const uint Material::GetVILCount() const uint Material::GetVILCount()
{ {
return data->vertex_input->GetInstanceCount(); return vertex_input->GetInstanceCount();
} }
VK_NAMESPACE_END VK_NAMESPACE_END

View File

@ -79,12 +79,14 @@ Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci)
if(!mci) if(!mci)
return(nullptr); return(nullptr);
Material *mtl;
const AnsiString &mtl_name=mci->GetName(); const AnsiString &mtl_name=mci->GetName();
if(material_by_name.Get(mtl_name,mtl)) {
return mtl; Material *mtl;
if(material_by_name.Get(mtl_name,mtl))
return mtl;
}
const ShaderCreateInfoMap &sci_map=mci->GetShaderMap(); const ShaderCreateInfoMap &sci_map=mci->GetShaderMap();
const uint sci_count=sci_map.GetCount(); const uint sci_count=sci_map.GetCount();
@ -95,7 +97,7 @@ Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci)
if(!mci->GetFS()) if(!mci->GetFS())
return(nullptr); return(nullptr);
AutoDelete<MaterialData> data=new MaterialData(mtl_name); AutoDelete<Material> ad_mtl=new Material(mtl_name);
{ {
const ShaderModule *sm; const ShaderModule *sm;
@ -109,44 +111,43 @@ Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci)
if(!sm) if(!sm)
return(nullptr); return(nullptr);
data->shader_maps->Add(sm); ad_mtl->shader_maps->Add(sm);
++sci; ++sci;
} }
} }
CreateShaderStageList(data->shader_stage_list,data->shader_maps); CreateShaderStageList(ad_mtl->shader_stage_list,ad_mtl->shader_maps);
{ {
ShaderCreateInfoVertex *vert=mci->GetVS(); ShaderCreateInfoVertex *vert=mci->GetVS();
if(vert) if(vert)
data->vertex_input=new VertexInput(vert->sdm->GetShaderStageIO().input); ad_mtl->vertex_input=new VertexInput(vert->sdm->GetShaderStageIO().input);
} }
{ {
const auto &mdi=mci->GetMDI(); const auto &mdi=mci->GetMDI();
if(mdi.GetCount()>0) if(mdi.GetCount()>0)
data->desc_manager=new MaterialDescriptorManager(mci->GetName(),mdi.Get()); ad_mtl->desc_manager=new MaterialDescriptorManager(mci->GetName(),mdi.Get());
} }
data->pipeline_layout_data=device->CreatePipelineLayoutData(data->desc_manager); ad_mtl->pipeline_layout_data=device->CreatePipelineLayoutData(ad_mtl->desc_manager);
if(data->desc_manager) if(ad_mtl->desc_manager)
{ {
ENUM_CLASS_FOR(DescriptorSetType,int,dst) ENUM_CLASS_FOR(DescriptorSetType,int,dst)
{ {
if(data->desc_manager->hasSet((DescriptorSetType)dst)) if(ad_mtl->desc_manager->hasSet((DescriptorSetType)dst))
data->mp_array[dst]=device->CreateMP(data->desc_manager,data->pipeline_layout_data,(DescriptorSetType)dst); ad_mtl->mp_array[dst]=device->CreateMP(ad_mtl->desc_manager,ad_mtl->pipeline_layout_data,(DescriptorSetType)dst);
} }
} }
data->mi_data_bytes =mci->GetMIDataBytes(); ad_mtl->mi_data_bytes =mci->GetMIDataBytes();
data->mi_max_count =mci->GetMIMaxCount(); ad_mtl->mi_max_count =mci->GetMIMaxCount();
mtl=new Material(data); Material *mtl=ad_mtl.Finish();
data.Discard(); //mtl已经接管了data的内容这里不需要再释放
Add(mtl); Add(mtl);