Browse code

Optimized ppu_redraw

neauoire authored on 24/12/2021 18:10:55
Showing 2 changed files
... ...
@@ -12,8 +12,6 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 12
 WITH REGARD TO THIS SOFTWARE.
13 13
 */
14 14
 
15
-/* byte: p0-bg | p0-fg | p1-bg | p1-fg */
16
-
17 15
 static Uint8 blending[5][16] = {
18 16
 	{0, 0, 0, 0, 1, 0, 1, 1, 2, 2, 0, 2, 3, 3, 3, 0},
19 17
 	{0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3},
... ...
@@ -58,10 +56,10 @@ ppu_palette(Ppu *p, Uint8 *addr)
58 56
 void
59 57
 ppu_resize(Ppu *p, Uint16 width, Uint16 height)
60 58
 {
61
-	Uint8 *bg, *fg;
62
-	if(!(bg = realloc(p->bg, width * height)))
63
-		return;
64
-	if(!(fg = realloc(p->fg, width * height)))
59
+	Uint8 
60
+	*bg = realloc(p->bg, width * height), 
61
+	*fg = realloc(p->fg, width * height);
62
+	if(!bg || !fg)
65 63
 		return;
66 64
 	p->bg = bg;
67 65
 	p->fg = fg;
... ...
@@ -82,13 +80,9 @@ ppu_clear(Ppu *p, Uint8 *layer)
82 80
 void
83 81
 ppu_redraw(Ppu *p, Uint32 *screen)
84 82
 {
85
-	Uint16 x, y;
86
-	for(y = 0; y < p->height; ++y)
87
-		for(x = 0; x < p->width; ++x) {
88
-			Uint32 row = (x + y * p->width);
89
-			Uint8 color = p->fg[row] ? p->fg[row] : p->bg[row];
90
-			screen[x + y * p->width] = p->palette[color];
91
-		}
83
+	Uint32 i, size = p->width * p->height;
84
+	for(i = 0; i < size; ++i)
85
+		screen[i] = p->palette[p->fg[i] ? p->fg[i] : p->bg[i]];
92 86
 	p->reqdraw = 0;
93 87
 }
94 88
 
... ...
@@ -30,7 +30,7 @@ void ppu_palette(Ppu *p, Uint8 *addr);
30 30
 void ppu_resize(Ppu *p, Uint16 width, Uint16 height);
31 31
 void ppu_clear(Ppu *p, Uint8 *layer);
32 32
 void ppu_redraw(Ppu *p, Uint32 *screen);
33
-Uint8 ppu_read(Ppu *p, Uint16 x, Uint16 y);
33
+
34 34
 void ppu_write(Ppu *p, Uint8 *layer, Uint16 x, Uint16 y, Uint8 color);
35 35
 void ppu_1bpp(Ppu *p, Uint8 *layer, Uint16 x, Uint16 y, Uint8 *sprite, Uint8 color, Uint8 flipx, Uint8 flipy);
36 36
 void ppu_2bpp(Ppu *p, Uint8 *layer, Uint16 x, Uint16 y, Uint8 *sprite, Uint8 color, Uint8 flipx, Uint8 flipy);