MeshComponent增加OverrideMaterial的设计,还未测试。下一步使用Gizmo3DMove来测试override material

This commit is contained in:
2025-07-06 12:09:11 +08:00
parent 2b135b1d24
commit 033820c91d
6 changed files with 69 additions and 14 deletions

View File

@@ -59,6 +59,7 @@ public:
class MeshComponent:public RenderComponent
{
WeakPtr<ComponentData> sm_data;
MaterialInstance* override_material = nullptr; // 新增
public:
@@ -88,6 +89,61 @@ public:
return mcd->mesh;
}
public:
Pipeline *GetPipeline() const
{
Mesh *mesh=GetMesh();
if (!mesh)
return nullptr;
return mesh->GetPipeline();
}
void SetOverrideMaterial (MaterialInstance* mi){override_material=mi;}
MaterialInstance * GetOverrideMaterial ()const{return override_material;}
void ClearOverrideMaterial (){override_material=nullptr;}
MaterialInstance * GetMaterialInstance () const
{
if (override_material)
return override_material;
Mesh *mesh=GetMesh();
if (!mesh)
return nullptr;
return mesh->GetMaterialInstance();
}
Material *GetMaterial() const
{
if (override_material)
return override_material->GetMaterial();
Mesh *mesh=GetMesh();
if (!mesh)
return nullptr;
return mesh->GetMaterial();
}
const bool CanRender() const override
{
if (!sm_data.valid())
return false;
const MeshComponentData *mcd=GetData();
if (!mcd || !mcd->mesh)
return false;
return true;
}
};//class MeshComponent
COMPONENT_NAMESPACE_END