1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-20 05:23:04 +01:00

Remove remaining external uses of g1element

This commit is contained in:
Ted John
2017-10-28 13:33:02 +01:00
parent 444a8c1602
commit 4232be9fc2
9 changed files with 82 additions and 59 deletions

View File

@@ -228,16 +228,17 @@ static void window_install_track_paint(rct_window *w, rct_drawpixelinfo *dpi)
sint32 colour = ColourMapA[w->colours[0]].darkest;
gfx_fill_rect(dpi, x, y, x + 369, y + 216, colour);
rct_g1_element * substituteElement = &g1Elements[SPR_TEMP];
rct_g1_element tmpElement = * substituteElement;
substituteElement->offset = _trackDesignPreviewPixels + (_currentTrackPieceDirection * TRACK_PREVIEW_IMAGE_SIZE);
substituteElement->width = 370;
substituteElement->height = 217;
substituteElement->x_offset = 0;
substituteElement->y_offset = 0;
substituteElement->flags = G1_FLAG_BMP;
auto g1backup = gfx_get_g1_element(SPR_TEMP);
rct_g1_element g1temp = { 0 };
g1temp.offset = _trackDesignPreviewPixels + (_currentTrackPieceDirection * TRACK_PREVIEW_IMAGE_SIZE);
g1temp.width = 370;
g1temp.height = 217;
g1temp.flags = G1_FLAG_BMP;
gfx_set_g1_element(SPR_TEMP, &g1temp);
gfx_draw_sprite(dpi, 0, x, y, 0);
*substituteElement = tmpElement;
gfx_set_g1_element(SPR_TEMP, g1backup);
x = w->x + (widget->left + widget->right) / 2;
y = w->y + widget->bottom - 12;

View File

@@ -882,19 +882,18 @@ static void window_map_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, sint32
{
gfx_clear(dpi, PALETTE_INDEX_10);
rct_g1_element * g1 = &g1Elements[SPR_TEMP];
rct_g1_element g1backup = *g1;
g1->offset = (uint8 *) _mapImageData;
g1->width = MAP_WINDOW_MAP_SIZE;
g1->height = MAP_WINDOW_MAP_SIZE;
g1->x_offset = -8;
g1->y_offset = -8;
g1->flags = 0;
auto g1backup = gfx_get_g1_element(SPR_TEMP);
rct_g1_element g1temp = { 0 };
g1temp.offset = (uint8 *)_mapImageData;
g1temp.width = MAP_WINDOW_MAP_SIZE;
g1temp.height = MAP_WINDOW_MAP_SIZE;
g1temp.x_offset = -8;
g1temp.y_offset = -8;
gfx_set_g1_element(SPR_TEMP, &g1temp);
gfx_draw_sprite(dpi, SPR_TEMP, 0, 0, 0);
*g1 = g1backup;
gfx_set_g1_element(SPR_TEMP, g1backup);
if (w->selected_tab == PAGE_PEEPS)
{

View File

@@ -467,16 +467,14 @@ static void window_track_place_paint(rct_window *w, rct_drawpixelinfo *dpi)
// Draw mini tile preview
rct_drawpixelinfo clippedDpi;
if (clip_drawpixelinfo(&clippedDpi, dpi, w->x + 4, w->y + 18, 168, 78)) {
rct_g1_element *substituteElement = &g1Elements[SPR_TEMP];
rct_g1_element tmpElement = *substituteElement;
substituteElement->offset = _window_track_place_mini_preview;
substituteElement->width = TRACK_MINI_PREVIEW_WIDTH;
substituteElement->height = TRACK_MINI_PREVIEW_HEIGHT;
substituteElement->x_offset = 0;
substituteElement->y_offset = 0;
substituteElement->flags = 0;
auto g1backup = gfx_get_g1_element(SPR_TEMP);
rct_g1_element g1temp = { 0 };
g1temp.offset = _window_track_place_mini_preview;
g1temp.width = TRACK_MINI_PREVIEW_WIDTH;
g1temp.height = TRACK_MINI_PREVIEW_HEIGHT;
gfx_set_g1_element(SPR_TEMP, &g1temp);
gfx_draw_sprite(&clippedDpi, SPRITE_ID_PALETTE_COLOUR_1(NOT_TRANSLUCENT(w->colours[0])), 0, 0, 0);
*substituteElement = tmpElement;
gfx_set_g1_element(SPR_TEMP, g1backup);
}
// Price

View File

@@ -422,16 +422,17 @@ static void window_track_list_paint(rct_window *w, rct_drawpixelinfo *dpi)
return;
}
rct_g1_element *substituteElement = &g1Elements[SPR_TEMP];
rct_g1_element tmpElement = *substituteElement;
substituteElement->offset = _trackDesignPreviewPixels + (_currentTrackPieceDirection * TRACK_PREVIEW_IMAGE_SIZE);
substituteElement->width = 370;
substituteElement->height = 217;
substituteElement->x_offset = 0;
substituteElement->y_offset = 0;
substituteElement->flags = G1_FLAG_BMP;
auto g1backup = gfx_get_g1_element(SPR_TEMP);
rct_g1_element g1temp = { 0 };
g1temp.offset = _trackDesignPreviewPixels + (_currentTrackPieceDirection * TRACK_PREVIEW_IMAGE_SIZE);
g1temp.width = 370;
g1temp.height = 217;
g1temp.flags = G1_FLAG_BMP;
gfx_set_g1_element(SPR_TEMP, &g1temp);
gfx_draw_sprite(dpi, 0, x, y, 0);
*substituteElement = tmpElement;
gfx_set_g1_element(SPR_TEMP, g1backup);
x = w->x + (widget->left + widget->right) / 2;
y = w->y + widget->bottom - 12;

View File

@@ -220,7 +220,7 @@ extern "C"
uint32 imageId = baseImageId;
for (uint32 i = 0; i < count; i++)
{
g1Elements[imageId] = images[i];
gfx_set_g1_element(imageId, &images[i]);
drawing_engine_invalidate_image(imageId);
imageId++;
}
@@ -237,7 +237,8 @@ extern "C"
for (uint32 i = 0; i < count; i++)
{
uint32 imageId = baseImageId + i;
g1Elements[imageId] = { 0 };
rct_g1_element g1 = { 0 };
gfx_set_g1_element(imageId, &g1);
drawing_engine_invalidate_image(imageId);
}

View File

@@ -162,10 +162,10 @@ extern "C"
static bool _csgLoaded = false;
#ifdef NO_RCT2
size_t g1ElementsCount = 0;
rct_g1_element * g1Elements = nullptr;
static size_t g1ElementsCount = 0;
static rct_g1_element * g1Elements = nullptr;
#else
rct_g1_element * g1Elements = RCT2_ADDRESS(RCT2_ADDRESS_G1_ELEMENTS, rct_g1_element);
static rct_g1_element * g1Elements = RCT2_ADDRESS(RCT2_ADDRESS_G1_ELEMENTS, rct_g1_element);
#endif
bool gTinyFontAntiAliased = false;
@@ -791,6 +791,23 @@ extern "C"
return nullptr;
}
void gfx_set_g1_element(sint32 imageId, const rct_g1_element * g1)
{
openrct2_assert(!gOpenRCT2NoGraphics, "gfx_set_g1_element called on headless instance");
#ifdef DEBUG
openrct2_assert(imageId >= 0 && imageId < SPR_G2_BEGIN, "gfx_set_g1_element called with unexpected image id");
openrct2_assert(g1 != nullptr, "g1 was nullptr");
#endif
if (imageId >= 0 || imageId < SPR_G2_BEGIN)
{
if (imageId < (sint32)g1ElementsCount)
{
g1Elements[imageId] = *g1;
}
}
}
bool is_csg_loaded()
{
return _csgLoaded;

View File

@@ -280,7 +280,6 @@ extern uint32 gPickupPeepImage;
extern sint32 gPickupPeepX;
extern sint32 gPickupPeepY;
extern rct_g1_element *g1Elements;
extern bool gTinyFontAntiAliased;
extern rct_drawpixelinfo gScreenDPI;
@@ -326,6 +325,7 @@ void gfx_unload_g1();
void gfx_unload_g2();
void gfx_unload_csg();
const rct_g1_element * gfx_get_g1_element(sint32 image_id);
void gfx_set_g1_element(sint32 imageId, const rct_g1_element * g1);
bool is_csg_loaded();
uint32 gfx_object_allocate_images(const rct_g1_element * images, uint32 count);
void gfx_object_free_images(uint32 baseImageId, uint32 count);

View File

@@ -79,18 +79,21 @@ void scrolling_text_initialise_bitmaps()
for (sint32 i = 0; i < MAX_SCROLLING_TEXT_ENTRIES; i++)
{
rct_g1_element * g1 = &g1Elements[SPR_SCROLLING_TEXT_START + i];
if (g1 != NULL)
sint32 imageId = SPR_SCROLLING_TEXT_START + i;
const rct_g1_element * g1original = gfx_get_g1_element(imageId);
if (g1original != NULL)
{
g1->offset = _drawScrollTextList[i].bitmap;
g1->width = 64;
g1->height = 40;
g1->offset[0] = 0xFF;
g1->offset[1] = 0xFF;
g1->offset[14] = 0;
g1->offset[15] = 0;
g1->offset[16] = 0;
g1->offset[17] = 0;
rct_g1_element g1 = *g1original;
g1.offset = _drawScrollTextList[i].bitmap;
g1.width = 64;
g1.height = 40;
g1.offset[0] = 0xFF;
g1.offset[1] = 0xFF;
g1.offset[14] = 0;
g1.offset[15] = 0;
g1.offset[16] = 0;
g1.offset[17] = 0;
gfx_set_g1_element(imageId, &g1);
}
}
}

View File

@@ -674,11 +674,14 @@ static const utf8 *ttf_process_format_code(rct_drawpixelinfo *dpi, const utf8 *t
case FORMAT_INLINE_SPRITE:
{
uint32 imageId = *((uint32*)(nextCh));
rct_g1_element *g1Element = &g1Elements[imageId & 0x7FFFF];
if (!(info->flags & TEXT_DRAW_FLAG_NO_DRAW)) {
gfx_draw_sprite(dpi, imageId, info->x, info->y, 0);
const rct_g1_element * g1 = gfx_get_g1_element(imageId & 0x7FFFF);
if (g1 != NULL)
{
if (!(info->flags & TEXT_DRAW_FLAG_NO_DRAW)) {
gfx_draw_sprite(dpi, imageId, info->x, info->y, 0);
}
info->x += g1->width;
}
info->x += g1Element->width;
nextCh += 4;
break;
}