From abe47da717f1269e0d62fa84e0e187a97c7a7fa3 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 7 Oct 2017 19:05:51 +0200 Subject: [PATCH] Fix flicker on resize under D2D. Still getting a "rubber banding" effect that needs to be fixed though. --- .../Rendering/DeferredRenderer.cs | 48 ++++++++++--------- 1 file changed, 26 insertions(+), 22 deletions(-) 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)