From 026324779e2f0a2b1284d7e448de8cf0176af95c Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Fri, 20 Dec 2019 05:12:39 +0100 Subject: [PATCH] Speed up linedef processing by not relying on a hashmap --- Source/Core/Map/Linedef.cs | 6 +++++- Source/Core/VisualModes/VisualMode.cs | 20 ++++++++++++-------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/Source/Core/Map/Linedef.cs b/Source/Core/Map/Linedef.cs index 60c6337..3239cfd 100644 --- a/Source/Core/Map/Linedef.cs +++ b/Source/Core/Map/Linedef.cs @@ -77,6 +77,9 @@ namespace CodeImp.DoomBuilder.Map // Clone private int serializedindex; + + // Rendering + private int lastProcessed; #endregion @@ -111,7 +114,8 @@ namespace CodeImp.DoomBuilder.Map public RectangleF Rect { get { return rect; } } public int[] Args { get { return args; } } internal int SerializedIndex { get { return serializedindex; } set { serializedindex = value; } } - internal bool FrontInterior { get { return frontinterior; } set { frontinterior = value; } } + internal int LastProcessed { get { return lastProcessed; } set { lastProcessed = value; } } + internal bool FrontInterior { get { return frontinterior; } set { frontinterior = value; } } internal bool ImpassableFlag { get { return impassableflag; } } internal int ColorPresetIndex { get { return colorPresetIndex; } } //mxd internal bool ExtraFloorFlag; //mxd diff --git a/Source/Core/VisualModes/VisualMode.cs b/Source/Core/VisualModes/VisualMode.cs index 18b5520..3c9ee79 100644 --- a/Source/Core/VisualModes/VisualMode.cs +++ b/Source/Core/VisualModes/VisualMode.cs @@ -510,15 +510,18 @@ namespace CodeImp.DoomBuilder.VisualModes //mxd. Should move selected things in specified direction protected virtual void MoveSelectedThings(Vector2D direction, bool absolutePosition) { } - - #endregion - #region ================== Visibility Culling - + #endregion + + #region ================== Visibility Culling + + int lastProcessed = 0; + // This preforms visibility culling protected void DoCulling() { - HashSet visiblelines = new HashSet(); + lastProcessed++; + List visiblelines = new List(); Vector2D campos2d = General.Map.VisualCamera.Position; // Make collections @@ -538,10 +541,11 @@ namespace CodeImp.DoomBuilder.VisualModes foreach(Linedef ld in block.Lines) { // Line not already processed? - if(!visiblelines.Contains(ld)) + if (ld.LastProcessed != lastProcessed)//if(!visiblelines.Contains(ld)) { - // Add line if not added yet - visiblelines.Add(ld); + // Add line if not added yet + ld.LastProcessed = lastProcessed; + visiblelines.Add(ld); // Which side of the line is the camera on? if(ld.SideOfLine(campos2d) < 0)