diff --git a/Source/Engine/Content/Assets/MaterialInstance.cpp b/Source/Engine/Content/Assets/MaterialInstance.cpp index 9d94aeed4..e1b3383d0 100644 --- a/Source/Engine/Content/Assets/MaterialInstance.cpp +++ b/Source/Engine/Content/Assets/MaterialInstance.cpp @@ -264,6 +264,20 @@ void MaterialInstance::SetBaseMaterial(MaterialBase* baseMaterial) if (baseMaterial == _baseMaterial) return; +#if !BUILD_RELEASE + // Prevent recursion + auto mi = Cast(baseMaterial); + while (mi) + { + if (mi == this) + { + LOG(Error, "Cannot set base material of {0} to {1} because it's recursive.", ToString(), baseMaterial->ToString()); + return; + } + mi = Cast(mi->GetBaseMaterial()); + } +#endif + // Release previous parameters Params.Dispose();