added main_function value and SetMain function at ShaderCreateInfo class.

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-05-31 20:14:13 +08:00
parent 5521c53c94
commit a2c3438c58
4 changed files with 17 additions and 6 deletions

View File

@ -28,6 +28,7 @@ protected:
AnsiString output_struct; AnsiString output_struct;
AnsiStringList function_list; AnsiStringList function_list;
AnsiString main_function;
AnsiString final_shader; AnsiString final_shader;
@ -67,6 +68,8 @@ public:
void SetMaterialInstance(UBODescriptor *); void SetMaterialInstance(UBODescriptor *);
void SetMain(const AnsiString &str){main_function=str;}
const AnsiString &GetOutputStruct()const{return output_struct;} const AnsiString &GetOutputStruct()const{return output_struct;}
const AnsiString &GetShaderSource()const{return final_shader;} const AnsiString &GetShaderSource()const{return final_shader;}

View File

@ -44,7 +44,7 @@ void main()
if(!Std2DMaterial::CreateVertexShader(vsc)) if(!Std2DMaterial::CreateVertexShader(vsc))
return(false); return(false);
vsc->AddFunction(vs_main); vsc->SetMain(vs_main);
return(true); return(true);
} }
@ -52,7 +52,7 @@ void main()
{ {
fsc->AddOutput(VAT_VEC4,"Color"); //Fragment shader的输出等于最终的RT了所以这个名称其实随便起。 fsc->AddOutput(VAT_VEC4,"Color"); //Fragment shader的输出等于最终的RT了所以这个名称其实随便起。
fsc->AddFunction(fs_main); fsc->SetMain(fs_main);
return(true); return(true);
} }
};//class MaterialPureColor2D:public Std2DMaterial };//class MaterialPureColor2D:public Std2DMaterial

View File

@ -40,7 +40,7 @@ void main()
vsc->AddOutput(VAT_VEC4,"Color"); vsc->AddOutput(VAT_VEC4,"Color");
vsc->AddFunction(vs_main); vsc->SetMain(vs_main);
return(true); return(true);
} }
@ -48,7 +48,7 @@ void main()
{ {
fsc->AddOutput(VAT_VEC4,"Color"); //Fragment shader的输出等于最终的RT了所以这个名称其实随便起。 fsc->AddOutput(VAT_VEC4,"Color"); //Fragment shader的输出等于最终的RT了所以这个名称其实随便起。
fsc->AddFunction(fs_main); fsc->SetMain(fs_main);
return(true); return(true);
} }
};//class MaterialVertexColor2D:public Std2DMaterial };//class MaterialVertexColor2D:public Std2DMaterial

View File

@ -98,7 +98,7 @@ bool ShaderCreateInfo::ProcInput(ShaderCreateInfo *last_sc)
final_shader+="layout(location=0) in "; final_shader+="layout(location=0) in ";
final_shader+=last_output; final_shader+=last_output;
final_shader+="Input;\n\n"; final_shader+="Input;\n";
return(true); return(true);
} }
@ -111,6 +111,8 @@ bool ShaderCreateInfo::ProcOutput()
if(ssd.count<=0)return(true); if(ssd.count<=0)return(true);
output_struct="\n";
output_struct=GetShaderStageName(shader_stage); output_struct=GetShaderStageName(shader_stage);
output_struct+="_Output\n{\n"; output_struct+="_Output\n{\n";
@ -139,7 +141,7 @@ bool ShaderCreateInfo::ProcOutput()
final_shader+="layout(location=0) out "; final_shader+="layout(location=0) out ";
final_shader+=output_struct; final_shader+=output_struct;
final_shader+="Output;\n"; final_shader+="Output;";
return(true); return(true);
} }
@ -268,6 +270,9 @@ bool ShaderCreateInfo::ProcSampler()
bool ShaderCreateInfo::CreateShader(ShaderCreateInfo *last_sc) bool ShaderCreateInfo::CreateShader(ShaderCreateInfo *last_sc)
{ {
if(main_function.IsEmpty())
return(false);
final_shader="#version 460 core\n"; final_shader="#version 460 core\n";
if(!ProcSubpassInput()) if(!ProcSubpassInput())
@ -294,6 +299,9 @@ bool ShaderCreateInfo::CreateShader(ShaderCreateInfo *last_sc)
final_shader+=function_list[i]; final_shader+=function_list[i];
} }
final_shader+="\n";
final_shader+=main_function;
#ifdef _DEBUG #ifdef _DEBUG
LOG_INFO(AnsiString(GetShaderStageName(shader_stage))+" shader: \n"+final_shader); LOG_INFO(AnsiString(GetShaderStageName(shader_stage))+" shader: \n"+final_shader);