diff --git a/Yafc.UI/ImGui/ImGuiBuildCache.cs b/Yafc.UI/ImGui/ImGuiBuildCache.cs index ffeaaf36..0cd25ed4 100644 --- a/Yafc.UI/ImGui/ImGuiBuildCache.cs +++ b/Yafc.UI/ImGui/ImGuiBuildCache.cs @@ -39,6 +39,18 @@ public void Skip() { private int buildGroupsIndex = -1; private readonly List buildGroups = []; + public void ClearBuildGroupCache() { + buildGroups.Clear(); + buildGroupsIndex = -1; + } + + private void TrimUnusedBuildGroups() { + int usedCount = buildGroupsIndex + 1; + if (usedCount < buildGroups.Count) { + buildGroups.RemoveRange(usedCount, buildGroups.Count - usedCount); + } + } + public bool ShouldBuildGroup(object o, [MaybeNullWhen(false)] out BuildGroup group) { buildGroupsIndex++; BuildGroup current; diff --git a/Yafc.UI/ImGui/ImGuiBuilding.cs b/Yafc.UI/ImGui/ImGuiBuilding.cs index c8e7c5f1..820e74aa 100644 --- a/Yafc.UI/ImGui/ImGuiBuilding.cs +++ b/Yafc.UI/ImGui/ImGuiBuilding.cs @@ -253,6 +253,7 @@ private void BuildGui(float width) { rebuildRequested = false; ClearDrawCommandList(); _ = DoGui(ImGuiAction.Build); + TrimUnusedBuildGroups(); contentSize = new Vector2(lastContentRect.Right, lastContentRect.Height); if (boxColor != SchemeColor.None) {