From 46c2e52b5cd065724dfbbac875457a8585c59f13 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sat, 2 Sep 2017 20:25:03 +0100 Subject: [PATCH] Pass paint_session to more functions --- src/openrct2/drawing/lightfx.c | 4 +- src/openrct2/interface/viewport.c | 24 ++++++++---- src/openrct2/paint/map_element/map_element.c | 6 +-- src/openrct2/paint/map_element/map_element.h | 4 +- src/openrct2/paint/paint.c | 39 +++++++------------- src/openrct2/paint/paint.h | 6 +-- src/openrct2/windows/RideConstruction.cpp | 4 +- 7 files changed, 42 insertions(+), 45 deletions(-) diff --git a/src/openrct2/drawing/lightfx.c b/src/openrct2/drawing/lightfx.c index a7adc35bb5..62b92bc43c 100644 --- a/src/openrct2/drawing/lightfx.c +++ b/src/openrct2/drawing/lightfx.c @@ -289,7 +289,7 @@ void lightfx_prepare_light_list() gPaintSession.Unk140E9A8 = dpi; painter_setup(); viewport_paint_setup(); - paint_arrange_structs(); + paint_session_arrange(gPaintSession); sub_68862C(); // log_warning("[%i, %i]", dpi->x, dpi->y); @@ -325,7 +325,7 @@ void lightfx_prepare_light_list() // RCT2_GLOBAL(0x140E9A8, rct_drawpixelinfo*) = dpi; // painter_setup(); // viewport_paint_setup(); - // paint_arrange_structs(); + // paint_session_arrange(gPaintSession); // sub_68862C(); //} } diff --git a/src/openrct2/interface/viewport.c b/src/openrct2/interface/viewport.c index 596aadc2c2..8e59d05713 100644 --- a/src/openrct2/interface/viewport.c +++ b/src/openrct2/interface/viewport.c @@ -742,9 +742,13 @@ static void viewport_paint_column(rct_drawpixelinfo * dpi, uint32 viewFlags) } gfx_clear(dpi, colour); } - paint_init(dpi); - paint_generate_structs(dpi); - paint_struct ps = paint_arrange_structs(); + + // Allocate a paint session + paint_session * session = &gPaintSession; + paint_session_init(session, dpi); + + paint_session_generate(session); + paint_struct ps = paint_session_arrange(session); paint_draw_structs(dpi, &ps, viewFlags); if (gConfigGeneral.render_weather_gloom && @@ -754,8 +758,8 @@ static void viewport_paint_column(rct_drawpixelinfo * dpi, uint32 viewFlags) viewport_paint_weather_gloom(dpi); } - if (gPaintSession.PSStringHead != NULL) { - paint_draw_money_structs(dpi, gPaintSession.PSStringHead); + if (session->PSStringHead != NULL) { + paint_draw_money_structs(dpi, session->PSStringHead); } } @@ -1370,9 +1374,13 @@ void get_map_coordinates_from_pos(sint32 screenX, sint32 screenY, sint32 flags, dpi->zoom_level = _viewportDpi1.zoom_level; dpi->x = _viewportDpi1.x; dpi->width = 1; - paint_init(dpi); - paint_generate_structs(dpi); - paint_struct ps = paint_arrange_structs(); + + // Allocate a paint session + paint_session * session = &gPaintSession; + paint_session_init(session, dpi); + + paint_session_generate(session); + paint_struct ps = paint_session_arrange(session); sub_68862C(dpi, &ps); } if (viewport != NULL) *viewport = myviewport; diff --git a/src/openrct2/paint/map_element/map_element.c b/src/openrct2/paint/map_element/map_element.c index 089d72c665..932d9d0699 100644 --- a/src/openrct2/paint/map_element/map_element.c +++ b/src/openrct2/paint/map_element/map_element.c @@ -45,7 +45,7 @@ const sint32 SEGMENTS_ALL = SEGMENT_B4 | SEGMENT_B8 | SEGMENT_BC | SEGMENT_C0 | * * rct2: 0x0068B35F */ -void map_element_paint_setup(sint32 x, sint32 y) +void map_element_paint_setup(paint_session * session, sint32 x, sint32 y) { if ( x < gMapSizeUnits && @@ -55,8 +55,8 @@ void map_element_paint_setup(sint32 x, sint32 y) ) { paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0); paint_util_force_set_general_support_height(-1, 0); - gPaintSession.Unk141E9DB = 0; - gPaintSession.Unk141E9DC = 0xFFFF; + session->Unk141E9DB = 0; + session->Unk141E9DC = 0xFFFF; sub_68B3FB(x, y); } else { diff --git a/src/openrct2/paint/map_element/map_element.h b/src/openrct2/paint/map_element/map_element.h index ccf1c5cf83..811e83f92e 100644 --- a/src/openrct2/paint/map_element/map_element.h +++ b/src/openrct2/paint/map_element/map_element.h @@ -21,6 +21,8 @@ #include "../../common.h" #include "../../world/map.h" +typedef struct paint_session paint_session; + typedef enum edge_t { EDGE_NE = (1 << 0), @@ -92,7 +94,7 @@ void paint_util_force_set_general_support_height(sint16 height, uint8 slope); void paint_util_set_segment_support_height(sint32 segments, uint16 height, uint8 slope); uint16 paint_util_rotate_segments(uint16 segments, uint8 rotation); -void map_element_paint_setup(sint32 x, sint32 y); +void map_element_paint_setup(paint_session * session, sint32 x, sint32 y); void entrance_paint(uint8 direction, sint32 height, rct_map_element* map_element); void banner_paint(uint8 direction, sint32 height, rct_map_element* map_element); diff --git a/src/openrct2/paint/paint.c b/src/openrct2/paint/paint.c index 261a89c530..9bfd231a9a 100644 --- a/src/openrct2/paint/paint.c +++ b/src/openrct2/paint/paint.c @@ -63,7 +63,7 @@ static void paint_ps_image_with_bounding_boxes(rct_drawpixelinfo * dpi, paint_st 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 void paint_session_init(paint_session * session, rct_drawpixelinfo * dpi) +void paint_session_init(paint_session * session, rct_drawpixelinfo * dpi) { memset(session, 0, sizeof(paint_session)); session->Unk140E9A8 = dpi; @@ -81,15 +81,6 @@ static void paint_session_init(paint_session * session, rct_drawpixelinfo * dpi) session->WoodenSupportsPrependTo = NULL; } -/** - * - * rct2: 0x0068615B - */ -void paint_init(rct_drawpixelinfo * dpi) -{ - paint_session_init(&gPaintSession, dpi); -} - static void paint_session_add_ps_to_quadrant(paint_session * session, paint_struct * ps, sint32 positionHash) { uint32 paintQuadrantIndex = clamp(0, positionHash / 32, MAX_PAINT_QUADRANTS - 1); @@ -308,7 +299,7 @@ paint_struct * sub_98196C( ps->var_29 = 0; ps->map_x = session->MapPosition.x; ps->map_y = session->MapPosition.y; - ps->mapElement = gPaintSession.CurrentlyDrawnItem; + ps->mapElement = session->CurrentlyDrawnItem; session->UnkF1AD28 = ps; @@ -629,8 +620,9 @@ void paint_floating_money_effect(money32 amount, rct_string_id string_id, sint16 * * rct2: 0x0068B6C2 */ -void paint_generate_structs(rct_drawpixelinfo * dpi) +void paint_session_generate(paint_session * session) { + rct_drawpixelinfo * dpi = session->Unk140E9A8; rct_xy16 mapTile = { .x = dpi->x & 0xFFE0, .y = (dpi->y - 16) & 0xFFE0 @@ -649,12 +641,12 @@ void paint_generate_structs(rct_drawpixelinfo * dpi) mapTile.y &= 0xFFE0; for (; num_vertical_quadrants > 0; --num_vertical_quadrants){ - map_element_paint_setup(mapTile.x, mapTile.y); + map_element_paint_setup(session, mapTile.x, mapTile.y); sprite_paint_setup(mapTile.x, mapTile.y); sprite_paint_setup(mapTile.x - 32, mapTile.y + 32); - map_element_paint_setup(mapTile.x, mapTile.y + 32); + map_element_paint_setup(session, mapTile.x, mapTile.y + 32); sprite_paint_setup(mapTile.x, mapTile.y + 32); mapTile.x += 32; @@ -671,12 +663,12 @@ void paint_generate_structs(rct_drawpixelinfo * dpi) mapTile.y &= 0xFFE0; for (; num_vertical_quadrants > 0; --num_vertical_quadrants){ - map_element_paint_setup(mapTile.x, mapTile.y); + map_element_paint_setup(session, mapTile.x, mapTile.y); sprite_paint_setup(mapTile.x, mapTile.y); sprite_paint_setup(mapTile.x - 32, mapTile.y - 32); - map_element_paint_setup(mapTile.x - 32, mapTile.y); + map_element_paint_setup(session, mapTile.x - 32, mapTile.y); sprite_paint_setup(mapTile.x - 32, mapTile.y); mapTile.y += 32; @@ -693,12 +685,12 @@ void paint_generate_structs(rct_drawpixelinfo * dpi) mapTile.y &= 0xFFE0; for (; num_vertical_quadrants > 0; --num_vertical_quadrants){ - map_element_paint_setup(mapTile.x, mapTile.y); + map_element_paint_setup(session, mapTile.x, mapTile.y); sprite_paint_setup(mapTile.x, mapTile.y); sprite_paint_setup(mapTile.x + 32, mapTile.y - 32); - map_element_paint_setup(mapTile.x, mapTile.y - 32); + map_element_paint_setup(session, mapTile.x, mapTile.y - 32); sprite_paint_setup(mapTile.x, mapTile.y - 32); mapTile.x -= 32; @@ -716,12 +708,12 @@ void paint_generate_structs(rct_drawpixelinfo * dpi) mapTile.y &= 0xFFE0; for (; num_vertical_quadrants > 0; --num_vertical_quadrants){ - map_element_paint_setup(mapTile.x, mapTile.y); + map_element_paint_setup(session, mapTile.x, mapTile.y); sprite_paint_setup(mapTile.x, mapTile.y); sprite_paint_setup(mapTile.x + 32, mapTile.y + 32); - map_element_paint_setup(mapTile.x + 32, mapTile.y); + map_element_paint_setup(session, mapTile.x + 32, mapTile.y); sprite_paint_setup(mapTile.x + 32, mapTile.y); mapTile.y -= 32; @@ -850,7 +842,7 @@ paint_struct * paint_arrange_structs_helper(paint_struct * ps_next, uint16 quadr * * rct2: 0x00688217 */ -static paint_struct paint_session_arrange_structs(paint_session * session) +paint_struct paint_session_arrange(paint_session * session) { paint_struct psHead = { 0 }; paint_struct * ps = &psHead; @@ -878,11 +870,6 @@ static paint_struct paint_session_arrange_structs(paint_session * session) return psHead; } -paint_struct paint_arrange_structs() -{ - return paint_session_arrange_structs(&gPaintSession); -} - /** * * rct2: 0x00688485 diff --git a/src/openrct2/paint/paint.h b/src/openrct2/paint/paint.h index 7fa07cc138..6fcf796d17 100644 --- a/src/openrct2/paint/paint.h +++ b/src/openrct2/paint/paint.h @@ -226,9 +226,9 @@ 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_init(rct_drawpixelinfo * dpi); -void paint_generate_structs(rct_drawpixelinfo * dpi); -paint_struct paint_arrange_structs(); +void paint_session_init(paint_session * session, rct_drawpixelinfo * dpi); +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); void paint_draw_structs(rct_drawpixelinfo * dpi, paint_struct * ps, uint32 viewFlags); void paint_draw_money_structs(rct_drawpixelinfo * dpi, paint_string_struct * ps); diff --git a/src/openrct2/windows/RideConstruction.cpp b/src/openrct2/windows/RideConstruction.cpp index 90a26f334a..0eeba747e7 100644 --- a/src/openrct2/windows/RideConstruction.cpp +++ b/src/openrct2/windows/RideConstruction.cpp @@ -2347,7 +2347,7 @@ static void sub_6CBCE2( gCurrentViewportFlags = 0; trackDirection &= 3; - paint_init(gPaintSession.Unk140E9A8); + paint_session_init(&gPaintSession, gPaintSession.Unk140E9A8); ride = get_ride(rideIndex); @@ -2450,7 +2450,7 @@ static void sub_6CBCE2( gMapSize = preserveMapSize; gMapSizeMaxXY = preserveMapSizeMaxXY; - paint_struct ps = paint_arrange_structs(); + paint_struct ps = paint_session_arrange(&gPaintSession); paint_draw_structs(gPaintSession.Unk140E9A8, &ps, gCurrentViewportFlags); gCurrentViewportFlags = preserve_current_viewport_flags;