Std2DMaterialLoader start ok,,but don't support Sampler2D in material file...
This commit is contained in:
parent
03750832c8
commit
7ca81f38e8
2
CMCore
2
CMCore
@ -1 +1 @@
|
|||||||
Subproject commit 70b6567029f3278692ca41c99bdf422af3365b8b
|
Subproject commit d5264e1da655390bdef2ce99550024c69b7c4cb1
|
@ -37,13 +37,13 @@ namespace hgl
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
virtual bool BeginCustomShader(){return true;/*some work before creating shader*/};
|
virtual bool BeginCustomShader(){return true;/*some work before create shader*/};
|
||||||
|
|
||||||
virtual bool CustomVertexShader(ShaderCreateInfoVertex *)=0;
|
virtual bool CustomVertexShader(ShaderCreateInfoVertex *)=0;
|
||||||
virtual bool CustomGeometryShader(ShaderCreateInfoGeometry *){return false;}
|
virtual bool CustomGeometryShader(ShaderCreateInfoGeometry *){return false;}
|
||||||
virtual bool CustomFragmentShader(ShaderCreateInfoFragment *)=0;
|
virtual bool CustomFragmentShader(ShaderCreateInfoFragment *)=0;
|
||||||
|
|
||||||
virtual bool EndCustomShader(){return true;/*some work after creating shader*/};
|
virtual bool EndCustomShader(){return true;/*some work after create shader*/};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -88,6 +88,10 @@ public:
|
|||||||
void SetLocalToWorld(UBODescriptor *);
|
void SetLocalToWorld(UBODescriptor *);
|
||||||
|
|
||||||
void SetMain(const AnsiString &str){main_function=str;}
|
void SetMain(const AnsiString &str){main_function=str;}
|
||||||
|
void SetMain(const char *str,const int len)
|
||||||
|
{
|
||||||
|
main_function.SetString(str,len);
|
||||||
|
}
|
||||||
|
|
||||||
const AnsiString &GetOutputStruct()const{return output_struct;}
|
const AnsiString &GetOutputStruct()const{return output_struct;}
|
||||||
const AnsiString &GetShaderSource()const{return final_shader;}
|
const AnsiString &GetShaderSource()const{return final_shader;}
|
||||||
|
@ -1,24 +1,122 @@
|
|||||||
#include"Std2DMaterial.h"
|
#include"Std2DMaterial.h"
|
||||||
|
#include"MaterialFileData.h"
|
||||||
|
#include<hgl/shadergen/MaterialCreateInfo.h>
|
||||||
|
|
||||||
STD_MTL_NAMESPACE_BEGIN
|
STD_MTL_NAMESPACE_BEGIN
|
||||||
class Std2DMaterialLoader:public Std2DMaterial
|
|
||||||
|
namespace
|
||||||
{
|
{
|
||||||
public:
|
class Std2DMaterialLoader:public Std2DMaterial
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
|
||||||
using Std2DMaterial::Std2DMaterial;
|
material_file::MaterialFileData *mfd;
|
||||||
~Std2DMaterialLoader()=default;
|
|
||||||
|
|
||||||
bool CustomVertexShader(ShaderCreateInfoVertex *vsc) override{return true;}
|
public:
|
||||||
bool CustomGeometryShader(ShaderCreateInfoGeometry *) override{return true;}
|
|
||||||
bool CustomFragmentShader(ShaderCreateInfoFragment *) override{return true;}
|
|
||||||
|
|
||||||
bool EndCustomShader() override{return true;}
|
Std2DMaterialLoader(material_file::MaterialFileData *data,const Material2DCreateConfig *cfg):Std2DMaterial(cfg)
|
||||||
};//class Std2DMaterialLoader:public Std2DMaterial
|
{
|
||||||
|
mfd=data;
|
||||||
|
}
|
||||||
|
|
||||||
|
~Std2DMaterialLoader()
|
||||||
|
{
|
||||||
|
delete mfd;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BeginCustomShader() override
|
||||||
|
{
|
||||||
|
if(!Std2DMaterial::BeginCustomShader())
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(mfd->mi.mi_bytes>0)
|
||||||
|
{
|
||||||
|
mci->SetMaterialInstance( mfd->mi.code,
|
||||||
|
mfd->mi.mi_bytes,
|
||||||
|
mfd->mi.shader_stage_flag_bits);
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CustomVertexShader(ShaderCreateInfoVertex *vsc) override
|
||||||
|
{
|
||||||
|
if(!Std2DMaterial::CustomVertexShader(vsc))
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(mfd->vi.GetCount()>0)
|
||||||
|
{
|
||||||
|
for(auto &ua:mfd->vi)
|
||||||
|
vsc->AddInput(ua.vat,ua.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
material_file::ShaderData *sd=mfd->shader[VK_SHADER_STAGE_VERTEX_BIT];
|
||||||
|
|
||||||
|
if(!sd)
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
for(auto &ua:sd->output)
|
||||||
|
vsc->AddOutput(ua.vat,ua.name);
|
||||||
|
|
||||||
|
vsc->SetMain(sd->code,sd->code_length); //这里会产生复制这个string,但我不希望产生这个。未来想办法改进
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CustomGeometryShader(ShaderCreateInfoGeometry *gsc) override
|
||||||
|
{
|
||||||
|
if(!Std2DMaterial::CustomGeometryShader(gsc))
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
material_file::GeometryShaderData *sd=(material_file::GeometryShaderData *)(mfd->shader[VK_SHADER_STAGE_GEOMETRY_BIT]);
|
||||||
|
|
||||||
|
if(!sd)
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
gsc->SetGeom(sd->input_prim,sd->output_prim,sd->max_vertices);
|
||||||
|
|
||||||
|
for(auto &ua:sd->output)
|
||||||
|
gsc->AddOutput(ua.vat,ua.name);
|
||||||
|
|
||||||
|
gsc->SetMain(sd->code,sd->code_length); //这里会产生复制这个string,但我不希望产生这个。未来想办法改进
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CustomFragmentShader(ShaderCreateInfoFragment *fsc) override
|
||||||
|
{
|
||||||
|
if(!Std2DMaterial::CustomFragmentShader(fsc))
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
material_file::ShaderData *sd=mfd->shader[VK_SHADER_STAGE_FRAGMENT_BIT];
|
||||||
|
|
||||||
|
if(!sd)
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
for(auto &ua:sd->output)
|
||||||
|
fsc->AddOutput(ua.vat,ua.name);
|
||||||
|
|
||||||
|
fsc->SetMain(sd->code,sd->code_length); //这里会产生复制这个string,但我不希望产生这个。未来想办法改进
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool EndCustomShader() override{return true;}
|
||||||
|
};//class Std2DMaterialLoader:public Std2DMaterial
|
||||||
|
}//namespace
|
||||||
|
|
||||||
|
material_file::MaterialFileData *LoadMaterialDataFromFile(const AnsiString &mtl_filename);
|
||||||
|
|
||||||
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,const Material2DCreateConfig *cfg)
|
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,const Material2DCreateConfig *cfg)
|
||||||
{
|
{
|
||||||
Std2DMaterialLoader *mtl=new Std2DMaterialLoader(cfg);
|
material_file::MaterialFileData *mfd=LoadMaterialDataFromFile(name);
|
||||||
|
|
||||||
return nullptr;
|
if(!mfd)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
Std2DMaterialLoader mtl(mfd,cfg);
|
||||||
|
|
||||||
|
return mtl.Create();
|
||||||
}
|
}
|
||||||
STD_MTL_NAMESPACE_END
|
STD_MTL_NAMESPACE_END
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include<hgl/type/Map.h>
|
#include<hgl/type/Map.h>
|
||||||
#include<hgl/graph/VKShaderStage.h>
|
#include<hgl/graph/VKShaderStage.h>
|
||||||
|
|
||||||
@ -61,6 +61,10 @@ namespace material_file
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
//不管是文本版还是二进制版
|
||||||
|
//其中的代码段数据解析后都是放的指针,并无复制出来。
|
||||||
|
//所以这里需要保存原始的文件数据
|
||||||
|
|
||||||
char * data=nullptr;
|
char * data=nullptr;
|
||||||
int data_length=0;
|
int data_length=0;
|
||||||
|
|
||||||
@ -85,5 +89,4 @@ namespace material_file
|
|||||||
delete[] data;
|
delete[] data;
|
||||||
}
|
}
|
||||||
};//struct MaterialFileData
|
};//struct MaterialFileData
|
||||||
|
}//namespace material_file
|
||||||
}//namespace material_file
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include<hgl/graph/mtl/MaterialConfig.h>
|
#include<hgl/graph/mtl/MaterialConfig.h>
|
||||||
#include<hgl/graph/mtl/Material2DCreateConfig.h>
|
#include<hgl/graph/mtl/Material2DCreateConfig.h>
|
||||||
#include<hgl/graph/mtl/Material3DCreateConfig.h>
|
#include<hgl/graph/mtl/Material3DCreateConfig.h>
|
||||||
#include<hgl/graph/VKShaderStage.h>
|
#include<hgl/graph/VKShaderStage.h>
|
||||||
@ -33,8 +33,8 @@ namespace
|
|||||||
|
|
||||||
struct MaterialFileBlockInfo
|
struct MaterialFileBlockInfo
|
||||||
{
|
{
|
||||||
const char *name;
|
char *name;
|
||||||
const int len;
|
int len;
|
||||||
MaterialFileBlock state;
|
MaterialFileBlock state;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ namespace
|
|||||||
state=MaterialFileBlock::None;
|
state=MaterialFileBlock::None;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OnLine(const char *text,const int len) override
|
bool OnLine(char *text,const int len) override
|
||||||
{
|
{
|
||||||
if(!text||!*text||len<=0)
|
if(!text||!*text||len<=0)
|
||||||
return(false);
|
return(false);
|
||||||
@ -82,12 +82,12 @@ namespace
|
|||||||
|
|
||||||
struct CodeParse:public MaterialFileParse
|
struct CodeParse:public MaterialFileParse
|
||||||
{
|
{
|
||||||
const char *start =nullptr;
|
char *start =nullptr;
|
||||||
const char *end =nullptr;
|
char *end =nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
bool OnLine(const char *text,const int len) override
|
bool OnLine(char *text,const int len) override
|
||||||
{
|
{
|
||||||
if(!text||!*text||len<=0)
|
if(!text||!*text||len<=0)
|
||||||
return(false);
|
return(false);
|
||||||
@ -103,6 +103,7 @@ namespace
|
|||||||
|
|
||||||
if(*text=='}')
|
if(*text=='}')
|
||||||
{
|
{
|
||||||
|
*text=0;
|
||||||
end=text;
|
end=text;
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
@ -139,7 +140,7 @@ namespace
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OnLine(const char *text,const int len) override
|
bool OnLine(char *text,const int len) override
|
||||||
{
|
{
|
||||||
if(!text||!*text||len<=0)
|
if(!text||!*text||len<=0)
|
||||||
return(false);
|
return(false);
|
||||||
@ -223,7 +224,7 @@ namespace
|
|||||||
vi_list=ual;
|
vi_list=ual;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OnLine(const char *text,const int len) override
|
bool OnLine(char *text,const int len) override
|
||||||
{
|
{
|
||||||
if(!text||!*text||len<=0)
|
if(!text||!*text||len<=0)
|
||||||
return(false);
|
return(false);
|
||||||
@ -253,7 +254,7 @@ namespace
|
|||||||
shader_data=sd;
|
shader_data=sd;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OnLine(const char *text,const int len) override
|
bool OnLine(char *text,const int len) override
|
||||||
{
|
{
|
||||||
if(!text||!*text||len<=0)
|
if(!text||!*text||len<=0)
|
||||||
return(false);
|
return(false);
|
||||||
@ -310,7 +311,7 @@ namespace
|
|||||||
gsd=sd;
|
gsd=sd;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OnLine(const char *text,const int len) override
|
bool OnLine(char *text,const int len) override
|
||||||
{
|
{
|
||||||
if(!text||!*text||len<=0)
|
if(!text||!*text||len<=0)
|
||||||
return(false);
|
return(false);
|
||||||
@ -394,7 +395,7 @@ namespace
|
|||||||
SAFE_CLEAR(parse)
|
SAFE_CLEAR(parse)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OnLine(const char *text,const int len) override
|
bool OnLine(char *text,const int len) override
|
||||||
{
|
{
|
||||||
if(!text||!*text||len<=0)
|
if(!text||!*text||len<=0)
|
||||||
return(false);
|
return(false);
|
||||||
@ -462,22 +463,22 @@ namespace
|
|||||||
};
|
};
|
||||||
}//namespace MaterialFile
|
}//namespace MaterialFile
|
||||||
|
|
||||||
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &mtl_filename)
|
MaterialFileData *LoadMaterialDataFromFile(const AnsiString &mtl_filename)
|
||||||
{
|
{
|
||||||
const OSString mtl_osfn=ToOSString(mtl_filename+".mtl");
|
const OSString mtl_osfn=ToOSString(mtl_filename+".mtl");
|
||||||
|
|
||||||
const OSString mtl_os_filename=filesystem::MergeFilename(OS_TEXT("ShaderLibrary"),mtl_osfn);
|
const OSString mtl_os_filename=filesystem::MergeFilename(OS_TEXT("ShaderLibrary"),mtl_osfn);
|
||||||
|
|
||||||
if(!filesystem::FileExist(mtl_os_filename))
|
if(!filesystem::FileExist(mtl_os_filename))
|
||||||
return(nullptr);
|
return nullptr;
|
||||||
|
|
||||||
char *data;
|
char *data; //未来二进制版本的材质文件,也是使用LoadFileToMemory加载。这里为了统一,所以文本也这么操作。
|
||||||
|
|
||||||
int size=filesystem::LoadFileToMemory(mtl_os_filename,(void **)&data,true);
|
int size=filesystem::LoadFileToMemory(mtl_os_filename,(void **)&data,true);
|
||||||
|
|
||||||
MaterialFileData mfd(data,size);
|
MaterialFileData *mfd=new MaterialFileData(data,size);
|
||||||
|
|
||||||
MaterialTextParse mtp(&mfd);
|
MaterialTextParse mtp(mfd);
|
||||||
|
|
||||||
io::TextInputStream tis(data,size);
|
io::TextInputStream tis(data,size);
|
||||||
|
|
||||||
@ -486,15 +487,6 @@ MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &mtl_filename)
|
|||||||
if(!tis.Run())
|
if(!tis.Run())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
return(nullptr);
|
return mfd;
|
||||||
}
|
}
|
||||||
|
|
||||||
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,const MaterialCreateConfig *cfg)
|
|
||||||
{
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
//MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,const Material3DCreateConfig *cfg)
|
|
||||||
//{
|
|
||||||
//}
|
|
||||||
STD_MTL_NAMESPACE_END
|
STD_MTL_NAMESPACE_END
|
||||||
|
Loading…
x
Reference in New Issue
Block a user