Skip to content

Commit 5c0fc62

Browse files
committed
simplify evaluating port dimensions on start
1 parent 978284d commit 5c0fc62

File tree

5 files changed

+58
-46
lines changed

5 files changed

+58
-46
lines changed

Editor/Generation/ShaderBuilder.cs

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55
using UnityEditor.Experimental.GraphView;
66
using UnityEngine;
77
using Graphlit.Nodes.PortType;
8-
using System.Linq.Expressions;
98
using System;
10-
using static UnityEditor.Rendering.CameraUI;
119

1210
namespace Graphlit
1311
{
@@ -306,45 +304,54 @@ public static void GenerateUnifiedPreview(ShaderGraphView graphView, ShaderNode
306304
}
307305
}
308306

309-
public static void GenerateAllPreviews(ShaderGraphView graphView)
307+
static void EvaluateDimensionsRecursive(HashSet<string> visitedNodes, ShaderNode node)
310308
{
311-
graphView.UpdateCachedNodesForBuilder();
312-
var nodes = graphView.cachedNodesForBuilder;
309+
if (visitedNodes.Contains(node.viewDataKey))
310+
{
311+
return;
312+
}
313313

314-
foreach (var shaderNode in nodes)
314+
foreach (var input in node.Inputs)
315315
{
316-
bool skip = false;
317-
foreach (var input in shaderNode.Inputs)
318-
{
319-
if (input.connected)
320-
{
321-
skip = true;
322-
continue;
323-
}
324-
}
325-
if (skip)
316+
foreach (var edge in input.connections)
326317
{
327-
continue;
318+
EvaluateDimensionsRecursive(visitedNodes, (ShaderNode)edge.output.node);
319+
break;
328320
}
321+
}
329322

330-
var rightNodesAdded = new HashSet<string>();
331-
var rightNodes = new List<ShaderNode>();
323+
node.EvaluateDimensionsForGraphView();
324+
visitedNodes.Add(node.viewDataKey);
325+
}
332326

333-
foreach (var output in shaderNode.Outputs)
327+
public static void GenerateAllPreviews(ShaderGraphView graphView)
328+
{
329+
graphView.UpdateCachedNodesForBuilder();
330+
var nodes = graphView.cachedNodesForBuilder;
331+
332+
var endNodes = new List<ShaderNode>();
333+
foreach (var node in nodes)
334+
{
335+
bool include = true;
336+
foreach (var output in node.Outputs)
334337
{
335-
foreach (var edge in output.connections)
338+
if (output.connected)
336339
{
337-
GetConnectedNodesFromEdgeRight(rightNodes, edge, rightNodesAdded);
340+
include = false;
338341
}
339342
}
340-
shaderNode.EvaluateDimensionsForGraphView();
341-
342-
foreach (var rightNode in rightNodes)
343+
if (include)
343344
{
344-
rightNode.EvaluateDimensionsForGraphView();
345+
endNodes.Add(node);
345346
}
346347
}
347348

349+
var visitedNodes = new HashSet<string>();
350+
foreach (var node in endNodes)
351+
{
352+
EvaluateDimensionsRecursive(visitedNodes, node);
353+
}
354+
348355
var generatedNodes = new HashSet<string>();
349356

350357
foreach (var node in nodes)
@@ -358,7 +365,6 @@ public static void GenerateAllPreviews(ShaderGraphView graphView)
358365
generatedNodes.Add(node.viewDataKey);
359366
}
360367
}
361-
362368
}
363369

364370
public static void GeneratePreviewFromEdge(ShaderGraphView graphView, Edge edge, bool toRemove)

Editor/Serialization/SerializableGraph.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,19 +66,20 @@ public void PopulateGraph(ShaderGraphView graphView)
6666
var sw = new System.Diagnostics.Stopwatch();
6767
sw.Start();
6868

69-
// try catch node connections arent lost
70-
try
69+
70+
foreach (var node in nodes)
7171
{
72-
foreach (var node in nodes)
72+
try
7373
{
7474
graphView.AddNode(node);
7575
}
76-
//Debug.Log("Add Nodes: " + sw.ElapsedMilliseconds);
77-
}
78-
catch (Exception e)
79-
{
80-
Debug.LogError(e);
76+
catch (Exception e)
77+
{
78+
Debug.LogError(e);
79+
}
8180
}
81+
//Debug.Log("Add Nodes: " + sw.ElapsedMilliseconds);
82+
8283
sw.Restart();
8384
SetupNodeConnections(graphView);
8485
//Debug.Log("Setup Connections: " + sw.ElapsedMilliseconds);

Editor/ShaderGraphView.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public class ShaderGraphView : GraphView
2727

2828
public void UpdateCachedNodesForBuilder()
2929
{
30-
cachedNodesForBuilder = graphElements.OfType<ShaderNode>().ToList();
30+
cachedNodesForBuilder = nodes.OfType<ShaderNode>().ToList();
3131
cachedRegisterVariablesForBuilder = cachedNodesForBuilder.OfType<RegisterVariableNode>().ToList();
3232
//Debug.Log($"UpdateCachedNodesForBuilder");
3333
}

Editor/ShaderNode/Nodes/Standard Library/SwizzleNode.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@ public override void Initialize()
2525
if (!swizzle.Equals(newValue))
2626
{
2727
swizzle = newValue;
28-
EvaluateDimensionsForGraphView();
29-
SetPortColor(outport, Float.GetPortColor(evaluatedOutputDimensions[OUT]));
28+
//EvaluateDimensionsForGraphView();
29+
SetPortColor(outport, Float.GetPortColor(swizzle.Length));
3030
GeneratePreviewForAffectedNodes();
3131
}
3232
});
3333
extensionContainer.Add(f);
3434

35-
EvaluateDimensionsForGraphView();
36-
SetPortColor(outport, Float.GetPortColor(evaluatedOutputDimensions[OUT]));
35+
//EvaluateDimensionsForGraphView();
36+
SetPortColor(outport, Float.GetPortColor(swizzle.Length));
3737
}
3838

3939
protected override void Generate(NodeVisitor visitor)

Editor/ShaderNode/ShaderNode.cs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -357,11 +357,6 @@ internal set
357357
public Dictionary<int, int> evaluatedOutputDimensions = new Dictionary<int, int>();
358358
public void EvaluateDimensionsForGraphView()
359359
{
360-
if (this is FetchVariableNode)
361-
{
362-
return;
363-
}
364-
365360
var inputDimensions = new Dictionary<int, int>();
366361

367362
foreach (var port in Inputs)
@@ -449,9 +444,19 @@ public void EvaluateDimensionsForGraphView()
449444
return;
450445
}
451446

447+
if (this is FetchVariableNode fv)
448+
{
449+
var registers = GraphView.cachedRegisterVariablesForBuilder.Where(x => x._name == fv._name);
450+
foreach (var regs in registers)
451+
{
452+
regs.evaluatedOutputDimensions[1] = trunc;
453+
SetPortColor(regs.inputContainer.Children().OfType<Port>().First(), Float.GetPortColor(trunc));
454+
}
455+
}
452456
if (this is RegisterVariableNode reg)
453457
{
454458
var fetches = GraphView.cachedNodesForBuilder.OfType<FetchVariableNode>().Where(x => x._name == reg._name);
459+
//Debug.Log(trunc);
455460
foreach (var fetch in fetches)
456461
{
457462
fetch.evaluatedOutputDimensions[1] = trunc;
@@ -598,7 +603,7 @@ void AddStyles()
598603
}
599604
public TextElement TitleLabel;
600605

601-
float _lastClickTime = 0;
606+
//float _lastClickTime = 0;
602607

603608
public string GetTitleTooltip() => GetType().Name + "\n" + viewDataKey;
604609
void AddTitleElement()

0 commit comments

Comments
 (0)