@thi.ng/shader-ast
Version:
DSL to define shader code in TypeScript and cross-compile to GLSL, JS and other targets
103 lines • 6.02 kB
TypeScript
import type { FnCall, Sym, Term } from "../api/nodes.js";
import type { BVec2Term, BVec3Term, BVec4Term, BoolTerm, FloatTerm, IVec2Term, IVec3Term, IVec4Term, IntTerm, UVec2Term, UVec3Term, UVec4Term, UintTerm, Vec2Term, Vec3Term, Vec4Term } from "../api/terms.js";
import { type Mat, type Prim, type Vec } from "../api/types.js";
/**
* Returns normalized version of given vector.
*
* @param v -
*/
export declare const normalize: <T extends Vec>(v: Term<T>) => FnCall<T>;
export declare const normalizeSelf: <T extends Vec>(v: Sym<T>) => import("../index.js").Assign<T>;
/**
* Returns length / magnitude of given vector.
*
* @param v -
*/
export declare const length: <T extends Vec>(v: Term<T>) => FnCall<"float">;
export declare const distance: <A extends Vec, B extends A>(a: Term<A>, b: Term<B>) => FnCall<"float">;
/**
* Returns dot product of given vectors.
*
* @param a -
* @param b -
*/
export declare const dot: <A extends Vec, B extends A>(a: Term<A>, b: Term<B>) => FnCall<"float">;
/**
* Returns cross product of given 3D vectors.
*
* @param a -
* @param b -
*/
export declare const cross: (a: Vec3Term, b: Vec3Term) => FnCall<"vec3">;
export declare const reflect: <I extends Vec, N extends I>(i: Term<I>, n: Term<N>) => FnCall<I>;
export declare const refract: <I extends Vec, N extends I>(i: Term<I>, n: Term<N>, ior: FloatTerm) => FnCall<I>;
export declare const faceForward: <I extends Vec, N extends I, R extends I>(i: Term<I>, n: Term<N>, nref: Term<R>) => FnCall<I>;
export declare const min: <A extends Prim, B extends A>(a: Term<A>, b: Term<B>) => FnCall<A>;
export declare const max: <A extends Prim, B extends A>(a: Term<A>, b: Term<B>) => FnCall<A>;
export declare const clamp: <A extends Prim, B extends A, C extends B>(a: Term<A>, b: Term<B>, c: Term<C>) => FnCall<A>;
export declare const minSelf: <A extends Prim, B extends A>(a: Sym<A>, b: Term<B>) => import("../index.js").Assign<A>;
export declare const maxSelf: <A extends Prim, B extends A>(a: Sym<A>, b: Term<B>) => import("../index.js").Assign<A>;
export declare const clampSelf: <A extends Prim, B extends A, C extends B>(a: Sym<A>, b: Term<B>, c: Term<C>) => import("../index.js").Assign<A>;
export declare const step: <A extends Prim, B extends A>(a: Term<A>, b: Term<B>) => FnCall<A>;
export declare const smoothstep: <A extends Prim, B extends A, C extends B>(a: Term<A>, b: Term<B>, c: Term<C>) => FnCall<A>;
export declare const radians: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const degrees: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const cos: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const cosh: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const sin: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const sinh: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const tan: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const tanh: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const acos: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const acosh: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const asin: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const asinh: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const atanh: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare function atan<T extends Prim>(a: Term<T>): FnCall<T>;
export declare function atan<A extends Prim, B extends A>(a: Term<A>, b: Term<B>): FnCall<A>;
export declare const pow: <A extends Prim, B extends A>(a: Term<A>, b: Term<B>) => FnCall<A>;
export declare const exp: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const log: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const exp2: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const log2: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const sqrt: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const inversesqrt: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const abs: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const sign: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const floor: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const ceil: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const fract: <T extends Prim>(a: Term<T>) => FnCall<T>;
export declare const powf: <T extends Prim>(x: Term<T>, y: FloatTerm) => FnCall<T>;
export declare function mod<A extends Prim, B extends A>(a: Term<A>, b: Term<B>): FnCall<A>;
export declare function mod<A extends Prim>(a: Term<A>, b: FloatTerm): FnCall<A>;
/**
* Important: Currently unsupported by JS target.
*
* TODO add additional metadata for JS (`b` is an output var), issue #96
*
* @param a -
* @param b -
*/
export declare const modf: <A extends Prim, B extends A>(a: Term<A>, b: Sym<B>) => FnCall<A>;
export declare function mix<A extends Prim, B extends A, C extends B>(a: Term<A>, b: Term<B>, c: Term<C>): FnCall<A>;
export declare function mix<A extends Prim, B extends A>(a: Term<A>, b: Term<B>, c: FloatTerm): FnCall<A>;
export declare const matrixCompMult: <A extends Mat, B extends A>(a: Term<A>, b: Term<B>) => FnCall<A>;
/**
* Important: Not available in JS / GLSL ES 100
*
* @param a -
*/
export declare function isnan(a: FloatTerm | IntTerm | UintTerm): BoolTerm;
export declare function isnan(a: Vec2Term | IVec2Term | UVec2Term): BVec2Term;
export declare function isnan(a: Vec3Term | IVec3Term | UVec3Term): BVec3Term;
export declare function isnan(a: Vec4Term | IVec4Term | UVec4Term): BVec4Term;
/**
* Important: Not available in JS / GLSL ES 100
*
* @param a -
*/
export declare function isinf(a: FloatTerm | IntTerm | UintTerm): BoolTerm;
export declare function isinf(a: Vec2Term | IVec2Term | UVec2Term): BVec2Term;
export declare function isinf(a: Vec3Term | IVec3Term | UVec3Term): BVec3Term;
export declare function isinf(a: Vec4Term | IVec4Term | UVec4Term): BVec4Term;
//# sourceMappingURL=math.d.ts.map