diff --git a/CMCore b/CMCore index e1a8241d..3f44011e 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit e1a8241d1685950a58c0142d2393b4012618caa9 +Subproject commit 3f44011ea2894e618c8fdd361e3b7f7260bf7a04 diff --git a/CMSceneGraph b/CMSceneGraph index 2d9dae64..be7f43d6 160000 --- a/CMSceneGraph +++ b/CMSceneGraph @@ -1 +1 @@ -Subproject commit 2d9dae646081e79f4a822bf79fd9c552617a764f +Subproject commit be7f43d6a9077288e5ef883a56f54310dce5f735 diff --git a/inc/hgl/graph/CoordinateSystem.h b/inc/hgl/graph/CoordinateSystem.h index 2d4af169..762a7979 100644 --- a/inc/hgl/graph/CoordinateSystem.h +++ b/inc/hgl/graph/CoordinateSystem.h @@ -1,17 +1,14 @@ #pragma once #include -namespace hgl +namespace hgl::graph { - namespace graph + enum class CoordinateSystem2D { - enum class CoordinateSystem2D - { - NDC, - ZeroToOne, //左上角为0,0;右下角为1,1 - Ortho, //左上角为0,0;右下角为(width-1),(height-1) + NDC, + ZeroToOne, //左上角为0,0;右下角为1,1 + Ortho, //左上角为0,0;右下角为(width-1),(height-1) - ENUM_CLASS_RANGE(NDC,Ortho) - }; - }//namespace graph -}//namespace hgl + ENUM_CLASS_RANGE(NDC,Ortho) + }; +}//namespace hgl::graph diff --git a/inc/hgl/graph/mtl/Material2DCreateConfig.h b/inc/hgl/graph/mtl/Material2DCreateConfig.h index ea4f47a2..279e5c31 100644 --- a/inc/hgl/graph/mtl/Material2DCreateConfig.h +++ b/inc/hgl/graph/mtl/Material2DCreateConfig.h @@ -53,7 +53,6 @@ public: MaterialCreateInfo *CreateVertexColor2D(const Material2DCreateConfig *); MaterialCreateInfo *CreatePureColor2D(const Material2DCreateConfig *); - struct MaterialLerpLineConfig { diff --git a/inc/hgl/graph/mtl/MaterialLibrary.h b/inc/hgl/graph/mtl/MaterialLibrary.h new file mode 100644 index 00000000..483d7734 --- /dev/null +++ b/inc/hgl/graph/mtl/MaterialLibrary.h @@ -0,0 +1,70 @@ +#pragma once + +#include +#include +#include +#include + +STD_MTL_NAMESPACE_BEGIN + +enum class MaterialDomain +{ + UI, ///<用户界面,一般2D均使用这种 + + Gizmo, /// class RegistryMaterialFactoryClass +{ +public: + + RegistryMaterialFactoryClass() + { + STD_MTL_NAMESPACE::RegistryMaterialFactory(new T); + } +}; + +#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); + +STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/2d/M_VertexColor2D.cpp b/src/ShaderGen/2d/M_VertexColor2D.cpp index 453dd969..321946c4 100644 --- a/src/ShaderGen/2d/M_VertexColor2D.cpp +++ b/src/ShaderGen/2d/M_VertexColor2D.cpp @@ -1,5 +1,6 @@ #include"Std2DMaterial.h" #include +#include STD_MTL_NAMESPACE_BEGIN namespace @@ -60,4 +61,26 @@ MaterialCreateInfo *CreateVertexColor2D(const Material2DCreateConfig *cfg) return mvc2d.Create(); } + +class MaterialFactoryVertexColor2D:public MaterialFactory +{ +public: + + MaterialFactoryVertexColor2D() + { + } + + AnsiString GetName()const override + { + return "VertexColor2D"; + } + + MaterialCreateInfo *Create() override + { + return CreateVertexColor2D(nullptr); + } +};//class MaterialFactoryVertexColor2D:public MaterialFactory + +DEFINE_MATERIAL_FACTORY(VertexColor2D) + STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/CMakeLists.txt b/src/ShaderGen/CMakeLists.txt index 9e016ce3..4c159183 100644 --- a/src/ShaderGen/CMakeLists.txt +++ b/src/ShaderGen/CMakeLists.txt @@ -90,7 +90,10 @@ SOURCE_GROUP("Standard Material\\Light Model\\Blinn Phong" FILES ${BLINN_PHONG_H SOURCE_GROUP("Standard Material\\2D" FILES ${STD_MTL_2D_SOURCE_FILES}) SOURCE_GROUP("Standard Material\\3D" FILES ${STD_MTL_3D_SOURCE_FILES}) -SET(SHADER_LIBRARY_FILES ShaderLibrary.cpp ShaderLibrary.h) +SET(SHADER_LIBRARY_FILES ShaderLibrary.cpp + ShaderLibrary.h + MaterialLibrary.cpp + ${STD_MTL_HEADER_PATH}/MaterialLibrary.h) SOURCE_GROUP("Shader Library" FILES ${SHADER_LIBRARY_FILES}) diff --git a/src/ShaderGen/MaterialLibrary.cpp b/src/ShaderGen/MaterialLibrary.cpp new file mode 100644 index 00000000..71e844a7 --- /dev/null +++ b/src/ShaderGen/MaterialLibrary.cpp @@ -0,0 +1,67 @@ +#include +#include +#include + +STD_MTL_NAMESPACE_BEGIN + +namespace +{ + using MaterialFactoryMap=tsl::robin_map; + + MaterialFactoryMap *material_factory_map=nullptr; +}//namespace + +bool RegistryMaterialFactory(MaterialFactory *mf) +{ + if(!mf) + return(false); + + const AIDName name=mf->GetName(); + + if(!material_factory_map) + { + material_factory_map=new MaterialFactoryMap; + } + + if(material_factory_map->contains(name)) + return(false); + + material_factory_map->insert({name,mf}); + + const MaterialDomain &domain=mf->GetDomain(); + + + + return(true); +} + +MaterialFactory *GetMaterialFactory(const AIDName &name) +{ + if(!material_factory_map) + return(nullptr); + + auto it=material_factory_map->find(name); + + if(it==material_factory_map->end()) + return(nullptr); + + return(it->second); +} + +void ClearMaterialFactory() +{ + if(!material_factory_map) + return; + + SAFE_CLEAR_STD_MAP(*material_factory_map) + + delete material_factory_map; + material_factory_map=nullptr; +} + +Material *CreateMaterial2D(const AnsiString &name,Material2DCreateConfig *cfg) +{ + +} + +STD_MTL_NAMESPACE_END