commit 3fa23b6
Devine Lu Linvega
·
2024-12-15 19:26:37 +0000 UTC
parent 9f409c9
(screen) Optimizations
1 files changed,
+17,
-15
+17,
-15
1@@ -209,24 +209,25 @@ screen_deo(Uint8 addr)
2 return;
3 }
4 case 0x2f: {
5- int i;
6 int ctrl = uxn.dev[0x2f];
7 int twobpp = !!(ctrl & 0x80);
8 int blend = ctrl & 0xf;
9 int fx = ctrl & 0x10 ? -1 : 1, fy = ctrl & 0x20 ? -1 : 1;
10- int x1, x2, y1, y2, ax, ay, qx, qy, x = rX, y = rY;
11+ int i, x1, x2, y1, y2, ax, ay, qx, qy, x = rX, y = rY;
12 int dxy = rDX * fy, dyx = rDY * fx, addr_incr = rMA << (1 + twobpp);
13- int len = MAR2(uxn_screen.width);
14+ int wmar = MAR(uxn_screen.width), wmar2 = MAR2(uxn_screen.width);
15+ int hmar2 = MAR2(uxn_screen.height);
16 Uint8 *layer = ctrl & 0x40 ? uxn_screen.fg : uxn_screen.bg;
17 if(twobpp)
18 for(i = 0; i <= rML; i++, x += dyx, y += dxy, rA += addr_incr) {
19- Uint16 xx = MAR(x), yy = MAR(y);
20- if(xx < MAR(uxn_screen.width) && MAR(yy) < MAR2(uxn_screen.height)) {
21+ Uint16 xmar = MAR(x), ymar = MAR(y);
22+ Uint16 xmar2 = MAR2(x), ymar2 = MAR2(y);
23+ if(xmar < wmar && ymar2 < hmar2) {
24 Uint8 *sprite = &uxn.ram[rA];
25- int opaque = blend % 5, by = (yy + 8) * len;
26- for(ay = yy * len, qy = fy < 0 ? 7 : 0; ay < by; ay += len, qy += fy) {
27- int ch1 = sprite[qy], ch2 = sprite[qy + 8] << 1, bx = xx + 8 + ay;
28- for(ax = xx + ay, qx = fx > 0 ? 7 : 0; ax < bx; ax++, qx -= fx) {
29+ int opaque = blend % 5, by = ymar2 * wmar2;
30+ for(ay = ymar * wmar2, qy = fy < 0 ? 7 : 0; ay < by; ay += wmar2, qy += fy) {
31+ int ch1 = sprite[qy], ch2 = sprite[qy + 8] << 1, bx = xmar2 + ay;
32+ for(ax = xmar + ay, qx = fx > 0 ? 7 : 0; ax < bx; ax++, qx -= fx) {
33 int color = ((ch1 >> qx) & 1) | ((ch2 >> qx) & 2);
34 if(opaque || color) layer[ax] = blending[color][blend];
35 }
36@@ -235,13 +236,14 @@ screen_deo(Uint8 addr)
37 }
38 else
39 for(i = 0; i <= rML; i++, x += dyx, y += dxy, rA += addr_incr) {
40- Uint16 xx = MAR(x), yy = MAR(y);
41- if(xx < MAR(uxn_screen.width) && MAR(yy) < MAR2(uxn_screen.height)) {
42+ Uint16 xmar = MAR(x), ymar = MAR(y);
43+ Uint16 xmar2 = MAR2(x), ymar2 = MAR2(y);
44+ if(xmar < wmar && ymar2 < hmar2) {
45 Uint8 *sprite = &uxn.ram[rA];
46- int opaque = blend % 5, by = (yy + 8) * len;
47- for(ay = yy * len, qy = fy < 0 ? 7 : 0; ay < by; ay += len, qy += fy) {
48- int ch1 = sprite[qy], bx = xx + 8 + ay;
49- for(ax = xx + ay, qx = fx > 0 ? 7 : 0; ax < bx; ax++, qx -= fx) {
50+ int opaque = blend % 5, by = ymar2 * wmar2;
51+ for(ay = ymar * wmar2, qy = fy < 0 ? 7 : 0; ay < by; ay += wmar2, qy += fy) {
52+ int ch1 = sprite[qy], bx = xmar2 + ay;
53+ for(ax = xmar + ay, qx = fx > 0 ? 7 : 0; ax < bx; ax++, qx -= fx) {
54 int color = (ch1 >> qx) & 1;
55 if(opaque || color) layer[ax] = blending[color][blend];
56 }