78 lines
2.3 KiB
C++
78 lines
2.3 KiB
C++
#include"Std3DMaterial.h"
|
||
#include<hgl/shadergen/MaterialCreateInfo.h>
|
||
|
||
STD_MTL_NAMESPACE_BEGIN
|
||
namespace
|
||
{
|
||
constexpr const char mi_codes[]="vec4 Color;"; //材质实例代码
|
||
constexpr const uint32_t mi_bytes=sizeof(Vector4f); //材质实例数据大小
|
||
|
||
constexpr const char vs_main[]=R"(
|
||
void main()
|
||
{
|
||
MaterialInstance mi=GetMI();
|
||
|
||
Output.Color=Luminance*mi.Color;
|
||
|
||
gl_Position=GetPosition3D();
|
||
})";
|
||
|
||
//一个shader中输出的所有数据,会被定义在一个名为Output的结构中。所以编写时要用Output.XXXX来使用。
|
||
//而同时,这个结构在下一个Shader中以Input名称出现,使用时以Input.XXX的形式使用。
|
||
|
||
constexpr const char fs_main[]=R"(
|
||
void main()
|
||
{
|
||
FragColor=Input.Color;
|
||
})";// ^ ^
|
||
// | |
|
||
// | +--ps:这里的Input.Color就是上一个Shader中的Output.Color
|
||
// +--ps:这里的Color就是最终的RT
|
||
|
||
class MaterialVertexLuminance3D:public Std3DMaterial
|
||
{
|
||
public:
|
||
|
||
using Std3DMaterial::Std3DMaterial;
|
||
~MaterialVertexLuminance3D()=default;
|
||
|
||
bool CustomVertexShader(ShaderCreateInfoVertex *vsc) override
|
||
{
|
||
if(!Std3DMaterial::CustomVertexShader(vsc))
|
||
return(false);
|
||
|
||
vsc->AddInput(VAT_FLOAT,VAN::Luminance);
|
||
|
||
vsc->AddOutput(VAT_VEC4,"Color");
|
||
|
||
vsc->SetMain(vs_main);
|
||
return(true);
|
||
}
|
||
|
||
bool CustomFragmentShader(ShaderCreateInfoFragment *fsc) override
|
||
{
|
||
fsc->AddOutput(VAT_VEC4,"FragColor"); //Fragment shader的输出等于最终的RT了,所以这个名称其实随便起。
|
||
|
||
fsc->SetMain(fs_main);
|
||
return(true);
|
||
}
|
||
|
||
bool EndCustomShader() override
|
||
{
|
||
mci->SetMaterialInstance( mi_codes, //材质实例glsl代码
|
||
mi_bytes, //材质实例数据大小
|
||
VK_SHADER_STAGE_VERTEX_BIT); //只在Vertex Shader中使用材质实例最终数据
|
||
|
||
return(true);
|
||
}
|
||
};//class MaterialVertexLuminance3D:public Std3DMaterial
|
||
}//namespace
|
||
|
||
MaterialCreateInfo *CreateVertexLuminance3D(const Material3DCreateConfig *cfg)
|
||
{
|
||
MaterialVertexLuminance3D mvc3d(cfg);
|
||
|
||
return mvc3d.Create();
|
||
}
|
||
STD_MTL_NAMESPACE_END
|