ULRE/src/ShaderGen/ShaderCreater.cpp

70 lines
1.3 KiB
C++
Raw Normal View History

2023-03-06 14:06:20 +08:00
#include<hgl/shadergen/ShaderCreater.h>
SHADERGEN_NAMESPACE_BEGIN
int ShaderCreater::AddOutput(const VAT &type,const AnsiString &name)
{
ShaderStage *ss=new ShaderStage;
hgl::strcpy(ss->name,sizeof(ss->name),name.c_str());
ss->basetype=(uint8) type.basetype;
ss->vec_size= type.vec_size;
return sdm.AddOutput(ss);
}
int ShaderCreater::AddOutput(const AnsiString &type,const AnsiString &name)
{
VAT vat;
2023-03-08 21:41:57 +08:00
if(name.IsEmpty())
return -1;
2023-03-06 14:06:20 +08:00
if(!ParseVertexAttribType(&vat,type))
2023-03-08 21:41:57 +08:00
return -2;
2023-03-06 14:06:20 +08:00
return AddOutput(vat,name);
}
2023-03-08 21:41:57 +08:00
void ShaderCreater::ProcInput()
{
}
void ShaderCreater::ProcOutput()
{
final_shader+="layout(location=0) out ";
final_shader+=GetShaderStageName(shader_stage);
final_shader+="_Output\n{";
output_struct.Clear();
for(auto *ss:sdm.GetShaderStageIO().output)
{
output_struct+="\t";
output_struct+=GetShaderStageTypeName(ss);
output_struct+=" ";
output_struct+=ss->name;
output_struct+=";\n";
}
final_shader+=output_struct;
final_shader+="}Output;\n\n";
}
bool ShaderCreater::CreateShader(ShaderCreater *last_sc)
{
final_shader="#version 460 core\n";
}
2023-03-06 21:30:32 +08:00
bool ShaderCreater::CompileToSPV()
2023-03-06 14:06:20 +08:00
{
2023-03-08 14:02:51 +08:00
if(shader_codes.IsEmpty())
return(false);
2023-03-06 14:06:20 +08:00
}
2023-03-06 21:30:32 +08:00
SHADERGEN_NAMESPACE_END