rct_drawpixelinfo TextureCache::GetImageAsDPI(uint32 image, uint32 tertiaryColour) { auto g1Element = gfx_get_g1_element(image & 0x7FFFF); sint32 width = g1Element->width; sint32 height = g1Element->height; rct_drawpixelinfo dpi = CreateDPI(width, height); gfx_draw_sprite_software(&dpi, image, -g1Element->x_offset, -g1Element->y_offset, tertiaryColour); return dpi; }
void TextureCache::GeneratePaletteTexture() { rct_drawpixelinfo dpi = CreateDPI(256, PALETTE_TO_G1_OFFSET_COUNT + 5); // Init no-op palette for (int i=0; i < 256; ++i) { dpi.bits[i] = i; } for (int i=0; i < PALETTE_TO_G1_OFFSET_COUNT; ++i) { GLint y = PaletteToY(i); uint16 image = palette_to_g1_offset[i]; auto element = gfx_get_g1_element(image); gfx_draw_sprite_software(&dpi, image, -element->x_offset, y - element->y_offset, 0); } glBindTexture(GL_TEXTURE_RECTANGLE, _paletteTexture); glTexImage2D(GL_TEXTURE_RECTANGLE, 0, GL_R8UI, 256, PALETTE_TO_G1_OFFSET_COUNT + 5, 0, GL_RED_INTEGER, GL_UNSIGNED_BYTE, dpi.bits); DeleteDPI(dpi); }
void scrolling_text_initialise_bitmaps() { uint8 drawingSurface[64]; rct_drawpixelinfo dpi = { .bits = (uint8 *)&drawingSurface, .x = 0, .y = 0, .width = 8, .height = 8, .pitch = 0, .zoom_level = 0 }; for (sint32 i = 0; i < 224; i++) { memset(drawingSurface, 0, sizeof(drawingSurface)); gfx_draw_sprite_software(&dpi, SPR_CHAR_START + FONT_SPRITE_BASE_TINY + i, -1, 0, 0); for (sint32 x = 0; x < 8; x++) { uint8 val = 0; for (sint32 y = 0; y < 8; y++) { val >>= 1; if (dpi.bits[x + y * 8] == 1) { val |= 0x80; } } _characterBitmaps[i * 8 + x] = val; } } for (sint32 i = 0; i < MAX_SCROLLING_TEXT_ENTRIES; i++) { rct_g1_element *g1 = &g1Elements[SPR_SCROLLING_TEXT_START + i]; 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; } } static uint8 *font_sprite_get_codepoint_bitmap(sint32 codepoint) { return &_characterBitmaps[font_sprite_get_codepoint_offset(codepoint) * 8]; } static sint32 scrolling_text_get_matching_or_oldest(rct_string_id stringId, uint16 scroll, uint16 scrollingMode) { uint32 oldestId = 0xFFFFFFFF; sint32 scrollIndex = -1; for (sint32 i = 0; i < MAX_SCROLLING_TEXT_ENTRIES; i++) { rct_draw_scroll_text *scrollText = &_drawScrollTextList[i]; if (oldestId >= scrollText->id) { oldestId = scrollText->id; scrollIndex = i; } // If exact match return the matching index uint32 stringArgs0, stringArgs1; memcpy(&stringArgs0, gCommonFormatArgs + 0, sizeof(uint32)); memcpy(&stringArgs1, gCommonFormatArgs + 4, sizeof(uint32)); if ( scrollText->string_id == stringId && scrollText->string_args_0 == stringArgs0 && scrollText->string_args_1 == stringArgs1 && scrollText->position == scroll && scrollText->mode == scrollingMode ) { scrollText->id = _drawSCrollNextIndex; return i + SPR_SCROLLING_TEXT_START; } } return scrollIndex; }