Re-order members of paint_struct for better code generation

This commit is contained in:
Matt 2021-01-30 09:08:57 +02:00
parent 3fecb36a19
commit 64cbccdda6
No known key found for this signature in database
GPG Key ID: 6D4C24A61C93E208
2 changed files with 14 additions and 18 deletions

View File

@ -140,20 +140,23 @@ struct paint_session
rct_drawpixelinfo DPI;
FixedVector<paint_entry, 4000> 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;

View File

@ -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<uint32_t>::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;