Exemple #1
0
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;
}
Exemple #2
0
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);
}
Exemple #3
0
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;
}