ULRE/src/SceneGraph/Vulkan/VKMaterialInstance.cpp

69 lines
1.6 KiB
C++
Raw Normal View History

2021-09-14 20:31:15 +08:00
#include<hgl/graph/VKDevice.h>
#include<hgl/graph/VKMaterialInstance.h>
#include<hgl/graph/VKMaterialParameters.h>
#include<hgl/graph/VKShaderModule.h>
VK_NAMESPACE_BEGIN
MaterialInstance *GPUDevice::CreateMI(Material *mtl,const VILConfig *vil_cfg)
{
2021-09-14 20:31:15 +08:00
if(!mtl)return(nullptr);
VIL *vil=mtl->CreateVIL(vil_cfg);
if(!vil)return(nullptr);
2023-02-22 21:50:18 +08:00
return(new MaterialInstance(mtl,vil));
}
2023-02-22 21:50:18 +08:00
MaterialInstance::MaterialInstance(Material *mtl,VIL *v)
{
material=mtl;
vil=v;
2023-03-29 21:34:50 +08:00
mp_per_mi=
device->CreateMP(desc_manager,pld,(DescriptorSetType)dst);
PerMaterial<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD>MaterialInstance<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD>MP<EFBFBD><EFBFBD><EFBFBD>󶨼<EFBFBD>¼
mtl->GetMP(DescriptorSetType::PerMaterial);
}
2022-03-09 20:33:26 +08:00
bool MaterialInstance::BindUBO(const DescriptorSetType &type,const AnsiString &name,DeviceBuffer *ubo,bool dynamic)
2022-03-09 20:33:26 +08:00
{
2023-02-22 21:50:18 +08:00
MaterialParameters *mp=GetMP(type);
2022-03-09 20:33:26 +08:00
2023-02-22 21:50:18 +08:00
if(!mp)
2022-03-09 20:33:26 +08:00
return(false);
2023-02-22 21:50:18 +08:00
if(!mp->BindUBO(name,ubo,dynamic))return(false);
2022-03-09 20:33:26 +08:00
2023-02-22 21:50:18 +08:00
mp->Update();
2022-03-09 20:33:26 +08:00
return(true);
}
bool MaterialInstance::BindSSBO(const DescriptorSetType &type,const AnsiString &name,DeviceBuffer *ubo,bool dynamic)
2022-03-09 20:33:26 +08:00
{
2023-02-22 21:50:18 +08:00
MaterialParameters *mp=GetMP(type);
2022-03-09 20:33:26 +08:00
2023-02-22 21:50:18 +08:00
if(!mp)
2022-03-09 20:33:26 +08:00
return(false);
2023-02-22 21:50:18 +08:00
if(!mp->BindSSBO(name,ubo,dynamic))return(false);
2022-03-09 20:33:26 +08:00
2023-02-22 21:50:18 +08:00
mp->Update();
2022-03-09 20:33:26 +08:00
return(true);
}
2023-02-23 13:25:05 +08:00
bool MaterialInstance::BindImageSampler(const DescriptorSetType &type,const AnsiString &name,Texture *tex,Sampler *sampler)
2022-03-09 20:33:26 +08:00
{
2023-02-22 21:50:18 +08:00
MaterialParameters *mp=GetMP(type);
2022-03-09 20:33:26 +08:00
2023-02-22 21:50:18 +08:00
if(!mp)
2022-03-09 20:33:26 +08:00
return(false);
2023-02-23 13:25:05 +08:00
if(!mp->BindImageSampler(name,tex,sampler))return(false);
2022-03-09 20:33:26 +08:00
2023-02-22 21:50:18 +08:00
mp->Update();
2022-03-09 20:33:26 +08:00
return(true);
}
VK_NAMESPACE_END