diff --git a/CMCore b/CMCore index 3f44011e..b4d1bd17 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit 3f44011ea2894e618c8fdd361e3b7f7260bf7a04 +Subproject commit b4d1bd17a9a85feb5f13cc6fac201f4f75942f70 diff --git a/inc/hgl/graph/mtl/MaterialConfig.h b/inc/hgl/graph/mtl/MaterialConfig.h index 41d9ef45..b785ca66 100644 --- a/inc/hgl/graph/mtl/MaterialConfig.h +++ b/inc/hgl/graph/mtl/MaterialConfig.h @@ -1,5 +1,4 @@ -#ifndef HGL_GRAPH_MTL_CONFIG_INCLUDE -#define HGL_GRAPH_MTL_CONFIG_INCLUDE +#pragma once #include #include @@ -15,17 +14,17 @@ class MaterialCreateInfo; */ struct MaterialCreateConfig:public Comparator { - const GPUDeviceAttribute *dev_attr; + const GPUDeviceAttribute * dev_attr; /// #include -#include #include STD_MTL_NAMESPACE_BEGIN -enum class MaterialDomain -{ - UI, ///<用户界面,一般2D均使用这种 - - Gizmo, /// class RegistryMaterialFactoryClass { @@ -61,10 +43,6 @@ public: #define DEFINE_MATERIAL_FACTORY(name) namespace{static RegistryMaterialFactoryClass MaterialFactoryInstance_##name;} -struct Material2DCreateConfig; -struct Material3DCreateConfig; - -Material *CreateMaterial2D(const AnsiString &,Material2DCreateConfig *cfg=nullptr); -Material *CreateMaterial3D(const AnsiString &,Material3DCreateConfig *cfg=nullptr); +MaterialCreateInfo *CreateMaterialCreateInfo(const AnsiString &,MaterialCreateConfig *cfg=nullptr,const VILConfig *vil_cfg=nullptr); STD_MTL_NAMESPACE_END diff --git a/src/SceneGraph/RenderFramework.cpp b/src/SceneGraph/RenderFramework.cpp index 8ab86fed..62822119 100644 --- a/src/SceneGraph/RenderFramework.cpp +++ b/src/SceneGraph/RenderFramework.cpp @@ -16,6 +16,11 @@ VK_NAMESPACE_BEGIN bool InitShaderCompiler(); void CloseShaderCompiler(); +namespace mtl +{ + void ClearMaterialFactory(); +} + namespace { static int RENDER_FRAMEWORK_COUNT=0; @@ -49,6 +54,7 @@ RenderFramework::~RenderFramework() if(RENDER_FRAMEWORK_COUNT==0) { + STD_MTL_NAMESPACE::ClearMaterialFactory(); CloseShaderCompiler(); } } diff --git a/src/ShaderGen/2d/M_VertexColor2D.cpp b/src/ShaderGen/2d/M_VertexColor2D.cpp index 321946c4..3fdb8aee 100644 --- a/src/ShaderGen/2d/M_VertexColor2D.cpp +++ b/src/ShaderGen/2d/M_VertexColor2D.cpp @@ -75,9 +75,9 @@ public: return "VertexColor2D"; } - MaterialCreateInfo *Create() override + MaterialCreateInfo *Create(MaterialCreateConfig *cfg) override { - return CreateVertexColor2D(nullptr); + return CreateVertexColor2D((Material2DCreateConfig *)cfg); } };//class MaterialFactoryVertexColor2D:public MaterialFactory diff --git a/src/ShaderGen/MaterialCreateInfo.cpp b/src/ShaderGen/MaterialCreateInfo.cpp index 4c090113..cc96dc81 100644 --- a/src/ShaderGen/MaterialCreateInfo.cpp +++ b/src/ShaderGen/MaterialCreateInfo.cpp @@ -239,7 +239,7 @@ bool MaterialCreateInfo::CreateShader() if(!shader_map.GetValue(i,sc)) return(false); - if(sc->GetShaderStage()(sc->GetShaderStage())AddMaterialInstanceOutput(); sc->CreateShader(last); diff --git a/src/ShaderGen/MaterialLibrary.cpp b/src/ShaderGen/MaterialLibrary.cpp index 71e844a7..e192bf40 100644 --- a/src/ShaderGen/MaterialLibrary.cpp +++ b/src/ShaderGen/MaterialLibrary.cpp @@ -6,9 +6,10 @@ STD_MTL_NAMESPACE_BEGIN namespace { - using MaterialFactoryMap=tsl::robin_map; + using MaterialFactoryMap=tsl::robin_map; + using MaterialFactoryMapPtr=MaterialFactoryMap *; - MaterialFactoryMap *material_factory_map=nullptr; + MaterialFactoryMapPtr material_factory_map=nullptr; }//namespace bool RegistryMaterialFactory(MaterialFactory *mf) @@ -16,7 +17,7 @@ bool RegistryMaterialFactory(MaterialFactory *mf) if(!mf) return(false); - const AIDName name=mf->GetName(); + const AnsiString &name=mf->GetName(); if(!material_factory_map) { @@ -28,14 +29,10 @@ bool RegistryMaterialFactory(MaterialFactory *mf) material_factory_map->insert({name,mf}); - const MaterialDomain &domain=mf->GetDomain(); - - - return(true); } -MaterialFactory *GetMaterialFactory(const AIDName &name) +MaterialFactory *GetMaterialFactory(const AnsiString &name) { if(!material_factory_map) return(nullptr); @@ -59,9 +56,17 @@ void ClearMaterialFactory() material_factory_map=nullptr; } -Material *CreateMaterial2D(const AnsiString &name,Material2DCreateConfig *cfg) +MaterialCreateInfo *CreateMaterialCreateInfo(const AnsiString &name,MaterialCreateConfig *cfg,const VILConfig *vil_cfg) { + if(name.IsEmpty()) + return(nullptr); + MaterialFactory *mf=GetMaterialFactory(name); + + if(!mf) + return(nullptr); + + return mf->Create(cfg); } STD_MTL_NAMESPACE_END