diff --git a/osu.Framework.Tests/Visual/Drawables/TestSceneDrawablePool.cs b/osu.Framework.Tests/Visual/Drawables/TestSceneDrawablePool.cs index 7114d0afce..aeb3b1ccb6 100644 --- a/osu.Framework.Tests/Visual/Drawables/TestSceneDrawablePool.cs +++ b/osu.Framework.Tests/Visual/Drawables/TestSceneDrawablePool.cs @@ -311,6 +311,20 @@ public void TestDrawablePreparedWhenClockRewound() AddAssert("child prepared", () => drawable.PreparedCount == 1); } + [Test] + public void TestUsePoolableDrawableWithProxy() + { + const int pool_size = 1; + + resetWithNewPool(() => new TestPool(TimePerAction, pool_size)); + + AddRepeatStep("get new pooled drawable with proxy", () => + { + var drawable = consumeDrawable(); + Add(drawable.CreateProxy()); + }, 50); + } + protected override void Update() { base.Update(); diff --git a/osu.Framework/Graphics/Drawable_ProxyDrawable.cs b/osu.Framework/Graphics/Drawable_ProxyDrawable.cs index bb8f76aada..bec0a36a52 100644 --- a/osu.Framework/Graphics/Drawable_ProxyDrawable.cs +++ b/osu.Framework/Graphics/Drawable_ProxyDrawable.cs @@ -61,6 +61,12 @@ internal override DrawNode GenerateDrawNodeSubtree(ulong frame, int treeIndex, b public override bool UpdateSubTreeMasking() => true; + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + Original.proxy = null; + } + private class ProxyDrawNode : DrawNode { ///