From 9d3ea89861b04e2b6acd28f7805fe6dceaabc605 Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Mon, 5 Jun 2023 20:17:16 +0800 Subject: [PATCH] moved CreateMI to Material from GPUDevice. --- inc/hgl/graph/VKDevice.h | 2 -- inc/hgl/graph/VKMaterial.h | 4 ++++ inc/hgl/graph/VKMaterialInstance.h | 21 ++++++-------------- src/SceneGraph/Vulkan/VKMaterialInstance.cpp | 8 +++----- src/SceneGraph/Vulkan/VKRenderResource.cpp | 2 +- 5 files changed, 14 insertions(+), 23 deletions(-) diff --git a/inc/hgl/graph/VKDevice.h b/inc/hgl/graph/VKDevice.h index 47b56478..02b5772d 100644 --- a/inc/hgl/graph/VKDevice.h +++ b/inc/hgl/graph/VKDevice.h @@ -216,8 +216,6 @@ public: //shader & material Material *CreateMaterial(const UTF8String &mtl_name,ShaderModuleMap *shader_maps,MaterialDescriptorManager *,VertexInput *); - MaterialInstance *CreateMI(Material *,const VILConfig *vil_cfg=nullptr); - public: //Command Buffer 相关 RenderCmdBuffer * CreateRenderCommandBuffer(); diff --git a/inc/hgl/graph/VKMaterial.h b/inc/hgl/graph/VKMaterial.h index fae7e04a..7e77ea9f 100644 --- a/inc/hgl/graph/VKMaterial.h +++ b/inc/hgl/graph/VKMaterial.h @@ -75,6 +75,10 @@ public: VIL * CreateVIL(const VILConfig *format_map=nullptr); bool Release(VIL *); const uint GetVILCount(); + +public: + + MaterialInstance *CreateMI(const VILConfig *vil_cfg=nullptr); };//class Material using MaterialSets=SortedSets; diff --git a/inc/hgl/graph/VKMaterialInstance.h b/inc/hgl/graph/VKMaterialInstance.h index 203ea89d..46a8924c 100644 --- a/inc/hgl/graph/VKMaterialInstance.h +++ b/inc/hgl/graph/VKMaterialInstance.h @@ -50,30 +50,21 @@ protected: VIL *vil; - uint8 mi_id; //材质实例ID +public: + + Material * GetMaterial () {return material;} + + const VIL * GetVIL ()const {return vil;} private: - friend class GPUDevice; + friend class Material; MaterialInstance(Material *,VIL *); public: virtual ~MaterialInstance()=default; - - Material *GetMaterial(){return material;} - - const uint8_t GetID()const{return mi_id;} ///<获取材质实例ID - - template - T *GetData(){return material->GetMIData(mi_id);} ///<获取材质实例数据 - - template - bool WriteData(const T *data){return material->WriteMIData(mi_id,data);} ///<写入材质实例数据 - - const VIL *GetVIL()const{return vil;} - MaterialParameters *GetMP(const DescriptorSetType &type){return material->GetMP(type);} bool BindUBO(const DescriptorSetType &type,const AnsiString &name,DeviceBuffer *ubo,bool dynamic=false); bool BindSSBO(const DescriptorSetType &type,const AnsiString &name,DeviceBuffer *ubo,bool dynamic=false); diff --git a/src/SceneGraph/Vulkan/VKMaterialInstance.cpp b/src/SceneGraph/Vulkan/VKMaterialInstance.cpp index 82556b41..1a05f83d 100644 --- a/src/SceneGraph/Vulkan/VKMaterialInstance.cpp +++ b/src/SceneGraph/Vulkan/VKMaterialInstance.cpp @@ -4,15 +4,13 @@ #include VK_NAMESPACE_BEGIN -MaterialInstance *GPUDevice::CreateMI(Material *mtl,const VILConfig *vil_cfg) +MaterialInstance *Material::CreateMI(const VILConfig *vil_cfg) { - if(!mtl)return(nullptr); - - VIL *vil=mtl->CreateVIL(vil_cfg); + VIL *vil=CreateVIL(vil_cfg); if(!vil)return(nullptr); - return(new MaterialInstance(mtl,vil)); + return(new MaterialInstance(this,vil)); } MaterialInstance::MaterialInstance(Material *mtl,VIL *v) diff --git a/src/SceneGraph/Vulkan/VKRenderResource.cpp b/src/SceneGraph/Vulkan/VKRenderResource.cpp index 8c0e084f..38af88ff 100644 --- a/src/SceneGraph/Vulkan/VKRenderResource.cpp +++ b/src/SceneGraph/Vulkan/VKRenderResource.cpp @@ -54,7 +54,7 @@ MaterialInstance *RenderResource::CreateMaterialInstance(Material *mtl,const VIL { if(!mtl)return(nullptr); - MaterialInstance *mi=device->CreateMI(mtl,vil_cfg); + MaterialInstance *mi=mtl->CreateMI(vil_cfg); if(mi) Add(mi);