#include"Std2DMaterial.h" #include STD_MTL_NAMESPACE_BEGIN namespace { constexpr const char vs_main[]=R"( void main() { Output.Color=Color; gl_Position=GetPosition2D(); })"; //一个shader中输出的所有数据,会被定义在一个名为Output的结构中。所以编写时要用Output.XXXX来使用。 //而同时,这个结构在下一个Shader中以Input名称出现,使用时以Input.XXX的形式使用。 constexpr const char fs_main[]=R"( void main() { Color=Input.Color; })"; class MaterialVertexColor2D:public Std2DMaterial { public: using Std2DMaterial::Std2DMaterial; ~MaterialVertexColor2D()=default; bool CreateVertexShader(ShaderCreateInfoVertex *vsc) override { if(!Std2DMaterial::CreateVertexShader(vsc)) return(false); vsc->AddInput(VAT_VEC4,VAN::Color); vsc->AddOutput(VAT_VEC4,"Color"); vsc->AddFunction(vs_main); return(true); } bool CreateFragmentShader(ShaderCreateInfoFragment *fsc) override { fsc->AddOutput(VAT_VEC4,"Color"); //Fragment shader的输出等于最终的RT了,所以这个名称其实随便起。 fsc->AddFunction(fs_main); return(true); } };//class MaterialVertexColor2D:public Std2DMaterial }//namespace MaterialCreateInfo *CreateVertexColor2D(const Material2DConfig *cfg) { MaterialVertexColor2D mvc2d(cfg); return mvc2d.Create(); } STD_MTL_NAMESPACE_END