diff --git a/src/openrct2/paint/Paint.h b/src/openrct2/paint/Paint.h index 34c726f4c6..664017af54 100644 --- a/src/openrct2/paint/Paint.h +++ b/src/openrct2/paint/Paint.h @@ -140,20 +140,23 @@ struct paint_session rct_drawpixelinfo DPI; FixedVector PaintStructs; paint_struct* Quadrants[MAX_PAINT_QUADRANTS]; + paint_struct* LastPS; + paint_string_struct* PSStringHead; + paint_string_struct* LastPSString; + attached_paint_struct* LastAttachedPS; + const TileElement* SurfaceElement; + const void* CurrentlyDrawnItem; + TileElement* PathElementOnSameHeight; + TileElement* TrackElementOnSameHeight; paint_struct PaintHead; uint32_t ViewFlags; uint32_t QuadrantBackIndex; uint32_t QuadrantFrontIndex; - const void* CurrentlyDrawnItem; CoordsXY SpritePosition; - paint_struct* LastPS; - attached_paint_struct* LastAttachedPS; ViewportInteractionItem InteractionType; uint8_t CurrentRotation; support_height SupportSegments[9]; support_height Support; - paint_string_struct* PSStringHead; - paint_string_struct* LastPSString; paint_struct* WoodenSupportsPrependTo; CoordsXY MapPosition; tunnel_entry LeftTunnels[TUNNEL_MAX_COUNT]; @@ -161,9 +164,6 @@ struct paint_session tunnel_entry RightTunnels[TUNNEL_MAX_COUNT]; uint8_t RightTunnelCount; uint8_t VerticalTunnelHeight; - const TileElement* SurfaceElement; - TileElement* PathElementOnSameHeight; - TileElement* TrackElementOnSameHeight; bool DidPassSurface; uint8_t Unk141E9DB; uint16_t WaterHeight; diff --git a/src/openrct2/paint/Painter.cpp b/src/openrct2/paint/Painter.cpp index 2783591fcb..c92fb9a014 100644 --- a/src/openrct2/paint/Painter.cpp +++ b/src/openrct2/paint/Painter.cpp @@ -135,8 +135,7 @@ paint_session* Painter::CreateSession(rct_drawpixelinfo* dpi, uint32_t viewFlags if (_freePaintSessions.empty() == false) { // Re-use. - const size_t idx = _freePaintSessions.size() - 1; - session = _freePaintSessions[idx]; + session = _freePaintSessions.back(); // Shrink by one. _freePaintSessions.pop_back(); @@ -149,17 +148,14 @@ paint_session* Painter::CreateSession(rct_drawpixelinfo* dpi, uint32_t viewFlags } session->DPI = *dpi; - session->EndOfPaintStructArray = &session->PaintStructs[4000 - 1]; - session->NextFreePaintStruct = session->PaintStructs; - session->LastPS = nullptr; - session->LastAttachedPS = nullptr; session->ViewFlags = viewFlags; - for (auto& quadrant : session->Quadrants) - { - quadrant = nullptr; - } session->QuadrantBackIndex = std::numeric_limits::max(); session->QuadrantFrontIndex = 0; + session->PaintStructs.clear(); + + std::fill(std::begin(session->Quadrants), std::end(session->Quadrants), nullptr); + session->LastPS = nullptr; + session->LastAttachedPS = nullptr; session->PSStringHead = nullptr; session->LastPSString = nullptr; session->WoodenSupportsPrependTo = nullptr;