diff options
author | Bad Diode <bd@badd10de.dev> | 2021-05-20 16:02:45 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-05-20 16:02:45 +0200 |
commit | be6617308ea796d2a41007a7bee1472884e189f7 (patch) | |
tree | a705ae55184c22a3400cd4c74344d28a2a3d6fae | |
parent | b117f5a58045769c0a65f77967fa3a2aefde721e (diff) | |
download | uxngba-be6617308ea796d2a41007a7bee1472884e189f7.tar.gz uxngba-be6617308ea796d2a41007a7bee1472884e189f7.zip |
Change dirty_tiles to use a u32[20] instead of u8[20][30]
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | src/text.h | 2 | ||||
-rw-r--r-- | src/uxn/devices/ppu.c | 25 |
3 files changed, 17 insertions, 12 deletions
@@ -37,7 +37,7 @@ CFLAGS += -mcpu=arm7tdmi -mtune=arm7tdmi $(ARCH) | |||
37 | CFLAGS += -I$(LIBGBA_SRC) | 37 | CFLAGS += -I$(LIBGBA_SRC) |
38 | LDFLAGS := $(ARCH) $(SPECS) | 38 | LDFLAGS := $(ARCH) $(SPECS) |
39 | LDLIBS := $(LIBGBA) | 39 | LDLIBS := $(LIBGBA) |
40 | RELEASE_CFLAGS := -DNDEBUG -O2 -g | 40 | RELEASE_CFLAGS := -DNDEBUG -O2 |
41 | DEBUG_CFLAGS := -DDEBUG -O2 -g | 41 | DEBUG_CFLAGS := -DDEBUG -O2 -g |
42 | 42 | ||
43 | .PHONY: clean run | 43 | .PHONY: clean run |
@@ -133,7 +133,7 @@ txt_putc_hybrid(char c) { | |||
133 | int y = text_engine.cursor_y; | 133 | int y = text_engine.cursor_y; |
134 | Tile *buf = text_engine.memory; | 134 | Tile *buf = text_engine.memory; |
135 | buf[x + y * 30] = tile; | 135 | buf[x + y * 30] = tile; |
136 | dirty_tiles[y][x] = 1; | 136 | dirty_tiles[y] |= 1 << x; |
137 | text_engine.cursor_x += 1; | 137 | text_engine.cursor_x += 1; |
138 | if (text_engine.cursor_x >= 30) { | 138 | if (text_engine.cursor_x >= 30) { |
139 | text_engine.cursor_x = 0; | 139 | 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] = { | |||
144 | 144 | ||
145 | u32 *backbuffer_bg0; | 145 | u32 *backbuffer_bg0; |
146 | u32 *backbuffer_bg1; | 146 | u32 *backbuffer_bg1; |
147 | static u8 dirty_tiles[20][30] = {0}; | 147 | static u32 dirty_tiles[20] = {0}; |
148 | 148 | ||
149 | void | 149 | void |
150 | putcolors(Ppu *p, Uint8 *addr) { | 150 | putcolors(Ppu *p, Uint8 *addr) { |
@@ -170,7 +170,7 @@ putpixel(Ppu *p, Uint32 *layer, Uint16 x, Uint16 y, Uint8 color) { | |||
170 | Uint32 pos = (start_row + ((tile_x + tile_y * 30) * 8)); | 170 | Uint32 pos = (start_row + ((tile_x + tile_y * 30) * 8)); |
171 | Uint32 shift = start_col * 4; | 171 | Uint32 shift = start_col * 4; |
172 | layer[pos] = (layer[pos] & (~(0xF << shift))) | (color << shift); | 172 | layer[pos] = (layer[pos] & (~(0xF << shift))) | (color << shift); |
173 | dirty_tiles[tile_y][tile_x] = 1; | 173 | dirty_tiles[tile_y] |= 1 << tile_x; |
174 | } | 174 | } |
175 | 175 | ||
176 | void | 176 | void |
@@ -198,7 +198,7 @@ puticn(Ppu *p, Uint32 *layer, Uint16 x, Uint16 y, Uint8 *sprite, Uint8 color, | |||
198 | for (size_t i = 0; i < 8; ++i) { | 198 | for (size_t i = 0; i < 8; ++i) { |
199 | layer_ptr[i] = lut[sprite[i ^ flipy]] * color; | 199 | layer_ptr[i] = lut[sprite[i ^ flipy]] * color; |
200 | } | 200 | } |
201 | dirty_tiles[tile_y][tile_x] = 1; | 201 | dirty_tiles[tile_y] |= 1 << tile_x; |
202 | } else { | 202 | } else { |
203 | u32 row_mask = 0xFFFFFFFF << shift_left; | 203 | u32 row_mask = 0xFFFFFFFF << shift_left; |
204 | for (size_t i = 0; i < (8 - start_row); ++i) { | 204 | 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, | |||
214 | layer_ptr[8] = (layer_ptr[8] & row_mask) | (sprite_row >> shift_right); | 214 | layer_ptr[8] = (layer_ptr[8] & row_mask) | (sprite_row >> shift_right); |
215 | layer_ptr++; | 215 | layer_ptr++; |
216 | } | 216 | } |
217 | dirty_tiles[tile_y][tile_x] = 1; | 217 | dirty_tiles[tile_y] |= 1 << tile_x; |
218 | dirty_tiles[tile_y][tile_x + 1] = 1; | 218 | dirty_tiles[tile_y] |= 1 << (tile_x + 1); |
219 | dirty_tiles[tile_y + 1][tile_x] = 1; | 219 | dirty_tiles[tile_y + 1] |= 1 << tile_x; |
220 | dirty_tiles[tile_y + 1][tile_x + 1] = 1; | 220 | dirty_tiles[tile_y + 1] |= 1 << (tile_x + 1); |
221 | } | 221 | } |
222 | } | 222 | } |
223 | 223 | ||
@@ -242,15 +242,20 @@ flipbuf(Ppu *p) { | |||
242 | Tile *mem_fg = &TILE_MEM[0]; | 242 | Tile *mem_fg = &TILE_MEM[0]; |
243 | Tile *mem_bg = &TILE_MEM[2]; | 243 | Tile *mem_bg = &TILE_MEM[2]; |
244 | for (size_t j = 0; j < 20; ++j) { | 244 | for (size_t j = 0; j < 20; ++j) { |
245 | for (size_t i = 0; i < 30; ++i) { | 245 | if (dirty_tiles[j] == 0) { |
246 | if (dirty_tiles[j][i] != 0) { | 246 | continue; |
247 | } | ||
248 | |||
249 | size_t k = 1; | ||
250 | for (size_t i = 0; i < 30; ++i, k <<= 1) { | ||
251 | if (dirty_tiles[j] & k) { | ||
247 | Tile *tile_fg = p->fg; | 252 | Tile *tile_fg = p->fg; |
248 | Tile *tile_bg = p->bg; | 253 | Tile *tile_bg = p->bg; |
249 | mem_fg[i + j * 30] = tile_fg[i + j * 30]; | 254 | mem_fg[i + j * 30] = tile_fg[i + j * 30]; |
250 | mem_bg[i + j * 30] = tile_bg[i + j * 30]; | 255 | mem_bg[i + j * 30] = tile_bg[i + j * 30]; |
251 | dirty_tiles[j][i] = 0; | ||
252 | } | 256 | } |
253 | } | 257 | } |
258 | dirty_tiles[j] = 0; | ||
254 | } | 259 | } |
255 | } | 260 | } |
256 | 261 | ||