UNPKG

typegpu

Version:

A thin layer between JS and WebGPU/WGSL that improves development experience and allows for faster iteration.

71 lines (70 loc) 4.42 kB
import type { MatBase } from '../data/matrix.ts'; import { type Snippet } from '../data/snippet.ts'; import type { VecBase } from '../data/vectorImpl.ts'; import type { AnyMatInstance, AnyNumericVecInstance } from '../data/wgslTypes.ts'; export declare const infixOperators: { readonly add: import("../types.ts").DualFn<{ (lhs: number, rhs: number): number; <T extends AnyNumericVecInstance>(lhs: number, rhs: T): T; <T extends AnyNumericVecInstance>(lhs: T, rhs: number): T; <T extends AnyNumericVecInstance | AnyMatInstance>(lhs: T, rhs: T): T; <Lhs extends number | AnyNumericVecInstance | AnyMatInstance, Rhs extends Lhs extends number ? number | AnyNumericVecInstance : Lhs extends AnyNumericVecInstance ? number | Lhs : Lhs extends AnyMatInstance ? Lhs : never>(lhs: Lhs, rhs: Rhs): Lhs | Rhs; }>; readonly sub: import("../types.ts").DualFn<{ (lhs: number, rhs: number): number; <T extends AnyNumericVecInstance>(lhs: number, rhs: T): T; <T extends AnyNumericVecInstance>(lhs: T, rhs: number): T; <T extends AnyNumericVecInstance | AnyMatInstance>(lhs: T, rhs: T): T; <Lhs extends number | AnyNumericVecInstance | AnyMatInstance, Rhs extends Lhs extends number ? number | AnyNumericVecInstance : Lhs extends AnyNumericVecInstance ? number | Lhs : Lhs extends AnyMatInstance ? Lhs : never>(lhs: Lhs, rhs: Rhs): Lhs | Rhs; }>; readonly mul: import("../types.ts").DualFn<{ (lhs: number, rhs: number): number; <MV extends AnyNumericVecInstance | AnyMatInstance>(lhs: number, rhs: MV): MV; <MV extends AnyNumericVecInstance | AnyMatInstance>(lhs: MV, rhs: number): MV; <V extends AnyNumericVecInstance>(lhs: V, rhs: V): V; <M extends AnyMatInstance, V extends import("../data/wgslTypes.ts").vBaseForMat<M>>(lhs: V, rhs: M): V; <M extends AnyMatInstance, V extends import("../data/wgslTypes.ts").vBaseForMat<M>>(lhs: M, rhs: V): V; <M extends AnyMatInstance>(lhs: M, rhs: M): M; <Lhs extends number | AnyNumericVecInstance | AnyMatInstance, Rhs extends Lhs extends number ? number | AnyNumericVecInstance | AnyMatInstance : Lhs extends AnyNumericVecInstance ? number | Lhs | import("../data/wgslTypes.ts").mBaseForVec<Lhs> : Lhs extends AnyMatInstance ? number | import("../data/wgslTypes.ts").vBaseForMat<Lhs> | Lhs : never>(lhs: Lhs, rhs: Rhs): Lhs | Rhs; }>; readonly div: import("../types.ts").DualFn<{ (lhs: number, rhs: number): number; <T extends AnyNumericVecInstance>(lhs: T, rhs: T): T; <T extends AnyNumericVecInstance>(lhs: number, rhs: T): T; <T extends AnyNumericVecInstance>(lhs: T, rhs: number): T; }>; readonly mod: import("../types.ts").DualFn<{ (a: number, b: number): number; <T extends AnyNumericVecInstance>(a: T, b: T): T; <T extends AnyNumericVecInstance>(a: number, b: T): T; <T extends AnyNumericVecInstance>(a: T, b: number): T; }>; readonly bitShiftLeft: import("../types.ts").DualFn<(<T extends import("../data/wgslTypes.ts").AnyIntegerVecInstance>(lhs: T, rhs: number | import("../data/wgslTypes.ts").vecIToVecU<T>) => T)>; readonly bitShiftRight: import("../types.ts").DualFn<(<T extends import("../data/wgslTypes.ts").AnyIntegerVecInstance>(lhs: T, rhs: number | import("../data/wgslTypes.ts").vecIToVecU<T>) => T)>; }; type Numeric = number | AnyNumericVecInstance | AnyMatInstance; export type InfixOperatorName = keyof typeof infixOperators; export type InfixOperator = (typeof infixOperators)[InfixOperatorName]; /** * InfixDispatch is only used in codegen mode. * `lhs` may either be Numeric or Snippet. * @example * const external = d.vec2u(1); * const fn = () => { * 'use gpu'; * external.mul(2); // lhs is Numeric * d.vec2u(1).mul(2) // lhs is a snippet * } */ export declare class InfixDispatch { readonly lhs: Snippet | Numeric; readonly operator: InfixOperator; constructor(lhs: Snippet | Numeric, operator: InfixOperator); } export declare function isInfixDispatch(o: unknown): o is InfixDispatch; /** * This function is used on vec/mat prototypes. * This is done in runtime in order to avoid a circular dependency. */ export declare function assignInfixOperator<T extends typeof VecBase | typeof MatBase>(base: T, operator: InfixOperatorName, operatorSymbol: symbol): void; export {};