2025-05-05 03:25:19 +08:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include<hgl/graph/VK.h>
|
|
|
|
#include<hgl/graph/mtl/StdMaterial.h>
|
|
|
|
#include<hgl/type/String.h>
|
|
|
|
|
|
|
|
STD_MTL_NAMESPACE_BEGIN
|
|
|
|
|
|
|
|
class MaterialFactory
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
2025-05-06 00:41:07 +08:00
|
|
|
virtual AnsiString GetName()const=0;
|
2025-05-05 03:25:19 +08:00
|
|
|
|
|
|
|
//virtual const bool GetMaterialName()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;
|
|
|
|
|
2025-05-06 00:41:07 +08:00
|
|
|
virtual MaterialCreateInfo *Create(MaterialCreateConfig *);
|
2025-05-05 03:25:19 +08:00
|
|
|
|
|
|
|
};//class MaterialFactory
|
|
|
|
|
2025-05-06 00:41:07 +08:00
|
|
|
bool RegistryMaterialFactory(MaterialFactory *);
|
|
|
|
MaterialFactory * GetMaterialFactory(const AnsiString &);
|
2025-05-05 03:25:19 +08:00
|
|
|
|
|
|
|
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;}
|
|
|
|
|
2025-05-06 00:41:07 +08:00
|
|
|
MaterialCreateInfo *CreateMaterialCreateInfo(const AnsiString &,MaterialCreateConfig *cfg=nullptr,const VILConfig *vil_cfg=nullptr);
|
2025-05-05 03:25:19 +08:00
|
|
|
|
|
|
|
STD_MTL_NAMESPACE_END
|