ULRE/src/SceneGraph/Vulkan/VKMaterialParameters.cpp

71 lines
1.5 KiB
C++
Raw Normal View History

#include<hgl/graph/VKMaterialParameters.h>
2021-09-13 20:39:25 +08:00
#include<hgl/graph/VKMaterialDescriptorSets.h>
#include<hgl/graph/VKMaterial.h>
#include<hgl/graph/VKDescriptorSets.h>
2020-01-20 15:39:39 +08:00
VK_NAMESPACE_BEGIN
2021-09-13 20:39:25 +08:00
MaterialParameters::MaterialParameters(const MaterialDescriptorSets *_mds,const DescriptorSetType &type,DescriptorSets *ds)
2020-01-20 15:39:39 +08:00
{
2021-09-13 20:39:25 +08:00
mds=_mds;
ds_type=type;
2020-01-20 15:39:39 +08:00
descriptor_sets=ds;
}
MaterialParameters::~MaterialParameters()
2020-01-20 15:39:39 +08:00
{
delete descriptor_sets;
}
bool MaterialParameters::BindUBO(const AnsiString &name,GPUBuffer *ubo,bool dynamic)
2020-01-20 15:39:39 +08:00
{
if(name.IsEmpty()||!ubo)
return(false);
const int index=dynamic?mds->GetUBODynamic(name):mds->GetUBO(name);
2020-01-20 15:39:39 +08:00
if(index<0)
return(false);
if(!descriptor_sets->BindUBO(index,ubo,dynamic))
2020-01-20 15:39:39 +08:00
return(false);
return(true);
}
bool MaterialParameters::BindSSBO(const AnsiString &name,GPUBuffer *ssbo,bool dynamic)
{
if(name.IsEmpty()||!ssbo)
return(false);
const int index=dynamic?mds->GetSSBODynamic(name):mds->GetSSBO(name);
if(index<0)
return(false);
if(!descriptor_sets->BindSSBO(index,ssbo,dynamic))
return(false);
return(true);
}
bool MaterialParameters::BindSampler(const AnsiString &name,Texture *tex,Sampler *sampler)
{
if(name.IsEmpty()||!tex||!sampler)
return(false);
2021-09-13 20:39:25 +08:00
const int index=mds->GetSampler(name);
if(index<0)
return(false);
if(!descriptor_sets->BindSampler(index,tex,sampler))
return(false);
return(true);
}
void MaterialParameters::Update()
2020-01-20 15:39:39 +08:00
{
descriptor_sets->Update();
}
VK_NAMESPACE_END