From 4a1d607bcbd8f38714b0e003cb944a44ea326414 Mon Sep 17 00:00:00 2001 From: Dennis Ranke Date: Mon, 3 Apr 2023 00:09:02 +0200 Subject: [PATCH] optimize blitSprite --- platform/bin/platform.uw8 | Bin 4028 -> 4146 bytes platform/src/platform.cwa | 34 +++++++++++++++++++++++++--------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/platform/bin/platform.uw8 b/platform/bin/platform.uw8 index d19e1a901aa1fb7ece9eccebcdd816db94fda4ad..33b8e166afb379b646676d46934033d18a3cdf19 100644 GIT binary patch literal 4146 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 literal 4028 zcmV;t4@2+*Dc`Wd&Gq;iwcw`JdmO^_4jh_?W0@6OOsjT2Bgt^7I#6xE3+;4UIM+di zwh;)bdci;0ry^~2`>ydWR(vO6c0?sEB=VSR-{fUDGr>ANpV$84E23$dWav0UCkdRq z&H4HNFW);RU7V3}Wyh@qgs;($!Zo6yy#lR2k!AyNqoze;k+&}%#0~uFS7yPM_*E}M zIJnQVluGOzK?!L&9 zRt(+DxiUkfnxH4xGZ(OeVig;v7ua@cPThZuVD21yhzY{$X3K(92s;xF+Q>c>Hr*}a z79L->KM9~cnjuNVeVYsqa1PTE_{PF-lx8;Y zZEtE?;yZseJI4p~U0adUPJ&e0l

W_GCQ!7rEs}A@nm3m9n|OMK4CxMr7+@T;qN^ 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 16, size >> 16, width); + let lazy width = size & 65535; + let lazy height = select(size >> 16, size >> 16, width); + + let lazy x0 = select(x < 0, -x, 0); + let lazy x1 = select(x + width > 320, 320 - x, width); + let lazy y0 = select(y < 0, -y, 0); + let lazy y1 = select(y + height > 240, 240 - y, height); + + let lazy numRows = y1 - y0; + let lazy numCols = x1 - x0; + if numRows <= 0 | numCols <= 0 { + return; + } + let trans = (control & 511) - 256; - let flip_x = 1 - ((control >> 8) & 2); - let flip_y = 1 - ((control >> 9) & 2); + let lazy flip_x = 1 - ((control >> 8) & 2); + let lazy flip_y = 1 - ((control >> 9) & 2); if flip_x < 0 { sprite += width - 1; } @@ -365,17 +377,21 @@ export fn blitSprite(sprite: i32, size: i32, x: i32, y: i32, control: i32) { sprite += (height - 1) * width; } - let ly = 0; + let srcRow = sprite + x0 * flip_x + y0 * flip_y * width; + let dstRow = x + x0 + (y + y0) * 320; + loop yloop { let lx = 0; loop xloop { - let col = (sprite + lx * flip_x + ly * flip_y * height)?0; + let lazy col = (srcRow + lx * flip_x)?0; if col != trans { - setPixel(x + lx, y + ly, col); + (dstRow + lx)?120 = col; } - branch_if (lx +:= 1) < width: xloop; + branch_if (lx +:= 1) < numCols: xloop; } - branch_if (ly +:= 1) < height: yloop; + srcRow += width * flip_y; + dstRow += 320; + branch_if numRows -:= 1: yloop; } }