ULRE/inc/hgl/graph/mtl/MaterialLibrary.h

49 lines
1.2 KiB
C
Raw Normal View History

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:
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;
virtual MaterialCreateInfo *Create(MaterialCreateConfig *);
2025-05-05 03:25:19 +08:00
};//class MaterialFactory
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;}
MaterialCreateInfo *CreateMaterialCreateInfo(const AnsiString &,MaterialCreateConfig *cfg=nullptr,const VILConfig *vil_cfg=nullptr);
2025-05-05 03:25:19 +08:00
STD_MTL_NAMESPACE_END