@thi.ng/shader-ast-stdlib
Version:
Function collection for modular GPGPU / shader programming with @thi.ng/shader-ast
30 lines (29 loc) • 895 B
JavaScript
import { F, V2 } from "@thi.ng/shader-ast/api/types";
import { ternary } from "@thi.ng/shader-ast/ast/controlflow";
import { defn, ret } from "@thi.ng/shader-ast/ast/function";
import { vec2 } from "@thi.ng/shader-ast/ast/lit";
import { 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, cos, length, sin } from "@thi.ng/shader-ast/builtin/math";
const sdfArc2 = defn(F, "sdfArc", [V2, F, F, F], (p, apert, ra, rb) => {
let q;
let sc;
return [
q = sym(vec2(abs($x(p)), $y(p))),
sc = sym(vec2(sin(apert), cos(apert))),
ret(
sub(
ternary(
gt(mul($y(sc), $x(q)), mul($x(sc), $y(q))),
length(madd(sc, neg(ra), q)),
abs(sub(length(q), ra))
),
rb
)
)
];
});
export {
sdfArc2
};