ULRE/src/ShaderGen/ShaderCreateInfoGeometry.cpp

70 lines
1.9 KiB
C++

#include<hgl/shadergen/ShaderCreateInfoGeometry.h>
#include"common/MFCommon.h"
namespace hgl
{
namespace graph
{
bool ShaderCreateInfoGeometry::SetGeom(const Prim &ip,const Prim &op,const uint32_t mv)
{
if(!CheckGeometryShaderIn(ip))return(false);
if(!CheckGeometryShaderOut(op))return(false);
if(mv==0)
return(false);
input_prim=GetPrimName(ip);
output_prim=GetPrimName(op);
max_vertices=mv;
return(true);
}
void ShaderCreateInfoGeometry::AddMaterialInstanceOutput()
{
AddOutput(SVT_UINT,mtl::func::MI_ID_OUTPUT,Interpolation::Flat);
AddFunction(mtl::func::MF_HandoverMI_GS);
}
int ShaderCreateInfoGeometry::AddOutput(SVList &sv_list)
{
int count=0;
for(ShaderVariable &sv:sv_list)
{
sv.interpolation=Interpolation::Smooth;
if(gsdi.AddOutput(sv))
++count;
}
return count;
}
int ShaderCreateInfoGeometry::AddOutput(const SVType &type,const AnsiString &name,Interpolation inter)
{
ShaderVariable sv;
hgl::strcpy(sv.name,sizeof(sv.name),name.c_str());
sv.type=type;
sv.interpolation=inter;
return gsdi.AddOutput(sv);
}
void ShaderCreateInfoGeometry::GetOutputStrcutString(AnsiString &str)
{
gsdi.GetOutput().ToString(str);
}
bool ShaderCreateInfoGeometry::ProcLayout()
{
final_shader+="layout("+input_prim+") in;\n"
"layout("+output_prim+", max_vertices = "+AnsiString::numberOf(max_vertices)+") out;\n";
return(true);
}
}//namespace graph
}//namespace hgl