准备增加MaterialLibrary
This commit is contained in:
parent
2b251f06d4
commit
9be5de0f57
2
CMCore
2
CMCore
@ -1 +1 @@
|
|||||||
Subproject commit e1a8241d1685950a58c0142d2393b4012618caa9
|
Subproject commit 3f44011ea2894e618c8fdd361e3b7f7260bf7a04
|
@ -1 +1 @@
|
|||||||
Subproject commit 2d9dae646081e79f4a822bf79fd9c552617a764f
|
Subproject commit be7f43d6a9077288e5ef883a56f54310dce5f735
|
@ -1,10 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include<hgl/TypeFunc.h>
|
#include<hgl/TypeFunc.h>
|
||||||
namespace hgl
|
namespace hgl::graph
|
||||||
{
|
{
|
||||||
namespace graph
|
|
||||||
{
|
|
||||||
enum class CoordinateSystem2D
|
enum class CoordinateSystem2D
|
||||||
{
|
{
|
||||||
NDC,
|
NDC,
|
||||||
@ -13,5 +11,4 @@ namespace hgl
|
|||||||
|
|
||||||
ENUM_CLASS_RANGE(NDC,Ortho)
|
ENUM_CLASS_RANGE(NDC,Ortho)
|
||||||
};
|
};
|
||||||
}//namespace graph
|
}//namespace hgl::graph
|
||||||
}//namespace hgl
|
|
||||||
|
@ -53,7 +53,6 @@ public:
|
|||||||
MaterialCreateInfo *CreateVertexColor2D(const Material2DCreateConfig *);
|
MaterialCreateInfo *CreateVertexColor2D(const Material2DCreateConfig *);
|
||||||
MaterialCreateInfo *CreatePureColor2D(const Material2DCreateConfig *);
|
MaterialCreateInfo *CreatePureColor2D(const Material2DCreateConfig *);
|
||||||
|
|
||||||
|
|
||||||
struct MaterialLerpLineConfig
|
struct MaterialLerpLineConfig
|
||||||
{
|
{
|
||||||
|
|
||||||
|
70
inc/hgl/graph/mtl/MaterialLibrary.h
Normal file
70
inc/hgl/graph/mtl/MaterialLibrary.h
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include<hgl/graph/VK.h>
|
||||||
|
#include<hgl/graph/mtl/StdMaterial.h>
|
||||||
|
#include<hgl/type/IDName.h>
|
||||||
|
#include<hgl/type/String.h>
|
||||||
|
|
||||||
|
STD_MTL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
enum class MaterialDomain
|
||||||
|
{
|
||||||
|
UI, ///<用户界面,一般2D均使用这种
|
||||||
|
|
||||||
|
Gizmo, ///<Gizmo材质(基本同Surface,但很多数值和处理逻辑会写死)
|
||||||
|
|
||||||
|
Surface, ///<常规的3D表面材质
|
||||||
|
DeferredDecal, ///<延迟贴花材质
|
||||||
|
|
||||||
|
PostProcess, ///<后期处理材质
|
||||||
|
|
||||||
|
ENUM_CLASS_RANGE(UI,PostProcess)
|
||||||
|
};
|
||||||
|
|
||||||
|
class MaterialFactory
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual AIDName GetName()const=0;
|
||||||
|
|
||||||
|
//virtual const bool GetMaterialName()const=0;
|
||||||
|
|
||||||
|
virtual const MaterialDomain GetDomain()const=0;
|
||||||
|
|
||||||
|
//virtual const PrimitiveType supportPrimitive()const=0;
|
||||||
|
|
||||||
|
//virtual const bool is2D()const=0;
|
||||||
|
//virtual const bool is3D()const=0;
|
||||||
|
|
||||||
|
//virtual const bool hasCamera()const=0;
|
||||||
|
//virtual const bool hasLocalToWorld()const=0;
|
||||||
|
|
||||||
|
//virtual const CoordinateSystem2D get2DCoordinateSystem()const=0;
|
||||||
|
|
||||||
|
virtual MaterialCreateInfo *Create();
|
||||||
|
|
||||||
|
};//class MaterialFactory
|
||||||
|
|
||||||
|
bool RegistryMaterialFactory(MaterialFactory *);
|
||||||
|
MaterialFactory *GetMaterialFactory(const AIDName &);
|
||||||
|
void ClearMaterialFactory();
|
||||||
|
|
||||||
|
template<typename T> class RegistryMaterialFactoryClass
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
RegistryMaterialFactoryClass()
|
||||||
|
{
|
||||||
|
STD_MTL_NAMESPACE::RegistryMaterialFactory(new T);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#define DEFINE_MATERIAL_FACTORY(name) namespace{static RegistryMaterialFactoryClass<MaterialFactory##name> MaterialFactoryInstance_##name;}
|
||||||
|
|
||||||
|
struct Material2DCreateConfig;
|
||||||
|
struct Material3DCreateConfig;
|
||||||
|
|
||||||
|
Material *CreateMaterial2D(const AnsiString &,Material2DCreateConfig *cfg=nullptr);
|
||||||
|
Material *CreateMaterial3D(const AnsiString &,Material3DCreateConfig *cfg=nullptr);
|
||||||
|
|
||||||
|
STD_MTL_NAMESPACE_END
|
@ -1,5 +1,6 @@
|
|||||||
#include"Std2DMaterial.h"
|
#include"Std2DMaterial.h"
|
||||||
#include<hgl/shadergen/MaterialCreateInfo.h>
|
#include<hgl/shadergen/MaterialCreateInfo.h>
|
||||||
|
#include<hgl/graph/mtl/MaterialLibrary.h>
|
||||||
|
|
||||||
STD_MTL_NAMESPACE_BEGIN
|
STD_MTL_NAMESPACE_BEGIN
|
||||||
namespace
|
namespace
|
||||||
@ -60,4 +61,26 @@ MaterialCreateInfo *CreateVertexColor2D(const Material2DCreateConfig *cfg)
|
|||||||
|
|
||||||
return mvc2d.Create();
|
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
|
STD_MTL_NAMESPACE_END
|
||||||
|
@ -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\\2D" FILES ${STD_MTL_2D_SOURCE_FILES})
|
||||||
SOURCE_GROUP("Standard Material\\3D" FILES ${STD_MTL_3D_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})
|
SOURCE_GROUP("Shader Library" FILES ${SHADER_LIBRARY_FILES})
|
||||||
|
|
||||||
|
67
src/ShaderGen/MaterialLibrary.cpp
Normal file
67
src/ShaderGen/MaterialLibrary.cpp
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
#include<hgl/graph/mtl/MaterialLibrary.h>
|
||||||
|
#include<hgl/type/IDName.h>
|
||||||
|
#include<tsl/robin_map.h>
|
||||||
|
|
||||||
|
STD_MTL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
using MaterialFactoryMap=tsl::robin_map<AIDName,MaterialFactory *>;
|
||||||
|
|
||||||
|
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
|
Loading…
x
Reference in New Issue
Block a user