From a4092c4a6b1ad1589552c06b29a72d868ef778f1 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sun, 23 Apr 2023 17:16:39 +0200 Subject: Fix small font rendering and sprite drawing --- src/renderer.c | 73 ---------------------------------------------------------- 1 file changed, 73 deletions(-) (limited to 'src/renderer.c') diff --git a/src/renderer.c b/src/renderer.c index 07d79d6..65dfd2b 100644 --- a/src/renderer.c +++ b/src/renderer.c @@ -260,79 +260,6 @@ draw_filled_rect(size_t x0, size_t y0, size_t x1, size_t y1, u8 clr) { } } -IWRAM_CODE -void -draw_tile(size_t x, size_t y, Tile *tile, u8 clr, bool merge) { - BOUNDCHECK_SCREEN(x, y); - - // Find row position for the given x/y coordinates. - size_t tile_x = x / 8; - size_t tile_y = y / 8; - size_t start_col = x % 8; - size_t start_row = y % 8; - - // Get a pointer to the backbuffer and the tile row. - size_t pos = start_row + (tile_x + tile_y * 32) * 8; - u32 *backbuffer = &BACKBUF[pos]; - u32 *row = tile; - - // This will blend all colors weirdly if using tiles that contain colors - // higher than 1. - size_t shift_left = start_col * 4; - size_t shift_right = (8 - start_col) * 4; - u32 row_mask_left = merge ? 0 : 0xFFFFFFFF << shift_left; - u32 row_mask_right = merge ? 0 : 0xFFFFFFFF >> shift_right; - - // Draw the tiles. There are 4 possible cases: - // 1. The tile is exactly at the tile boundary. - // 2. The tile spans 2 tiles horizontally. - // 3. The tile spans 2 tiles vertically. - // 4. The tile spans 4 tiles. - if (start_col == 0 && start_row == 0) { - for (size_t i = 0; i < (8 - start_row); i++, backbuffer++) { - BOUNDCHECK_SCREEN(x, y + i); - backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i] * clr; - } - dirty_tiles[tile_y] |= 1 << tile_x; - } else if (start_row == 0) { - for (size_t i = 0; i < 8; i++, backbuffer++) { - BOUNDCHECK_SCREEN(x, y + i); - backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] * clr << shift_left); - backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] * clr >> shift_right); - } - dirty_tiles[tile_y] |= 1 << tile_x; - dirty_tiles[tile_y] |= 1 << (tile_x + 1); - } else if (start_col == 0) { - for (size_t i = 0; i < (8 - start_row); i++, backbuffer++) { - BOUNDCHECK_SCREEN(x, y + i); - backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i] * clr; - } - backbuffer += 8 * 31; - for (size_t i = (8 - start_row); i < 8; i++, backbuffer++) { - BOUNDCHECK_SCREEN(x, y + i); - backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i] * clr; - } - dirty_tiles[tile_y] |= 1 << tile_x; - dirty_tiles[tile_y + 1] |= 1 << tile_x; - } else { - for (size_t i = 0; i < (8 - start_row); i++, backbuffer++) { - BOUNDCHECK_SCREEN(x, y + i); - backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] * clr << shift_left); - backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] * clr >> shift_right); - } - backbuffer += 8 * 31; - for (size_t i = (8 - start_row); i < 8; i++, backbuffer++) { - BOUNDCHECK_SCREEN(x, y + i); - backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] * clr << shift_left); - backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] * clr >> shift_right); - } - dirty_tiles[tile_y] |= 1 << tile_x; - dirty_tiles[tile_y] |= 1 << (tile_x + 1); - dirty_tiles[tile_y + 1] |= 1 << tile_x; - dirty_tiles[tile_y + 1] |= 1 << (tile_x + 1); - } -} - void clear_screen(void) { dma_fill(FRONTBUF, 0, KB(20), 3); -- cgit v1.2.1