From fd1a629941072e6ffd7c2b8eb6851a76d418de49 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Fri, 16 May 2025 09:12:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86dev=5Fattr=E4=BB=8EMaterialCreateConfi?= =?UTF-8?q?g=E4=B8=AD=E7=A7=BB=E9=99=A4=E6=94=B9=E5=88=B0=E6=9C=80?= =?UTF-8?q?=E7=BB=88=E7=9A=84Create=E5=87=BD=E6=95=B0=E4=B8=AD=E3=80=82?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=83=BD=E7=BC=96=E8=BF=87=EF=BC=8C=E4=BD=86?= =?UTF-8?q?=E6=98=AFstatic=E8=87=AA=E5=8A=A8=E6=B3=A8=E5=86=8C=E5=A4=B1?= =?UTF-8?q?=E6=95=88=E4=BA=86=EF=BC=8C=E5=BE=85=E6=9F=A5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Basic/MaterialLoader/MaterialLoader.cpp | 28 ------------ example/Basic/rf_test.cpp | 2 +- inc/hgl/WorkObject.h | 4 +- inc/hgl/graph/mtl/Material2DCreateConfig.h | 27 +++++------- inc/hgl/graph/mtl/Material3DCreateConfig.h | 12 +++--- inc/hgl/graph/mtl/MaterialConfig.h | 6 +-- inc/hgl/graph/mtl/MaterialLibrary.h | 16 +++---- inc/hgl/graph/mtl/StdMaterial.h | 3 +- inc/hgl/shadergen/MaterialCreateInfo.h | 2 +- .../Vulkan/VKRenderResourceMaterial.cpp | 8 ++-- src/ShaderGen/2d/M_PureColor2D.cpp | 4 +- src/ShaderGen/2d/M_PureTexture2D.cpp | 4 +- src/ShaderGen/2d/M_RectTexture2D.cpp | 4 +- src/ShaderGen/2d/M_RectTexture2DArray.cpp | 4 +- src/ShaderGen/2d/M_VertexColor2D.cpp | 43 ++++++++++--------- src/ShaderGen/2d/Std2DMaterialLoader.cpp | 4 +- src/ShaderGen/3d/M_BillboardDynamicSize.cpp | 4 +- src/ShaderGen/3d/M_BillboardFixedSize.cpp | 4 +- src/ShaderGen/3d/M_Gizmo3D.cpp | 4 +- src/ShaderGen/3d/M_VertexColor3D.cpp | 4 +- src/ShaderGen/3d/M_VertexLum3D.cpp | 4 +- src/ShaderGen/3d/Std3DMaterialLoader.cpp | 4 +- src/ShaderGen/MaterialCreateInfo.cpp | 9 ++-- src/ShaderGen/MaterialFileData.h | 10 +++-- src/ShaderGen/MaterialLibrary.cpp | 4 +- src/ShaderGen/StandardMaterial.cpp | 4 +- 26 files changed, 97 insertions(+), 125 deletions(-) diff --git a/example/Basic/MaterialLoader/MaterialLoader.cpp b/example/Basic/MaterialLoader/MaterialLoader.cpp index 15414903..ff9162cb 100644 --- a/example/Basic/MaterialLoader/MaterialLoader.cpp +++ b/example/Basic/MaterialLoader/MaterialLoader.cpp @@ -1,34 +1,6 @@ #include -#include - -/* - - 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 -MaterialCreateInfo *Load2DMaterialFromJson(const Json::Value& json_root) -{ - -} - -MaterialCreateInfo *LoadMaterialFromJson(const Json::Value &json_root) -{ - -} STD_MTL_NAMESPACE_END diff --git a/example/Basic/rf_test.cpp b/example/Basic/rf_test.cpp index f60e1416..bbb3841a 100644 --- a/example/Basic/rf_test.cpp +++ b/example/Basic/rf_test.cpp @@ -42,7 +42,7 @@ private: bool InitAutoMaterial() { - mtl::Material2DCreateConfig cfg(GetDeviceAttribute(),"VertexColor2D",PrimitiveType::Triangles); + mtl::Material2DCreateConfig cfg("VertexColor2D",PrimitiveType::Triangles); cfg.coordinate_system=CoordinateSystem2D::NDC; cfg.local_to_world=false; diff --git a/inc/hgl/WorkObject.h b/inc/hgl/WorkObject.h index 201f4e5d..322829ce 100644 --- a/inc/hgl/WorkObject.h +++ b/inc/hgl/WorkObject.h @@ -81,7 +81,9 @@ namespace hgl graph::MaterialInstance *CreateMaterialInstance(const AnsiString &mtl_name,graph::mtl::MaterialCreateConfig *mtl_cfg,const graph::VILConfig *vil_cfg=nullptr) { - AutoDelete mci=graph::mtl::CreateMaterialCreateInfo("VertexColor2D",mtl_cfg); //这个是使用名称创建 + AutoDelete mci=graph::mtl::CreateMaterialCreateInfo( + GetDeviceAttribute(), + "VertexColor2D",mtl_cfg); //这个是使用名称创建 return db->CreateMaterialInstance(mci,vil_cfg); } diff --git a/inc/hgl/graph/mtl/Material2DCreateConfig.h b/inc/hgl/graph/mtl/Material2DCreateConfig.h index 279e5c31..f1e9149e 100644 --- a/inc/hgl/graph/mtl/Material2DCreateConfig.h +++ b/inc/hgl/graph/mtl/Material2DCreateConfig.h @@ -1,5 +1,4 @@ -#ifndef HGL_GRAPH_MTL_2D_CREATE_CONFIG_INCLUDE -#define HGL_GRAPH_MTL_2D_CREATE_CONFIG_INCLUDE +#pragma once #include #include @@ -16,7 +15,7 @@ struct Material2DCreateConfig:public MaterialCreateConfig,public Comparator { - const GPUDeviceAttribute * dev_attr; /// 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; diff --git a/inc/hgl/graph/mtl/MaterialLibrary.h b/inc/hgl/graph/mtl/MaterialLibrary.h index a19fa4a6..ce1f5839 100644 --- a/inc/hgl/graph/mtl/MaterialLibrary.h +++ b/inc/hgl/graph/mtl/MaterialLibrary.h @@ -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 diff --git a/inc/hgl/graph/mtl/StdMaterial.h b/inc/hgl/graph/mtl/StdMaterial.h index 0128e4e3..b7d296e3 100644 --- a/inc/hgl/graph/mtl/StdMaterial.h +++ b/inc/hgl/graph/mtl/StdMaterial.h @@ -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 diff --git a/inc/hgl/shadergen/MaterialCreateInfo.h b/inc/hgl/shadergen/MaterialCreateInfo.h index 0f2e8b4b..3b939304 100644 --- a/inc/hgl/shadergen/MaterialCreateInfo.h +++ b/inc/hgl/shadergen/MaterialCreateInfo.h @@ -89,7 +89,7 @@ namespace hgl::graph 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 }//namespace mtl }//namespace hgl::graph diff --git a/src/SceneGraph/Vulkan/VKRenderResourceMaterial.cpp b/src/SceneGraph/Vulkan/VKRenderResourceMaterial.cpp index b01c5c07..ce559259 100644 --- a/src/SceneGraph/Vulkan/VKRenderResourceMaterial.cpp +++ b/src/SceneGraph/Vulkan/VKRenderResourceMaterial.cpp @@ -183,20 +183,20 @@ Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci) namespace mtl { - MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &, Material2DCreateConfig *); - MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &, Material3DCreateConfig *); + MaterialCreateInfo *LoadMaterialFromFile(const GPUDeviceAttribute *dev_attr,const AnsiString &, Material2DCreateConfig *); + MaterialCreateInfo *LoadMaterialFromFile(const GPUDeviceAttribute *dev_attr,const AnsiString &, Material3DCreateConfig *); } Material *RenderResource::LoadMaterial(const AnsiString &mtl_name,mtl::Material2DCreateConfig *cfg) { - AutoDelete mci=mtl::LoadMaterialFromFile(mtl_name,cfg); + AutoDelete mci=mtl::LoadMaterialFromFile(device->GetDeviceAttribute(),mtl_name,cfg); return this->CreateMaterial(mci); } Material *RenderResource::LoadMaterial(const AnsiString &mtl_name,mtl::Material3DCreateConfig *cfg) { - AutoDelete mci=mtl::LoadMaterialFromFile(mtl_name,cfg); + AutoDelete mci=mtl::LoadMaterialFromFile(device->GetDeviceAttribute(),mtl_name,cfg); return this->CreateMaterial(mci); } diff --git a/src/ShaderGen/2d/M_PureColor2D.cpp b/src/ShaderGen/2d/M_PureColor2D.cpp index 53480f80..15046fc3 100644 --- a/src/ShaderGen/2d/M_PureColor2D.cpp +++ b/src/ShaderGen/2d/M_PureColor2D.cpp @@ -63,10 +63,10 @@ void main() };//class MaterialPureColor2D:public Std2DMaterial }//namespace -MaterialCreateInfo *CreatePureColor2D(const Material2DCreateConfig *cfg) +MaterialCreateInfo *CreatePureColor2D(const GPUDeviceAttribute *dev_attr,const Material2DCreateConfig *cfg) { MaterialPureColor2D mpc2d(cfg); - return mpc2d.Create(); + return mpc2d.Create(dev_attr); } STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/2d/M_PureTexture2D.cpp b/src/ShaderGen/2d/M_PureTexture2D.cpp index cd51c1d0..f1840a70 100644 --- a/src/ShaderGen/2d/M_PureTexture2D.cpp +++ b/src/ShaderGen/2d/M_PureTexture2D.cpp @@ -55,10 +55,10 @@ void main() };//class MaterialPureTexture2D:public Std2DMaterial }//namespace -MaterialCreateInfo *CreatePureTexture2D(const mtl::Material2DCreateConfig *cfg) +MaterialCreateInfo *CreatePureTexture2D(const GPUDeviceAttribute *dev_attr,const mtl::Material2DCreateConfig *cfg) { MaterialPureTexture2D mvc2d(cfg); - return mvc2d.Create(); + return mvc2d.Create(dev_attr); } STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/2d/M_RectTexture2D.cpp b/src/ShaderGen/2d/M_RectTexture2D.cpp index d008393b..477c0439 100644 --- a/src/ShaderGen/2d/M_RectTexture2D.cpp +++ b/src/ShaderGen/2d/M_RectTexture2D.cpp @@ -82,7 +82,7 @@ void main() };//class MaterialRectTexture2D:public Std2DMaterial }//namespace -MaterialCreateInfo *CreateRectTexture2D(mtl::Material2DCreateConfig *cfg) +MaterialCreateInfo *CreateRectTexture2D(const GPUDeviceAttribute *dev_attr,mtl::Material2DCreateConfig *cfg) { if(!cfg) return(nullptr); @@ -91,6 +91,6 @@ MaterialCreateInfo *CreateRectTexture2D(mtl::Material2DCreateConfig *cfg) MaterialRectTexture2D mvc2d(cfg); - return mvc2d.Create(); + return mvc2d.Create(dev_attr); } STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/2d/M_RectTexture2DArray.cpp b/src/ShaderGen/2d/M_RectTexture2DArray.cpp index 107a95a8..00bf9e09 100644 --- a/src/ShaderGen/2d/M_RectTexture2DArray.cpp +++ b/src/ShaderGen/2d/M_RectTexture2DArray.cpp @@ -98,7 +98,7 @@ void main() };//class MaterialRectTexture2D:public Std2DMaterial }//namespace -MaterialCreateInfo *CreateRectTexture2DArray(mtl::Material2DCreateConfig *cfg) +MaterialCreateInfo *CreateRectTexture2DArray(const GPUDeviceAttribute *dev_attr,mtl::Material2DCreateConfig *cfg) { if(!cfg) return(nullptr); @@ -107,6 +107,6 @@ MaterialCreateInfo *CreateRectTexture2DArray(mtl::Material2DCreateConfig *cfg) MaterialRectTexture2D mvc2d(cfg); - return mvc2d.Create(); + return mvc2d.Create(dev_attr); } STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/2d/M_VertexColor2D.cpp b/src/ShaderGen/2d/M_VertexColor2D.cpp index b02175d4..56907574 100644 --- a/src/ShaderGen/2d/M_VertexColor2D.cpp +++ b/src/ShaderGen/2d/M_VertexColor2D.cpp @@ -55,32 +55,33 @@ void main() };//class MaterialVertexColor2D:public Std2DMaterial }//namespace -MaterialCreateInfo *CreateVertexColor2D(const Material2DCreateConfig *cfg) +MaterialCreateInfo *CreateVertexColor2D(const GPUDeviceAttribute *dev_attr,const Material2DCreateConfig *cfg) { MaterialVertexColor2D mvc2d(cfg); - return mvc2d.Create(); + return mvc2d.Create(dev_attr); } -//class MaterialFactoryVertexColor2D:public MaterialFactory -//{ -//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) +class MaterialFactoryVertexColor2D:public MaterialFactory +{ +public: -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 MaterialFactoryInstance_VertexColor2D; + + +//DEFINE_MATERIAL_FACTORY_CLASS(VertexColor2D,CreateVertexColor2D,Material2DCreateConfig) STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/2d/Std2DMaterialLoader.cpp b/src/ShaderGen/2d/Std2DMaterialLoader.cpp index 5ae3ab6c..eea71b73 100644 --- a/src/ShaderGen/2d/Std2DMaterialLoader.cpp +++ b/src/ShaderGen/2d/Std2DMaterialLoader.cpp @@ -102,7 +102,7 @@ namespace 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) return(nullptr); @@ -119,6 +119,6 @@ MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,Material2DCreate Std2DMaterialLoader mtl(mfd,cfg); - return mtl.Create(); + return mtl.Create(dev_attr); } STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/3d/M_BillboardDynamicSize.cpp b/src/ShaderGen/3d/M_BillboardDynamicSize.cpp index 7f87c47c..8b1eba0b 100644 --- a/src/ShaderGen/3d/M_BillboardDynamicSize.cpp +++ b/src/ShaderGen/3d/M_BillboardDynamicSize.cpp @@ -86,7 +86,7 @@ void main() };//class MaterialBillboard2DDynamicSize:public Std3DMaterial }//namespace -MaterialCreateInfo *CreateBillboard2DDynamic(mtl::BillboardMaterialCreateConfig *cfg) +MaterialCreateInfo *CreateBillboard2DDynamic(const GPUDeviceAttribute *dev_attr,mtl::BillboardMaterialCreateConfig *cfg) { if(!cfg) return(nullptr); @@ -97,6 +97,6 @@ MaterialCreateInfo *CreateBillboard2DDynamic(mtl::BillboardMaterialCreateConfig MaterialBillboard2DDynamicSize mtl_billbard_2d(cfg); - return mtl_billbard_2d.Create(); + return mtl_billbard_2d.Create(dev_attr); } STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/3d/M_BillboardFixedSize.cpp b/src/ShaderGen/3d/M_BillboardFixedSize.cpp index c28295b8..2aae5342 100644 --- a/src/ShaderGen/3d/M_BillboardFixedSize.cpp +++ b/src/ShaderGen/3d/M_BillboardFixedSize.cpp @@ -96,7 +96,7 @@ void main() };//class MaterialBillboard2DFixedSize:public Std3DMaterial }//namespace -MaterialCreateInfo *CreateBillboard2DFixedSize(mtl::BillboardMaterialCreateConfig *cfg) +MaterialCreateInfo *CreateBillboard2DFixedSize(const GPUDeviceAttribute *dev_attr,mtl::BillboardMaterialCreateConfig *cfg) { if(!cfg) return(nullptr); @@ -107,6 +107,6 @@ MaterialCreateInfo *CreateBillboard2DFixedSize(mtl::BillboardMaterialCreateConfi 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 diff --git a/src/ShaderGen/3d/M_Gizmo3D.cpp b/src/ShaderGen/3d/M_Gizmo3D.cpp index ff62fa95..88cb75e1 100644 --- a/src/ShaderGen/3d/M_Gizmo3D.cpp +++ b/src/ShaderGen/3d/M_Gizmo3D.cpp @@ -93,10 +93,10 @@ void main() };//class MaterialGizmo3D:public Std3DMaterial }//namespace -MaterialCreateInfo *CreateMaterialGizmo3D(const Material3DCreateConfig *cfg) +MaterialCreateInfo *CreateMaterialGizmo3D(const GPUDeviceAttribute *dev_attr,const Material3DCreateConfig *cfg) { MaterialGizmo3D mg3d(cfg); - return mg3d.Create(); + return mg3d.Create(dev_attr); } STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/3d/M_VertexColor3D.cpp b/src/ShaderGen/3d/M_VertexColor3D.cpp index 02be0956..c4021d73 100644 --- a/src/ShaderGen/3d/M_VertexColor3D.cpp +++ b/src/ShaderGen/3d/M_VertexColor3D.cpp @@ -54,10 +54,10 @@ void main() };//class MaterialVertexColor3D:public Std3DMaterial }//namespace -MaterialCreateInfo *CreateVertexColor3D(const Material3DCreateConfig *cfg) +MaterialCreateInfo *CreateVertexColor3D(const GPUDeviceAttribute *dev_attr,const Material3DCreateConfig *cfg) { MaterialVertexColor3D mvc3d(cfg); - return mvc3d.Create(); + return mvc3d.Create(dev_attr); } STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/3d/M_VertexLum3D.cpp b/src/ShaderGen/3d/M_VertexLum3D.cpp index 9842244d..6b4de5cb 100644 --- a/src/ShaderGen/3d/M_VertexLum3D.cpp +++ b/src/ShaderGen/3d/M_VertexLum3D.cpp @@ -68,10 +68,10 @@ void main() };//class MaterialVertexLuminance3D:public Std3DMaterial }//namespace -MaterialCreateInfo *CreateVertexLuminance3D(const Material3DCreateConfig *cfg) +MaterialCreateInfo *CreateVertexLuminance3D(const GPUDeviceAttribute *dev_attr,const Material3DCreateConfig *cfg) { MaterialVertexLuminance3D mvc3d(cfg); - return mvc3d.Create(); + return mvc3d.Create(dev_attr); } STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/3d/Std3DMaterialLoader.cpp b/src/ShaderGen/3d/Std3DMaterialLoader.cpp index acbaf3fa..9d921aeb 100644 --- a/src/ShaderGen/3d/Std3DMaterialLoader.cpp +++ b/src/ShaderGen/3d/Std3DMaterialLoader.cpp @@ -103,7 +103,7 @@ namespace 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) return (nullptr); @@ -120,6 +120,6 @@ MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,Material3DCreate Std3DMaterialLoader mtl(mfd,cfg); - return mtl.Create(); + return mtl.Create(dev_attr); } STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/MaterialCreateInfo.cpp b/src/ShaderGen/MaterialCreateInfo.cpp index cc96dc81..089d667a 100644 --- a/src/ShaderGen/MaterialCreateInfo.cpp +++ b/src/ShaderGen/MaterialCreateInfo.cpp @@ -17,8 +17,8 @@ MaterialCreateInfo::MaterialCreateInfo(const MaterialCreateConfig *mc) if(hasGeometry ())shader_map.Add(geom=new ShaderCreateInfoGeometry(&mdi));else geom=nullptr; if(hasFragment ())shader_map.Add(frag=new ShaderCreateInfoFragment(&mdi));else frag=nullptr; - ubo_range=config->dev_attr->physical_device->GetUBORange(); //Mali-T系/G71为16k,nVidia和Mali-G系列除G71外为64k,Intel/PowerVR为128M,AMD无限制。 - ssbo_range=config->dev_attr->physical_device->GetSSBORange(); + ubo_range=0; + ssbo_range=0; { mi_data_bytes=0; @@ -225,11 +225,14 @@ bool MaterialCreateInfo::SetLocalToWorld(const uint32_t shader_stage_flag_bits) return(true); } -bool MaterialCreateInfo::CreateShader() +bool MaterialCreateInfo::CreateShader(const GPUDeviceAttribute *dev_attr) { if(shader_map.IsEmpty()) return(false); + ubo_range=dev_attr->physical_device->GetUBORange(); //Mali-T系/G71为16k,nVidia和Mali-G系列除G71外为64k,Intel/PowerVR为128M,AMD无限制。 + ssbo_range=dev_attr->physical_device->GetSSBORange(); + mdi.Resort(); ShaderCreateInfo *sc,*last=nullptr; diff --git a/src/ShaderGen/MaterialFileData.h b/src/ShaderGen/MaterialFileData.h index e9f8397d..0188123c 100644 --- a/src/ShaderGen/MaterialFileData.h +++ b/src/ShaderGen/MaterialFileData.h @@ -15,6 +15,8 @@ namespace material_file constexpr size_t SHADER_RESOURCE_NAME_MAX_LENGTH=VERTEX_ATTRIB_NAME_MAX_LENGTH; + using ShaderNameVariable=char[SHADER_RESOURCE_NAME_MAX_LENGTH]; + struct MaterialInstanceData { const char *code; @@ -28,15 +30,15 @@ namespace material_file struct SamplerData { - char name[SHADER_RESOURCE_NAME_MAX_LENGTH]; + ShaderNameVariable name; SamplerType type; }; struct UBOData { - char struct_name[SHADER_RESOURCE_NAME_MAX_LENGTH]; - char name[SHADER_RESOURCE_NAME_MAX_LENGTH]; + ShaderNameVariable struct_name; + ShaderNameVariable name; char filename[HGL_MAX_PATH]; @@ -56,7 +58,7 @@ namespace material_file const char * code; uint code_length; - ArrayList sampler; + ArrayList sampler; public: diff --git a/src/ShaderGen/MaterialLibrary.cpp b/src/ShaderGen/MaterialLibrary.cpp index d67085a6..2a8b2414 100644 --- a/src/ShaderGen/MaterialLibrary.cpp +++ b/src/ShaderGen/MaterialLibrary.cpp @@ -46,7 +46,7 @@ void ClearMaterialFactory() 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) return(nullptr); @@ -56,7 +56,7 @@ MaterialCreateInfo *CreateMaterialCreateInfo(const MaterialName &name,MaterialCr if(!mf) return(nullptr); - return mf->Create(cfg); + return mf->Create(dev_attr,cfg); } STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/StandardMaterial.cpp b/src/ShaderGen/StandardMaterial.cpp index ba240528..a6a94874 100644 --- a/src/ShaderGen/StandardMaterial.cpp +++ b/src/ShaderGen/StandardMaterial.cpp @@ -8,7 +8,7 @@ StdMaterial::StdMaterial(const MaterialCreateConfig *mcc) mci=new MaterialCreateInfo(mcc); } -MaterialCreateInfo *StdMaterial::Create() +MaterialCreateInfo *StdMaterial::Create(const GPUDeviceAttribute *dev_attr) { if(!BeginCustomShader()) return(nullptr); @@ -28,7 +28,7 @@ MaterialCreateInfo *StdMaterial::Create() if(!EndCustomShader()) return(nullptr); - if(!mci->CreateShader()) + if(!mci->CreateShader(dev_attr)) return(nullptr); return(mci);