成功使用字符串创建MaterialCreateInfo,为后续使用名称创建材质提供基础
This commit is contained in:
@@ -3,14 +3,17 @@
|
||||
#include<hgl/graph/VK.h>
|
||||
#include<hgl/graph/mtl/StdMaterial.h>
|
||||
#include<hgl/type/String.h>
|
||||
#include<hgl/type/IDName.h>
|
||||
|
||||
STD_MTL_NAMESPACE_BEGIN
|
||||
|
||||
DefineIDName(MaterialName, char)
|
||||
|
||||
class MaterialFactory
|
||||
{
|
||||
public:
|
||||
|
||||
virtual AnsiString GetName()const=0;
|
||||
virtual const MaterialName &GetName()const=0;
|
||||
|
||||
//virtual const bool GetMaterialName()const=0;
|
||||
|
||||
@@ -24,12 +27,12 @@ public:
|
||||
|
||||
//virtual const CoordinateSystem2D get2DCoordinateSystem()const=0;
|
||||
|
||||
virtual MaterialCreateInfo *Create(MaterialCreateConfig *);
|
||||
virtual MaterialCreateInfo *Create(MaterialCreateConfig *)=0;
|
||||
|
||||
};//class MaterialFactory
|
||||
|
||||
bool RegistryMaterialFactory(MaterialFactory *);
|
||||
MaterialFactory * GetMaterialFactory(const AnsiString &);
|
||||
MaterialFactory * GetMaterialFactory(const MaterialName &);
|
||||
|
||||
template<typename T> class RegistryMaterialFactoryClass
|
||||
{
|
||||
@@ -39,10 +42,44 @@ public:
|
||||
{
|
||||
STD_MTL_NAMESPACE::RegistryMaterialFactory(new T);
|
||||
}
|
||||
};
|
||||
};//class RegistryMaterialFactoryClass
|
||||
|
||||
#define DEFINE_MATERIAL_FACTORY(name) namespace{static RegistryMaterialFactoryClass<MaterialFactory##name> MaterialFactoryInstance_##name;}
|
||||
|
||||
MaterialCreateInfo *CreateMaterialCreateInfo(const AnsiString &,MaterialCreateConfig *cfg=nullptr,const VILConfig *vil_cfg=nullptr);
|
||||
#define DEFINE_MATERIAL_FACTORY_CLASS(name,create_func,cfg_type) \
|
||||
class MaterialFactory##name:public MaterialFactory \
|
||||
{ \
|
||||
public: \
|
||||
\
|
||||
const MaterialName &GetName()const override \
|
||||
{ \
|
||||
static MaterialName mtl_name(#name); \
|
||||
return mtl_name; \
|
||||
} \
|
||||
\
|
||||
MaterialCreateInfo *Create(MaterialCreateConfig *cfg) override \
|
||||
{ \
|
||||
return create_func((cfg_type *)cfg); \
|
||||
} \
|
||||
}; \
|
||||
\
|
||||
DEFINE_MATERIAL_FACTORY(name)
|
||||
|
||||
MaterialCreateInfo *CreateMaterialCreateInfo(const MaterialName &,MaterialCreateConfig *cfg);
|
||||
|
||||
inline MaterialCreateInfo *CreateMaterialCreateInfo(const char *mtl_name,MaterialCreateConfig *cfg)
|
||||
{
|
||||
MaterialName mtl_id_name(mtl_name);
|
||||
|
||||
return CreateMaterialCreateInfo(mtl_id_name,cfg);
|
||||
}
|
||||
|
||||
inline MaterialCreateInfo *CreateMaterialCreateInfo(const AnsiString &mtl_name,MaterialCreateConfig *cfg)
|
||||
{
|
||||
MaterialName mtl_id_name(mtl_name);
|
||||
|
||||
return CreateMaterialCreateInfo(mtl_id_name,cfg);
|
||||
}
|
||||
|
||||
STD_MTL_NAMESPACE_END
|
||||
|
||||
|
Reference in New Issue
Block a user