From 692eeff4a33e9230656c59871f3d5923aef1c698 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Sun, 18 May 2025 01:33:48 +0800 Subject: [PATCH] Removed mtl_name from MaterialCreateConfig --- example/Basic/rf_test.cpp | 18 +++--------------- inc/hgl/WorkObject.h | 10 ++++------ inc/hgl/graph/VKRenderResource.h | 4 ++-- inc/hgl/graph/mtl/Material2DCreateConfig.h | 9 ++++++--- inc/hgl/graph/mtl/Material3DCreateConfig.h | 2 +- inc/hgl/graph/mtl/MaterialConfig.h | 6 +----- inc/hgl/graph/mtl/StdMaterial.h | 6 ++++-- inc/hgl/shadergen/MaterialCreateInfo.h | 2 -- src/SceneGraph/Vulkan/VKRenderResource.cpp | 4 ++-- .../Vulkan/VKRenderResourceMaterial.cpp | 12 ++++++------ src/ShaderGen/2d/Std2DMaterial.cpp | 3 ++- 11 files changed, 31 insertions(+), 45 deletions(-) diff --git a/example/Basic/rf_test.cpp b/example/Basic/rf_test.cpp index bbb3841a..8a1f5e2b 100644 --- a/example/Basic/rf_test.cpp +++ b/example/Basic/rf_test.cpp @@ -42,24 +42,12 @@ private: bool InitAutoMaterial() { - mtl::Material2DCreateConfig cfg("VertexColor2D",PrimitiveType::Triangles); + mtl::Material2DCreateConfig cfg(PrimitiveType::Triangles, + CoordinateSystem2D::NDC, + mtl::WithLocalToWorld::Without); - cfg.coordinate_system=CoordinateSystem2D::NDC; - cfg.local_to_world=false; - - //AutoDelete mci=mtl::CreateVertexColor2D(&cfg); //这个是直接创建 - - //AutoDelete mci=mtl::CreateMaterialCreateInfo("VertexColor2D",&cfg); //这个是使用名称创建 - //这两种方式都可以,上一种方式肯定是会快些,主要用于一些程序中直接写死的地方。 - //而下面这种方式很明显是为了可以将使用的材质写入配置文件中。 - - //material_instance=CreateMaterialInstance(mci); - - //下面这个方式更直接,在WorkObject中封装了CreateMaterialCreateInfo(name,...)这个方法一步到位 material_instance=CreateMaterialInstance("VertexColor2D",&cfg); //这个是使用名称创建 - //再下一步我们会更直接将上面的Material2DCreateConfig写在配置文件中,这样只需要一个配置文件名称就可以完全加载了。 - return material_instance; } diff --git a/inc/hgl/WorkObject.h b/inc/hgl/WorkObject.h index 3ad97c8e..1b3b9f29 100644 --- a/inc/hgl/WorkObject.h +++ b/inc/hgl/WorkObject.h @@ -74,18 +74,16 @@ namespace hgl return render_pass->CreatePipeline(args...); } - graph::MaterialInstance *CreateMaterialInstance(const graph::mtl::MaterialCreateInfo *mci,const graph::VILConfig *vil_cfg=nullptr) + graph::MaterialInstance *CreateMaterialInstance(const AnsiString &mi_name,const graph::mtl::MaterialCreateInfo *mci,const graph::VILConfig *vil_cfg=nullptr) { - return db->CreateMaterialInstance(mci,vil_cfg); + return db->CreateMaterialInstance(mi_name,mci,vil_cfg); } graph::MaterialInstance *CreateMaterialInstance(const AnsiString &mtl_name,graph::mtl::MaterialCreateConfig *mtl_cfg,const graph::VILConfig *vil_cfg=nullptr) { - AutoDelete mci=graph::mtl::CreateMaterialCreateInfo( - GetDevAttr(), - "VertexColor2D",mtl_cfg); //这个是使用名称创建 + AutoDelete mci=graph::mtl::CreateMaterialCreateInfo(GetDevAttr(),mtl_name,mtl_cfg); - return db->CreateMaterialInstance(mci,vil_cfg); + return db->CreateMaterialInstance(mtl_name,mci,vil_cfg); } graph::Primitive *CreatePrimitive( const AnsiString &name, diff --git a/inc/hgl/graph/VKRenderResource.h b/inc/hgl/graph/VKRenderResource.h index 5863b7cc..64ea143b 100644 --- a/inc/hgl/graph/VKRenderResource.h +++ b/inc/hgl/graph/VKRenderResource.h @@ -127,7 +127,7 @@ public: //Material const ShaderModule *CreateShaderModule(const AnsiString &shader_module_name,const ShaderCreateInfo *); - Material * CreateMaterial(const mtl::MaterialCreateInfo *); + Material * CreateMaterial(const AnsiString &mtl_name,const mtl::MaterialCreateInfo *); Material * LoadMaterial(const AnsiString &,mtl::Material2DCreateConfig *); Material * LoadMaterial(const AnsiString &,mtl::Material3DCreateConfig *); @@ -141,7 +141,7 @@ public: //Material return CreateMaterialInstance(mtl,vil_cfg,data,sizeof(T)); } - MaterialInstance * CreateMaterialInstance(const mtl::MaterialCreateInfo *,const VILConfig *vil_cfg=nullptr); + MaterialInstance * CreateMaterialInstance(const AnsiString &mtl_name,const mtl::MaterialCreateInfo *,const VILConfig *vil_cfg=nullptr); Renderable * CreateRenderable(Primitive *r,MaterialInstance *mi,Pipeline *p); Renderable * CreateRenderable(PrimitiveCreater *pc,MaterialInstance *mi,Pipeline *p); diff --git a/inc/hgl/graph/mtl/Material2DCreateConfig.h b/inc/hgl/graph/mtl/Material2DCreateConfig.h index 022799ac..67c563d8 100644 --- a/inc/hgl/graph/mtl/Material2DCreateConfig.h +++ b/inc/hgl/graph/mtl/Material2DCreateConfig.h @@ -16,14 +16,17 @@ struct Material2DCreateConfig:public MaterialCreateConfig,public Comparator { - AnsiString mtl_name; ///<材质名称 - bool material_instance; ///<是否包含材质实例 RenderTargetOutputConfig rt_output; ///<渲染目标输出配置 @@ -26,10 +24,8 @@ struct MaterialCreateConfig:public Comparator public: - MaterialCreateConfig(const AnsiString &name,const PrimitiveType &p) + MaterialCreateConfig(const PrimitiveType &p) { - mtl_name=name; - material_instance=false; hgl_zero(rt_output); diff --git a/inc/hgl/graph/mtl/StdMaterial.h b/inc/hgl/graph/mtl/StdMaterial.h index 9e25f979..32c146aa 100644 --- a/inc/hgl/graph/mtl/StdMaterial.h +++ b/inc/hgl/graph/mtl/StdMaterial.h @@ -23,9 +23,11 @@ namespace hgl::graph namespace mtl { - namespace func + enum class WithLocalToWorld:uint8 { - }//namespace func + Without=0, + With + }; class MaterialCreateInfo; struct MaterialCreateConfig; diff --git a/inc/hgl/shadergen/MaterialCreateInfo.h b/inc/hgl/shadergen/MaterialCreateInfo.h index e8cb50fb..cbc21d5f 100644 --- a/inc/hgl/shadergen/MaterialCreateInfo.h +++ b/inc/hgl/shadergen/MaterialCreateInfo.h @@ -45,8 +45,6 @@ namespace hgl::graph public: - const AnsiString &GetName ()const{return config->mtl_name;} - const uint32 GetShaderStage ()const{return config->shader_stage_flag_bit;} bool hasShader (const VkShaderStageFlagBits ss)const{return config->shader_stage_flag_bit&ss;} diff --git a/src/SceneGraph/Vulkan/VKRenderResource.cpp b/src/SceneGraph/Vulkan/VKRenderResource.cpp index 7edcc238..36f84dce 100644 --- a/src/SceneGraph/Vulkan/VKRenderResource.cpp +++ b/src/SceneGraph/Vulkan/VKRenderResource.cpp @@ -70,9 +70,9 @@ MaterialInstance *RenderResource::CreateMaterialInstance(Material *mtl,const VIL return mi; } -MaterialInstance *RenderResource::CreateMaterialInstance(const mtl::MaterialCreateInfo *mci,const VILConfig *vil_cfg) +MaterialInstance *RenderResource::CreateMaterialInstance(const AnsiString &mtl_name,const mtl::MaterialCreateInfo *mci,const VILConfig *vil_cfg) { - Material *mtl=this->CreateMaterial(mci); + Material *mtl=this->CreateMaterial(mtl_name,mci); if(!mtl) return(nullptr); diff --git a/src/SceneGraph/Vulkan/VKRenderResourceMaterial.cpp b/src/SceneGraph/Vulkan/VKRenderResourceMaterial.cpp index 222ca2d9..d106ab79 100644 --- a/src/SceneGraph/Vulkan/VKRenderResourceMaterial.cpp +++ b/src/SceneGraph/Vulkan/VKRenderResourceMaterial.cpp @@ -74,13 +74,11 @@ const ShaderModule *RenderResource::CreateShaderModule(const AnsiString &sm_name return sm; } -Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci) +Material *RenderResource::CreateMaterial(const AnsiString &mtl_name,const mtl::MaterialCreateInfo *mci) { if(!mci) return(nullptr); - const AnsiString &mtl_name=mci->GetName(); - { Material *mtl; @@ -130,7 +128,7 @@ Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci) const auto &mdi=mci->GetMDI(); if(mdi.GetCount()>0) - mtl->desc_manager=new MaterialDescriptorManager(mci->GetName(),mdi.Get()); + mtl->desc_manager=new MaterialDescriptorManager(mtl_name,mdi.Get()); } mtl->pipeline_layout_data=device->CreatePipelineLayoutData(mtl->desc_manager); @@ -191,13 +189,15 @@ Material *RenderResource::LoadMaterial(const AnsiString &mtl_name,mtl::Material2 { AutoDelete mci=mtl::LoadMaterialFromFile(device->GetDevAttr(),mtl_name,cfg); - return this->CreateMaterial(mci); + //这里直接用这个mtl_name有些不太对,因为同一个材质,也有可能因为不同的cfg会有不同的版本,所以这里不能直接使用mtl_name.目前只是做一个暂时方案 + return this->CreateMaterial(mtl_name,mci); } Material *RenderResource::LoadMaterial(const AnsiString &mtl_name,mtl::Material3DCreateConfig *cfg) { AutoDelete mci=mtl::LoadMaterialFromFile(device->GetDevAttr(),mtl_name,cfg); - return this->CreateMaterial(mci); + //这里直接用这个mtl_name有些不太对,因为同一个材质,也有可能因为不同的cfg会有不同的版本,所以这里不能直接使用mtl_name.目前只是做一个暂时方案 + return this->CreateMaterial(mtl_name,mci); } VK_NAMESPACE_END diff --git a/src/ShaderGen/2d/Std2DMaterial.cpp b/src/ShaderGen/2d/Std2DMaterial.cpp index d25db4d3..9d0c54f3 100644 --- a/src/ShaderGen/2d/Std2DMaterial.cpp +++ b/src/ShaderGen/2d/Std2DMaterial.cpp @@ -14,7 +14,8 @@ bool Std2DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc) const bool is_rect=(cfg->prim==PrimitiveType::SolidRectangles||cfg->prim==PrimitiveType::WireRectangles); - if(cfg->local_to_world||cfg->material_instance) + if(cfg->local_to_world + ||cfg->material_instance) { mci->AddStruct(SBS_LocalToWorld);