Browse Source

Filter layers to update chunk

flabbet 10 months ago
parent
commit
54d3fdc5f4

+ 1 - 1
src/PixiEditor.ChangeableDocument/Rendering/DocumentRenderer.cs

@@ -68,7 +68,7 @@ public class DocumentRenderer
         return toDrawOn;
     }*/
     
-    public void RenderChunk(VecI chunkPos, ChunkResolution resolution, KeyFrameTime frameTime, Guid[] membersToUpdate)
+    public void RenderChunk(VecI chunkPos, ChunkResolution resolution, KeyFrameTime frameTime, IReadOnlyCollection<Guid> membersToUpdate)
     {
         try
         {

+ 2 - 2
src/PixiEditor/Models/DocumentModels/ActionAccumulator.cs

@@ -111,13 +111,13 @@ internal class ActionAccumulator
             if (DrawingBackendApi.Current.IsHardwareAccelerated)
             {
                 renderResult.AddRange(canvasUpdater.UpdateGatheredChunksSync(affectedAreas,
-                    undoBoundaryPassed || viewportRefreshRequest));
+                    undoBoundaryPassed || viewportRefreshRequest, document.SelectedMembers)); 
                 renderResult.AddRange(previewUpdater.UpdateGatheredChunksSync(affectedAreas, undoBoundaryPassed));
             }
             else
             {
                 renderResult.AddRange(await canvasUpdater.UpdateGatheredChunks(affectedAreas,
-                    undoBoundaryPassed || viewportRefreshRequest));
+                    undoBoundaryPassed || viewportRefreshRequest, document.SelectedMembers));
                 renderResult.AddRange(await previewUpdater.UpdateGatheredChunks(affectedAreas, undoBoundaryPassed));
             }
 

+ 1 - 0
src/PixiEditor/Models/Handlers/IDocument.cs

@@ -41,6 +41,7 @@ internal interface IDocument : IHandler
     public IDocumentOperations Operations { get; }
     public DocumentRenderer Renderer { get; }
     public ISnappingHandler SnappingHandler { get; }
+    public IReadOnlyCollection<Guid> SelectedMembers { get; }
     public void RemoveSoftSelectedMember(IStructureMemberHandler member);
     public void ClearSoftSelectedMembers();
     public void AddSoftSelectedMember(IStructureMemberHandler member);

+ 11 - 12
src/PixiEditor/Models/Rendering/CanvasUpdater.cs

@@ -71,18 +71,18 @@ internal class CanvasUpdater
     /// Don't call this outside ActionAccumulator
     /// </summary>
     public async Task<List<IRenderInfo>> UpdateGatheredChunks
-        (AffectedAreasGatherer chunkGatherer, bool rerenderDelayed)
+        (AffectedAreasGatherer chunkGatherer, bool rerenderDelayed, IReadOnlyCollection<Guid> membersToRender)
     {
-        return await Task.Run(() => Render(chunkGatherer, rerenderDelayed)).ConfigureAwait(true);
+        return await Task.Run(() => Render(chunkGatherer, rerenderDelayed, membersToRender)).ConfigureAwait(true);
     }
 
     /// <summary>
     /// Don't call this outside ActionAccumulator
     /// </summary>
     public List<IRenderInfo> UpdateGatheredChunksSync
-        (AffectedAreasGatherer chunkGatherer, bool rerenderDelayed)
+        (AffectedAreasGatherer chunkGatherer, bool rerenderDelayed, IReadOnlyCollection<Guid> documentSelectedMembers)
     {
-        return Render(chunkGatherer, rerenderDelayed);
+        return Render(chunkGatherer, rerenderDelayed, documentSelectedMembers);
     }
 
     private Dictionary<ChunkResolution, HashSet<VecI>> FindChunksVisibleOnViewports(bool onDelayed, bool all)
@@ -160,7 +160,8 @@ internal class CanvasUpdater
         }
     }
 
-    private List<IRenderInfo> Render(AffectedAreasGatherer chunkGatherer, bool rerenderDelayed)
+    private List<IRenderInfo> Render(AffectedAreasGatherer chunkGatherer, bool rerenderDelayed,
+        IReadOnlyCollection<Guid> membersToRender)
     {
         Dictionary<ChunkResolution, HashSet<VecI>> chunksToRerender =
             FindGlobalChunksToRerender(chunkGatherer, rerenderDelayed);
@@ -194,12 +195,12 @@ internal class CanvasUpdater
 
         List<IRenderInfo> infos = new();
         UpdateMainImage(chunksToRerender, updatingStoredChunks ? null : chunkGatherer.MainImageArea.GlobalArea.Value,
-            infos);
+            infos, membersToRender);
         return infos;
     }
 
     private void UpdateMainImage(Dictionary<ChunkResolution, HashSet<VecI>> chunksToRerender,
-        RectI? globalClippingRectangle, List<IRenderInfo> infos)
+        RectI? globalClippingRectangle, List<IRenderInfo> infos, IReadOnlyCollection<Guid> membersToRender)
     {
         if (chunksToRerender.Count == 0)
             return;
@@ -214,8 +215,7 @@ internal class CanvasUpdater
             
             foreach (var chunkPos in chunks)
             {
-                RenderChunk(chunkPos, resolution, globalClippingRectangle,
-                    globalScaledClippingRectangle);
+                RenderChunk(chunkPos, resolution, membersToRender);
                 RectI chunkRect = new(chunkPos * chunkSize, new(chunkSize, chunkSize));
                 if (globalScaledClippingRectangle is RectI rect)
                     chunkRect = chunkRect.Intersect(rect);
@@ -328,9 +328,8 @@ internal class CanvasUpdater
         }
     }
 
-    private void RenderChunk(VecI chunkPos, ChunkResolution resolution,
-        RectI? globalClippingRectangle, RectI? globalScaledClippingRectangle)
+    private void RenderChunk(VecI chunkPos, ChunkResolution resolution, IReadOnlyCollection<Guid> membersToRender)
     {
-        doc.Renderer.RenderChunk(chunkPos, resolution, doc.AnimationHandler.ActiveFrameTime, );
+        doc.Renderer.RenderChunk(chunkPos, resolution, doc.AnimationHandler.ActiveFrameTime, membersToRender);
     }
 }

+ 1 - 0
src/PixiEditor/ViewModels/Document/DocumentViewModel.cs

@@ -202,6 +202,7 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
     public ObservableRangeCollection<PaletteColor> Palette { get; set; } = new();
     public SnappingViewModel SnappingViewModel { get; }
     ISnappingHandler IDocument.SnappingHandler => SnappingViewModel;
+    public IReadOnlyCollection<Guid> SelectedMembers => GetSelectedMembers().AsReadOnly();
     public DocumentTransformViewModel TransformViewModel { get; }
     public ReferenceLayerViewModel ReferenceLayerViewModel { get; }
     public LineToolOverlayViewModel LineToolOverlayViewModel { get; }