@thi.ng/color
Version:
Array-based color types, CSS parsing, conversions, transformations, declarative theme generation, gradients, presets
47 lines (46 loc) • 1.59 kB
JavaScript
import { clamp01 } from "@thi.ng/math/interval";
import { dotS3, dotS4 } from "@thi.ng/vectors/dots";
import { setC4 } from "@thi.ng/vectors/setc";
import { __ensureAlpha } from "./ensure.js";
const __mulV33 = (out, mat, src, clampOut = false) => {
const x = dotS3(mat, src, 0, 0, 3);
const y = dotS3(mat, src, 1, 0, 3);
const z = dotS3(mat, src, 2, 0, 3);
const a = __ensureAlpha(src[3]);
return clampOut ? setC4(out || src, clamp01(x), clamp01(y), clamp01(z), a) : setC4(out || src, x, y, z, a);
};
const __mulV45 = (out, mat, src, clampOut = true) => {
out = setC4(out || src, src[0], src[1], src[2], __ensureAlpha(src[3]));
const x = dotS4(out, mat, 0, 0) + mat[4];
const y = dotS4(out, mat, 0, 5) + mat[9];
const z = dotS4(out, mat, 0, 10) + mat[14];
const w = dotS4(out, mat, 0, 15) + mat[19];
return clampOut ? setC4(out, clamp01(x), clamp01(y), clamp01(z), clamp01(w)) : setC4(out, x, y, z, w);
};
const __mulM45 = (a, b) => [
dotS4(b, a, 0, 0, 1, 5),
dotS4(b, a, 0, 1, 1, 5),
dotS4(b, a, 0, 2, 1, 5),
dotS4(b, a, 0, 3, 1, 5),
dotS4(b, a, 0, 4, 1, 5) + b[4],
dotS4(b, a, 5, 0, 1, 5),
dotS4(b, a, 5, 1, 1, 5),
dotS4(b, a, 5, 2, 1, 5),
dotS4(b, a, 5, 3, 1, 5),
dotS4(b, a, 5, 4, 1, 5) + b[9],
dotS4(b, a, 10, 0, 1, 5),
dotS4(b, a, 10, 1, 1, 5),
dotS4(b, a, 10, 2, 1, 5),
dotS4(b, a, 10, 3, 1, 5),
dotS4(b, a, 10, 4, 1, 5) + b[14],
dotS4(b, a, 15, 0, 1, 5),
dotS4(b, a, 15, 1, 1, 5),
dotS4(b, a, 15, 2, 1, 5),
dotS4(b, a, 15, 3, 1, 5),
dotS4(b, a, 15, 4, 1, 5) + b[19]
];
export {
__mulM45,
__mulV33,
__mulV45
};