UNPKG

wgpu-matrix

Version:

fast matrix math library for WebGPU

79 lines (78 loc) 4.36 kB
import { Vec4Arg, Vec4Type } from './vec4'; import { Mat4Arg } from './mat4'; import { BaseArgType } from './types'; export { Vec4Arg, Vec4Type }; type Vec4Ctor<T extends Vec4Arg = Float32Array> = new (n: number) => T; /** * Generates am typed API for Vec4 * */ declare function getAPIImpl<VecType extends Vec4Arg = Float32Array>(Ctor: Vec4Ctor<VecType>): { create: (x?: number, y?: number, z?: number, w?: number) => VecType; fromValues: (x?: number, y?: number, z?: number, w?: number) => VecType; set: <T extends Vec4Arg = VecType>(x: number, y: number, z: number, w: number, dst?: T) => T; ceil: <T extends Vec4Arg = VecType>(v: Vec4Arg, dst?: T) => T; floor: <T extends Vec4Arg = VecType>(v: Vec4Arg, dst?: T) => T; round: <T extends Vec4Arg = VecType>(v: Vec4Arg, dst?: T) => T; clamp: <T extends Vec4Arg = VecType>(v: Vec4Arg, min?: number, max?: number, dst?: T) => T; add: <T extends Vec4Arg = VecType>(a: Vec4Arg, b: Vec4Arg, dst?: T) => T; addScaled: <T extends Vec4Arg = VecType>(a: Vec4Arg, b: Vec4Arg, scale: number, dst?: T) => T; subtract: <T extends Vec4Arg = VecType>(a: Vec4Arg, b: Vec4Arg, dst?: T) => T; sub: <T extends Vec4Arg = VecType>(a: Vec4Arg, b: Vec4Arg, dst?: T) => T; equalsApproximately: (a: Vec4Arg, b: Vec4Arg) => boolean; equals: (a: Vec4Arg, b: Vec4Arg) => boolean; lerp: <T extends Vec4Arg = VecType>(a: Vec4Arg, b: Vec4Arg, t: number, dst?: T) => T; lerpV: <T extends Vec4Arg = VecType>(a: Vec4Arg, b: Vec4Arg, t: Vec4Arg, dst?: T) => T; max: <T extends Vec4Arg = VecType>(a: Vec4Arg, b: Vec4Arg, dst?: T) => T; min: <T extends Vec4Arg = VecType>(a: Vec4Arg, b: Vec4Arg, dst?: T) => T; mulScalar: <T extends Vec4Arg = VecType>(v: Vec4Arg, k: number, dst?: T) => T; scale: <T extends Vec4Arg = VecType>(v: Vec4Arg, k: number, dst?: T) => T; divScalar: <T extends Vec4Arg = VecType>(v: Vec4Arg, k: number, dst?: T) => T; inverse: <T extends Vec4Arg = VecType>(v: Vec4Arg, dst?: T) => T; invert: <T extends Vec4Arg = VecType>(v: Vec4Arg, dst?: T) => T; dot: (a: Vec4Arg, b: Vec4Arg) => number; length: (v: Vec4Arg) => number; len: (v: Vec4Arg) => number; lengthSq: (v: Vec4Arg) => number; lenSq: (v: Vec4Arg) => number; distance: (a: Vec4Arg, b: Vec4Arg) => number; dist: (a: Vec4Arg, b: Vec4Arg) => number; distanceSq: (a: Vec4Arg, b: Vec4Arg) => number; distSq: (a: Vec4Arg, b: Vec4Arg) => number; normalize: <T extends Vec4Arg = VecType>(v: Vec4Arg, dst?: T) => T; negate: <T extends Vec4Arg = VecType>(v: Vec4Arg, dst?: T) => T; copy: <T extends Vec4Arg = VecType>(v: Vec4Arg, dst?: T) => T; clone: <T extends Vec4Arg = VecType>(v: Vec4Arg, dst?: T) => T; multiply: <T extends Vec4Arg = VecType>(a: Vec4Arg, b: Vec4Arg, dst?: T) => T; mul: <T extends Vec4Arg = VecType>(a: Vec4Arg, b: Vec4Arg, dst?: T) => T; divide: <T extends Vec4Arg = VecType>(a: Vec4Arg, b: Vec4Arg, dst?: T) => T; div: <T extends Vec4Arg = VecType>(a: Vec4Arg, b: Vec4Arg, dst?: T) => T; zero: <T extends Vec4Arg = VecType>(dst?: T) => T; transformMat4: <T extends Vec4Arg = VecType>(v: Vec4Arg, m: Mat4Arg, dst?: T) => T; setLength: <T extends Vec4Arg = VecType>(a: Vec4Arg, len: number, dst?: T) => T; truncate: <T extends Vec4Arg = VecType>(a: Vec4Arg, maxLen: number, dst?: T) => T; midpoint: <T extends Vec4Arg = VecType>(a: Vec4Arg, b: Vec4Arg, dst?: T) => T; }; type API<T extends BaseArgType = Float32Array> = ReturnType<typeof getAPIImpl<T>>; /** * * Vec4 math functions. * * Almost all functions take an optional `newDst` argument. If it is not passed in the * functions will create a new `Vec4`. In other words you can do this * * const v = vec4.cross(v1, v2); // Creates a new Vec4 with the cross product of v1 x v2. * * or * * const v = vec4.create(); * vec4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v * * The first style is often easier but depending on where it's used it generates garbage where * as there is almost never allocation with the second style. * * It is always safe to pass any vector as the destination. So for example * * vec4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1 * */ export declare function getAPI<T extends Mat4Arg = Float32Array>(Ctor: Vec4Ctor<T>): API<T>;