commit ecb68cf

Devine Lu Linvega  ·  2024-11-25 23:44:05 +0000 UTC
parent cd26378
(screen) faster rect primitive
1 files changed,  +6, -5
+6, -5
 1@@ -70,10 +70,11 @@ screen_fill(Uint8 *layer, int color)
 2 void
 3 screen_rect(Uint8 *layer, Uint16 x1, Uint16 y1, Uint16 x2, Uint16 y2, int color)
 4 {
 5-	int row, x, y, w = MAR2(uxn_screen.width), h = MAR2(uxn_screen.height);
 6-	for(y = y1; y < y2 && y < h; y++)
 7-		for(x = x1, row = y * w; x < x2 && x < w; x++)
 8-			layer[x + row] = color;
 9+	int ax, bx, ay, by;
10+	int w = MAR2(uxn_screen.width), hor = x2 - x1, ver = y2 - y1;
11+	for(ay = y1 * w, by = ay + ver * w; ay < by; ay += w)
12+		for(ax = ay + x1, bx = ax + hor; ax < bx; ax++)
13+			layer[ax] = color;
14 }
15 
16 void
17@@ -202,7 +203,7 @@ screen_deo(Uxn *u, Uint8 addr)
18 				y1 = 0, y2 = rY;
19 			else
20 				y1 = rY, y2 = uxn_screen.height;
21-			screen_rect(layer, MAR(x1), MAR(y1), MAR(x2), MAR(y2), color);
22+			screen_rect(layer, MAR(x1), MAR(y1), MAR2(x2), MAR(y2), color);
23 			screen_change(x1, y1, x2, y2);
24 		}
25 		/* pixel mode */