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
using ShaderStageCreateInfoList=List<VkPipelineShaderStageCreateInfo>;
struct MaterialData
/**
* <br>
* shaderDescriptorSetLayoutCreater
*/
class Material
{
AnsiString name;
@ -28,38 +32,24 @@ struct MaterialData
uint32_t mi_data_bytes; ///<实例数据大小
uint32_t mi_max_count; ///<最大实例数量(注代表一次drawcall大小而不是整个的大小)
public:
MaterialData(const AnsiString &n);
~MaterialData();
};//struct MaterialData
/**
* <br>
* shaderDescriptorSetLayoutCreater
*/
class Material
{
MaterialData *data;
private:
friend GPUDevice;
friend class RenderResource;
public:
Material(MaterialData *md):data(md){}
Material(const AnsiString &);
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 PipelineLayoutData * GetPipelineLayoutData ()const{return data->pipeline_layout_data;}
const PipelineLayoutData * GetPipelineLayoutData ()const{return pipeline_layout_data;}
public:
@ -67,7 +57,7 @@ public:
{
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;

View File

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

View File

@ -79,12 +79,14 @@ Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci)
if(!mci)
return(nullptr);
Material *mtl;
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 uint sci_count=sci_map.GetCount();
@ -95,7 +97,7 @@ Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci)
if(!mci->GetFS())
return(nullptr);
AutoDelete<MaterialData> data=new MaterialData(mtl_name);
AutoDelete<Material> ad_mtl=new Material(mtl_name);
{
const ShaderModule *sm;
@ -109,44 +111,43 @@ Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci)
if(!sm)
return(nullptr);
data->shader_maps->Add(sm);
ad_mtl->shader_maps->Add(sm);
++sci;
}
}
CreateShaderStageList(data->shader_stage_list,data->shader_maps);
CreateShaderStageList(ad_mtl->shader_stage_list,ad_mtl->shader_maps);
{
ShaderCreateInfoVertex *vert=mci->GetVS();
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();
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)
{
if(data->desc_manager->hasSet((DescriptorSetType)dst))
data->mp_array[dst]=device->CreateMP(data->desc_manager,data->pipeline_layout_data,(DescriptorSetType)dst);
if(ad_mtl->desc_manager->hasSet((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();
data->mi_max_count =mci->GetMIMaxCount();
ad_mtl->mi_data_bytes =mci->GetMIDataBytes();
ad_mtl->mi_max_count =mci->GetMIMaxCount();
mtl=new Material(data);
data.Discard(); //mtl已经接管了data的内容这里不需要再释放
Material *mtl=ad_mtl.Finish();
Add(mtl);