@thi.ng/shader-ast-stdlib
Version:
Function collection for modular GPGPU / shader programming with @thi.ng/shader-ast
30 lines (29 loc) • 848 B
JavaScript
import { F, V2 } from "@thi.ng/shader-ast/api/types";
import { defn, ret } from "@thi.ng/shader-ast/ast/function";
import { FLOAT0, vec2 } from "@thi.ng/shader-ast/ast/lit";
import { mul, subSelf } 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,
clamp,
dot,
length,
min,
sign
} from "@thi.ng/shader-ast/builtin/math";
const sdfHexagon2 = defn(F, "sdfHexagon2", [V2, F], (p, r) => {
const TAN30 = 0.5773502691896257;
let k, q;
return [
// sin/cos @ 60deg
k = sym(vec2(-0.8660254037844386, 0.5)),
q = sym(abs(p)),
subSelf(q, mul(k, mul(2, min(dot(k, q), FLOAT0)))),
subSelf(q, vec2(clamp($x(q), mul(r, -TAN30), mul(r, TAN30)), r)),
ret(mul(length(q), sign($y(q))))
];
});
export {
sdfHexagon2
};