aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortslil clingman <>2021-09-26 12:10:44 -0400
committertslil clingman <>2021-09-26 12:10:44 -0400
commit8ddc801e21bb02d0de20351f692b48e2e19c94c4 (patch)
treed04eda8c76892e5c1fed2524b10de41d950d2419 /src
parent48f51653ae90bdabb5bb738a5c78cd9a53f498a9 (diff)
Of course i didn't need i32 ...
Diffstat (limited to 'src')
-rw-r--r--src/player.zig31
1 files changed, 12 insertions, 19 deletions
diff --git a/src/player.zig b/src/player.zig
index 491fc27..f6b82b1 100644
--- a/src/player.zig
+++ b/src/player.zig
@@ -39,30 +39,23 @@ fn fasterColourBlend(onto: Colour, from: Colour) Colour {
const af: u16 = from.a;
const of: u16 = onto.a;
- const na: u16 = af + @divTrunc(of * (255 - af), 255);
+ const ablend: u16 = @divTrunc(of * (255 - af), 255);
+ const na: u16 = af + ablend;
if (na == 0) return Colour.Black;
- const rf: i32 = from.r;
- const ro: i32 = onto.r;
- const gf: i32 = from.g;
- const go: i32 = onto.g;
- const bf: i32 = from.b;
- const bo: i32 = onto.b;
+ const rf: u16 = from.r;
+ const ro: u16 = onto.r;
+ const gf: u16 = from.g;
+ const go: u16 = onto.g;
+ const bf: u16 = from.b;
+ const bo: u16 = onto.b;
// The most accurate i've found is
- const nr = @divTrunc(ro * na + (rf - ro) * af, na);
- const ng = @divTrunc(go * na + (gf - go) * af, na);
- const nb = @divTrunc(bo * na + (bf - bo) * af, na);
+ const nr = @divTrunc(ro * ablend + rf * af, na);
+ const ng = @divTrunc(go * ablend + gf * af, na);
+ const nb = @divTrunc(bo * ablend + bf * af, na);
- // Note: there are other versions which don't require using intermediate
- // i32 division, and instead work on plain u16.
-
- // These computations are more expensive and less accurate
- // const nr = @divTrunc(af * rf, na) + ro - @divTrunc(af * ro, na);
- // const ng = @divTrunc(af * gf, na) + go - @divTrunc(af * go, na);
- // const nb = @divTrunc(af * bf, na) + bo - @divTrunc(af * bo, na);
-
- // These computations are incorrect, but fast
+ // These computations are incorrect, but faster
// const nr = (af * rf + (255 - af) * ro) / 255;
// const ng = (af * gf + (255 - af) * go) / 255;
// const nb = (af * bf + (255 - af) * bo) / 255;