准备增加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
|
||||
|
||||
#include<hgl/TypeFunc.h>
|
||||
namespace hgl
|
||||
namespace hgl::graph
|
||||
{
|
||||
namespace graph
|
||||
{
|
||||
enum class CoordinateSystem2D
|
||||
{
|
||||
NDC,
|
||||
@ -13,5 +11,4 @@ namespace hgl
|
||||
|
||||
ENUM_CLASS_RANGE(NDC,Ortho)
|
||||
};
|
||||
}//namespace graph
|
||||
}//namespace hgl
|
||||
}//namespace hgl::graph
|
||||
|
@ -53,7 +53,6 @@ public:
|
||||
MaterialCreateInfo *CreateVertexColor2D(const Material2DCreateConfig *);
|
||||
MaterialCreateInfo *CreatePureColor2D(const Material2DCreateConfig *);
|
||||
|
||||
|
||||
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<hgl/shadergen/MaterialCreateInfo.h>
|
||||
#include<hgl/graph/mtl/MaterialLibrary.h>
|
||||
|
||||
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
|
||||
|
@ -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})
|
||||
|
||||
|
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