diff --git a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs index 64df472e93..efcc555159 100644 --- a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs +++ b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs @@ -289,7 +289,7 @@ namespace Avalonia.Rendering var scene = sceneRef.Item; if (scene.Generation != _lastSceneId) { - context = context ?? CreateDrawingContext(); + EnsureDrawingContext(ref context); Layers.Update(scene, context); @@ -420,7 +420,7 @@ namespace Avalonia.Rendering private void RenderOverlay(Scene scene, ref IDrawingContextImpl parentContent) { - parentContent = parentContent ?? CreateDrawingContext(); + EnsureDrawingContext(ref parentContent); if (DrawDirtyRects) { @@ -450,7 +450,7 @@ namespace Avalonia.Rendering private void RenderComposite(Scene scene, ref IDrawingContextImpl context) { - context = context ?? CreateDrawingContext(); + EnsureDrawingContext(ref context); context.Clear(Colors.Transparent); @@ -493,8 +493,13 @@ namespace Avalonia.Rendering } } - private IDrawingContextImpl CreateDrawingContext() + private void EnsureDrawingContext(ref IDrawingContextImpl context) { + if (context != null) + { + return; + } + if ((RenderTarget as IRenderTargetWithCorruptionInfo)?.IsCorrupted == true) { RenderTarget.Dispose(); @@ -506,7 +511,7 @@ namespace Avalonia.Rendering RenderTarget = ((IRenderRoot)_root).CreateRenderTarget(); } - return RenderTarget.CreateDrawingContext(this); + context = RenderTarget.CreateDrawingContext(this); } private void UpdateScene()