UNPKG

@thi.ng/shader-ast-stdlib

Version:

Function collection for modular GPGPU / shader programming with @thi.ng/shader-ast

67 lines 3.5 kB
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