Create alloc and free functions for paint_session

This commit is contained in:
Ted John 2017-09-02 20:56:52 +01:00
parent 46c2e52b5c
commit bf60fdcc7e
4 changed files with 32 additions and 16 deletions

View File

@ -743,13 +743,11 @@ static void viewport_paint_column(rct_drawpixelinfo * dpi, uint32 viewFlags)
gfx_clear(dpi, colour);
}
// Allocate a paint session
paint_session * session = &gPaintSession;
paint_session_init(session, dpi);
paint_session * session = paint_session_alloc(dpi);
paint_session_generate(session);
paint_struct ps = paint_session_arrange(session);
paint_draw_structs(dpi, &ps, viewFlags);
paint_session_free(session);
if (gConfigGeneral.render_weather_gloom &&
!gTrackDesignSaveMode &&
@ -1375,13 +1373,11 @@ void get_map_coordinates_from_pos(sint32 screenX, sint32 screenY, sint32 flags,
dpi->x = _viewportDpi1.x;
dpi->width = 1;
// Allocate a paint session
paint_session * session = &gPaintSession;
paint_session_init(session, dpi);
paint_session * session = paint_session_alloc(dpi);
paint_session_generate(session);
paint_struct ps = paint_session_arrange(session);
sub_68862C(dpi, &ps);
paint_session_free(session);
}
if (viewport != NULL) *viewport = myviewport;
}

View File

@ -32,6 +32,7 @@ const uint32 construction_markers[] = {
};
paint_session gPaintSession;
static bool _paintSessionInUse;
#ifndef NO_RCT2
#define _paintQuadrants (RCT2_ADDRESS(0x00F1A50C, paint_struct*))
@ -58,12 +59,29 @@ static const uint8 BoundBoxDebugColours[] = {
bool gShowDirtyVisuals;
bool gPaintBoundingBoxes;
static void paint_session_init(paint_session * session, rct_drawpixelinfo * dpi);
static void paint_attached_ps(rct_drawpixelinfo * dpi, paint_struct * ps, uint32 viewFlags);
static void paint_ps_image_with_bounding_boxes(rct_drawpixelinfo * dpi, paint_struct * ps, uint32 imageId, sint16 x, sint16 y);
static void paint_ps_image(rct_drawpixelinfo * dpi, paint_struct * ps, uint32 imageId, sint16 x, sint16 y);
static uint32 paint_ps_colourify_image(uint32 imageId, uint8 spriteType, uint32 viewFlags);
void paint_session_init(paint_session * session, rct_drawpixelinfo * dpi)
paint_session * paint_session_alloc(rct_drawpixelinfo * dpi)
{
// Currently limited to just one session at a time
assert(!_paintSessionInUse);
_paintSessionInUse = true;
paint_session * session = &gPaintSession;
paint_session_init(session, dpi);
return session;
}
void paint_session_free(paint_session * session)
{
_paintSessionInUse = false;
}
static void paint_session_init(paint_session * session, rct_drawpixelinfo * dpi)
{
memset(session, 0, sizeof(paint_session));
session->Unk140E9A8 = dpi;

View File

@ -226,7 +226,8 @@ bool paint_attach_to_previous_attach(uint32 image_id, uint16 x, uint16 y);
bool paint_attach_to_previous_ps(uint32 image_id, uint16 x, uint16 y);
void paint_floating_money_effect(money32 amount, rct_string_id string_id, sint16 y, sint16 z, sint8 y_offsets[], sint16 offset_x, uint32 rotation);
void paint_session_init(paint_session * session, rct_drawpixelinfo * dpi);
paint_session * paint_session_alloc(rct_drawpixelinfo * dpi);
void paint_session_free(paint_session *);
void paint_session_generate(paint_session * session);
paint_struct paint_session_arrange(paint_session * session);
paint_struct * paint_arrange_structs_helper(paint_struct * ps_next, uint16 quadrantIndex, uint8 flag);

View File

@ -478,6 +478,7 @@ static void window_ride_construction_draw_track_piece(
static void window_ride_construction_update_enabled_track_pieces();
static bool _sub_6CA2DF(sint32 *trackType, sint32 *trackDirection, sint32 *rideIndex, sint32 *_liftHillAndAlternativeState, sint32 *x, sint32 *y, sint32 *z, sint32 *properties);
static void sub_6CBCE2(
rct_drawpixelinfo * dpi,
sint32 rideIndex, sint32 trackType, sint32 trackDirection, sint32 edx,
sint32 originX, sint32 originY, sint32 originZ
);
@ -2315,12 +2316,11 @@ static void window_ride_construction_draw_track_piece(
}
dpi->x += x - width / 2;
dpi->y += y - height / 2 - 16;
gPaintSession.Unk140E9A8 = dpi;
uint32 d = unknown << 16;
d |= rideIndex;
d |= trackType << 8;
sub_6CBCE2(rideIndex, trackType, trackDirection, d, 4096, 4096, 1024);
sub_6CBCE2(dpi, rideIndex, trackType, trackDirection, d, 4096, 4096, 1024);
}
static rct_map_element _tempTrackMapElement;
@ -2335,6 +2335,7 @@ static rct_map_element *_backupMapElementArrays[5];
* dh: trackType
*/
static void sub_6CBCE2(
rct_drawpixelinfo * dpi,
sint32 rideIndex, sint32 trackType, sint32 trackDirection, sint32 edx,
sint32 originX, sint32 originY, sint32 originZ
) {
@ -2343,12 +2344,11 @@ static void sub_6CBCE2(
sint32 preserve_current_viewport_flags;
sint32 offsetX, offsetY;
paint_session * session = paint_session_alloc(dpi);
preserve_current_viewport_flags = gCurrentViewportFlags;
gCurrentViewportFlags = 0;
trackDirection &= 3;
paint_session_init(&gPaintSession, gPaintSession.Unk140E9A8);
ride = get_ride(rideIndex);
sint16 preserveMapSizeUnits = gMapSizeUnits;
@ -2450,8 +2450,9 @@ static void sub_6CBCE2(
gMapSize = preserveMapSize;
gMapSizeMaxXY = preserveMapSizeMaxXY;
paint_struct ps = paint_session_arrange(&gPaintSession);
paint_draw_structs(gPaintSession.Unk140E9A8, &ps, gCurrentViewportFlags);
paint_struct ps = paint_session_arrange(session);
paint_draw_structs(dpi, &ps, gCurrentViewportFlags);
paint_session_free(session);
gCurrentViewportFlags = preserve_current_viewport_flags;
}