Browse Source

Don't render scene if busy

flabbet 8 months ago
parent
commit
94e2345767

+ 1 - 1
src/Drawie

@@ -1 +1 @@
-Subproject commit 5a87a6b794d30646bb32674ea702338b7f835d3e
+Subproject commit 715b32d269925f03a02c35be2324b8221916986b

+ 11 - 10
src/PixiEditor.ChangeableDocument/Rendering/DocumentRenderer.cs

@@ -24,6 +24,7 @@ public class DocumentRenderer : IPreviewRenderable
     }
     }
 
 
     private IReadOnlyDocument Document { get; }
     private IReadOnlyDocument Document { get; }
+    public bool IsBusy { get; private set; }
 
 
     public void UpdateChunk(VecI chunkPos, ChunkResolution resolution, KeyFrameTime frameTime)
     public void UpdateChunk(VecI chunkPos, ChunkResolution resolution, KeyFrameTime frameTime)
     {
     {
@@ -42,19 +43,10 @@ public class DocumentRenderer : IPreviewRenderable
         }
         }
     }
     }
 
 
-    private static RectI? TransformClipRect(RectI? globalClippingRect, ChunkResolution resolution, VecI chunkPos)
-    {
-        if (globalClippingRect is not RectI rect)
-            return null;
-
-        double multiplier = resolution.Multiplier();
-        VecI pixelChunkPos = chunkPos * (int)(ChunkyImage.FullChunkSize * multiplier);
-        return (RectI?)rect.Scale(multiplier).Translate(-pixelChunkPos).RoundOutwards();
-    }
-
     public void RenderLayers(DrawingSurface toDrawOn, HashSet<Guid> layersToCombine, int frame,
     public void RenderLayers(DrawingSurface toDrawOn, HashSet<Guid> layersToCombine, int frame,
         ChunkResolution resolution)
         ChunkResolution resolution)
     {
     {
+        IsBusy = true;
         RenderContext context = new(toDrawOn, frame, resolution, Document.Size);
         RenderContext context = new(toDrawOn, frame, resolution, Document.Size);
         context.FullRerender = true;
         context.FullRerender = true;
         IReadOnlyNodeGraph membersOnlyGraph = ConstructMembersOnlyGraph(layersToCombine, Document.NodeGraph);
         IReadOnlyNodeGraph membersOnlyGraph = ConstructMembersOnlyGraph(layersToCombine, Document.NodeGraph);
@@ -65,6 +57,10 @@ public class DocumentRenderer : IPreviewRenderable
         catch (ObjectDisposedException)
         catch (ObjectDisposedException)
         {
         {
         }
         }
+        finally
+        {
+            IsBusy = false;
+        }
     }
     }
 
 
 
 
@@ -76,11 +72,14 @@ public class DocumentRenderer : IPreviewRenderable
         {
         {
             return;
             return;
         }
         }
+        
+        IsBusy = true;
 
 
         RenderContext context = new(renderOn, frameTime, resolution, Document.Size);
         RenderContext context = new(renderOn, frameTime, resolution, Document.Size);
         context.FullRerender = true;
         context.FullRerender = true;
         
         
         node.RenderForOutput(context, renderOn, null);
         node.RenderForOutput(context, renderOn, null);
+        IsBusy = false;
     }
     }
 
 
     public static IReadOnlyNodeGraph ConstructMembersOnlyGraph(IReadOnlyNodeGraph fullGraph)
     public static IReadOnlyNodeGraph ConstructMembersOnlyGraph(IReadOnlyNodeGraph fullGraph)
@@ -135,7 +134,9 @@ public class DocumentRenderer : IPreviewRenderable
 
 
     public void RenderDocument(DrawingSurface toRenderOn, KeyFrameTime frameTime)
     public void RenderDocument(DrawingSurface toRenderOn, KeyFrameTime frameTime)
     {
     {
+        IsBusy = true;
         RenderContext context = new(toRenderOn, frameTime, ChunkResolution.Full, Document.Size) { FullRerender = true };
         RenderContext context = new(toRenderOn, frameTime, ChunkResolution.Full, Document.Size) { FullRerender = true };
         Document.NodeGraph.Execute(context);
         Document.NodeGraph.Execute(context);
+        IsBusy = false;
     }
     }
 }
 }

+ 1 - 1
src/PixiEditor/Models/Rendering/SceneRenderer.cs

@@ -15,7 +15,6 @@ namespace PixiEditor.Models.Rendering;
 
 
 internal class SceneRenderer
 internal class SceneRenderer
 {
 {
-    
     public IReadOnlyDocument Document { get; }
     public IReadOnlyDocument Document { get; }
     public IDocument DocumentViewModel { get; }
     public IDocument DocumentViewModel { get; }
     public bool HighResRendering { get; set; } = true;
     public bool HighResRendering { get; set; } = true;
@@ -28,6 +27,7 @@ internal class SceneRenderer
 
 
     public void RenderScene(DrawingSurface target, ChunkResolution resolution)
     public void RenderScene(DrawingSurface target, ChunkResolution resolution)
     {
     {
+        if(Document.Renderer.IsBusy) return;
         RenderOnionSkin(target, resolution);
         RenderOnionSkin(target, resolution);
         RenderGraph(target, resolution);
         RenderGraph(target, resolution);
     }
     }