added MaterialFileLoader.cpp
This commit is contained in:
parent
5e795c4a7f
commit
b262fdc645
2
CMCore
2
CMCore
@ -1 +1 @@
|
||||
Subproject commit f9007c5564568b2596ddfb8643905e9df28cf7b8
|
||||
Subproject commit 252f2f6a1f4546d84e105e9f76462576e1b26a25
|
@ -38,5 +38,7 @@ MaterialCreateInfo *CreatePureColor2D(const Material2DCreateConfig *);
|
||||
MaterialCreateInfo *CreatePureTexture2D(const Material2DCreateConfig *);
|
||||
MaterialCreateInfo *CreateRectTexture2D(Material2DCreateConfig *);
|
||||
MaterialCreateInfo *CreateRectTexture2DArray(Material2DCreateConfig *);
|
||||
|
||||
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &,const Material2DCreateConfig *);
|
||||
STD_MTL_NAMESPACE_END
|
||||
#endif//HGL_GRAPH_MTL_2D_CREATE_CONFIG_INCLUDE
|
||||
|
@ -69,7 +69,8 @@ SET(STD_MTL_3D_SOURCE_FILES ${STD_MTL_HEADER_PATH}/Material3DCreateConfig.h
|
||||
SET(STD_MTL_SOURCE ${STD_MTL_HEADER_PATH}/MaterialConfig.h
|
||||
${STD_MTL_HEADER_PATH}/StdMaterial.h
|
||||
${STD_MTL_HEADER_PATH}/ShaderBuffer.h
|
||||
StandardMaterial.cpp)
|
||||
StandardMaterial.cpp
|
||||
MaterialFileLoader.cpp)
|
||||
|
||||
SOURCE_GROUP("Standard Material" FILES ${STD_MTL_SOURCE})
|
||||
SOURCE_GROUP("Standard Material\\2D" FILES ${STD_MTL_2D_SOURCE_FILES})
|
||||
|
186
src/ShaderGen/MaterialFileLoader.cpp
Normal file
186
src/ShaderGen/MaterialFileLoader.cpp
Normal file
@ -0,0 +1,186 @@
|
||||
#include<hgl/graph/mtl/MaterialConfig.h>
|
||||
#include<hgl/graph/mtl/Material2DCreateConfig.h>
|
||||
#include<hgl/graph/mtl/Material3DCreateConfig.h>
|
||||
|
||||
#include<hgl/io/TextInputStream.h>
|
||||
#include<hgl/io/FileInputStream.h>
|
||||
#include<hgl/filesystem/FileSystem.h>
|
||||
|
||||
STD_MTL_NAMESPACE_BEGIN
|
||||
namespace
|
||||
{
|
||||
using MaterialFileParse=io::TextInputStream::ParseCallback<char>;
|
||||
|
||||
enum class MaterialFileState
|
||||
{
|
||||
None,
|
||||
|
||||
Material,
|
||||
MaterialInstance,
|
||||
MaterialInstanceCode,
|
||||
|
||||
Vertex,
|
||||
VertexInput,
|
||||
VertexOutput,
|
||||
VertexCode,
|
||||
|
||||
Geometry,
|
||||
GeometryInput,
|
||||
GeometryOutput,
|
||||
GeometryCode,
|
||||
|
||||
Fragment,
|
||||
FragmentInput,
|
||||
FragmentOutput,
|
||||
FragmentCode,
|
||||
|
||||
ENUM_CLASS_RANGE(None,FragmentCode)
|
||||
};//enum class State
|
||||
|
||||
constexpr const char *StateNameList[]=
|
||||
{
|
||||
"Material",
|
||||
"MaterialInstance",
|
||||
"Vertex",
|
||||
"Geometry",
|
||||
"Fragment",
|
||||
};
|
||||
|
||||
const MaterialFileState GetMaterialFileState(const char *str)
|
||||
{
|
||||
for(int i=0;i<int(MaterialFileState::END_RANGE);i++)
|
||||
if(hgl::stricmp(str,StateNameList[i])==0)
|
||||
return MaterialFileState(i);
|
||||
|
||||
return MaterialFileState::None;
|
||||
}
|
||||
|
||||
struct MaterialStateParse:public MaterialFileParse
|
||||
{
|
||||
MaterialFileState state;
|
||||
|
||||
MaterialStateParse()
|
||||
{
|
||||
state=MaterialFileState::None;
|
||||
}
|
||||
|
||||
bool OnLine(const char *text,const int len) override
|
||||
{
|
||||
if(!text||!*text||len<=0)
|
||||
return(false);
|
||||
|
||||
return(true);
|
||||
}
|
||||
};//struct MaterialStateParse
|
||||
|
||||
struct MaterialInstanceStateParse:public MaterialFileParse
|
||||
{
|
||||
bool code =false;
|
||||
char * code_sp =nullptr;
|
||||
char * code_ep =nullptr;
|
||||
int brace_count =0;
|
||||
|
||||
bool OnLine(const char *text,const int len) override
|
||||
{
|
||||
if(!text||!*text||len<=0)
|
||||
return(false);
|
||||
|
||||
if(code)
|
||||
{
|
||||
}
|
||||
|
||||
return(true);
|
||||
}
|
||||
};
|
||||
|
||||
struct MaterialTextParse:public MaterialFileParse
|
||||
{
|
||||
MaterialFileState state;
|
||||
|
||||
MaterialFileParse *parse;
|
||||
|
||||
public:
|
||||
|
||||
MaterialTextParse()
|
||||
{
|
||||
state=MaterialFileState::None;
|
||||
parse=nullptr;
|
||||
}
|
||||
|
||||
~MaterialTextParse()
|
||||
{
|
||||
SAFE_CLEAR(parse)
|
||||
}
|
||||
|
||||
bool OnLine(const char *text,const int len) override
|
||||
{
|
||||
if(!text||!*text||len<=0)
|
||||
return(false);
|
||||
|
||||
if(*text=='#')
|
||||
{
|
||||
SAFE_CLEAR(parse)
|
||||
|
||||
state=GetMaterialFileState(text+1);
|
||||
|
||||
switch(state)
|
||||
{
|
||||
case MaterialFileState::Material: parse=new MaterialStateParse;break;
|
||||
case MaterialFileState::MaterialInstance: parse=new MaterialInstanceStateParse;break;
|
||||
case MaterialFileState::Vertex: parse=new VertexStateParse;break;
|
||||
case MaterialFileState::Geometry: parse=new GeometryStateParse;break;
|
||||
case MaterialFileState::Fragment: parse=new FragmentStateParse;break;
|
||||
|
||||
default: state=MaterialFileState::None;return(false);
|
||||
}
|
||||
|
||||
return(true);
|
||||
}
|
||||
|
||||
if(parse)
|
||||
parse->OnLine(text,len);
|
||||
|
||||
return(true);
|
||||
}
|
||||
};
|
||||
}//namespace MaterialFile
|
||||
|
||||
bool LoadMaterialFromFile(const AnsiString &mtl_filename)
|
||||
{
|
||||
const OSString mtl_osfn=ToOSString(mtl_filename+".mtl");
|
||||
|
||||
const OSString mtl_os_filename=filesystem::MergeFilename(OS_TEXT("ShaderLibrary"),mtl_osfn);
|
||||
|
||||
if(!filesystem::FileExist(mtl_os_filename))
|
||||
return(false);
|
||||
|
||||
io::OpenFileInputStream fis(mtl_os_filename);
|
||||
|
||||
if(!fis)
|
||||
return(false);
|
||||
|
||||
MaterialTextParse mtp;
|
||||
|
||||
io::TextInputStream tis(fis,0);
|
||||
|
||||
tis.SetParseCallback(&mtp);
|
||||
|
||||
return tis.Run();
|
||||
}
|
||||
|
||||
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,const MaterialCreateConfig *cfg)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
//MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,const Material2DCreateConfig *cfg)
|
||||
//{
|
||||
// Std2DMaterial *mtl=new Std2DMaterial(cfg);
|
||||
//
|
||||
//
|
||||
//}
|
||||
//
|
||||
//MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,const Material3DCreateConfig *cfg)
|
||||
//{
|
||||
//}
|
||||
STD_MTL_NAMESPACE_END
|
Loading…
x
Reference in New Issue
Block a user