Profiling revealed that WallEdge was somewhat under performing, with instantiation and the subsequent cleanup of this class accounting for around 8% of the time spent rendering a frame.
Determination of the neighboring edge intercepts and calculation of the smoothed edge normal is now deferred and performed independently.
The sorted edge event list is also now only prepared when absolutely necessary. The bottom and top events are now accessible independently without needing to prepare the whole list (these are always present and their sorted position never changes).
Also, as intercept events are not always necessary, memory allocation for this data is performed as necessary reducing the footprint of an instance of this class slightly.
Optimize|Client|World|WallEdge: WallEdge performance optimizations
Profiling revealed that WallEdge was somewhat under performing, with
instantiation and the subsequent cleanup of this class accounting for
around 8% of the time spent rendering a frame.
Determination of the neighboring edge intercepts and calculation of
the smoothed edge normal is now deferred and performed independently.
The sorted edge event list is also now only prepared when absolutely
necessary. The bottom and top events are now accessible independently
without needing to prepare the whole list (these are always present
and their sorted position never changes).
Also, as intercept events are not always necessary, memory allocation
for this data is performed as necessary reducing the footprint of an
instance of this class slightly.