2023-04-20 21:49:48 +08:00
|
|
|
|
#include<hgl/graph/VKDevice.h>
|
2021-06-16 21:03:52 +08:00
|
|
|
|
#include<hgl/graph/VKMaterialInstance.h>
|
|
|
|
|
#include<hgl/graph/VKMaterialParameters.h>
|
2021-11-29 20:12:10 +08:00
|
|
|
|
#include<hgl/graph/VKShaderModule.h>
|
2023-09-19 21:09:09 +08:00
|
|
|
|
#include<hgl/type/ActiveMemoryBlockManager.h>
|
2021-06-16 21:03:52 +08:00
|
|
|
|
|
|
|
|
|
VK_NAMESPACE_BEGIN
|
2023-06-05 20:17:16 +08:00
|
|
|
|
MaterialInstance *Material::CreateMI(const VILConfig *vil_cfg)
|
2021-06-16 21:03:52 +08:00
|
|
|
|
{
|
2023-06-05 20:17:16 +08:00
|
|
|
|
VIL *vil=CreateVIL(vil_cfg);
|
2021-11-29 20:12:10 +08:00
|
|
|
|
|
2022-10-11 19:16:06 +08:00
|
|
|
|
if(!vil)return(nullptr);
|
2021-11-29 20:12:10 +08:00
|
|
|
|
|
2023-09-19 21:09:09 +08:00
|
|
|
|
int mi_id=-1;
|
|
|
|
|
|
|
|
|
|
if(mi_data_manager)
|
|
|
|
|
mi_data_manager->GetOrCreate(&mi_id,1);
|
|
|
|
|
else
|
|
|
|
|
mi_id=-1;
|
|
|
|
|
|
|
|
|
|
return(new MaterialInstance(this,vil,mi_id));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Material::ReleaseMI(int mi_id)
|
|
|
|
|
{
|
|
|
|
|
if(mi_id<0||!mi_data_manager)return;
|
|
|
|
|
|
|
|
|
|
mi_data_manager->Release(&mi_id,1);
|
2021-06-16 21:03:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-09-19 21:09:09 +08:00
|
|
|
|
void *Material::GetMIData(int id)
|
|
|
|
|
{
|
|
|
|
|
if(!mi_data_manager)
|
|
|
|
|
return(nullptr);
|
|
|
|
|
|
|
|
|
|
return mi_data_manager->GetData(id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MaterialInstance::WriteMIData(const void *data,const int size)
|
|
|
|
|
{
|
|
|
|
|
if(!data||size<=0||size>material->GetMIDataBytes())return;
|
|
|
|
|
|
|
|
|
|
void *tp=GetMIData();
|
|
|
|
|
|
|
|
|
|
if(tp)
|
|
|
|
|
memcpy(tp,data,size);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MaterialInstance::MaterialInstance(Material *mtl,VIL *v,const int id)
|
2021-06-16 21:03:52 +08:00
|
|
|
|
{
|
|
|
|
|
material=mtl;
|
|
|
|
|
|
2022-10-11 19:16:06 +08:00
|
|
|
|
vil=v;
|
2023-09-19 21:09:09 +08:00
|
|
|
|
|
|
|
|
|
mi_id=id;
|
2021-06-16 21:03:52 +08:00
|
|
|
|
}
|
|
|
|
|
VK_NAMESPACE_END
|