test ok that LoadPureColor2D material from file.

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-10-10 10:57:29 +08:00
parent 019e9964fa
commit bead8128b7
7 changed files with 30 additions and 17 deletions

2
CMCore

@ -1 +1 @@
Subproject commit d5264e1da655390bdef2ce99550024c69b7c4cb1 Subproject commit 15b86eaf3bf661cff9f21d9b53a334a7b5e358e4

View File

@ -7,7 +7,7 @@ Length 16
Stage Fragment Stage Fragment
Code Code
{ {
vec4 Color vec4 Color;
} }
#Vertex #Vertex

View File

@ -7,7 +7,7 @@ Length 16
Stage Vertex Stage Vertex
Code Code
{ {
vec4 Color vec4 Color;
} }
#VertexInput #VertexInput

View File

@ -25,6 +25,8 @@ constexpr float position_data[VERTEX_COUNT*2]=
constexpr uint DRAW_OBJECT_COUNT=12; constexpr uint DRAW_OBJECT_COUNT=12;
#define USE_MATERIAL_FILE true //是否使用材质文件
class TestApp:public VulkanApplicationFramework class TestApp:public VulkanApplicationFramework
{ {
private: private:
@ -52,7 +54,11 @@ private:
cfg.coordinate_system=CoordinateSystem2D::NDC; cfg.coordinate_system=CoordinateSystem2D::NDC;
cfg.local_to_world=true; cfg.local_to_world=true;
AutoDelete<mtl::MaterialCreateInfo> mci=mtl::CreatePureColor2D(&cfg); #ifndef USE_MATERIAL_FILE
AutoDelete<mtl::MaterialCreateInfo> mci=mtl::CreatePureColor2D(&cfg); //走程序内置材质创建函数
#else
AutoDelete<mtl::MaterialCreateInfo> mci=LoadMaterialFromFile("Std2D/PureColor2D",&cfg); //走材质文件加载
#endif//USE_MATERIAL_FILE
material=db->CreateMaterial(mci); material=db->CreateMaterial(mci);

View File

@ -39,6 +39,17 @@ MaterialCreateInfo *CreatePureTexture2D(const Material2DCreateConfig *);
MaterialCreateInfo *CreateRectTexture2D(Material2DCreateConfig *); MaterialCreateInfo *CreateRectTexture2D(Material2DCreateConfig *);
MaterialCreateInfo *CreateRectTexture2DArray(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 STD_MTL_NAMESPACE_END
#endif//HGL_GRAPH_MTL_2D_CREATE_CONFIG_INCLUDE #endif//HGL_GRAPH_MTL_2D_CREATE_CONFIG_INCLUDE

View File

@ -34,7 +34,6 @@ namespace
mci->SetMaterialInstance( mfd->mi.code, mci->SetMaterialInstance( mfd->mi.code,
mfd->mi.mi_bytes, mfd->mi.mi_bytes,
mfd->mi.shader_stage_flag_bits); mfd->mi.shader_stage_flag_bits);
return(false);
} }
return true; return true;
@ -86,9 +85,6 @@ namespace
bool CustomFragmentShader(ShaderCreateInfoFragment *fsc) override bool CustomFragmentShader(ShaderCreateInfoFragment *fsc) override
{ {
if(!Std2DMaterial::CustomFragmentShader(fsc))
return(false);
material_file::ShaderData *sd=mfd->shader[VK_SHADER_STAGE_FRAGMENT_BIT]; material_file::ShaderData *sd=mfd->shader[VK_SHADER_STAGE_FRAGMENT_BIT];
if(!sd) if(!sd)

View File

@ -14,7 +14,7 @@ namespace
{ {
using namespace material_file; using namespace material_file;
using MaterialFileParse=io::TextInputStream::ParseCallback<char>; using TextParse=io::TextInputStream::ParseCallback<char>;
enum class MaterialFileBlock enum class MaterialFileBlock
{ {
@ -62,7 +62,7 @@ namespace
return MaterialFileBlock::None; return MaterialFileBlock::None;
} }
struct MaterialFileBlockParse:public MaterialFileParse struct MaterialFileBlockParse:public TextParse
{ {
MaterialFileBlock state; MaterialFileBlock state;
@ -80,7 +80,7 @@ namespace
} }
};//struct MaterialFileBlockParse };//struct MaterialFileBlockParse
struct CodeParse:public MaterialFileParse struct CodeParse:public TextParse
{ {
char *start =nullptr; char *start =nullptr;
char *end =nullptr; char *end =nullptr;
@ -112,7 +112,7 @@ namespace
} }
};//struct CodeParse };//struct CodeParse
struct MaterialInstanceStateParse:public MaterialFileParse struct MaterialInstanceStateParse:public TextParse
{ {
bool code =false; bool code =false;
CodeParse code_parse; CodeParse code_parse;
@ -213,7 +213,7 @@ namespace
return(true); return(true);
} }
struct VertexInputBlockParse:public MaterialFileParse struct VertexInputBlockParse:public TextParse
{ {
List<UniformAttrib> *vi_list=nullptr; List<UniformAttrib> *vi_list=nullptr;
@ -238,7 +238,7 @@ namespace
} }
};//struct VertexInputBlockParse };//struct VertexInputBlockParse
struct ShaderBlockParse:public MaterialFileParse struct ShaderBlockParse:public TextParse
{ {
ShaderData * shader_data=nullptr; ShaderData * shader_data=nullptr;
@ -372,11 +372,11 @@ namespace
};//struct GeometryShaderBlockParse };//struct GeometryShaderBlockParse
struct MaterialTextParse:public MaterialFileParse struct MaterialTextParse:public TextParse
{ {
MaterialFileBlock state; MaterialFileBlock state;
MaterialFileParse *parse; TextParse *parse;
MaterialFileData *mfd; MaterialFileData *mfd;