optmized layout of shadergen
This commit is contained in:
parent
6b8e76b75f
commit
eed16928e9
@ -4,7 +4,7 @@ using namespace hgl;
|
|||||||
using namespace hgl::graph;
|
using namespace hgl::graph;
|
||||||
using namespace hgl::shadergen;
|
using namespace hgl::shadergen;
|
||||||
|
|
||||||
bool PureColorMaterial()
|
bool PureColor2DMaterial()
|
||||||
{
|
{
|
||||||
MaterialCreater mc(1); //一个新材质,1个RT输出,默认使用Vertex/Fragment shader
|
MaterialCreater mc(1); //一个新材质,1个RT输出,默认使用Vertex/Fragment shader
|
||||||
|
|
||||||
@ -16,25 +16,15 @@ bool PureColorMaterial()
|
|||||||
/*
|
/*
|
||||||
layout(location=?) in vec3 Position; //位置属性
|
layout(location=?) in vec3 Position; //位置属性
|
||||||
*/
|
*/
|
||||||
vsc->AddInput("vec3","Position"); //添加一个vec3类型的position属性输入
|
vsc->AddInput("vec2","Position"); //添加一个vec3类型的position属性输入
|
||||||
|
|
||||||
//以下代码会被展开为
|
vsc->SetShaderCodes(R"(
|
||||||
/*
|
void main()
|
||||||
vec3 GetPosition(void)
|
{
|
||||||
{
|
gl_Position=vec4(Position,0,1);
|
||||||
return Position;
|
})");
|
||||||
}
|
|
||||||
*/
|
|
||||||
vsc->AddFunction("vec3","GetPosition","void","return Position;");
|
|
||||||
|
|
||||||
//使用缺省main函数,会产生如下代码
|
vsc->CompileToSPV();
|
||||||
/*
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
gl_Position=GetPosition();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
vsc->UseDefaultMain();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//添加一个名称为ColorMaterial的UBO定义,其内部有一个vec4 color的属性
|
//添加一个名称为ColorMaterial的UBO定义,其内部有一个vec4 color的属性
|
||||||
@ -60,24 +50,17 @@ bool PureColorMaterial()
|
|||||||
{
|
{
|
||||||
ShaderCreaterFragment *fsc=mc.GetFS(); //获取fragment shader creater
|
ShaderCreaterFragment *fsc=mc.GetFS(); //获取fragment shader creater
|
||||||
|
|
||||||
//以下代码会被合并成 vec4 GetColor(/**/){return mtl.color;}
|
|
||||||
fsc->AddFunction("vec4","GetColor","/**/","return mtl.color;");
|
|
||||||
|
|
||||||
//以下代码会被展开为
|
//以下代码会被展开为
|
||||||
/*
|
/*
|
||||||
layout(location=?) out vec4 Color; //颜色输出
|
layout(location=?) out vec4 Color; //颜色输出
|
||||||
*/
|
*/
|
||||||
fsc->AddOutput("vec4","Color"); //添加一个vec4类型的color属性输出
|
fsc->AddOutput("vec4","Color"); //添加一个vec4类型的color属性输出
|
||||||
//同时,如果拥有多个输出,会直接根据输出的数量,DefaultMain会根据对应的Output名称,要求GetXXX()函数
|
|
||||||
|
|
||||||
//使用缺省main函数,会产生如下代码
|
fsc->SetShaderCodes(R"(
|
||||||
/*
|
void main()
|
||||||
void main()
|
{
|
||||||
{
|
Color=mtl.color;
|
||||||
Color=GetColor();
|
})");
|
||||||
}
|
|
||||||
*/
|
|
||||||
fsc->UseDefaultMain();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return(false);
|
return(false);
|
||||||
|
@ -10,7 +10,7 @@ class ShaderCreater
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
AnsiString main_codes;
|
AnsiString shader_codes;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -27,13 +27,15 @@ public:
|
|||||||
|
|
||||||
virtual ~ShaderCreater()=default;
|
virtual ~ShaderCreater()=default;
|
||||||
|
|
||||||
int AddInput(const VAT &type,const AnsiString &name);
|
|
||||||
int AddInput(const AnsiString &type,const AnsiString &name);
|
|
||||||
|
|
||||||
int AddOutput(const VAT &type,const AnsiString &name);
|
int AddOutput(const VAT &type,const AnsiString &name);
|
||||||
int AddOutput(const AnsiString &type,const AnsiString &name);
|
int AddOutput(const AnsiString &type,const AnsiString &name);
|
||||||
|
|
||||||
bool AddFunction(const AnsiString &return_type,const AnsiString &func_name,const AnsiString ¶m_list,const AnsiString &codes);
|
void SetShaderCodes(const AnsiString &str)
|
||||||
|
{
|
||||||
|
shader_codes;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CompileToSPV();
|
||||||
};//class ShaderCreater
|
};//class ShaderCreater
|
||||||
SHADERGEN_NAMESPACE_END
|
SHADERGEN_NAMESPACE_END
|
||||||
#endif//HGL_SHADER_CREATER_INCLUDE
|
#endif//HGL_SHADER_CREATER_INCLUDE
|
@ -3,6 +3,11 @@
|
|||||||
#include<hgl/shadergen/ShaderCreater.h>
|
#include<hgl/shadergen/ShaderCreater.h>
|
||||||
|
|
||||||
SHADERGEN_NAMESPACE_BEGIN
|
SHADERGEN_NAMESPACE_BEGIN
|
||||||
|
enum class MaterialType
|
||||||
|
{
|
||||||
|
Color, ///<曾伎第窐
|
||||||
|
};
|
||||||
|
|
||||||
class ShaderCreaterFragment:public ShaderCreater
|
class ShaderCreaterFragment:public ShaderCreater
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -10,6 +10,8 @@ public:
|
|||||||
ShaderCreaterVertex():ShaderCreater(VK_SHADER_STAGE_VERTEX_BIT){}
|
ShaderCreaterVertex():ShaderCreater(VK_SHADER_STAGE_VERTEX_BIT){}
|
||||||
~ShaderCreaterVertex()=default;
|
~ShaderCreaterVertex()=default;
|
||||||
|
|
||||||
void UseDefaultMain();
|
int AddInput(const VAT &type,const AnsiString &name);
|
||||||
|
int AddInput(const AnsiString &type,const AnsiString &name);
|
||||||
|
|
||||||
};
|
};
|
||||||
SHADERGEN_NAMESPACE_END
|
SHADERGEN_NAMESPACE_END
|
@ -1,28 +1,6 @@
|
|||||||
#include<hgl/shadergen/ShaderCreater.h>
|
#include<hgl/shadergen/ShaderCreater.h>
|
||||||
|
|
||||||
SHADERGEN_NAMESPACE_BEGIN
|
SHADERGEN_NAMESPACE_BEGIN
|
||||||
int ShaderCreater::AddInput(const VAT &type,const AnsiString &name)
|
|
||||||
{
|
|
||||||
ShaderStage *ss=new ShaderStage;
|
|
||||||
|
|
||||||
hgl::strcpy(ss->name,sizeof(ss->name),name.c_str());
|
|
||||||
|
|
||||||
ss->basetype=(uint8) type.basetype;
|
|
||||||
ss->vec_size= type.vec_size;
|
|
||||||
|
|
||||||
return sdm.AddInput(ss);
|
|
||||||
}
|
|
||||||
|
|
||||||
int ShaderCreater::AddInput(const AnsiString &type,const AnsiString &name)
|
|
||||||
{
|
|
||||||
VAT vat;
|
|
||||||
|
|
||||||
if(!ParseVertexAttribType(&vat,type))
|
|
||||||
return(-2);
|
|
||||||
|
|
||||||
return AddInput(vat,name);
|
|
||||||
}
|
|
||||||
|
|
||||||
int ShaderCreater::AddOutput(const VAT &type,const AnsiString &name)
|
int ShaderCreater::AddOutput(const VAT &type,const AnsiString &name)
|
||||||
{
|
{
|
||||||
ShaderStage *ss=new ShaderStage;
|
ShaderStage *ss=new ShaderStage;
|
||||||
@ -45,8 +23,7 @@ int ShaderCreater::AddOutput(const AnsiString &type,const AnsiString &name)
|
|||||||
return AddOutput(vat,name);
|
return AddOutput(vat,name);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ShaderCreater::AddFunction(const AnsiString &return_type,const AnsiString &func_name,const AnsiString ¶m_list,const AnsiString &codes)
|
bool ShaderCreater::CompileToSPV()
|
||||||
{
|
{
|
||||||
//return sdm.AddFunction(return_type,func_name,param_list,code);
|
|
||||||
}
|
}
|
||||||
SHADERGEN_NAMESPACE_END
|
SHADERGEN_NAMESPACE_END
|
@ -1,13 +1,25 @@
|
|||||||
#include<hgl/shadergen/ShaderCreaterVertex.h>
|
#include<hgl/shadergen/ShaderCreaterVertex.h>
|
||||||
|
|
||||||
SHADERGEN_NAMESPACE_BEGIN
|
SHADERGEN_NAMESPACE_BEGIN
|
||||||
|
int ShaderCreaterVertex::AddInput(const VAT &type,const AnsiString &name)
|
||||||
|
{
|
||||||
|
ShaderStage *ss=new ShaderStage;
|
||||||
|
|
||||||
void ShaderCreaterVertex::UseDefaultMain()
|
hgl::strcpy(ss->name,sizeof(ss->name),name.c_str());
|
||||||
|
|
||||||
|
ss->basetype=(uint8) type.basetype;
|
||||||
|
ss->vec_size= type.vec_size;
|
||||||
|
|
||||||
|
return sdm.AddInput(ss);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ShaderCreaterVertex::AddInput(const AnsiString &type,const AnsiString &name)
|
||||||
{
|
{
|
||||||
main_codes=R"(
|
VAT vat;
|
||||||
void main()
|
|
||||||
{
|
if(!ParseVertexAttribType(&vat,type))
|
||||||
gl_Position=GetPosition();
|
return(-2);
|
||||||
})";
|
|
||||||
|
return AddInput(vat,name);
|
||||||
}
|
}
|
||||||
SHADERGEN_NAMESPACE_END
|
SHADERGEN_NAMESPACE_END
|
Loading…
x
Reference in New Issue
Block a user