Sfoglia il codice sorgente

No more forbidden quantum mechanics experiments

also fixed different render result on export
Krzysztof Krysiński 4 mesi fa
parent
commit
7863574d9b

+ 11 - 16
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/FilterNodes/ApplyFilterNode.cs

@@ -35,18 +35,23 @@ public class ApplyFilterNode : RenderNode, IRenderInput
 
         if (!context.ProcessingColorSpace.IsSrgb)
         {
-            var target = Texture.ForProcessing(surface, ColorSpace.CreateSrgb());
+            var intermediate = Texture.ForProcessing(surface, context.ProcessingColorSpace);
 
             int saved = surface.Canvas.Save();
             surface.Canvas.SetMatrix(Matrix3X3.Identity);
 
-            target.DrawingSurface.Canvas.SaveLayer(_paint);
-            Background.Value?.Paint(context, target.DrawingSurface);
-            target.DrawingSurface.Canvas.Restore();
+            Background.Value?.Paint(context, intermediate.DrawingSurface);
 
-            surface.Canvas.DrawSurface(target.DrawingSurface, 0, 0);
+            var srgbSurface = Texture.ForProcessing(intermediate.Size, ColorSpace.CreateSrgb());
+
+            srgbSurface.DrawingSurface.Canvas.SaveLayer(_paint);
+            srgbSurface.DrawingSurface.Canvas.DrawSurface(intermediate.DrawingSurface, 0, 0);
+            srgbSurface.DrawingSurface.Canvas.Restore();
+
+            surface.Canvas.DrawSurface(srgbSurface.DrawingSurface, 0, 0);
             surface.Canvas.RestoreToCount(saved);
-            target.Dispose();
+            intermediate.Dispose();
+            srgbSurface.Dispose();
         }
         else
         {
@@ -61,15 +66,5 @@ public class ApplyFilterNode : RenderNode, IRenderInput
         return PreviewUtils.FindPreviewBounds(Background.Connection, frame, elementToRenderName);
     }
 
-    public override bool RenderPreview(DrawingSurface renderOn, RenderContext context,
-        string elementToRenderName)
-    {
-        int layer = renderOn.Canvas.SaveLayer(_paint);
-        Background.Value?.Paint(context, renderOn);
-        renderOn.Canvas.RestoreToCount(layer);
-
-        return true;
-    }
-
     public override Node CreateCopy() => new ApplyFilterNode();
 }

+ 1 - 1
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/Node.cs

@@ -64,7 +64,7 @@ public abstract class Node : IReadOnlyNode, IDisposable
     {
         if (_isDisposed) throw new ObjectDisposedException("Node was disposed before execution.");
 
-        if (ExecuteOnlyOnCacheChange && !CacheChanged(context))
+        if (!context.FullRerender && ExecuteOnlyOnCacheChange && !CacheChanged(context))
         {
             return;
         }

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

@@ -611,7 +611,7 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
             Surface finalSurface = null;
             DrawingBackendApi.Current.RenderingDispatcher.Invoke(() =>
             {
-                finalSurface = new Surface(renderSize);
+                finalSurface = Surface.ForDisplay(renderSize);
                 finalSurface.DrawingSurface.Canvas.Save();
                 VecD scaling = new VecD(renderSize.X / (double)SizeBindable.X, renderSize.Y / (double)SizeBindable.Y);