diff --git a/inc/hgl/shadergen/ShaderCreateInfo.h b/inc/hgl/shadergen/ShaderCreateInfo.h index 5b7cdcfa..24483b8c 100644 --- a/inc/hgl/shadergen/ShaderCreateInfo.h +++ b/inc/hgl/shadergen/ShaderCreateInfo.h @@ -3,6 +3,7 @@ #include #include +#include #include namespace hgl{namespace graph @@ -57,8 +58,8 @@ public: ShaderCreateInfo(VkShaderStageFlagBits ss,MaterialDescriptorInfo *m); virtual ~ShaderCreateInfo(); - int AddOutput(const graph::VAT &type,const AnsiString &name); - int AddOutput(const AnsiString &type,const AnsiString &name); + int AddOutput(const graph::VAT &type,const AnsiString &name,Interpolation inter=Interpolation::Smooth); + int AddOutput(const AnsiString &type,const AnsiString &name,Interpolation inter=Interpolation::Smooth); void AddFunction(const AnsiString &str){function_list.Add(str);} diff --git a/src/ShaderGen/ShaderCreateInfo.cpp b/src/ShaderGen/ShaderCreateInfo.cpp index c9edbc8a..947398bc 100644 --- a/src/ShaderGen/ShaderCreateInfo.cpp +++ b/src/ShaderGen/ShaderCreateInfo.cpp @@ -20,19 +20,20 @@ ShaderCreateInfo::~ShaderCreateInfo() delete sdm; } -int ShaderCreateInfo::AddOutput(const VAT &type,const AnsiString &name) +int ShaderCreateInfo::AddOutput(const VAT &type,const AnsiString &name,Interpolation inter) { ShaderAttribute *ss=new ShaderAttribute; hgl::strcpy(ss->name,sizeof(ss->name),name.c_str()); - ss->basetype=(uint8) type.basetype; - ss->vec_size= type.vec_size; + ss->basetype =(uint8)type.basetype; + ss->vec_size = type.vec_size; + ss->interpolation = inter; return sdm->AddOutput(ss); } -int ShaderCreateInfo::AddOutput(const AnsiString &type,const AnsiString &name) +int ShaderCreateInfo::AddOutput(const AnsiString &type,const AnsiString &name,Interpolation inter) { VAT vat; @@ -42,7 +43,7 @@ int ShaderCreateInfo::AddOutput(const AnsiString &type,const AnsiString &name) if(!ParseVertexAttribType(&vat,type)) return -2; - return AddOutput(vat,name); + return AddOutput(vat,name,inter); } bool ShaderCreateInfo::ProcSubpassInput() @@ -109,6 +110,14 @@ bool ShaderCreateInfo::ProcOutput() for(uint i=0;iinterpolation!=Interpolation::Smooth) + { + output_struct+=InterpolationName[size_t(ss->interpolation)]; + + output_struct+=" "; + } + output_struct+=GetShaderAttributeTypename(ss); output_struct+=" "; output_struct+=ss->name;