diff --git a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs index 81a2998fd2..5434a35464 100644 --- a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs +++ b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs @@ -185,36 +185,40 @@ namespace Avalonia.Rendering try { - using (var context = _renderTarget.CreateDrawingContext(this)) + if (scene != null && scene.Size != Size.Empty) { - if (scene != null && scene.Size != Size.Empty) + IDrawingContextImpl context = null; + + if (scene.Generation != _lastSceneId) { - if (scene.Generation != _lastSceneId) - { - _layers.Update(scene, context); + context = _renderTarget.CreateDrawingContext(this); + _layers.Update(scene, context); - RenderToLayers(scene); + RenderToLayers(scene); - if (DebugFramesPath != null) - { - SaveDebugFrames(scene.Generation); - } + if (DebugFramesPath != null) + { + SaveDebugFrames(scene.Generation); + } - _lastSceneId = scene.Generation; + _lastSceneId = scene.Generation; - composite = true; - } + composite = true; + } - if (renderOverlay) - { - RenderOverlay(scene, context); - RenderComposite(scene, context); - } - else if (composite) - { - RenderComposite(scene, context); - } + if (renderOverlay) + { + context = context ?? _renderTarget.CreateDrawingContext(this); + RenderOverlay(scene, context); + RenderComposite(scene, context); + } + else if (composite) + { + context = context ?? _renderTarget.CreateDrawingContext(this); + RenderComposite(scene, context); } + + context?.Dispose(); } } catch (RenderTargetCorruptedException ex)