2020-10-21 11:43:18 +08:00
|
|
|
|
#include<hgl/graph/VKMaterial.h>
|
2021-06-16 11:43:19 +08:00
|
|
|
|
#include<hgl/graph/VKMaterialParameters.h>
|
2019-05-05 21:30:55 +08:00
|
|
|
|
#include"VKDescriptorSetLayoutCreater.h"
|
2019-04-25 10:09:56 +08:00
|
|
|
|
VK_NAMESPACE_BEGIN
|
2021-05-10 15:20:52 +08:00
|
|
|
|
Material::Material(const UTF8String &name,ShaderModuleMap *smm,List<VkPipelineShaderStageCreateInfo> *psci_list,DescriptorSetLayoutCreater *dslc)
|
2019-04-28 21:25:52 +08:00
|
|
|
|
{
|
2021-05-10 15:20:52 +08:00
|
|
|
|
mtl_name=name;
|
2019-04-28 21:25:52 +08:00
|
|
|
|
shader_maps=smm;
|
|
|
|
|
shader_stage_list=psci_list;
|
|
|
|
|
dsl_creater=dslc;
|
2019-05-05 21:30:55 +08:00
|
|
|
|
|
|
|
|
|
const ShaderModule *sm;
|
|
|
|
|
if(smm->Get(VK_SHADER_STAGE_VERTEX_BIT,sm))
|
|
|
|
|
{
|
|
|
|
|
vertex_sm=(VertexShaderModule *)sm;
|
|
|
|
|
vab=vertex_sm->CreateVertexAttributeBinding();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//理论上不可能到达这里,前面CreateMaterial已经检测过了
|
|
|
|
|
vertex_sm=nullptr;
|
|
|
|
|
vab=nullptr;
|
|
|
|
|
}
|
2021-06-15 21:20:57 +08:00
|
|
|
|
|
2021-06-22 14:48:08 +08:00
|
|
|
|
mp_m=CreateMP(DescriptorSetType::Material);
|
|
|
|
|
mp_r=CreateMP(DescriptorSetType::Renderable);
|
|
|
|
|
mp_g=CreateMP(DescriptorSetType::Global);
|
2019-04-27 02:07:06 +08:00
|
|
|
|
}
|
|
|
|
|
|
2019-04-25 10:09:56 +08:00
|
|
|
|
Material::~Material()
|
|
|
|
|
{
|
2021-06-16 11:43:19 +08:00
|
|
|
|
SAFE_CLEAR(mp_m);
|
|
|
|
|
SAFE_CLEAR(mp_r);
|
|
|
|
|
SAFE_CLEAR(mp_g);
|
|
|
|
|
|
2019-04-27 02:07:06 +08:00
|
|
|
|
delete dsl_creater;
|
2019-05-24 23:51:45 +08:00
|
|
|
|
|
2020-09-05 17:53:48 +08:00
|
|
|
|
if(vab)
|
|
|
|
|
{
|
|
|
|
|
vertex_sm->Release(vab);
|
|
|
|
|
delete vab;
|
|
|
|
|
}
|
2019-05-24 23:51:45 +08:00
|
|
|
|
|
2019-04-28 21:25:52 +08:00
|
|
|
|
delete shader_stage_list;
|
2019-04-28 16:06:53 +08:00
|
|
|
|
delete shader_maps;
|
2019-04-25 10:09:56 +08:00
|
|
|
|
}
|
|
|
|
|
|
2019-05-05 18:00:26 +08:00
|
|
|
|
const VkPipelineLayout Material::GetPipelineLayout()const
|
|
|
|
|
{
|
2019-05-05 21:30:55 +08:00
|
|
|
|
return dsl_creater->GetPipelineLayout();
|
2019-04-28 16:06:53 +08:00
|
|
|
|
}
|
|
|
|
|
|
2021-06-22 14:48:08 +08:00
|
|
|
|
MaterialParameters *Material::CreateMP(const DescriptorSetType &type)const
|
2019-04-27 01:36:58 +08:00
|
|
|
|
{
|
2021-06-16 11:43:19 +08:00
|
|
|
|
DescriptorSets *ds=dsl_creater->Create(type);
|
|
|
|
|
|
|
|
|
|
if(!ds)return(nullptr);
|
|
|
|
|
|
2021-06-16 20:27:10 +08:00
|
|
|
|
return(new MaterialParameters(shader_maps,type,ds));
|
2019-04-25 10:09:56 +08:00
|
|
|
|
}
|
|
|
|
|
VK_NAMESPACE_END
|