将dev_attr从MaterialCreateConfig中移除改到最终的Create函数中。代码能编过,但是static自动注册失效了,待查。

This commit is contained in:
hyzboy 2025-05-16 09:12:33 +08:00
parent 4a4326826e
commit fd1a629941
26 changed files with 97 additions and 125 deletions

View File

@ -1,34 +1,6 @@
#include<hgl/graph/mtl/MaterialLibrary.h> #include<hgl/graph/mtl/MaterialLibrary.h>
#include<hgl/util/JsonTool.h>
/*
material json example:
{
"name":"material_name",
"type":"2d",
"parent":"parent_material_name",
"std2d":
{
"coordinate_system":"NDC",
"local_to_world:"false",
"position_format":"vec2"
}
}
*/
STD_MTL_NAMESPACE_BEGIN STD_MTL_NAMESPACE_BEGIN
MaterialCreateInfo *Load2DMaterialFromJson(const Json::Value& json_root)
{
}
MaterialCreateInfo *LoadMaterialFromJson(const Json::Value &json_root)
{
}
STD_MTL_NAMESPACE_END STD_MTL_NAMESPACE_END

View File

@ -42,7 +42,7 @@ private:
bool InitAutoMaterial() bool InitAutoMaterial()
{ {
mtl::Material2DCreateConfig cfg(GetDeviceAttribute(),"VertexColor2D",PrimitiveType::Triangles); mtl::Material2DCreateConfig cfg("VertexColor2D",PrimitiveType::Triangles);
cfg.coordinate_system=CoordinateSystem2D::NDC; cfg.coordinate_system=CoordinateSystem2D::NDC;
cfg.local_to_world=false; cfg.local_to_world=false;

View File

@ -81,7 +81,9 @@ namespace hgl
graph::MaterialInstance *CreateMaterialInstance(const AnsiString &mtl_name,graph::mtl::MaterialCreateConfig *mtl_cfg,const graph::VILConfig *vil_cfg=nullptr) graph::MaterialInstance *CreateMaterialInstance(const AnsiString &mtl_name,graph::mtl::MaterialCreateConfig *mtl_cfg,const graph::VILConfig *vil_cfg=nullptr)
{ {
AutoDelete<graph::mtl::MaterialCreateInfo> mci=graph::mtl::CreateMaterialCreateInfo("VertexColor2D",mtl_cfg); //这个是使用名称创建 AutoDelete<graph::mtl::MaterialCreateInfo> mci=graph::mtl::CreateMaterialCreateInfo(
GetDeviceAttribute(),
"VertexColor2D",mtl_cfg); //这个是使用名称创建
return db->CreateMaterialInstance(mci,vil_cfg); return db->CreateMaterialInstance(mci,vil_cfg);
} }

View File

@ -1,5 +1,4 @@
#ifndef HGL_GRAPH_MTL_2D_CREATE_CONFIG_INCLUDE #pragma once
#define HGL_GRAPH_MTL_2D_CREATE_CONFIG_INCLUDE
#include<hgl/graph/mtl/MaterialConfig.h> #include<hgl/graph/mtl/MaterialConfig.h>
#include<hgl/graph/CoordinateSystem.h> #include<hgl/graph/CoordinateSystem.h>
@ -16,7 +15,7 @@ struct Material2DCreateConfig:public MaterialCreateConfig,public Comparator<Mate
public: 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.color=1; //输出一个颜色
rt_output.depth=false; //不输出深度 rt_output.depth=false; //不输出深度
@ -50,19 +49,14 @@ public:
} }
};//struct Material2DCreateConfig:public MaterialCreateConfig };//struct Material2DCreateConfig:public MaterialCreateConfig
MaterialCreateInfo *CreateVertexColor2D(const Material2DCreateConfig *); MaterialCreateInfo *CreateVertexColor2D(const GPUDeviceAttribute *dev_attr,const Material2DCreateConfig *);
MaterialCreateInfo *CreatePureColor2D(const Material2DCreateConfig *); MaterialCreateInfo *CreatePureColor2D(const GPUDeviceAttribute *dev_attr,const Material2DCreateConfig *);
struct MaterialLerpLineConfig MaterialCreateInfo *CreateLerpLine2D(const GPUDeviceAttribute *dev_attr,const Material2DCreateConfig *);
{
}; MaterialCreateInfo *CreatePureTexture2D(const GPUDeviceAttribute *dev_attr,const Material2DCreateConfig *);
MaterialCreateInfo *CreateRectTexture2D(const GPUDeviceAttribute *dev_attr,Material2DCreateConfig *);
MaterialCreateInfo *CreateLerpLine2D(const Material2DCreateConfig *); MaterialCreateInfo *CreateRectTexture2DArray(const GPUDeviceAttribute *dev_attr,Material2DCreateConfig *);
MaterialCreateInfo *CreatePureTexture2D(const Material2DCreateConfig *);
MaterialCreateInfo *CreateRectTexture2D(Material2DCreateConfig *);
MaterialCreateInfo *CreateRectTexture2DArray(Material2DCreateConfig *);
// 为什么有了LoadMaterialFromFile还需要保留以上Create系列函数 // 为什么有了LoadMaterialFromFile还需要保留以上Create系列函数
@ -71,10 +65,11 @@ MaterialCreateInfo *CreateRectTexture2DArray(Material2DCreateConfig *);
/** /**
* *
* @param dev_attr
* @param mtl_name * @param mtl_name
* @param cfg * @param cfg
* @return * @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 STD_MTL_NAMESPACE_END
#endif//HGL_GRAPH_MTL_2D_CREATE_CONFIG_INCLUDE

View File

@ -18,7 +18,7 @@ struct Material3DCreateConfig:public MaterialCreateConfig,public Comparator<Mate
public: 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.color=1; //输出一个颜色
rt_output.depth=true; //不输出深度 rt_output.depth=true; //不输出深度
@ -50,10 +50,10 @@ public:
} }
};//struct Material3DCreateConfig:public MaterialCreateConfig };//struct Material3DCreateConfig:public MaterialCreateConfig
MaterialCreateInfo *CreateVertexColor3D(const Material3DCreateConfig *); MaterialCreateInfo *CreateVertexColor3D(const GPUDeviceAttribute *dev_attr,const Material3DCreateConfig *);
MaterialCreateInfo *CreateVertexLuminance3D(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 struct BillboardMaterialCreateConfig:public Material3DCreateConfig
{ {
@ -66,7 +66,7 @@ public:
using Material3DCreateConfig::Material3DCreateConfig; 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 * @param cfg
* @return * @return
*/ */
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,Material3DCreateConfig *cfg); MaterialCreateInfo *LoadMaterialFromFile(const GPUDeviceAttribute *dev_attr,const AnsiString &name,Material3DCreateConfig *cfg);
STD_MTL_NAMESPACE_END STD_MTL_NAMESPACE_END

View File

@ -14,8 +14,6 @@ class MaterialCreateInfo;
*/ */
struct MaterialCreateConfig:public Comparator<MaterialCreateConfig> struct MaterialCreateConfig:public Comparator<MaterialCreateConfig>
{ {
const GPUDeviceAttribute * dev_attr; ///<GPU设备属性(目前仅用于获取UBO/SSBO数值未来可以考虑干掉)
AnsiString mtl_name; ///<材质名称 AnsiString mtl_name; ///<材质名称
bool material_instance; ///<是否包含材质实例 bool material_instance; ///<是否包含材质实例
@ -28,10 +26,8 @@ struct MaterialCreateConfig:public Comparator<MaterialCreateConfig>
public: public:
MaterialCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name,const PrimitiveType &p) MaterialCreateConfig(const AnsiString &name,const PrimitiveType &p)
{ {
dev_attr=da;
mtl_name=name; mtl_name=name;
material_instance=false; material_instance=false;

View File

@ -27,7 +27,7 @@ public:
//virtual const CoordinateSystem2D get2DCoordinateSystem()const=0; //virtual const CoordinateSystem2D get2DCoordinateSystem()const=0;
virtual MaterialCreateInfo *Create(MaterialCreateConfig *)=0; virtual MaterialCreateInfo *Create(const GPUDeviceAttribute *dev_attr,MaterialCreateConfig *)=0;
};//class MaterialFactory };//class MaterialFactory
@ -57,28 +57,28 @@ public:
return mtl_name; \ 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) 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); 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); MaterialName mtl_id_name(mtl_name);
return CreateMaterialCreateInfo(mtl_id_name,cfg); return CreateMaterialCreateInfo(dev_attr,mtl_id_name,cfg);
} }
STD_MTL_NAMESPACE_END STD_MTL_NAMESPACE_END

View File

@ -19,6 +19,7 @@ namespace hgl::graph
class ShaderCreateInfoVertex; class ShaderCreateInfoVertex;
class ShaderCreateInfoGeometry; class ShaderCreateInfoGeometry;
class ShaderCreateInfoFragment; class ShaderCreateInfoFragment;
struct GPUDeviceAttribute;
namespace mtl namespace mtl
{ {
@ -50,7 +51,7 @@ namespace hgl::graph
StdMaterial(const MaterialCreateConfig *); StdMaterial(const MaterialCreateConfig *);
virtual ~StdMaterial()=default; virtual ~StdMaterial()=default;
virtual MaterialCreateInfo *Create(); virtual MaterialCreateInfo *Create(const GPUDeviceAttribute *dev_attr);
};//class StdMaterial };//class StdMaterial
}//namespace mtl }//namespace mtl
}//namespace hgl::graph }//namespace hgl::graph

View File

@ -89,7 +89,7 @@ namespace hgl::graph
bool AddSampler(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name); bool AddSampler(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name);
bool CreateShader(); bool CreateShader(const GPUDeviceAttribute *dev_attr);
};//class MaterialCreateInfo };//class MaterialCreateInfo
}//namespace mtl }//namespace mtl
}//namespace hgl::graph }//namespace hgl::graph

View File

@ -183,20 +183,20 @@ Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci)
namespace mtl namespace mtl
{ {
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &, Material2DCreateConfig *); MaterialCreateInfo *LoadMaterialFromFile(const GPUDeviceAttribute *dev_attr,const AnsiString &, Material2DCreateConfig *);
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &, Material3DCreateConfig *); MaterialCreateInfo *LoadMaterialFromFile(const GPUDeviceAttribute *dev_attr,const AnsiString &, Material3DCreateConfig *);
} }
Material *RenderResource::LoadMaterial(const AnsiString &mtl_name,mtl::Material2DCreateConfig *cfg) Material *RenderResource::LoadMaterial(const AnsiString &mtl_name,mtl::Material2DCreateConfig *cfg)
{ {
AutoDelete<mtl::MaterialCreateInfo> mci=mtl::LoadMaterialFromFile(mtl_name,cfg); AutoDelete<mtl::MaterialCreateInfo> mci=mtl::LoadMaterialFromFile(device->GetDeviceAttribute(),mtl_name,cfg);
return this->CreateMaterial(mci); return this->CreateMaterial(mci);
} }
Material *RenderResource::LoadMaterial(const AnsiString &mtl_name,mtl::Material3DCreateConfig *cfg) Material *RenderResource::LoadMaterial(const AnsiString &mtl_name,mtl::Material3DCreateConfig *cfg)
{ {
AutoDelete<mtl::MaterialCreateInfo> mci=mtl::LoadMaterialFromFile(mtl_name,cfg); AutoDelete<mtl::MaterialCreateInfo> mci=mtl::LoadMaterialFromFile(device->GetDeviceAttribute(),mtl_name,cfg);
return this->CreateMaterial(mci); return this->CreateMaterial(mci);
} }

View File

@ -63,10 +63,10 @@ void main()
};//class MaterialPureColor2D:public Std2DMaterial };//class MaterialPureColor2D:public Std2DMaterial
}//namespace }//namespace
MaterialCreateInfo *CreatePureColor2D(const Material2DCreateConfig *cfg) MaterialCreateInfo *CreatePureColor2D(const GPUDeviceAttribute *dev_attr,const Material2DCreateConfig *cfg)
{ {
MaterialPureColor2D mpc2d(cfg); MaterialPureColor2D mpc2d(cfg);
return mpc2d.Create(); return mpc2d.Create(dev_attr);
} }
STD_MTL_NAMESPACE_END STD_MTL_NAMESPACE_END

View File

@ -55,10 +55,10 @@ void main()
};//class MaterialPureTexture2D:public Std2DMaterial };//class MaterialPureTexture2D:public Std2DMaterial
}//namespace }//namespace
MaterialCreateInfo *CreatePureTexture2D(const mtl::Material2DCreateConfig *cfg) MaterialCreateInfo *CreatePureTexture2D(const GPUDeviceAttribute *dev_attr,const mtl::Material2DCreateConfig *cfg)
{ {
MaterialPureTexture2D mvc2d(cfg); MaterialPureTexture2D mvc2d(cfg);
return mvc2d.Create(); return mvc2d.Create(dev_attr);
} }
STD_MTL_NAMESPACE_END STD_MTL_NAMESPACE_END

View File

@ -82,7 +82,7 @@ void main()
};//class MaterialRectTexture2D:public Std2DMaterial };//class MaterialRectTexture2D:public Std2DMaterial
}//namespace }//namespace
MaterialCreateInfo *CreateRectTexture2D(mtl::Material2DCreateConfig *cfg) MaterialCreateInfo *CreateRectTexture2D(const GPUDeviceAttribute *dev_attr,mtl::Material2DCreateConfig *cfg)
{ {
if(!cfg) if(!cfg)
return(nullptr); return(nullptr);
@ -91,6 +91,6 @@ MaterialCreateInfo *CreateRectTexture2D(mtl::Material2DCreateConfig *cfg)
MaterialRectTexture2D mvc2d(cfg); MaterialRectTexture2D mvc2d(cfg);
return mvc2d.Create(); return mvc2d.Create(dev_attr);
} }
STD_MTL_NAMESPACE_END STD_MTL_NAMESPACE_END

View File

@ -98,7 +98,7 @@ void main()
};//class MaterialRectTexture2D:public Std2DMaterial };//class MaterialRectTexture2D:public Std2DMaterial
}//namespace }//namespace
MaterialCreateInfo *CreateRectTexture2DArray(mtl::Material2DCreateConfig *cfg) MaterialCreateInfo *CreateRectTexture2DArray(const GPUDeviceAttribute *dev_attr,mtl::Material2DCreateConfig *cfg)
{ {
if(!cfg) if(!cfg)
return(nullptr); return(nullptr);
@ -107,6 +107,6 @@ MaterialCreateInfo *CreateRectTexture2DArray(mtl::Material2DCreateConfig *cfg)
MaterialRectTexture2D mvc2d(cfg); MaterialRectTexture2D mvc2d(cfg);
return mvc2d.Create(); return mvc2d.Create(dev_attr);
} }
STD_MTL_NAMESPACE_END STD_MTL_NAMESPACE_END

View File

@ -55,32 +55,33 @@ void main()
};//class MaterialVertexColor2D:public Std2DMaterial };//class MaterialVertexColor2D:public Std2DMaterial
}//namespace }//namespace
MaterialCreateInfo *CreateVertexColor2D(const Material2DCreateConfig *cfg) MaterialCreateInfo *CreateVertexColor2D(const GPUDeviceAttribute *dev_attr,const Material2DCreateConfig *cfg)
{ {
MaterialVertexColor2D mvc2d(cfg); MaterialVertexColor2D mvc2d(cfg);
return mvc2d.Create(); return mvc2d.Create(dev_attr);
} }
//class MaterialFactoryVertexColor2D:public MaterialFactory class MaterialFactoryVertexColor2D:public MaterialFactory
//{ {
//public: public:
//
// const MaterialName &GetName()const override
// {
// static MaterialName mtl_name("VertexColor2D");
//
// return mtl_name;
// }
//
// MaterialCreateInfo *Create(MaterialCreateConfig *cfg) override
// {
// return CreateVertexColor2D((Material2DCreateConfig *)cfg);
// }
//};//class MaterialFactoryVertexColor2D:public MaterialFactory
//
//DEFINE_MATERIAL_FACTORY(VertexColor2D)
DEFINE_MATERIAL_FACTORY_CLASS(VertexColor2D,CreateVertexColor2D,Material2DCreateConfig) const MaterialName &GetName()const override
{
static MaterialName mtl_name("VertexColor2D");
return mtl_name;
}
MaterialCreateInfo *Create(const GPUDeviceAttribute *dev_attr,MaterialCreateConfig *cfg) override
{
return CreateVertexColor2D(dev_attr,(Material2DCreateConfig *)cfg);
}
};//class MaterialFactoryVertexColor2D:public MaterialFactory
static RegistryMaterialFactoryClass<MaterialFactoryVertexColor2D> MaterialFactoryInstance_VertexColor2D;
//DEFINE_MATERIAL_FACTORY_CLASS(VertexColor2D,CreateVertexColor2D,Material2DCreateConfig)
STD_MTL_NAMESPACE_END STD_MTL_NAMESPACE_END

View File

@ -102,7 +102,7 @@ namespace
material_file::MaterialFileData *LoadMaterialDataFromFile(const AnsiString &mtl_filename); material_file::MaterialFileData *LoadMaterialDataFromFile(const AnsiString &mtl_filename);
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,Material2DCreateConfig *cfg) MaterialCreateInfo *LoadMaterialFromFile(const GPUDeviceAttribute *dev_attr,const AnsiString &name,Material2DCreateConfig *cfg)
{ {
if(name.IsEmpty()||!cfg) if(name.IsEmpty()||!cfg)
return(nullptr); return(nullptr);
@ -119,6 +119,6 @@ MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,Material2DCreate
Std2DMaterialLoader mtl(mfd,cfg); Std2DMaterialLoader mtl(mfd,cfg);
return mtl.Create(); return mtl.Create(dev_attr);
} }
STD_MTL_NAMESPACE_END STD_MTL_NAMESPACE_END

View File

@ -86,7 +86,7 @@ void main()
};//class MaterialBillboard2DDynamicSize:public Std3DMaterial };//class MaterialBillboard2DDynamicSize:public Std3DMaterial
}//namespace }//namespace
MaterialCreateInfo *CreateBillboard2DDynamic(mtl::BillboardMaterialCreateConfig *cfg) MaterialCreateInfo *CreateBillboard2DDynamic(const GPUDeviceAttribute *dev_attr,mtl::BillboardMaterialCreateConfig *cfg)
{ {
if(!cfg) if(!cfg)
return(nullptr); return(nullptr);
@ -97,6 +97,6 @@ MaterialCreateInfo *CreateBillboard2DDynamic(mtl::BillboardMaterialCreateConfig
MaterialBillboard2DDynamicSize mtl_billbard_2d(cfg); MaterialBillboard2DDynamicSize mtl_billbard_2d(cfg);
return mtl_billbard_2d.Create(); return mtl_billbard_2d.Create(dev_attr);
} }
STD_MTL_NAMESPACE_END STD_MTL_NAMESPACE_END

View File

@ -96,7 +96,7 @@ void main()
};//class MaterialBillboard2DFixedSize:public Std3DMaterial };//class MaterialBillboard2DFixedSize:public Std3DMaterial
}//namespace }//namespace
MaterialCreateInfo *CreateBillboard2DFixedSize(mtl::BillboardMaterialCreateConfig *cfg) MaterialCreateInfo *CreateBillboard2DFixedSize(const GPUDeviceAttribute *dev_attr,mtl::BillboardMaterialCreateConfig *cfg)
{ {
if(!cfg) if(!cfg)
return(nullptr); return(nullptr);
@ -107,6 +107,6 @@ MaterialCreateInfo *CreateBillboard2DFixedSize(mtl::BillboardMaterialCreateConfi
MaterialBillboard2DFixedSize mtl_billbard_2d_fixed_size(cfg); MaterialBillboard2DFixedSize mtl_billbard_2d_fixed_size(cfg);
return mtl_billbard_2d_fixed_size.Create(); return mtl_billbard_2d_fixed_size.Create(dev_attr);
} }
STD_MTL_NAMESPACE_END STD_MTL_NAMESPACE_END

View File

@ -93,10 +93,10 @@ void main()
};//class MaterialGizmo3D:public Std3DMaterial };//class MaterialGizmo3D:public Std3DMaterial
}//namespace }//namespace
MaterialCreateInfo *CreateMaterialGizmo3D(const Material3DCreateConfig *cfg) MaterialCreateInfo *CreateMaterialGizmo3D(const GPUDeviceAttribute *dev_attr,const Material3DCreateConfig *cfg)
{ {
MaterialGizmo3D mg3d(cfg); MaterialGizmo3D mg3d(cfg);
return mg3d.Create(); return mg3d.Create(dev_attr);
} }
STD_MTL_NAMESPACE_END STD_MTL_NAMESPACE_END

View File

@ -54,10 +54,10 @@ void main()
};//class MaterialVertexColor3D:public Std3DMaterial };//class MaterialVertexColor3D:public Std3DMaterial
}//namespace }//namespace
MaterialCreateInfo *CreateVertexColor3D(const Material3DCreateConfig *cfg) MaterialCreateInfo *CreateVertexColor3D(const GPUDeviceAttribute *dev_attr,const Material3DCreateConfig *cfg)
{ {
MaterialVertexColor3D mvc3d(cfg); MaterialVertexColor3D mvc3d(cfg);
return mvc3d.Create(); return mvc3d.Create(dev_attr);
} }
STD_MTL_NAMESPACE_END STD_MTL_NAMESPACE_END

View File

@ -68,10 +68,10 @@ void main()
};//class MaterialVertexLuminance3D:public Std3DMaterial };//class MaterialVertexLuminance3D:public Std3DMaterial
}//namespace }//namespace
MaterialCreateInfo *CreateVertexLuminance3D(const Material3DCreateConfig *cfg) MaterialCreateInfo *CreateVertexLuminance3D(const GPUDeviceAttribute *dev_attr,const Material3DCreateConfig *cfg)
{ {
MaterialVertexLuminance3D mvc3d(cfg); MaterialVertexLuminance3D mvc3d(cfg);
return mvc3d.Create(); return mvc3d.Create(dev_attr);
} }
STD_MTL_NAMESPACE_END STD_MTL_NAMESPACE_END

View File

@ -103,7 +103,7 @@ namespace
material_file::MaterialFileData *LoadMaterialDataFromFile(const AnsiString &mtl_filename); material_file::MaterialFileData *LoadMaterialDataFromFile(const AnsiString &mtl_filename);
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,Material3DCreateConfig *cfg) MaterialCreateInfo *LoadMaterialFromFile(const GPUDeviceAttribute *dev_attr,const AnsiString &name,Material3DCreateConfig *cfg)
{ {
if(name.IsEmpty()||!cfg) if(name.IsEmpty()||!cfg)
return (nullptr); return (nullptr);
@ -120,6 +120,6 @@ MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,Material3DCreate
Std3DMaterialLoader mtl(mfd,cfg); Std3DMaterialLoader mtl(mfd,cfg);
return mtl.Create(); return mtl.Create(dev_attr);
} }
STD_MTL_NAMESPACE_END STD_MTL_NAMESPACE_END

View File

@ -17,8 +17,8 @@ MaterialCreateInfo::MaterialCreateInfo(const MaterialCreateConfig *mc)
if(hasGeometry ())shader_map.Add(geom=new ShaderCreateInfoGeometry(&mdi));else geom=nullptr; if(hasGeometry ())shader_map.Add(geom=new ShaderCreateInfoGeometry(&mdi));else geom=nullptr;
if(hasFragment ())shader_map.Add(frag=new ShaderCreateInfoFragment(&mdi));else frag=nullptr; if(hasFragment ())shader_map.Add(frag=new ShaderCreateInfoFragment(&mdi));else frag=nullptr;
ubo_range=config->dev_attr->physical_device->GetUBORange(); //Mali-T系/G71为16knVidia和Mali-G系列除G71外为64kIntel/PowerVR为128MAMD无限制。 ubo_range=0;
ssbo_range=config->dev_attr->physical_device->GetSSBORange(); ssbo_range=0;
{ {
mi_data_bytes=0; mi_data_bytes=0;
@ -225,11 +225,14 @@ bool MaterialCreateInfo::SetLocalToWorld(const uint32_t shader_stage_flag_bits)
return(true); return(true);
} }
bool MaterialCreateInfo::CreateShader() bool MaterialCreateInfo::CreateShader(const GPUDeviceAttribute *dev_attr)
{ {
if(shader_map.IsEmpty()) if(shader_map.IsEmpty())
return(false); return(false);
ubo_range=dev_attr->physical_device->GetUBORange(); //Mali-T系/G71为16knVidia和Mali-G系列除G71外为64kIntel/PowerVR为128MAMD无限制。
ssbo_range=dev_attr->physical_device->GetSSBORange();
mdi.Resort(); mdi.Resort();
ShaderCreateInfo *sc,*last=nullptr; ShaderCreateInfo *sc,*last=nullptr;

View File

@ -15,6 +15,8 @@ namespace material_file
constexpr size_t SHADER_RESOURCE_NAME_MAX_LENGTH=VERTEX_ATTRIB_NAME_MAX_LENGTH; constexpr size_t SHADER_RESOURCE_NAME_MAX_LENGTH=VERTEX_ATTRIB_NAME_MAX_LENGTH;
using ShaderNameVariable=char[SHADER_RESOURCE_NAME_MAX_LENGTH];
struct MaterialInstanceData struct MaterialInstanceData
{ {
const char *code; const char *code;
@ -28,15 +30,15 @@ namespace material_file
struct SamplerData struct SamplerData
{ {
char name[SHADER_RESOURCE_NAME_MAX_LENGTH]; ShaderNameVariable name;
SamplerType type; SamplerType type;
}; };
struct UBOData struct UBOData
{ {
char struct_name[SHADER_RESOURCE_NAME_MAX_LENGTH]; ShaderNameVariable struct_name;
char name[SHADER_RESOURCE_NAME_MAX_LENGTH]; ShaderNameVariable name;
char filename[HGL_MAX_PATH]; char filename[HGL_MAX_PATH];
@ -56,7 +58,7 @@ namespace material_file
const char * code; const char * code;
uint code_length; uint code_length;
ArrayList<SamplerData> sampler; ArrayList<SamplerData> sampler;
public: public:

View File

@ -46,7 +46,7 @@ void ClearMaterialFactory()
SAFE_CLEAR(material_factory_map); SAFE_CLEAR(material_factory_map);
} }
MaterialCreateInfo *CreateMaterialCreateInfo(const MaterialName &name,MaterialCreateConfig *cfg) MaterialCreateInfo *CreateMaterialCreateInfo(const GPUDeviceAttribute *dev_attr,const MaterialName &name,MaterialCreateConfig *cfg)
{ {
if(!cfg) if(!cfg)
return(nullptr); return(nullptr);
@ -56,7 +56,7 @@ MaterialCreateInfo *CreateMaterialCreateInfo(const MaterialName &name,MaterialCr
if(!mf) if(!mf)
return(nullptr); return(nullptr);
return mf->Create(cfg); return mf->Create(dev_attr,cfg);
} }
STD_MTL_NAMESPACE_END STD_MTL_NAMESPACE_END

View File

@ -8,7 +8,7 @@ StdMaterial::StdMaterial(const MaterialCreateConfig *mcc)
mci=new MaterialCreateInfo(mcc); mci=new MaterialCreateInfo(mcc);
} }
MaterialCreateInfo *StdMaterial::Create() MaterialCreateInfo *StdMaterial::Create(const GPUDeviceAttribute *dev_attr)
{ {
if(!BeginCustomShader()) if(!BeginCustomShader())
return(nullptr); return(nullptr);
@ -28,7 +28,7 @@ MaterialCreateInfo *StdMaterial::Create()
if(!EndCustomShader()) if(!EndCustomShader())
return(nullptr); return(nullptr);
if(!mci->CreateShader()) if(!mci->CreateShader(dev_attr))
return(nullptr); return(nullptr);
return(mci); return(mci);