@thi.ng/shader-ast-stdlib
Version:
Function collection for modular GPGPU / shader programming with @thi.ng/shader-ast
67 lines • 3.5 kB
TypeScript
import type { Fn2 } from "@thi.ng/api";
import type { FloatTerm, Vec4Sym } from "@thi.ng/shader-ast";
/**
* Higher-order Porter-Duff alpha compositing operator. See
* [thi.ng/porter-duff](https://thi.ng/porter-duff) for reference. Returns an
* optimized AST function which accepts 2 RGBA colors (vec4) and returns blended
* & clamped result (also a vec4).
*
* @remarks
* All built-in PD operators are defined via this HOF. The two given coefficient
* functions are used to extract blending coefficients for src/dest colors and
* are called with the alpha components of both colors.
*
* - `blendSrcOver(src, dest)`
* - `blendDestOver(src, dest)`
* - `blendSrcIn(src, dest)`
* - `blendDestIn(src, dest)`
* - `blendSrcOut(src, dest)`
* - `blendDestOut(src, dest)`
* - `blendSrcAtop(src, dest)`
* - `blendDestAtop(src, dest)`
* - `blendXor(src, dest)`
* - `blendPlus(src, dest)`
*
* Optimization only happens for cases where either `fa` and/or `fb` are
* {@link ZERO} or {@link ONE}.
*
* *IMPORTANT*: Both colors MUST be use pre-multiplied alpha for correct
* results. If needed, use {@link premultiplyAlpha} and
* {@link postmultiplyAlpha}.
*
* @param name - function name
* @param fa - src coeff fn
* @param fb - dest coeff fn
*/
export declare const porterDuff: (name: string, fa: Fn2<FloatTerm, FloatTerm, FloatTerm>, fb: Fn2<FloatTerm, FloatTerm, FloatTerm>) => import("@thi.ng/shader-ast").TaggedFn2<"vec4", "vec4", "vec4">;
/**
* Multiplies RGB channels by alpha. Returns `vec4(col.r*col.a, col.g*col.a,
* col.b*col.a, col.a)`. See {@link postmultiplyAlpha} for reverse op.
*
* @param col
*/
export declare const premultiplyAlpha: (col: Vec4Sym) => import("@thi.ng/shader-ast").Lit<"vec4">;
/**
* Divides RGB channels by alpha. Returns `vec4(col.r/col.a, col.g/col.a,
* col.b/col.a, col.a)`. See {@link premultiplyAlpha} for reverse op.
*
* @param col
*/
export declare const postmultiplyAlpha: (col: Vec4Sym) => import("@thi.ng/shader-ast").Lit<"vec4">;
export declare const ZERO: () => import("@thi.ng/shader-ast").Lit<"float">;
export declare const ONE: () => import("@thi.ng/shader-ast").Lit<"float">;
export declare const A: (a: FloatTerm) => FloatTerm;
export declare const B: (_: FloatTerm, b: FloatTerm) => FloatTerm;
export declare const ONE_MINUS_A: (a: FloatTerm) => import("@thi.ng/shader-ast").Op2<"float">;
export declare const ONE_MINUS_B: (_: FloatTerm, b: FloatTerm) => import("@thi.ng/shader-ast").Op2<"float">;
export declare const blendSrcOver: import("@thi.ng/shader-ast").TaggedFn2<"vec4", "vec4", "vec4">;
export declare const blendDestOver: import("@thi.ng/shader-ast").TaggedFn2<"vec4", "vec4", "vec4">;
export declare const blendSrcIn: import("@thi.ng/shader-ast").TaggedFn2<"vec4", "vec4", "vec4">;
export declare const blendDestIn: import("@thi.ng/shader-ast").TaggedFn2<"vec4", "vec4", "vec4">;
export declare const blendSrcOut: import("@thi.ng/shader-ast").TaggedFn2<"vec4", "vec4", "vec4">;
export declare const blendDestOut: import("@thi.ng/shader-ast").TaggedFn2<"vec4", "vec4", "vec4">;
export declare const blendSrcAtop: import("@thi.ng/shader-ast").TaggedFn2<"vec4", "vec4", "vec4">;
export declare const blendDestAtop: import("@thi.ng/shader-ast").TaggedFn2<"vec4", "vec4", "vec4">;
export declare const blendXor: import("@thi.ng/shader-ast").TaggedFn2<"vec4", "vec4", "vec4">;
export declare const blendPlus: import("@thi.ng/shader-ast").TaggedFn2<"vec4", "vec4", "vec4">;
//# sourceMappingURL=porter-duff.d.ts.map