diff --git a/example/Gizmo/PlaneGrid3D.cpp b/example/Gizmo/PlaneGrid3D.cpp index c7bf8889..97724057 100644 --- a/example/Gizmo/PlaneGrid3D.cpp +++ b/example/Gizmo/PlaneGrid3D.cpp @@ -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); } diff --git a/example/Gizmo/RayPicking.cpp b/example/Gizmo/RayPicking.cpp index a8b282c5..f5bc370e 100644 --- a/example/Gizmo/RayPicking.cpp +++ b/example/Gizmo/RayPicking.cpp @@ -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); diff --git a/inc/hgl/graph/VKRenderResource.h b/inc/hgl/graph/VKRenderResource.h index 13ac3719..9a0f8a9c 100644 --- a/inc/hgl/graph/VKRenderResource.h +++ b/inc/hgl/graph/VKRenderResource.h @@ -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 + 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); diff --git a/src/SceneGraph/Vulkan/VKRenderResource.cpp b/src/SceneGraph/Vulkan/VKRenderResource.cpp index 366ed8f9..9a7bd0e0 100644 --- a/src/SceneGraph/Vulkan/VKRenderResource.cpp +++ b/src/SceneGraph/Vulkan/VKRenderResource.cpp @@ -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);