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代码 AnsiString mi_codes; ///<MaterialInstance代码
uint32_t mi_length; ///<MaterialInstance数据长度 uint32_t mi_length; ///<MaterialInstance数据长度
uint32_t mi_shader_stage; ///<MaterialInstance着色器阶段
ShaderCreateInfoMap shader_map; ///<着色器列表 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; if(hasFragment ())shader_map.Add(frag=new ShaderCreateInfoFragment(&mdi));else frag=nullptr;
mi_length=0; mi_length=0;
mi_shader_stage=0;
} }
bool MaterialCreateInfo::AddStruct(const AnsiString &struct_name,const AnsiString &codes) 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 vert->AddMaterialInstanceID(); //增加一个材质实例ID
mi_shader_stage=shader_stage;
return(true); return(true);
} }
@ -176,6 +179,13 @@ bool MaterialCreateInfo::CreateShader()
if(!shader_map.GetValue(i,sc)) if(!shader_map.GetValue(i,sc))
return(false); 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); sc->CreateShader(last);
last=sc; last=sc;

View File

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

View File

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