1
0
Эх сурвалжийг харах

Merge pull request #1202 from AvaloniaUI/fixes/1201-d2d-resize-flicker

Fix flicker on resize under D2D.
Nikita Tsukanov 8 жил өмнө
parent
commit
81a37c87b5

+ 26 - 22
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)