将dev_attr从MaterialCreateConfig中移除改到最终的Create函数中。代码能编过,但是static自动注册失效了,待查。
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
#ifndef HGL_GRAPH_MTL_2D_CREATE_CONFIG_INCLUDE
|
||||
#define HGL_GRAPH_MTL_2D_CREATE_CONFIG_INCLUDE
|
||||
#pragma once
|
||||
|
||||
#include<hgl/graph/mtl/MaterialConfig.h>
|
||||
#include<hgl/graph/CoordinateSystem.h>
|
||||
@@ -16,7 +15,7 @@ struct Material2DCreateConfig:public MaterialCreateConfig,public Comparator<Mate
|
||||
|
||||
public:
|
||||
|
||||
Material2DCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name,const PrimitiveType &p):MaterialCreateConfig(da,name,p)
|
||||
Material2DCreateConfig(const AnsiString &name,const PrimitiveType &p):MaterialCreateConfig(name,p)
|
||||
{
|
||||
rt_output.color=1; //输出一个颜色
|
||||
rt_output.depth=false; //不输出深度
|
||||
@@ -50,19 +49,14 @@ public:
|
||||
}
|
||||
};//struct Material2DCreateConfig:public MaterialCreateConfig
|
||||
|
||||
MaterialCreateInfo *CreateVertexColor2D(const Material2DCreateConfig *);
|
||||
MaterialCreateInfo *CreatePureColor2D(const Material2DCreateConfig *);
|
||||
MaterialCreateInfo *CreateVertexColor2D(const GPUDeviceAttribute *dev_attr,const Material2DCreateConfig *);
|
||||
MaterialCreateInfo *CreatePureColor2D(const GPUDeviceAttribute *dev_attr,const Material2DCreateConfig *);
|
||||
|
||||
struct MaterialLerpLineConfig
|
||||
{
|
||||
MaterialCreateInfo *CreateLerpLine2D(const GPUDeviceAttribute *dev_attr,const Material2DCreateConfig *);
|
||||
|
||||
};
|
||||
|
||||
MaterialCreateInfo *CreateLerpLine2D(const Material2DCreateConfig *);
|
||||
|
||||
MaterialCreateInfo *CreatePureTexture2D(const Material2DCreateConfig *);
|
||||
MaterialCreateInfo *CreateRectTexture2D(Material2DCreateConfig *);
|
||||
MaterialCreateInfo *CreateRectTexture2DArray(Material2DCreateConfig *);
|
||||
MaterialCreateInfo *CreatePureTexture2D(const GPUDeviceAttribute *dev_attr,const Material2DCreateConfig *);
|
||||
MaterialCreateInfo *CreateRectTexture2D(const GPUDeviceAttribute *dev_attr,Material2DCreateConfig *);
|
||||
MaterialCreateInfo *CreateRectTexture2DArray(const GPUDeviceAttribute *dev_attr,Material2DCreateConfig *);
|
||||
|
||||
// 为什么有了LoadMaterialFromFile,还需要保留以上Create系列函数?
|
||||
|
||||
@@ -71,10 +65,11 @@ MaterialCreateInfo *CreateRectTexture2DArray(Material2DCreateConfig *);
|
||||
|
||||
/**
|
||||
* 从文件加载材质
|
||||
* @param dev_attr 设备属性
|
||||
* @param mtl_name 材质名称
|
||||
* @param cfg 材质创建参数
|
||||
* @return 材质创建信息
|
||||
*/
|
||||
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &mtl_name,Material2DCreateConfig *cfg); ///<从文件加载材质
|
||||
MaterialCreateInfo *LoadMaterialFromFile(const GPUDeviceAttribute *dev_attr,const AnsiString &mtl_name,Material2DCreateConfig *cfg); ///<从文件加载材质
|
||||
|
||||
STD_MTL_NAMESPACE_END
|
||||
#endif//HGL_GRAPH_MTL_2D_CREATE_CONFIG_INCLUDE
|
||||
|
@@ -18,7 +18,7 @@ struct Material3DCreateConfig:public MaterialCreateConfig,public Comparator<Mate
|
||||
|
||||
public:
|
||||
|
||||
Material3DCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name,const PrimitiveType &p):MaterialCreateConfig(da,name,p)
|
||||
Material3DCreateConfig(const AnsiString &name,const PrimitiveType &p):MaterialCreateConfig(name,p)
|
||||
{
|
||||
rt_output.color=1; //输出一个颜色
|
||||
rt_output.depth=true; //不输出深度
|
||||
@@ -50,10 +50,10 @@ public:
|
||||
}
|
||||
};//struct Material3DCreateConfig:public MaterialCreateConfig
|
||||
|
||||
MaterialCreateInfo *CreateVertexColor3D(const Material3DCreateConfig *);
|
||||
MaterialCreateInfo *CreateVertexLuminance3D(const Material3DCreateConfig *);
|
||||
MaterialCreateInfo *CreateVertexColor3D(const GPUDeviceAttribute *dev_attr,const Material3DCreateConfig *);
|
||||
MaterialCreateInfo *CreateVertexLuminance3D(const GPUDeviceAttribute *dev_attr,const Material3DCreateConfig *);
|
||||
|
||||
MaterialCreateInfo *CreateMaterialGizmo3D(const Material3DCreateConfig *cfg);
|
||||
MaterialCreateInfo *CreateMaterialGizmo3D(const GPUDeviceAttribute *dev_attr,const Material3DCreateConfig *cfg);
|
||||
|
||||
struct BillboardMaterialCreateConfig:public Material3DCreateConfig
|
||||
{
|
||||
@@ -66,7 +66,7 @@ public:
|
||||
using Material3DCreateConfig::Material3DCreateConfig;
|
||||
};
|
||||
|
||||
MaterialCreateInfo *CreateBillboard2D(mtl::BillboardMaterialCreateConfig *);
|
||||
MaterialCreateInfo *CreateBillboard2D(const GPUDeviceAttribute *dev_attr,mtl::BillboardMaterialCreateConfig *);
|
||||
|
||||
/**
|
||||
* 从文件加载材质
|
||||
@@ -74,5 +74,5 @@ MaterialCreateInfo *CreateBillboard2D(mtl::BillboardMaterialCreateConfig *);
|
||||
* @param cfg 材质创建参数
|
||||
* @return 材质创建信息
|
||||
*/
|
||||
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,Material3DCreateConfig *cfg);
|
||||
MaterialCreateInfo *LoadMaterialFromFile(const GPUDeviceAttribute *dev_attr,const AnsiString &name,Material3DCreateConfig *cfg);
|
||||
STD_MTL_NAMESPACE_END
|
||||
|
@@ -14,8 +14,6 @@ class MaterialCreateInfo;
|
||||
*/
|
||||
struct MaterialCreateConfig:public Comparator<MaterialCreateConfig>
|
||||
{
|
||||
const GPUDeviceAttribute * dev_attr; ///<GPU设备属性(目前仅用于获取UBO/SSBO数值,未来可以考虑干掉)
|
||||
|
||||
AnsiString mtl_name; ///<材质名称
|
||||
|
||||
bool material_instance; ///<是否包含材质实例
|
||||
@@ -28,10 +26,8 @@ struct MaterialCreateConfig:public Comparator<MaterialCreateConfig>
|
||||
|
||||
public:
|
||||
|
||||
MaterialCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name,const PrimitiveType &p)
|
||||
MaterialCreateConfig(const AnsiString &name,const PrimitiveType &p)
|
||||
{
|
||||
dev_attr=da;
|
||||
|
||||
mtl_name=name;
|
||||
|
||||
material_instance=false;
|
||||
|
@@ -27,7 +27,7 @@ public:
|
||||
|
||||
//virtual const CoordinateSystem2D get2DCoordinateSystem()const=0;
|
||||
|
||||
virtual MaterialCreateInfo *Create(MaterialCreateConfig *)=0;
|
||||
virtual MaterialCreateInfo *Create(const GPUDeviceAttribute *dev_attr,MaterialCreateConfig *)=0;
|
||||
|
||||
};//class MaterialFactory
|
||||
|
||||
@@ -57,28 +57,28 @@ public:
|
||||
return mtl_name; \
|
||||
} \
|
||||
\
|
||||
MaterialCreateInfo *Create(MaterialCreateConfig *cfg) override \
|
||||
MaterialCreateInfo *Create(const GPUDeviceAttribute *dev_attr,MaterialCreateConfig *cfg) override \
|
||||
{ \
|
||||
return create_func((cfg_type *)cfg); \
|
||||
return create_func(dev_attr,(cfg_type *)cfg); \
|
||||
} \
|
||||
}; \
|
||||
\
|
||||
DEFINE_MATERIAL_FACTORY(name)
|
||||
|
||||
MaterialCreateInfo *CreateMaterialCreateInfo(const MaterialName &,MaterialCreateConfig *cfg);
|
||||
MaterialCreateInfo *CreateMaterialCreateInfo(const GPUDeviceAttribute *dev_attr,const MaterialName &,MaterialCreateConfig *cfg);
|
||||
|
||||
inline MaterialCreateInfo *CreateMaterialCreateInfo(const char *mtl_name,MaterialCreateConfig *cfg)
|
||||
inline MaterialCreateInfo *CreateMaterialCreateInfo(const GPUDeviceAttribute *dev_attr,const char *mtl_name,MaterialCreateConfig *cfg)
|
||||
{
|
||||
MaterialName mtl_id_name(mtl_name);
|
||||
|
||||
return CreateMaterialCreateInfo(mtl_id_name,cfg);
|
||||
return CreateMaterialCreateInfo(dev_attr,mtl_id_name,cfg);
|
||||
}
|
||||
|
||||
inline MaterialCreateInfo *CreateMaterialCreateInfo(const AnsiString &mtl_name,MaterialCreateConfig *cfg)
|
||||
inline MaterialCreateInfo *CreateMaterialCreateInfo(const GPUDeviceAttribute *dev_attr,const AnsiString &mtl_name,MaterialCreateConfig *cfg)
|
||||
{
|
||||
MaterialName mtl_id_name(mtl_name);
|
||||
|
||||
return CreateMaterialCreateInfo(mtl_id_name,cfg);
|
||||
return CreateMaterialCreateInfo(dev_attr,mtl_id_name,cfg);
|
||||
}
|
||||
|
||||
STD_MTL_NAMESPACE_END
|
||||
|
@@ -19,6 +19,7 @@ namespace hgl::graph
|
||||
class ShaderCreateInfoVertex;
|
||||
class ShaderCreateInfoGeometry;
|
||||
class ShaderCreateInfoFragment;
|
||||
struct GPUDeviceAttribute;
|
||||
|
||||
namespace mtl
|
||||
{
|
||||
@@ -50,7 +51,7 @@ namespace hgl::graph
|
||||
StdMaterial(const MaterialCreateConfig *);
|
||||
virtual ~StdMaterial()=default;
|
||||
|
||||
virtual MaterialCreateInfo *Create();
|
||||
virtual MaterialCreateInfo *Create(const GPUDeviceAttribute *dev_attr);
|
||||
};//class StdMaterial
|
||||
}//namespace mtl
|
||||
}//namespace hgl::graph
|
||||
|
Reference in New Issue
Block a user