Bläddra i källkod

Improved preview generation for graph view

Krzysztof Krysiński 1 vecka sedan
förälder
incheckning
6da3238abd
1 ändrade filer med 26 tillägg och 0 borttagningar
  1. 26 0
      src/PixiEditor/Models/Rendering/SceneRenderer.cs

+ 26 - 0
src/PixiEditor/Models/Rendering/SceneRenderer.cs

@@ -15,6 +15,7 @@ using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes;
 using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes.Workspace;
 using PixiEditor.Models.Handlers;
 using PixiEditor.Models.Position;
+using PixiEditor.Views.Main.ViewportControls;
 
 namespace PixiEditor.Models.Rendering;
 
@@ -45,6 +46,7 @@ internal class SceneRenderer : IDisposable
     {
         await Dispatcher.UIThread.InvokeAsync(() =>
         {
+            int renderedCount = 0;
             foreach (var viewport in stateViewports)
             {
                 if (viewport.Value.Delayed && !updateDelayed)
@@ -62,10 +64,34 @@ internal class SceneRenderer : IDisposable
 
                 DocumentViewModel.SceneTextures[viewport.Key] = rendered;
                 viewport.Value.InvalidateVisual();
+                renderedCount++;
             }
+
+            if(renderedCount == 0 && previewTextures is { Count: > 0 })
+            {
+                RenderOnlyPreviews(affectedArea, previewTextures);
+            }
+
         }, DispatcherPriority.Background);
     }
 
+    private void RenderOnlyPreviews(AffectedArea affectedArea, Dictionary<Guid, List<PreviewRenderRequest>> previewTextures)
+    {
+        ViewportInfo previewGenerationViewport = new()
+        {
+            RealDimensions = new VecD(1, 1),
+            Transform = Matrix3X3.Identity,
+            Id = Guid.NewGuid(),
+            Resolution = ChunkResolution.Full,
+            Sampling = SamplingOptions.Bilinear,
+            VisibleDocumentRegion = null,
+            RenderOutput = "DEFAULT",
+            Delayed = false
+        };
+        var rendered = RenderScene(previewGenerationViewport, affectedArea, previewTextures);
+        rendered.Dispose();
+    }
+
     public Texture? RenderScene(ViewportInfo viewport, AffectedArea affectedArea,Dictionary<Guid, List<PreviewRenderRequest>>? previewTextures = null)
     {
         /*if (Document.Renderer.IsBusy || DocumentViewModel.Busy ||