From c0b722ec46f13c04125fb122692aa975abe4f8d9 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 27 Feb 2021 19:24:22 +0000 Subject: Codechange: Add fast path to catenary drawing in MaskWireBits MaskWireBits always returns its input unchanged if the input has only 0 or 1 track bits set. Having only 0 or 1 track bits sets (i.e. non junction tiles) is by far the most common case. Examining the state of neighbouring tiles and the subsequent masking logic is relatively expensive and can be omitted in this case. --- src/elrail.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src') diff --git a/src/elrail.cpp b/src/elrail.cpp index 5d8f2b8f3..44481dd31 100644 --- a/src/elrail.cpp +++ b/src/elrail.cpp @@ -124,6 +124,9 @@ static TrackBits GetRailTrackBitsUniversal(TileIndex t, byte *override) */ static TrackBits MaskWireBits(TileIndex t, TrackBits tracks) { + /* Single track bits are never masked out. */ + if (likely(HasAtMostOneBit(tracks))) return tracks; + if (!IsPlainRailTile(t)) return tracks; TrackdirBits neighbour_tdb = TRACKDIR_BIT_NONE; -- cgit v1.2.3-70-g09d2