初步实现CreateMaterialCreateInfo(name,cfg,vil),下一待整合进WorkObject/WorkManager后正式启用。

This commit is contained in:
2025-05-06 00:41:07 +08:00
parent 9be5de0f57
commit e88facf834
7 changed files with 36 additions and 49 deletions

View File

@@ -1,5 +1,4 @@
#ifndef HGL_GRAPH_MTL_CONFIG_INCLUDE
#define HGL_GRAPH_MTL_CONFIG_INCLUDE
#pragma once
#include<hgl/graph/mtl/StdMaterial.h>
#include<hgl/type/String.h>
@@ -15,17 +14,17 @@ class MaterialCreateInfo;
*/
struct MaterialCreateConfig:public Comparator<MaterialCreateConfig>
{
const GPUDeviceAttribute *dev_attr;
const GPUDeviceAttribute * dev_attr; ///<GPU设备属性(目前仅用于获取UBO/SSBO数值未来可以考虑干掉)
AnsiString mtl_name; ///<材质名称
AnsiString mtl_name; ///<材质名称
bool material_instance; ///<是否包含材质实例
bool material_instance; ///<是否包含材质实例
RenderTargetOutputConfig rt_output; ///<渲染目标输出配置
RenderTargetOutputConfig rt_output; ///<渲染目标输出配置
uint32 shader_stage_flag_bit; ///<需要的shader
uint32 shader_stage_flag_bit; ///<需要的shader
PrimitiveType prim; ///<图元类型
PrimitiveType prim; ///<图元类型
public:
@@ -61,4 +60,3 @@ public:
}
};//struct MaterialCreateConfig
STD_MTL_NAMESPACE_END
#endif//HGL_GRAPH_MTL_CONFIG_INCLUDE

View File

@@ -2,35 +2,18 @@
#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 AnsiString 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;
@@ -41,13 +24,12 @@ public:
//virtual const CoordinateSystem2D get2DCoordinateSystem()const=0;
virtual MaterialCreateInfo *Create();
virtual MaterialCreateInfo *Create(MaterialCreateConfig *);
};//class MaterialFactory
bool RegistryMaterialFactory(MaterialFactory *);
MaterialFactory *GetMaterialFactory(const AIDName &);
void ClearMaterialFactory();
bool RegistryMaterialFactory(MaterialFactory *);
MaterialFactory * GetMaterialFactory(const AnsiString &);
template<typename T> class RegistryMaterialFactoryClass
{
@@ -61,10 +43,6 @@ public:
#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);
MaterialCreateInfo *CreateMaterialCreateInfo(const AnsiString &,MaterialCreateConfig *cfg=nullptr,const VILConfig *vil_cfg=nullptr);
STD_MTL_NAMESPACE_END