commit 47b472b
Devine Lu Linvega
·
2024-11-26 01:51:15 +0000 UTC
parent 597efb3
(screen) Inlined rect primitive
3 files changed,
+18,
-26
+16,
-23
1@@ -67,16 +67,6 @@ screen_fill(Uint8 *layer, int color)
2 layer[i] = color;
3 }
4
5-void
6-screen_rect(Uint8 *layer, Uint16 x1, Uint16 y1, Uint16 x2, Uint16 y2, int color)
7-{
8- int ax, bx, ay, by;
9- int w = MAR2(uxn_screen.width), hor = x2 - x1, ver = y2 - y1;
10- for(ay = y1 * w, by = ay + ver * w; ay < by; ay += w)
11- for(ax = ay + x1, bx = ax + hor; ax < bx; ax++)
12- layer[ax] = color;
13-}
14-
15 void
16 screen_palette(void)
17 {
18@@ -189,21 +179,24 @@ screen_deo(Uxn *u, Uint8 addr)
19 case 0x2c:
20 case 0x2d: rA = (u->dev[0x2c] << 8) | u->dev[0x2d]; return;
21 case 0x2e: {
22- Uint8 ctrl = u->dev[0x2e];
23- Uint8 color = ctrl & 0x3;
24+ int ctrl = u->dev[0x2e];
25+ int color = ctrl & 0x3;
26 Uint8 *layer = ctrl & 0x40 ? uxn_screen.fg : uxn_screen.bg;
27 /* fill mode */
28 if(ctrl & 0x80) {
29- Uint16 x1, y1, x2, y2;
30+ int x1, y1, x2, y2, ax, bx, ay, by, w, hor, ver;
31 if(ctrl & 0x10)
32- x1 = 0, x2 = rX;
33+ x1 = MAR(0), x2 = MAR(rX);
34 else
35- x1 = rX, x2 = uxn_screen.width;
36+ x1 = MAR(rX), x2 = MAR(uxn_screen.width);
37 if(ctrl & 0x20)
38- y1 = 0, y2 = rY;
39+ y1 = MAR(0), y2 = MAR(rY);
40 else
41- y1 = rY, y2 = uxn_screen.height;
42- screen_rect(layer, MAR(x1), MAR(y1), MAR(x2), MAR(y2), color);
43+ y1 = MAR(rY), y2 = MAR(uxn_screen.height);
44+ w = MAR2(uxn_screen.width), hor = x2 - x1, ver = y2 - y1;
45+ for(ay = y1 * w, by = ay + ver * w; ay < by; ay += w)
46+ for(ax = ay + x1, bx = ax + hor; ax < bx; ax++)
47+ layer[ax] = color;
48 screen_change(x1, y1, x2, y2);
49 }
50 /* pixel mode */
51@@ -218,14 +211,14 @@ screen_deo(Uxn *u, Uint8 addr)
52 return;
53 }
54 case 0x2f: {
55- Uint8 i;
56- Uint8 ctrl = u->dev[0x2f];
57- Uint8 twobpp = !!(ctrl & 0x80);
58- Uint8 blend = ctrl & 0xf;
59- Uint8 *layer = ctrl & 0x40 ? uxn_screen.fg : uxn_screen.bg;
60+ int i;
61+ int ctrl = u->dev[0x2f];
62+ int twobpp = !!(ctrl & 0x80);
63+ int blend = ctrl & 0xf;
64 int fx = ctrl & 0x10 ? -1 : 1, fy = ctrl & 0x20 ? -1 : 1;
65 int x1, x2, y1, y2, ax, ay, qx, qy, x = rX, y = rY;
66 int dxy = rDX * fy, dyx = rDY * fx, addr_incr = rMA << (1 + twobpp);
67+ Uint8 *layer = ctrl & 0x40 ? uxn_screen.fg : uxn_screen.bg;
68 if(twobpp)
69 for(i = 0; i <= rML; i++, x += dyx, y += dxy, rA += addr_incr) {
70 Uint16 xx = MAR(x), yy = MAR(y);
+0,
-1
1@@ -20,7 +20,6 @@ extern int emu_resize(int width, int height);
2 int screen_changed(void);
3 void screen_change(int x1, int y1, int x2, int y2);
4 void screen_fill(Uint8 *layer, int color);
5-void screen_rect(Uint8 *layer, Uint16 x1, Uint16 y1, Uint16 x2, Uint16 y2, int color);
6 void screen_palette(void);
7 void screen_resize(Uint16 width, Uint16 height, int scale);
8 void screen_redraw();
+2,
-2
1@@ -93,8 +93,8 @@ emu_restart(char *rom, int soft)
2 {
3 close_console();
4 screen_resize(WIDTH, HEIGHT, uxn_screen.scale);
5- screen_rect(uxn_screen.bg, 0, 0, uxn_screen.width, uxn_screen.height, 0);
6- screen_rect(uxn_screen.fg, 0, 0, uxn_screen.width, uxn_screen.height, 0);
7+ screen_fill(uxn_screen.bg, 0);
8+ screen_fill(uxn_screen.fg, 0);
9 system_reboot(rom, soft);
10 }
11