removed MaterialData
This commit is contained in:
parent
3de67f8cf1
commit
d05f1109b5
@ -9,7 +9,11 @@
|
|||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
using ShaderStageCreateInfoList=List<VkPipelineShaderStageCreateInfo>;
|
using ShaderStageCreateInfoList=List<VkPipelineShaderStageCreateInfo>;
|
||||||
|
|
||||||
struct MaterialData
|
/**
|
||||||
|
* 材质类<br>
|
||||||
|
* 用于管理shader,提供DescriptorSetLayoutCreater
|
||||||
|
*/
|
||||||
|
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>
|
|
||||||
* 用于管理shader,提供DescriptorSetLayoutCreater
|
|
||||||
*/
|
|
||||||
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;
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user