From be6617308ea796d2a41007a7bee1472884e189f7 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Thu, 20 May 2021 16:02:45 +0200 Subject: Change dirty_tiles to use a u32[20] instead of u8[20][30] --- Makefile | 2 +- src/text.h | 2 +- src/uxn/devices/ppu.c | 25 +++++++++++++++---------- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index 07b662b..89f64a2 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,7 @@ CFLAGS += -mcpu=arm7tdmi -mtune=arm7tdmi $(ARCH) CFLAGS += -I$(LIBGBA_SRC) LDFLAGS := $(ARCH) $(SPECS) LDLIBS := $(LIBGBA) -RELEASE_CFLAGS := -DNDEBUG -O2 -g +RELEASE_CFLAGS := -DNDEBUG -O2 DEBUG_CFLAGS := -DDEBUG -O2 -g .PHONY: clean run diff --git a/src/text.h b/src/text.h index b90c160..0b318bb 100644 --- a/src/text.h +++ b/src/text.h @@ -133,7 +133,7 @@ txt_putc_hybrid(char c) { int y = text_engine.cursor_y; Tile *buf = text_engine.memory; buf[x + y * 30] = tile; - dirty_tiles[y][x] = 1; + dirty_tiles[y] |= 1 << x; text_engine.cursor_x += 1; if (text_engine.cursor_x >= 30) { text_engine.cursor_x = 0; diff --git a/src/uxn/devices/ppu.c b/src/uxn/devices/ppu.c index 3865e95..0935329 100644 --- a/src/uxn/devices/ppu.c +++ b/src/uxn/devices/ppu.c @@ -144,7 +144,7 @@ static Uint32 unpack_icon_lut_flipx[256] = { u32 *backbuffer_bg0; u32 *backbuffer_bg1; -static u8 dirty_tiles[20][30] = {0}; +static u32 dirty_tiles[20] = {0}; void putcolors(Ppu *p, Uint8 *addr) { @@ -170,7 +170,7 @@ putpixel(Ppu *p, Uint32 *layer, Uint16 x, Uint16 y, Uint8 color) { Uint32 pos = (start_row + ((tile_x + tile_y * 30) * 8)); Uint32 shift = start_col * 4; layer[pos] = (layer[pos] & (~(0xF << shift))) | (color << shift); - dirty_tiles[tile_y][tile_x] = 1; + dirty_tiles[tile_y] |= 1 << tile_x; } void @@ -198,7 +198,7 @@ puticn(Ppu *p, Uint32 *layer, Uint16 x, Uint16 y, Uint8 *sprite, Uint8 color, for (size_t i = 0; i < 8; ++i) { layer_ptr[i] = lut[sprite[i ^ flipy]] * color; } - dirty_tiles[tile_y][tile_x] = 1; + dirty_tiles[tile_y] |= 1 << tile_x; } else { u32 row_mask = 0xFFFFFFFF << shift_left; for (size_t i = 0; i < (8 - start_row); ++i) { @@ -214,10 +214,10 @@ puticn(Ppu *p, Uint32 *layer, Uint16 x, Uint16 y, Uint8 *sprite, Uint8 color, layer_ptr[8] = (layer_ptr[8] & row_mask) | (sprite_row >> shift_right); layer_ptr++; } - dirty_tiles[tile_y][tile_x] = 1; - dirty_tiles[tile_y][tile_x + 1] = 1; - dirty_tiles[tile_y + 1][tile_x] = 1; - dirty_tiles[tile_y + 1][tile_x + 1] = 1; + 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); } } @@ -242,15 +242,20 @@ flipbuf(Ppu *p) { Tile *mem_fg = &TILE_MEM[0]; Tile *mem_bg = &TILE_MEM[2]; for (size_t j = 0; j < 20; ++j) { - for (size_t i = 0; i < 30; ++i) { - if (dirty_tiles[j][i] != 0) { + if (dirty_tiles[j] == 0) { + continue; + } + + size_t k = 1; + for (size_t i = 0; i < 30; ++i, k <<= 1) { + if (dirty_tiles[j] & k) { Tile *tile_fg = p->fg; Tile *tile_bg = p->bg; mem_fg[i + j * 30] = tile_fg[i + j * 30]; mem_bg[i + j * 30] = tile_bg[i + j * 30]; - dirty_tiles[j][i] = 0; } } + dirty_tiles[j] = 0; } } -- cgit v1.2.1