UNPKG

@thi.ng/shader-ast-stdlib

Version:

Function collection for modular GPGPU / shader programming with @thi.ng/shader-ast

36 lines (35 loc) 1.25 kB
import { F, V2 } from "@thi.ng/shader-ast/api/types"; import { assign } from "@thi.ng/shader-ast/ast/assign"; import { ifThen, ternary } from "@thi.ng/shader-ast/ast/controlflow"; import { defn, ret } from "@thi.ng/shader-ast/ast/function"; import { FLOAT0, FLOAT05, VEC2_0, vec2 } from "@thi.ng/shader-ast/ast/lit"; import { add, gt, madd, mul, neg, sub } from "@thi.ng/shader-ast/ast/ops"; import { $, $x, $y } from "@thi.ng/shader-ast/ast/swizzle"; import { sym } from "@thi.ng/shader-ast/ast/sym"; import { abs, length, max, min, sign } from "@thi.ng/shader-ast/builtin/math"; import { maxComp2 } from "../math/maxcomp.js"; const sdfCross2 = defn(F, "sdfCross2", [V2, V2, F], (p, size, r) => { let a, q, w; let k; return [ a = sym(abs(p)), ifThen(gt($y(a), $x(a)), [assign(a, $(a, "yx"))]), q = sym(sub(a, size)), k = sym(maxComp2(q)), w = sym( ternary(gt(k, FLOAT0), q, vec2(sub($y(size), $x(a)), neg(k))) ), ret(madd(sign(k), length(max(w, VEC2_0)), r)) ]; }); const sdfRoundedX2 = defn(F, "sdfRoundedX", [V2, F, F], (p, size, r) => { let q; return [ q = sym(abs(p)), ret(sub(length(sub(q, mul(min(add($x(q), $y(q)), size), FLOAT05))), r)) ]; }); export { sdfCross2, sdfRoundedX2 };