diff --git a/ShareX.ScreenCaptureLib/Shapes/Effect/BaseEffectShape.cs b/ShareX.ScreenCaptureLib/Shapes/Effect/BaseEffectShape.cs index f997ec1ae..4e566a2c8 100644 --- a/ShareX.ScreenCaptureLib/Shapes/Effect/BaseEffectShape.cs +++ b/ShareX.ScreenCaptureLib/Shapes/Effect/BaseEffectShape.cs @@ -35,11 +35,21 @@ public abstract class BaseEffectShape : BaseShape public abstract string OverlayText { get; } - private bool isEffectCaching; + private bool isEffectCaching, cachePending; private Image cachedEffect; public abstract void ApplyEffect(Bitmap bmp); + public override void OnUpdate() + { + base.OnUpdate(); + + if (cachePending) + { + CacheEffect(); + } + } + public virtual void OnDraw(Graphics g) { if (isEffectCaching) @@ -130,7 +140,9 @@ private void CacheEffect() { if (!isEffectCaching) { - ClearCache(true); + cachePending = false; + + ClearCache(); if (IsInsideCanvas) { @@ -146,11 +158,15 @@ private void CacheEffect() }); } } + else + { + cachePending = true; + } } - private void ClearCache(bool forceClear = false) + private void ClearCache() { - if ((forceClear || !isEffectCaching) && cachedEffect != null) + if (!isEffectCaching && cachedEffect != null) { cachedEffect.Dispose(); cachedEffect = null;