Browse Source

Handled recursion depth in nested node

Krzysztof Krysiński 3 weeks ago
parent
commit
69d39456d8

+ 3 - 1
src/PixiEditor.ChangeableDocument/Changeables/Graph/Context/BrushRenderContext.cs

@@ -39,7 +39,9 @@ public class BrushRenderContext : RenderContext
             PreviewTextures = PreviewTextures,
             PreviewTextures = PreviewTextures,
             EditorData = EditorData,
             EditorData = EditorData,
             KeyboardInfo = KeyboardInfo,
             KeyboardInfo = KeyboardInfo,
-            PointerInfo = PointerInfo
+            PointerInfo = PointerInfo,
+            ViewportData = ViewportData,
+            CloneDepth = CloneDepth + 1,
         };
         };
     }
     }
 }
 }

+ 3 - 1
src/PixiEditor.ChangeableDocument/Changeables/Graph/Interfaces/SceneObjectRenderContext.cs

@@ -31,7 +31,9 @@ public class SceneObjectRenderContext : RenderContext
             PreviewTextures = PreviewTextures,
             PreviewTextures = PreviewTextures,
             EditorData = EditorData,
             EditorData = EditorData,
             KeyboardInfo = KeyboardInfo,
             KeyboardInfo = KeyboardInfo,
-            PointerInfo = PointerInfo
+            PointerInfo = PointerInfo,
+            ViewportData = ViewportData,
+            CloneDepth = CloneDepth + 1,
         };
         };
     }
     }
 }
 }

+ 11 - 0
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/NestedDocumentNode.cs

@@ -18,6 +18,7 @@ namespace PixiEditor.ChangeableDocument.Changeables.Graph.Nodes;
 public class NestedDocumentNode : LayerNode, IInputDependentOutputs, ITransformableObject, IRasterizable,
 public class NestedDocumentNode : LayerNode, IInputDependentOutputs, ITransformableObject, IRasterizable,
     IVariableSampling
     IVariableSampling
 {
 {
+    public const int MaxRecursionDepth = 5;
     public const string DocumentPropertyName = "Document";
     public const string DocumentPropertyName = "Document";
     public const string NodeId = "NestedDocument";
     public const string NodeId = "NestedDocument";
     private DocumentReference? lastDocument;
     private DocumentReference? lastDocument;
@@ -215,6 +216,11 @@ public class NestedDocumentNode : LayerNode, IInputDependentOutputs, ITransforma
         }
         }
 
 
         var clonedContext = context.Clone();
         var clonedContext = context.Clone();
+        if (clonedContext.CloneDepth >= MaxRecursionDepth)
+        {
+            return;
+        }
+
         clonedContext.Graph = Instance?.NodeGraph;
         clonedContext.Graph = Instance?.NodeGraph;
         clonedContext.DocumentSize = Instance.Size;
         clonedContext.DocumentSize = Instance.Size;
         clonedContext.ProcessingColorSpace = Instance?.ProcessingColorSpace;
         clonedContext.ProcessingColorSpace = Instance?.ProcessingColorSpace;
@@ -331,6 +337,11 @@ public class NestedDocumentNode : LayerNode, IInputDependentOutputs, ITransforma
     private void ExecuteNested(RenderContext ctx)
     private void ExecuteNested(RenderContext ctx)
     {
     {
         var clonedContext = ctx.Clone();
         var clonedContext = ctx.Clone();
+        if (clonedContext.CloneDepth >= MaxRecursionDepth)
+        {
+            return;
+        }
+
         clonedContext.Graph = Instance?.NodeGraph;
         clonedContext.Graph = Instance?.NodeGraph;
         clonedContext.DocumentSize = Instance?.Size ?? VecI.Zero;
         clonedContext.DocumentSize = Instance?.Size ?? VecI.Zero;
         clonedContext.ProcessingColorSpace = Instance?.ProcessingColorSpace;
         clonedContext.ProcessingColorSpace = Instance?.ProcessingColorSpace;

+ 3 - 1
src/PixiEditor.ChangeableDocument/Rendering/RenderContext.cs

@@ -14,6 +14,7 @@ namespace PixiEditor.ChangeableDocument.Rendering;
 
 
 public class RenderContext
 public class RenderContext
 {
 {
+    public int CloneDepth { get; protected init; } = 0;
     public double Opacity { get; set; }
     public double Opacity { get; set; }
 
 
     public KeyFrameTime FrameTime { get; }
     public KeyFrameTime FrameTime { get; }
@@ -96,7 +97,8 @@ public class RenderContext
             PointerInfo = PointerInfo,
             PointerInfo = PointerInfo,
             EditorData = EditorData,
             EditorData = EditorData,
             KeyboardInfo = KeyboardInfo,
             KeyboardInfo = KeyboardInfo,
-            ViewportData = ViewportData
+            ViewportData = ViewportData,
+            CloneDepth = CloneDepth + 1
         };
         };
     }
     }
 }
 }