ULRE/example/MaterialCreaterTest.cpp

73 lines
2.0 KiB
C++
Raw Normal View History

2023-03-06 14:06:20 +08:00
#include<hgl/shadergen/MaterialCreater.h>
using namespace hgl;
using namespace hgl::graph;
using namespace hgl::shadergen;
2023-03-06 21:30:32 +08:00
bool PureColor2DMaterial()
2023-03-06 14:06:20 +08:00
{
MaterialCreater mc(1); //一个新材质1个RT输出默认使用Vertex/Fragment shader
//vertex部分
{
ShaderCreaterVertex *vsc=mc.GetVS(); //获取vertex shader creater
//以下代码会被展开为
/*
layout(location=?) in vec3 Position; //位置属性
*/
2023-03-06 21:30:32 +08:00
vsc->AddInput("vec2","Position"); //添加一个vec3类型的position属性输入
2023-03-06 14:06:20 +08:00
2023-03-06 21:30:32 +08:00
vsc->SetShaderCodes(R"(
void main()
{
gl_Position=vec4(Position,0,1);
})");
2023-03-06 14:06:20 +08:00
}
//添加一个名称为ColorMaterial的UBO定义,其内部有一个vec4 color的属性
//该代码会被展开为
/*
struct ColorMaterial
{
vec4 color;
};
*/
mc.AddUBOStruct("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部分
{
ShaderCreaterFragment *fsc=mc.GetFS(); //获取fragment shader creater
//以下代码会被展开为
/*
layout(location=?) out vec4 Color; //颜色输出
*/
fsc->AddOutput("vec4","Color"); //添加一个vec4类型的color属性输出
2023-03-06 21:30:32 +08:00
fsc->SetShaderCodes(R"(
void main()
{
Color=mtl.color;
})");
2023-03-06 14:06:20 +08:00
}
2023-03-08 14:02:51 +08:00
mc.CompileShader();
2023-03-06 14:06:20 +08:00
return(false);
}
int MaterialCreaterTest()
{
return 0;
}