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
Code
{
vec4 Color
vec4 Color;
}
#Vertex

View File

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

View File

@ -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<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);

View File

@ -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

View File

@ -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)

View File

@ -14,7 +14,7 @@ namespace
{
using namespace material_file;
using MaterialFileParse=io::TextInputStream::ParseCallback<char>;
using TextParse=io::TextInputStream::ParseCallback<char>;
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<UniformAttrib> *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;