public static void ResetCommands(RenderChain renderChain, VisualElement ve) { if (ve.renderChainData.firstCommand != null) { renderChain.OnRenderCommandsRemoved(ve.renderChainData.firstCommand, ve.renderChainData.lastCommand); } var prev = ve.renderChainData.firstCommand != null ? ve.renderChainData.firstCommand.prev : null; var next = ve.renderChainData.lastCommand != null ? ve.renderChainData.lastCommand.next : null; Debug.Assert(prev == null || prev.owner != ve); Debug.Assert(next == null || next == ve.renderChainData.firstClosingCommand || next.owner != ve); if (prev != null) { prev.next = next; } if (next != null) { next.prev = prev; } if (ve.renderChainData.firstCommand != null) { var c = ve.renderChainData.firstCommand; while (c != ve.renderChainData.lastCommand) { var nextC = c.next; renderChain.FreeCommand(c); c = nextC; } renderChain.FreeCommand(c); // Last command } ve.renderChainData.firstCommand = ve.renderChainData.lastCommand = null; prev = ve.renderChainData.firstClosingCommand != null ? ve.renderChainData.firstClosingCommand.prev : null; next = ve.renderChainData.lastClosingCommand != null ? ve.renderChainData.lastClosingCommand.next : null; Debug.Assert(prev == null || prev.owner != ve); Debug.Assert(next == null || next.owner != ve); if (prev != null) { prev.next = next; } if (next != null) { next.prev = prev; } if (ve.renderChainData.firstClosingCommand != null) { renderChain.OnRenderCommandsRemoved(ve.renderChainData.firstClosingCommand, ve.renderChainData.lastClosingCommand); var c = ve.renderChainData.firstClosingCommand; while (c != ve.renderChainData.lastClosingCommand) { var nextC = c.next; renderChain.FreeCommand(c); c = nextC; } renderChain.FreeCommand(c); // Last closing command } ve.renderChainData.firstClosingCommand = ve.renderChainData.lastClosingCommand = null; }