From bead8128b784e7f01aad73c4b29eef980b9f8f6c Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Tue, 10 Oct 2023 10:57:29 +0800 Subject: [PATCH] test ok that LoadPureColor2D material from file. --- CMCore | 2 +- ShaderLibrary/Std2D/PureColor2D.mtl | 2 +- ShaderLibrary/Std3D/VertexLum3D.mtl | 2 +- example/Basic/auto_merge_material_instance.cpp | 8 +++++++- inc/hgl/graph/mtl/Material2DCreateConfig.h | 13 ++++++++++++- src/ShaderGen/2d/Std2DMaterialLoader.cpp | 4 ---- src/ShaderGen/MaterialFileLoader.cpp | 16 ++++++++-------- 7 files changed, 30 insertions(+), 17 deletions(-) diff --git a/CMCore b/CMCore index d5264e1d..15b86eaf 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit d5264e1da655390bdef2ce99550024c69b7c4cb1 +Subproject commit 15b86eaf3bf661cff9f21d9b53a334a7b5e358e4 diff --git a/ShaderLibrary/Std2D/PureColor2D.mtl b/ShaderLibrary/Std2D/PureColor2D.mtl index f72aa779..4aae593f 100644 --- a/ShaderLibrary/Std2D/PureColor2D.mtl +++ b/ShaderLibrary/Std2D/PureColor2D.mtl @@ -7,7 +7,7 @@ Length 16 Stage Fragment Code { - vec4 Color + vec4 Color; } #Vertex diff --git a/ShaderLibrary/Std3D/VertexLum3D.mtl b/ShaderLibrary/Std3D/VertexLum3D.mtl index 1e131bd1..14a2e5f6 100644 --- a/ShaderLibrary/Std3D/VertexLum3D.mtl +++ b/ShaderLibrary/Std3D/VertexLum3D.mtl @@ -7,7 +7,7 @@ Length 16 Stage Vertex Code { - vec4 Color + vec4 Color; } #VertexInput diff --git a/example/Basic/auto_merge_material_instance.cpp b/example/Basic/auto_merge_material_instance.cpp index 05aa212a..41b088d8 100644 --- a/example/Basic/auto_merge_material_instance.cpp +++ b/example/Basic/auto_merge_material_instance.cpp @@ -25,6 +25,8 @@ constexpr float position_data[VERTEX_COUNT*2]= constexpr uint DRAW_OBJECT_COUNT=12; +#define USE_MATERIAL_FILE true //是否使用材质文件 + class TestApp:public VulkanApplicationFramework { private: @@ -52,7 +54,11 @@ private: cfg.coordinate_system=CoordinateSystem2D::NDC; cfg.local_to_world=true; - AutoDelete mci=mtl::CreatePureColor2D(&cfg); + #ifndef USE_MATERIAL_FILE + AutoDelete mci=mtl::CreatePureColor2D(&cfg); //走程序内置材质创建函数 + #else + AutoDelete mci=LoadMaterialFromFile("Std2D/PureColor2D",&cfg); //走材质文件加载 + #endif//USE_MATERIAL_FILE material=db->CreateMaterial(mci); diff --git a/inc/hgl/graph/mtl/Material2DCreateConfig.h b/inc/hgl/graph/mtl/Material2DCreateConfig.h index 3a08bbb4..eaca538c 100644 --- a/inc/hgl/graph/mtl/Material2DCreateConfig.h +++ b/inc/hgl/graph/mtl/Material2DCreateConfig.h @@ -39,6 +39,17 @@ MaterialCreateInfo *CreatePureTexture2D(const Material2DCreateConfig *); MaterialCreateInfo *CreateRectTexture2D(Material2DCreateConfig *); MaterialCreateInfo *CreateRectTexture2DArray(Material2DCreateConfig *); -MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &,const Material2DCreateConfig *); +// 为什么有了LoadMaterialFromFile,还需要保留以上Create系列函数? + +// 1.LoadMaterialFromFile载的材质,是从文件中加载的。但我们要考虑文件损坏不能加载的情况。 +// 2.从文件加载材质过于复杂,而且不利于调试。所以我们需要保留Create系列函数,以便于调试以及测试一些新的情况。同时让开发人员知道材质具体是如何创建的。 + +/** + * 从文件加载材质 + * @param mtl_name 材质名称 + * @param cfg 材质创建参数 + * @return 材质创建信息 + */ +MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &mtl_name,const Material2DCreateConfig *cfg); ///<从文件加载材质 STD_MTL_NAMESPACE_END #endif//HGL_GRAPH_MTL_2D_CREATE_CONFIG_INCLUDE diff --git a/src/ShaderGen/2d/Std2DMaterialLoader.cpp b/src/ShaderGen/2d/Std2DMaterialLoader.cpp index f968f463..35d3065a 100644 --- a/src/ShaderGen/2d/Std2DMaterialLoader.cpp +++ b/src/ShaderGen/2d/Std2DMaterialLoader.cpp @@ -34,7 +34,6 @@ namespace mci->SetMaterialInstance( mfd->mi.code, mfd->mi.mi_bytes, mfd->mi.shader_stage_flag_bits); - return(false); } return true; @@ -86,9 +85,6 @@ namespace bool CustomFragmentShader(ShaderCreateInfoFragment *fsc) override { - if(!Std2DMaterial::CustomFragmentShader(fsc)) - return(false); - material_file::ShaderData *sd=mfd->shader[VK_SHADER_STAGE_FRAGMENT_BIT]; if(!sd) diff --git a/src/ShaderGen/MaterialFileLoader.cpp b/src/ShaderGen/MaterialFileLoader.cpp index f53665ba..c7307856 100644 --- a/src/ShaderGen/MaterialFileLoader.cpp +++ b/src/ShaderGen/MaterialFileLoader.cpp @@ -14,7 +14,7 @@ namespace { using namespace material_file; - using MaterialFileParse=io::TextInputStream::ParseCallback; + using TextParse=io::TextInputStream::ParseCallback; enum class MaterialFileBlock { @@ -62,7 +62,7 @@ namespace return MaterialFileBlock::None; } - struct MaterialFileBlockParse:public MaterialFileParse + struct MaterialFileBlockParse:public TextParse { MaterialFileBlock state; @@ -80,7 +80,7 @@ namespace } };//struct MaterialFileBlockParse - struct CodeParse:public MaterialFileParse + struct CodeParse:public TextParse { char *start =nullptr; char *end =nullptr; @@ -112,7 +112,7 @@ namespace } };//struct CodeParse - struct MaterialInstanceStateParse:public MaterialFileParse + struct MaterialInstanceStateParse:public TextParse { bool code =false; CodeParse code_parse; @@ -213,7 +213,7 @@ namespace return(true); } - struct VertexInputBlockParse:public MaterialFileParse + struct VertexInputBlockParse:public TextParse { List *vi_list=nullptr; @@ -238,7 +238,7 @@ namespace } };//struct VertexInputBlockParse - struct ShaderBlockParse:public MaterialFileParse + struct ShaderBlockParse:public TextParse { ShaderData * shader_data=nullptr; @@ -372,11 +372,11 @@ namespace };//struct GeometryShaderBlockParse - struct MaterialTextParse:public MaterialFileParse + struct MaterialTextParse:public TextParse { MaterialFileBlock state; - MaterialFileParse *parse; + TextParse *parse; MaterialFileData *mfd;