127 lines
2.8 KiB
C++
127 lines
2.8 KiB
C++
#include<hgl/shadergen/MaterialCreateInfo.h>
|
||
|
||
using namespace hgl;
|
||
using namespace hgl::graph;
|
||
using namespace hgl::shadergen;
|
||
|
||
bool PureColor2DMaterial()
|
||
{
|
||
MaterialCreateInfo mc("PureColor2D",1,false); //一个新材质,1个RT输出,默认使用Vertex/Fragment shader
|
||
|
||
//vertex部分
|
||
{
|
||
ShaderCreateInfoVertex *vsc=mc.GetVS(); //获取vertex shader creater
|
||
|
||
//以下代码会被展开为
|
||
/*
|
||
layout(location=?) in vec3 Position; //位置属性
|
||
*/
|
||
vsc->AddInput("vec2","Position"); //添加一个vec3类型的position属性输入
|
||
|
||
vsc->SetShaderCodes(R"(
|
||
void main()
|
||
{
|
||
gl_Position=vec4(Position,0,1);
|
||
})");
|
||
}
|
||
|
||
//添加一个名称为ColorMaterial的UBO定义,其内部有一个vec4 color的属性
|
||
//该代码会被展开为
|
||
/*
|
||
struct ColorMaterial
|
||
{
|
||
vec4 color;
|
||
};
|
||
*/
|
||
mc.AddStruct("ColorMaterial","vec4 color;");
|
||
|
||
//添加一个UBO,该代码会被展开为
|
||
/*
|
||
layout(set=?,binding=?) uniform ColorMaterial mtl;
|
||
*/
|
||
mc.AddUBO( VK_SHADER_STAGE_FRAGMENT_BIT, //这个UBO出现在fragment shader
|
||
DescriptorSetType::PerMaterial, //它属于材质合集
|
||
"ColorMaterial", //UBO名称为ColorMaterial
|
||
"mtl"); //UBO变量名称为mtl
|
||
|
||
//fragment部分
|
||
{
|
||
ShaderCreateInfoFragment *fsc=mc.GetFS(); //获取fragment shader creater
|
||
|
||
//以下代码会被展开为
|
||
/*
|
||
layout(location=?) out vec4 Color; //颜色输出
|
||
*/
|
||
fsc->AddOutput("vec4","Color"); //添加一个vec4类型的color属性输出
|
||
|
||
fsc->SetShaderCodes(R"(
|
||
void main()
|
||
{
|
||
Color=mtl.color;
|
||
})");
|
||
}
|
||
|
||
mc.CreateShader();
|
||
|
||
return(true);
|
||
}
|
||
|
||
bool VertexColor2DMaterial()
|
||
{
|
||
MaterialCreateInfo mc("VertexColor2D",1,false);
|
||
|
||
//vertex部分
|
||
{
|
||
ShaderCreateInfoVertex *vsc=mc.GetVS();
|
||
|
||
vsc->AddInput("vec2","Position");
|
||
vsc->AddInput("vec4","Color");
|
||
|
||
vsc->AddOutput("vec4","Color");
|
||
|
||
vsc->SetShaderCodes(R"(
|
||
void main()
|
||
{
|
||
Output.Color=Color;
|
||
|
||
gl_Position=vec4(Position,0,1);
|
||
})");
|
||
}
|
||
|
||
//fragment部分
|
||
{
|
||
ShaderCreateInfoFragment *fsc=mc.GetFS();
|
||
|
||
fsc->AddOutput("vec4","Color");
|
||
|
||
fsc->SetShaderCodes(R"(
|
||
void main()
|
||
{
|
||
Color=Input.Color;
|
||
})");
|
||
}
|
||
|
||
mc.CreateShader();
|
||
|
||
return(true);
|
||
}
|
||
|
||
namespace glsl_compiler
|
||
{
|
||
bool Init();
|
||
void Close();
|
||
}//namespace glsl_compiler
|
||
|
||
int main()
|
||
{
|
||
if(!glsl_compiler::Init())
|
||
return -1;
|
||
|
||
PureColor2DMaterial();
|
||
VertexColor2DMaterial();
|
||
|
||
glsl_compiler::Close();
|
||
|
||
return 0;
|
||
}
|