added few codes about MaterialInstance

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-05-31 20:14:45 +08:00
parent a2c3438c58
commit e2dd652c3a
5 changed files with 13 additions and 5 deletions

@ -1 +1 @@
Subproject commit 8fd176b8fa8ca605a4b80e766c06c48ce5b1aa85
Subproject commit bd4984ee4272d358967b15cd6179249bba60f882

View File

@ -21,6 +21,7 @@ protected:
AnsiString mi_codes; ///<MaterialInstance代码
uint32_t mi_length; ///<MaterialInstance数据长度
uint32_t mi_shader_stage; ///<MaterialInstance着色器阶段
ShaderCreateInfoMap shader_map; ///<着色器列表

View File

@ -16,6 +16,7 @@ MaterialCreateInfo::MaterialCreateInfo(const MaterialConfig *mc)
if(hasFragment ())shader_map.Add(frag=new ShaderCreateInfoFragment(&mdi));else frag=nullptr;
mi_length=0;
mi_shader_stage=0;
}
bool MaterialCreateInfo::AddStruct(const AnsiString &struct_name,const AnsiString &codes)
@ -159,6 +160,8 @@ bool MaterialCreateInfo::SetMaterialInstance(const AnsiString &mi_glsl_codes,con
vert->AddMaterialInstanceID(); //增加一个材质实例ID
mi_shader_stage=shader_stage;
return(true);
}
@ -176,6 +179,13 @@ bool MaterialCreateInfo::CreateShader()
if(!shader_map.GetValue(i,sc))
return(false);
if(mi_shader_stage)
if(sc->GetShaderStage()<mi_shader_stage)
{
sc->AddOutput(VAT_UINT,VAN::MaterialInstanceID,Interpolation::Flat);
sc->AddFunction(mtl::func::HandoverMI);
}
sc->CreateShader(last);
last=sc;

View File

@ -34,8 +34,6 @@ int ShaderCreateInfoVertex::AddInput(const AnsiString &type,const AnsiString &na
void ShaderCreateInfoVertex::AddMaterialInstanceID()
{
AddInput(VAT_UINT, VAN::MaterialInstanceID,VK_VERTEX_INPUT_RATE_INSTANCE,VertexInputGroup::MaterialInstanceID);
AddFunction(mtl::func::HandoverMI);
}
void ShaderCreateInfoVertex::AddJoint()

View File

@ -22,8 +22,7 @@ mat4 GetJointMatrix()
joint.mats[JointID.y]*JointWeight.y+
joint.mats[JointID.z]*JointWeight.z+
joint.mats[JointID.w]*JointWeight.w;
}
)";
})";
constexpr const char HandoverMI[]=R"(
void HandoverMI()