ULRE/src/SceneGraph/Vulkan/VKMaterial.cpp

62 lines
1.4 KiB
C++
Raw Normal View History

#include<hgl/graph/VKMaterial.h>
#include<hgl/graph/VKMaterialParameters.h>
#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)
{
2021-05-10 15:20:52 +08:00
mtl_name=name;
shader_maps=smm;
shader_stage_list=psci_list;
dsl_creater=dslc;
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;
}
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()
{
SAFE_CLEAR(mp_m);
SAFE_CLEAR(mp_r);
SAFE_CLEAR(mp_g);
2019-04-27 02:07:06 +08:00
delete dsl_creater;
if(vab)
{
vertex_sm->Release(vab);
delete vab;
}
delete shader_stage_list;
delete shader_maps;
2019-04-25 10:09:56 +08:00
}
const VkPipelineLayout Material::GetPipelineLayout()const
{
return dsl_creater->GetPipelineLayout();
}
MaterialParameters *Material::CreateMP(const DescriptorSetType &type)const
2019-04-27 01:36:58 +08:00
{
DescriptorSets *ds=dsl_creater->Create(type);
if(!ds)return(nullptr);
return(new MaterialParameters(shader_maps,type,ds));
2019-04-25 10:09:56 +08:00
}
VK_NAMESPACE_END