ULRE/example/MaterialCreaterTest.cpp

92 lines
2.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include<hgl/shadergen/MaterialCreater.h>
using namespace hgl;
using namespace hgl::graph;
using namespace hgl::shadergen;
bool PureColorMaterial()
{
MaterialCreater mc(1); //一个新材质1个RT输出默认使用Vertex/Fragment shader
//vertex部分
{
ShaderCreaterVertex *vsc=mc.GetVS(); //获取vertex shader creater
//以下代码会被展开为
/*
layout(location=?) in vec3 Position; //位置属性
*/
vsc->AddInput("vec3","Position"); //添加一个vec3类型的position属性输入
//以下代码会被展开为
/*
vec3 GetPosition(void)
{
return Position;
}
*/
vsc->AddFunction("vec3","GetPosition","void","return Position;");
//使用缺省main函数会产生如下代码
/*
void main()
{
gl_Position=GetPosition();
}
*/
vsc->UseDefaultMain();
}
//添加一个名称为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
//以下代码会被合并成 vec4 GetColor(/**/){return mtl.color;}
fsc->AddFunction("vec4","GetColor","/**/","return mtl.color;");
//以下代码会被展开为
/*
layout(location=?) out vec4 Color; //颜色输出
*/
fsc->AddOutput("vec4","Color"); //添加一个vec4类型的color属性输出
//同时如果拥有多个输出会直接根据输出的数量DefaultMain会根据对应的Output名称要求GetXXX()函数
//使用缺省main函数会产生如下代码
/*
void main()
{
Color=GetColor();
}
*/
fsc->UseDefaultMain();
}
return(false);
}
int MaterialCreaterTest()
{
return 0;
}