added newly CreateMaterialInstance that include MIData

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-10-11 19:14:24 +08:00
parent 77b0266cdc
commit ae88a65315
4 changed files with 28 additions and 7 deletions

View File

@ -38,11 +38,9 @@ private:
for(uint i=0;i<3;i++)
{
material_instance[i]=db->CreateMaterialInstance(material);
GridColor=GetColor4f(ce,1.0);
material_instance[i]->WriteMIData(GridColor);
material_instance[i]=db->CreateMaterialInstance(material,nullptr,&GridColor);
ce=COLOR((int)ce+1);
}

View File

@ -57,13 +57,11 @@ private:
material=db->LoadMaterial("Std3D/VertexLum3D",&cfg);
if(!material)return(false);
mi_plane_grid=db->CreateMaterialInstance(material);
mi_plane_grid=db->CreateMaterialInstance(material,nullptr,&white_color);
if(!mi_plane_grid)return(false);
mi_plane_grid->WriteMIData(white_color);
mi_line=db->CreateMaterialInstance(material);
mi_line=db->CreateMaterialInstance(material,nullptr,&yellow_color);
if(!mi_line)return(false);
mi_line->WriteMIData(yellow_color);
pipeline=CreatePipeline(material,InlinePipeline::Solid3D,Prim::Lines);

View File

@ -112,6 +112,15 @@ public: //Material
Material * LoadMaterial(const AnsiString &,mtl::Material3DCreateConfig *);
MaterialInstance * CreateMaterialInstance(Material *,const VILConfig *vil_cfg=nullptr);
MaterialInstance * CreateMaterialInstance(Material *,const VILConfig *vil_cfg,const void *,const int);
template<typename T>
MaterialInstance * CreateMaterialInstance(Material *mtl,const VILConfig *vil_cfg,const T *data)
{
return CreateMaterialInstance(mtl,vil_cfg,*data,sizeof(T));
}
MaterialInstance * CreateMaterialInstance(const mtl::MaterialCreateInfo *,const VILConfig *vil_cfg=nullptr);
Primitive * CreatePrimitive(const uint32_t vertex_count=0);

View File

@ -62,6 +62,22 @@ MaterialInstance *RenderResource::CreateMaterialInstance(Material *mtl,const VIL
return mi;
}
MaterialInstance *RenderResource::CreateMaterialInstance(Material *mtl,const VILConfig *vil_cfg,const void *mi_data,const int mi_bytes)
{
if(!mtl)return(nullptr);
if(!mi_data||mi_bytes<=0)return(nullptr);
MaterialInstance *mi=mtl->CreateMI(vil_cfg);
if(!mi)
return nullptr;
Add(mi);
mi->WriteMIData(mi_data,mi_bytes);
return mi;
}
MaterialInstance *RenderResource::CreateMaterialInstance(const mtl::MaterialCreateInfo *mci,const VILConfig *vil_cfg)
{
Material *mtl=this->CreateMaterial(mci);