use List<const char *> instead of AnsiStringList in ShaderCreateInfo::function_list

This commit is contained in:
hyzboy 2023-10-07 23:35:22 +08:00
parent ece7912f3c
commit 1d866abb48
No known key found for this signature in database
GPG Key ID: 067EE4525D4FB6D3
3 changed files with 13 additions and 9 deletions

View File

@ -34,7 +34,7 @@ protected:
AnsiString mi_codes; AnsiString mi_codes;
AnsiStringList function_list; List<const char *> function_list;
AnsiString main_function; AnsiString main_function;
AnsiString final_shader; AnsiString final_shader;
@ -79,10 +79,12 @@ public:
int AddOutput(const graph::VAT &type,const AnsiString &name,Interpolation inter=Interpolation::Smooth); 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); int AddOutput(const AnsiString &type,const AnsiString &name,Interpolation inter=Interpolation::Smooth);
void AddFunction(const AnsiString &str){function_list.Add(str);} void AddFunction(const char *str){function_list.Add(str);}
void AddFunction(const AnsiString *str){function_list.Add(*str);} void AddFunction(const AnsiString *str){function_list.Add(str->c_str());}
void SetMaterialInstance(UBODescriptor *,const AnsiString &); void SetMaterialInstance(UBODescriptor *,const AnsiString &);
void AddMaterialInstanceOutput();
void SetLocalToWorld(UBODescriptor *); void SetLocalToWorld(UBODescriptor *);
void SetMain(const AnsiString &str){main_function=str;} void SetMain(const AnsiString &str){main_function=str;}

View File

@ -256,7 +256,7 @@ bool MaterialCreateInfo::CreateShader()
if(sc->GetShaderStage()<mi_shader_stage) if(sc->GetShaderStage()<mi_shader_stage)
{ {
sc->AddOutput(VAT_UINT,mtl::func::MaterialInstanceID,Interpolation::Flat); sc->AddMaterialInstanceOutput();
sc->AddFunction(MF_HandoverMI); sc->AddFunction(MF_HandoverMI);
} }

View File

@ -79,7 +79,6 @@ bool ShaderCreateInfo::ProcDefine()
AnsiString m; AnsiString m;
AnsiString v; AnsiString v;
for(uint i=0;i<count;i++) for(uint i=0;i<count;i++)
{ {
m=define_macro_list.GetString(i); m=define_macro_list.GetString(i);
@ -174,6 +173,11 @@ void ShaderCreateInfo::SetMaterialInstance(UBODescriptor *ubo,const AnsiString &
mi_codes=mi; mi_codes=mi;
} }
void ShaderCreateInfo::AddMaterialInstanceOutput()
{
AddOutput(VAT_UINT,mtl::func::MaterialInstanceID,Interpolation::Flat);
}
void ShaderCreateInfo::SetLocalToWorld(UBODescriptor *ubo) void ShaderCreateInfo::SetLocalToWorld(UBODescriptor *ubo)
{ {
sdm->AddUBO(DescriptorSetType::PerFrame,ubo); sdm->AddUBO(DescriptorSetType::PerFrame,ubo);
@ -423,10 +427,8 @@ bool ShaderCreateInfo::CreateShader(ShaderCreateInfo *last_sc)
ProcOutput(); ProcOutput();
for(int i=0;i<function_list.GetCount();i++) for(const char *str:function_list)
{ final_shader+=str;
final_shader+=function_list[i];
}
final_shader+=main_function; final_shader+=main_function;