Browse Source

Rewrote surface grouping method to be iterative instead of tail-recursive. Fixes potential stack overflow issues when loading particularly large and complex maps.

readme
Nico de Poel 5 years ago
parent
commit
5dc8d2ff78
  1. 11
      Assets/Scripts/Support/BrushModel.cs

11
Assets/Scripts/Support/BrushModel.cs

@ -66,8 +66,14 @@ public class BrushModel
private void GroupSurfaces(QNode node, QSurface[] surfaces, Dictionary<(IntPtr, int, QSurfaceFlags), List<QSurface>> surfaceGroups)
{
var nodeQueue = new Queue<QNode>();
nodeQueue.Enqueue(node);
while (nodeQueue.Count > 0)
{
node = nodeQueue.Dequeue();
if (node.contents < 0) // Leaf node
return;
continue;
for (int surfIdx = 0; surfIdx < node.numSurfaces; ++surfIdx)
{
@ -86,7 +92,8 @@ public class BrushModel
foreach (var childNode in node.Children)
{
GroupSurfaces(childNode, surfaces, surfaceGroups);
nodeQueue.Enqueue(childNode);
}
}
}

Loading…
Cancel
Save