UNPKG

@thi.ng/shader-ast

Version:

DSL to define shader code in TypeScript and cross-compile to GLSL, JS and other targets

161 lines 11.5 kB
import type { Assign, Op1, Op2, Sym, Term } from "../api/nodes.js"; import type { Operator } from "../api/ops.js"; import type { BoolTerm, FloatTerm, IntTerm, Mat2Term, Mat3Term, Mat4Term, UintTerm, Vec2Term, Vec3Term, Vec4Term } from "../api/terms.js"; import type { Comparable, IVec, Int, Mat, NumericF, NumericI, NumericU, Prim, Type, UVec, Vec } from "../api/types.js"; export declare const op1: <T extends Type>(op: Operator, val: Term<T>, post?: boolean) => Op1<T>; export declare const op2: (op: Operator, _l: Term<any> | number, _r: Term<any> | number, rtype?: Type, info?: string) => Op2<any>; export declare const inc: <T extends Prim | Int>(t: Sym<T>) => Op1<T>; export declare const dec: <T extends Prim | Int>(t: Sym<T>) => Op1<T>; export declare function add<A extends Prim | Int | IVec | Mat, B extends A>(l: Term<A>, r: Term<B>): Op2<A>; export declare function add<T extends Int | "float">(l: number, r: Term<T>): Op2<T>; export declare function add<T extends Int | "float">(l: Term<T>, r: number): Op2<T>; export declare function add<T extends Vec | Mat>(l: FloatTerm | number, r: Term<T>): Op2<T>; export declare function add<T extends Vec | Mat>(l: Term<T>, r: FloatTerm | number): Op2<T>; export declare function add<T extends IVec>(l: IntTerm | number, r: Term<T>): Op2<T>; export declare function add<T extends IVec>(l: Term<T>, r: IntTerm | number): Op2<T>; export declare function add<T extends UVec>(l: UintTerm | number, r: Term<T>): Op2<T>; export declare function add<T extends UVec>(l: Term<T>, r: UintTerm | number): Op2<T>; export declare function addSelf<A extends Prim | Int | IVec | Mat, B extends A>(l: Sym<A>, r: Term<B>): Assign<A>; export declare function addSelf<T extends Int | "float">(l: Sym<T>, r: number): Assign<T>; export declare function addSelf<T extends Vec | Mat>(l: Sym<T>, r: FloatTerm | number): Assign<T>; export declare function addSelf<T extends IVec>(l: Sym<T>, r: IntTerm | number): Assign<T>; export declare function addSelf<T extends UVec>(l: Sym<T>, r: UintTerm | number): Assign<T>; export declare function sub<A extends Prim | Int | IVec | Mat, B extends A>(l: Term<A>, r: Term<B>): Op2<A>; export declare function sub<T extends Int | "float">(l: number, r: Term<T>): Op2<T>; export declare function sub<T extends Int | "float">(l: Term<T>, r: number): Op2<T>; export declare function sub<T extends Vec | Mat>(l: FloatTerm | number, r: Term<T>): Op2<T>; export declare function sub<T extends Vec | Mat>(l: Term<T>, r: FloatTerm | number): Op2<T>; export declare function sub<T extends IVec>(l: IntTerm | number, r: Term<T>): Op2<T>; export declare function sub<T extends IVec>(l: Term<T>, r: IntTerm | number): Op2<T>; export declare function sub<T extends UVec>(l: UintTerm | number, r: Term<T>): Op2<T>; export declare function sub<T extends UVec>(l: Term<T>, r: UintTerm | number): Op2<T>; export declare function subSelf<A extends Prim | Int | IVec | Mat, B extends A>(l: Sym<A>, r: Term<B>): Assign<A>; export declare function subSelf<T extends Int | "float">(l: Sym<T>, r: number): Assign<T>; export declare function subSelf<T extends Vec | Mat>(l: Sym<T>, r: FloatTerm | number): Assign<T>; export declare function subSelf<T extends IVec>(l: Sym<T>, r: IntTerm | number): Assign<T>; export declare function subSelf<T extends UVec>(l: Sym<T>, r: UintTerm | number): Assign<T>; export declare function mul<A extends Prim | Int | IVec | Mat, B extends A>(l: Term<A>, r: Term<B>): Op2<A>; export declare function mul<T extends Int | "float">(l: number, r: Term<T>): Op2<T>; export declare function mul<T extends Int | "float">(l: Term<T>, r: number): Op2<T>; export declare function mul<T extends Vec | Mat>(l: FloatTerm | number, r: Term<T>): Op2<T>; export declare function mul<T extends Vec | Mat>(l: Term<T>, r: FloatTerm | number): Op2<T>; export declare function mul<T extends IVec>(l: IntTerm | number, r: Term<T>): Op2<T>; export declare function mul<T extends IVec>(l: Term<T>, r: IntTerm | number): Op2<T>; export declare function mul<T extends UVec>(l: UintTerm | number, r: Term<T>): Op2<T>; export declare function mul<T extends UVec>(l: Term<T>, r: UintTerm | number): Op2<T>; export declare function mul(l: Mat2Term, r: Vec2Term): Op2<"vec2">; export declare function mul(l: Mat3Term, r: Vec3Term): Op2<"vec3">; export declare function mul(l: Mat4Term, r: Vec4Term): Op2<"vec4">; export declare function mul(l: Vec2Term, r: Mat2Term): Op2<"vec2">; export declare function mul(l: Vec3Term, r: Mat3Term): Op2<"vec3">; export declare function mul(l: Vec4Term, r: Mat4Term): Op2<"vec4">; export declare function mulSelf<A extends Prim | Int | IVec | Mat, B extends A>(l: Sym<A>, r: Term<B>): Assign<A>; export declare function mulSelf<T extends Int | "float">(l: Sym<T>, r: number): Assign<T>; export declare function mulSelf<T extends Vec | Mat>(l: Sym<T>, r: FloatTerm | number): Assign<T>; export declare function mulSelf<T extends IVec>(l: Sym<T>, r: IntTerm | number): Assign<T>; export declare function mulSelf<T extends UVec>(l: Sym<T>, r: UintTerm | number): Assign<T>; export declare function div<A extends Prim | Int | IVec | Mat, B extends A>(l: Term<A>, r: Term<B>): Op2<A>; export declare function div<T extends Int | "float">(l: number, r: Term<T>): Op2<T>; export declare function div<T extends Int | "float">(l: Term<T>, r: number): Op2<T>; export declare function div<T extends Vec | Mat>(l: FloatTerm | number, r: Term<T>): Op2<T>; export declare function div<T extends Vec | Mat>(l: Term<T>, r: FloatTerm | number): Op2<T>; export declare function div<T extends IVec>(l: IntTerm | number, r: Term<T>): Op2<T>; export declare function div<T extends IVec>(l: Term<T>, r: IntTerm | number): Op2<T>; export declare function div<T extends UVec>(l: UintTerm | number, r: Term<T>): Op2<T>; export declare function div<T extends UVec>(l: Term<T>, r: UintTerm | number): Op2<T>; export declare function divSelf<A extends Prim | Int | IVec | Mat, B extends A>(l: Sym<A>, r: Term<B>): Assign<A>; export declare function divSelf<T extends Int | "float">(l: Sym<T>, r: number): Assign<T>; export declare function divSelf<T extends Vec | Mat>(l: Sym<T>, r: FloatTerm | number): Assign<T>; export declare function divSelf<T extends IVec>(l: Sym<T>, r: IntTerm | number): Assign<T>; export declare function divSelf<T extends UVec>(l: Sym<T>, r: UintTerm | number): Assign<T>; /** * Integer % (modulo) operator * * @param l - * @param r - */ export declare function modi<A extends Int | IVec | UVec, B extends A>(l: Term<A>, r: Term<B>): Op2<A>; export declare function modi<T extends IVec>(l: IntTerm | number, r: Term<T>): Op2<T>; export declare function modi<T extends IVec>(l: Term<T>, r: IntTerm | number): Op2<T>; export declare function modi<T extends UVec>(l: UintTerm | number, r: Term<T>): Op2<T>; export declare function modi<T extends UVec>(l: Term<T>, r: UintTerm | number): Op2<T>; /** * Syntax sugar for `-x`. * * @param val - */ export declare const neg: <T extends Prim | Int | IVec | Mat>(val: Term<T>) => Op1<T>; /** * Syntax sugar for `1 / x`. * * @param val - */ export declare const reciprocal: <T extends Prim>(val: Term<T>) => Op2<T>; /** * Multiply-add: a * b + c. The `b` and `c` terms must be compatible with `a`. * * @param a - * @param b - * @param c - */ export declare function madd<A extends Prim, B extends A, C extends B>(a: Term<A>, b: Term<B> | NumericF, c: Term<C> | NumericF): Term<A>; export declare function madd<A extends IVec | "int", B extends A, C extends B>(a: Term<A>, b: Term<B> | NumericI, c: Term<C> | NumericI): Term<A>; export declare function madd<A extends UVec | "uint", B extends A, C extends B>(a: Term<A>, b: Term<B> | NumericU, c: Term<C> | NumericU): Term<A>; /** * Add-multiply: (a + b) * c. The `b` and `c` terms must be compatible with `a`. * * @param a - * @param b - * @param c - */ export declare function addm<A extends Prim, B extends A, C extends B>(a: Term<A>, b: Term<B> | NumericF, c: Term<C> | NumericF): Term<A>; export declare function addm<A extends IVec | "int", B extends A, C extends B>(a: Term<A>, b: Term<B> | NumericI, c: Term<C> | NumericI): Term<A>; export declare function addm<A extends UVec | "uint", B extends A, C extends B>(a: Term<A>, b: Term<B> | NumericU, c: Term<C> | NumericU): Term<A>; export declare const not: (val: BoolTerm) => Op1<"bool">; export declare const or: (a: BoolTerm, b: BoolTerm) => Op2<any>; export declare const and: (a: BoolTerm, b: BoolTerm) => Op2<any>; export declare const eq: <A extends Comparable, B extends A>(a: Term<A>, b: Term<B>) => BoolTerm; export declare const neq: <A extends Comparable, B extends A>(a: Term<A>, b: Term<B>) => BoolTerm; export declare const lt: <A extends Comparable, B extends A>(a: Term<A>, b: Term<B>) => BoolTerm; export declare const lte: <A extends Comparable, B extends A>(a: Term<A>, b: Term<B>) => BoolTerm; export declare const gt: <A extends Comparable, B extends A>(a: Term<A>, b: Term<B>) => BoolTerm; export declare const gte: <A extends Comparable, B extends A>(a: Term<A>, b: Term<B>) => BoolTerm; export declare const bitnot: <T extends IntTerm | UintTerm | Term<IVec> | Term<UVec>>(val: T) => Op1<"int" | "uint" | IVec | UVec>; export declare function bitand<A extends Int | IVec | UVec, B extends A>(l: Term<A>, r: Term<B>): Term<A>; export declare function bitand<T extends IVec>(l: Term<T>, r: IntTerm | number): Term<T>; export declare function bitand<T extends IVec>(l: IntTerm | number, r: Term<T>): Term<T>; export declare function bitand<T extends UVec>(l: Term<T>, r: UintTerm | number): Term<T>; export declare function bitand<T extends UVec>(l: UintTerm | number, r: Term<T>): Term<T>; export declare function bitor<A extends Int | IVec | UVec, B extends A>(l: Term<A>, r: Term<B>): Term<A>; export declare function bitor<T extends IVec>(l: Term<T>, r: IntTerm | number): Term<T>; export declare function bitor<T extends IVec>(l: IntTerm | number, r: Term<T>): Term<T>; export declare function bitor<T extends UVec>(l: Term<T>, r: UintTerm | number): Term<T>; export declare function bitor<T extends UVec>(l: UintTerm | number, r: Term<T>): Term<T>; export declare function bitxor<A extends Int | IVec | UVec, B extends A>(l: Term<A>, r: Term<B>): Term<A>; export declare function bitxor<T extends IVec>(l: Term<T>, r: IntTerm | number): Term<T>; export declare function bitxor<T extends IVec>(l: IntTerm | number, r: Term<T>): Term<T>; export declare function bitxor<T extends UVec>(l: Term<T>, r: UintTerm | number): Term<T>; export declare function bitxor<T extends UVec>(l: UintTerm | number, r: Term<T>): Term<T>; /** * @remarks * Reference: GLSL ES Specification 3.0, page 71 * * @param l * @param r */ export declare function lshift<A extends IVec, B extends A>(l: Term<A>, r: Term<B> | IntTerm): Term<A>; export declare function lshift<A extends UVec, B extends A>(l: Term<A>, r: Term<B> | UintTerm): Term<A>; export declare function lshift(l: IntTerm, r: IntTerm): IntTerm; export declare function lshift(l: UintTerm, r: UintTerm): UintTerm; /** * @remarks * Reference: GLSL ES Specification 3.0, page 71 * * @param l * @param r */ export declare function rshift<A extends IVec, B extends A>(l: Term<A>, r: Term<B> | IntTerm): Term<A>; export declare function rshift<A extends UVec, B extends A>(l: Term<A>, r: Term<B> | UintTerm): Term<A>; export declare function rshift(l: IntTerm, r: IntTerm): IntTerm; export declare function rshift(l: UintTerm, r: UintTerm): UintTerm; //# sourceMappingURL=ops.d.ts.map