mirror of https://github.com/OpenRCT2/OpenRCT2.git
Create alloc and free functions for paint_session
This commit is contained in:
parent
46c2e52b5c
commit
bf60fdcc7e
|
@ -743,13 +743,11 @@ static void viewport_paint_column(rct_drawpixelinfo * dpi, uint32 viewFlags)
|
||||||
gfx_clear(dpi, colour);
|
gfx_clear(dpi, colour);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Allocate a paint session
|
paint_session * session = paint_session_alloc(dpi);
|
||||||
paint_session * session = &gPaintSession;
|
|
||||||
paint_session_init(session, dpi);
|
|
||||||
|
|
||||||
paint_session_generate(session);
|
paint_session_generate(session);
|
||||||
paint_struct ps = paint_session_arrange(session);
|
paint_struct ps = paint_session_arrange(session);
|
||||||
paint_draw_structs(dpi, &ps, viewFlags);
|
paint_draw_structs(dpi, &ps, viewFlags);
|
||||||
|
paint_session_free(session);
|
||||||
|
|
||||||
if (gConfigGeneral.render_weather_gloom &&
|
if (gConfigGeneral.render_weather_gloom &&
|
||||||
!gTrackDesignSaveMode &&
|
!gTrackDesignSaveMode &&
|
||||||
|
@ -1375,13 +1373,11 @@ void get_map_coordinates_from_pos(sint32 screenX, sint32 screenY, sint32 flags,
|
||||||
dpi->x = _viewportDpi1.x;
|
dpi->x = _viewportDpi1.x;
|
||||||
dpi->width = 1;
|
dpi->width = 1;
|
||||||
|
|
||||||
// Allocate a paint session
|
paint_session * session = paint_session_alloc(dpi);
|
||||||
paint_session * session = &gPaintSession;
|
|
||||||
paint_session_init(session, dpi);
|
|
||||||
|
|
||||||
paint_session_generate(session);
|
paint_session_generate(session);
|
||||||
paint_struct ps = paint_session_arrange(session);
|
paint_struct ps = paint_session_arrange(session);
|
||||||
sub_68862C(dpi, &ps);
|
sub_68862C(dpi, &ps);
|
||||||
|
paint_session_free(session);
|
||||||
}
|
}
|
||||||
if (viewport != NULL) *viewport = myviewport;
|
if (viewport != NULL) *viewport = myviewport;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,7 @@ const uint32 construction_markers[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
paint_session gPaintSession;
|
paint_session gPaintSession;
|
||||||
|
static bool _paintSessionInUse;
|
||||||
|
|
||||||
#ifndef NO_RCT2
|
#ifndef NO_RCT2
|
||||||
#define _paintQuadrants (RCT2_ADDRESS(0x00F1A50C, paint_struct*))
|
#define _paintQuadrants (RCT2_ADDRESS(0x00F1A50C, paint_struct*))
|
||||||
|
@ -58,12 +59,29 @@ static const uint8 BoundBoxDebugColours[] = {
|
||||||
bool gShowDirtyVisuals;
|
bool gShowDirtyVisuals;
|
||||||
bool gPaintBoundingBoxes;
|
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_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_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 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);
|
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));
|
memset(session, 0, sizeof(paint_session));
|
||||||
session->Unk140E9A8 = dpi;
|
session->Unk140E9A8 = dpi;
|
||||||
|
|
|
@ -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);
|
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_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);
|
void paint_session_generate(paint_session * session);
|
||||||
paint_struct paint_session_arrange(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);
|
paint_struct * paint_arrange_structs_helper(paint_struct * ps_next, uint16 quadrantIndex, uint8 flag);
|
||||||
|
|
|
@ -478,6 +478,7 @@ static void window_ride_construction_draw_track_piece(
|
||||||
static void window_ride_construction_update_enabled_track_pieces();
|
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 bool _sub_6CA2DF(sint32 *trackType, sint32 *trackDirection, sint32 *rideIndex, sint32 *_liftHillAndAlternativeState, sint32 *x, sint32 *y, sint32 *z, sint32 *properties);
|
||||||
static void sub_6CBCE2(
|
static void sub_6CBCE2(
|
||||||
|
rct_drawpixelinfo * dpi,
|
||||||
sint32 rideIndex, sint32 trackType, sint32 trackDirection, sint32 edx,
|
sint32 rideIndex, sint32 trackType, sint32 trackDirection, sint32 edx,
|
||||||
sint32 originX, sint32 originY, sint32 originZ
|
sint32 originX, sint32 originY, sint32 originZ
|
||||||
);
|
);
|
||||||
|
@ -2315,12 +2316,11 @@ static void window_ride_construction_draw_track_piece(
|
||||||
}
|
}
|
||||||
dpi->x += x - width / 2;
|
dpi->x += x - width / 2;
|
||||||
dpi->y += y - height / 2 - 16;
|
dpi->y += y - height / 2 - 16;
|
||||||
gPaintSession.Unk140E9A8 = dpi;
|
|
||||||
uint32 d = unknown << 16;
|
uint32 d = unknown << 16;
|
||||||
d |= rideIndex;
|
d |= rideIndex;
|
||||||
d |= trackType << 8;
|
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;
|
static rct_map_element _tempTrackMapElement;
|
||||||
|
@ -2335,6 +2335,7 @@ static rct_map_element *_backupMapElementArrays[5];
|
||||||
* dh: trackType
|
* dh: trackType
|
||||||
*/
|
*/
|
||||||
static void sub_6CBCE2(
|
static void sub_6CBCE2(
|
||||||
|
rct_drawpixelinfo * dpi,
|
||||||
sint32 rideIndex, sint32 trackType, sint32 trackDirection, sint32 edx,
|
sint32 rideIndex, sint32 trackType, sint32 trackDirection, sint32 edx,
|
||||||
sint32 originX, sint32 originY, sint32 originZ
|
sint32 originX, sint32 originY, sint32 originZ
|
||||||
) {
|
) {
|
||||||
|
@ -2343,12 +2344,11 @@ static void sub_6CBCE2(
|
||||||
sint32 preserve_current_viewport_flags;
|
sint32 preserve_current_viewport_flags;
|
||||||
sint32 offsetX, offsetY;
|
sint32 offsetX, offsetY;
|
||||||
|
|
||||||
|
paint_session * session = paint_session_alloc(dpi);
|
||||||
preserve_current_viewport_flags = gCurrentViewportFlags;
|
preserve_current_viewport_flags = gCurrentViewportFlags;
|
||||||
gCurrentViewportFlags = 0;
|
gCurrentViewportFlags = 0;
|
||||||
trackDirection &= 3;
|
trackDirection &= 3;
|
||||||
|
|
||||||
paint_session_init(&gPaintSession, gPaintSession.Unk140E9A8);
|
|
||||||
|
|
||||||
ride = get_ride(rideIndex);
|
ride = get_ride(rideIndex);
|
||||||
|
|
||||||
sint16 preserveMapSizeUnits = gMapSizeUnits;
|
sint16 preserveMapSizeUnits = gMapSizeUnits;
|
||||||
|
@ -2450,8 +2450,9 @@ static void sub_6CBCE2(
|
||||||
gMapSize = preserveMapSize;
|
gMapSize = preserveMapSize;
|
||||||
gMapSizeMaxXY = preserveMapSizeMaxXY;
|
gMapSizeMaxXY = preserveMapSizeMaxXY;
|
||||||
|
|
||||||
paint_struct ps = paint_session_arrange(&gPaintSession);
|
paint_struct ps = paint_session_arrange(session);
|
||||||
paint_draw_structs(gPaintSession.Unk140E9A8, &ps, gCurrentViewportFlags);
|
paint_draw_structs(dpi, &ps, gCurrentViewportFlags);
|
||||||
|
paint_session_free(session);
|
||||||
|
|
||||||
gCurrentViewportFlags = preserve_current_viewport_flags;
|
gCurrentViewportFlags = preserve_current_viewport_flags;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue