Browse Source

Render to intermediate texture wip

flabbet 10 months ago
parent
commit
77899f6e0f

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

@@ -43,7 +43,10 @@ public class CreateImageNode : Node
         
         int saved = surface.DrawingSurface.Canvas.Save();
 
-        Content.Value?.Paint(context, surface.DrawingSurface);
+        RenderContext ctx = new RenderContext(surface.DrawingSurface, context.FrameTime, context.ChunkResolution,
+            context.DocumentSize);
+        
+        Content.Value?.Paint(ctx, surface.DrawingSurface);
 
         surface.DrawingSurface.Canvas.RestoreToCount(saved);
         Output.Value = surface;

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

@@ -233,7 +233,7 @@ public class ImageLayerNode : LayerNode, IReadOnlyImageNode
 
         var img = GetLayerImageAtFrame(frameTime.Frame);
 
-        RenderChunkyImageChunk(chunkPos, resolution, img, ref fullResrenderedSurface);
+        RenderChunkyImageChunk(chunkPos, resolution, img, 85, ref fullResrenderedSurface);
         renderedSurfaceFrame = frameTime.Frame;
     }
 

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

@@ -29,6 +29,7 @@ public class OutputNode : Node, IRenderInput, IPreviewRenderable
     protected override void OnExecute(RenderContext context)
     {
         lastDocumentSize = context.DocumentSize;
+        
         int saved = context.RenderSurface.Canvas.Save();
         Input.Value?.Paint(context, context.RenderSurface);
         

+ 6 - 9
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/StructureNode.cs

@@ -171,10 +171,11 @@ public abstract class StructureNode : RenderNode, IReadOnlyStructureNode, IRende
 
     public virtual void RenderChunk(VecI chunkPos, ChunkResolution resolution, KeyFrameTime frameTime)
     {
-        RenderChunkyImageChunk(chunkPos, resolution, EmbeddedMask, ref renderedMask);
+        RenderChunkyImageChunk(chunkPos, resolution, EmbeddedMask, 55, ref renderedMask);
     }
 
     protected void RenderChunkyImageChunk(VecI chunkPos, ChunkResolution resolution, ChunkyImage img,
+        int textureId,
         ref Texture? renderSurface)
     {
         if (img is null)
@@ -183,14 +184,10 @@ public abstract class StructureNode : RenderNode, IReadOnlyStructureNode, IRende
         }
 
         VecI targetSize = img.LatestSize;
+        
+        renderSurface = RequestTexture(textureId, targetSize, false);
 
-        if (renderSurface == null || renderSurface.Size != targetSize)
-        {
-            renderSurface?.Dispose();
-            renderSurface = new Texture(targetSize);
-        }
-
-        renderSurface.DrawingSurface.Canvas.Save();
+        int saved = renderSurface.DrawingSurface.Canvas.Save();
         
         if (!img.DrawMostUpToDateChunkOn(
                 chunkPos,
@@ -204,7 +201,7 @@ public abstract class StructureNode : RenderNode, IReadOnlyStructureNode, IRende
                 clearPaint);
         }
         
-        renderSurface.DrawingSurface.Canvas.Restore();
+        renderSurface.DrawingSurface.Canvas.RestoreToCount(saved);
         
         renderSurface?.DrawingSurface.Flush(true, true);
     }

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

@@ -25,7 +25,7 @@ public class DocumentRenderer : IPreviewRenderable
 
     private IReadOnlyDocument Document { get; }
 
-    public void RenderChunk(VecI chunkPos, ChunkResolution resolution, KeyFrameTime frameTime)
+    public void UpdateChunk(VecI chunkPos, ChunkResolution resolution, KeyFrameTime frameTime)
     {
         try
         {

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

@@ -111,7 +111,7 @@ internal class ActionAccumulator
             else
             {
                 await canvasUpdater.UpdateGatheredChunks(affectedAreas,
-                    undoBoundaryPassed);
+                    undoBoundaryPassed || viewportRefreshRequest);
             }
 
             previewUpdater.UpdatePreviews(undoBoundaryPassed, affectedAreas.ImagePreviewAreas.Keys, affectedAreas.MaskPreviewAreas.Keys,

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

@@ -310,6 +310,6 @@ internal class CanvasUpdater
 
     private void RenderChunk(VecI chunkPos, ChunkResolution resolution)
     {
-        doc.Renderer.RenderChunk(chunkPos, resolution, doc.AnimationHandler.ActiveFrameTime);
+        doc.Renderer.UpdateChunk(chunkPos, resolution, doc.AnimationHandler.ActiveFrameTime);
     }
 }