wgpu-matrix
Version:
fast matrix math library for WebGPU
71 lines (70 loc) • 4.66 kB
TypeScript
import { Vec3Arg, Vec3Type } from './vec3';
import { Mat3Arg } from './mat3';
import { Mat4Arg } from './mat4';
import { QuatArg } from './quat';
import { BaseArgType } from './types';
export { Vec3Arg, Vec3Type };
type Vec3Ctor<T extends Vec3Arg = Float32Array> = new (n: number) => T;
/**
* Generates am typed API for Vec3
* */
declare function getAPIImpl<VecType extends Vec3Arg = Float32Array>(Ctor: Vec3Ctor<VecType>): {
create: (x?: number, y?: number, z?: number) => VecType;
fromValues: (x?: number, y?: number, z?: number) => VecType;
set: <T extends Vec3Arg = VecType>(x: number, y: number, z: number, dst?: T) => T;
ceil: <T extends Vec3Arg = VecType>(v: Vec3Arg, dst?: T) => T;
floor: <T extends Vec3Arg = VecType>(v: Vec3Arg, dst?: T) => T;
round: <T extends Vec3Arg = VecType>(v: Vec3Arg, dst?: T) => T;
clamp: <T extends Vec3Arg = VecType>(v: Vec3Arg, min?: number, max?: number, dst?: T) => T;
add: <T extends Vec3Arg = VecType>(a: Vec3Arg, b: Vec3Arg, dst?: T) => T;
addScaled: <T extends Vec3Arg = VecType>(a: Vec3Arg, b: Vec3Arg, scale: number, dst?: T) => T;
angle: (a: Vec3Arg, b: Vec3Arg) => number;
subtract: <T extends Vec3Arg = VecType>(a: Vec3Arg, b: Vec3Arg, dst?: T) => T;
sub: <T extends Vec3Arg = VecType>(a: Vec3Arg, b: Vec3Arg, dst?: T) => T;
equalsApproximately: (a: Vec3Arg, b: Vec3Arg) => boolean;
equals: (a: Vec3Arg, b: Vec3Arg) => boolean;
lerp: <T extends Vec3Arg = VecType>(a: Vec3Arg, b: Vec3Arg, t: number, dst?: T) => T;
lerpV: <T extends Vec3Arg = VecType>(a: Vec3Arg, b: Vec3Arg, t: Vec3Arg, dst?: T) => T;
max: <T extends Vec3Arg = VecType>(a: Vec3Arg, b: Vec3Arg, dst?: T) => T;
min: <T extends Vec3Arg = VecType>(a: Vec3Arg, b: Vec3Arg, dst?: T) => T;
mulScalar: <T extends Vec3Arg = VecType>(v: Vec3Arg, k: number, dst?: T) => T;
scale: <T extends Vec3Arg = VecType>(v: Vec3Arg, k: number, dst?: T) => T;
divScalar: <T extends Vec3Arg = VecType>(v: Vec3Arg, k: number, dst?: T) => T;
inverse: <T extends Vec3Arg = VecType>(v: Vec3Arg, dst?: T) => T;
invert: <T extends Vec3Arg = VecType>(v: Vec3Arg, dst?: T) => T;
cross: <T extends Vec3Arg = VecType>(a: Vec3Arg, b: Vec3Arg, dst?: T) => T;
dot: (a: Vec3Arg, b: Vec3Arg) => number;
length: (v: Vec3Arg) => number;
len: (v: Vec3Arg) => number;
lengthSq: (v: Vec3Arg) => number;
lenSq: (v: Vec3Arg) => number;
distance: (a: Vec3Arg, b: Vec3Arg) => number;
dist: (a: Vec3Arg, b: Vec3Arg) => number;
distanceSq: (a: Vec3Arg, b: Vec3Arg) => number;
distSq: (a: Vec3Arg, b: Vec3Arg) => number;
normalize: <T extends Vec3Arg = VecType>(v: Vec3Arg, dst?: T) => T;
negate: <T extends Vec3Arg = VecType>(v: Vec3Arg, dst?: T) => T;
copy: <T extends Vec3Arg = VecType>(v: Vec3Arg, dst?: T) => T;
clone: <T extends Vec3Arg = VecType>(v: Vec3Arg, dst?: T) => T;
multiply: <T extends Vec3Arg = VecType>(a: Vec3Arg, b: Vec3Arg, dst?: T) => T;
mul: <T extends Vec3Arg = VecType>(a: Vec3Arg, b: Vec3Arg, dst?: T) => T;
divide: <T extends Vec3Arg = VecType>(a: Vec3Arg, b: Vec3Arg, dst?: T) => T;
div: <T extends Vec3Arg = VecType>(a: Vec3Arg, b: Vec3Arg, dst?: T) => T;
random: <T extends Vec3Arg = VecType>(scale?: number, dst?: T) => T;
zero: <T extends Vec3Arg = VecType>(dst?: T) => T;
transformMat4: <T extends Vec3Arg = VecType>(v: Vec3Arg, m: Mat4Arg, dst?: T) => T;
transformMat4Upper3x3: <T extends Vec3Arg = VecType>(v: Vec3Arg, m: Mat4Arg, dst?: T) => T;
transformMat3: <T extends Vec3Arg = VecType>(v: Vec3Arg, m: Mat3Arg, dst?: T) => T;
transformQuat: <T extends Vec3Arg = VecType>(v: Vec3Arg, q: QuatArg, dst?: T) => T;
getTranslation: <T extends Vec3Arg = VecType>(m: Mat3Arg, dst?: T) => T;
getAxis: <T extends Vec3Arg = VecType>(m: Mat4Arg, axis: number, dst?: T) => T;
getScaling: <T extends Vec3Arg = VecType>(m: Mat4Arg, dst?: T) => T;
rotateX: <T extends Vec3Arg = VecType>(a: Vec3Arg, b: Vec3Arg, rad: number, dst?: T) => T;
rotateY: <T extends Vec3Arg = VecType>(a: Vec3Arg, b: Vec3Arg, rad: number, dst?: T) => T;
rotateZ: <T extends Vec3Arg = VecType>(a: Vec3Arg, b: Vec3Arg, rad: number, dst?: T) => T;
setLength: <T extends Vec3Arg = VecType>(a: Vec3Arg, len: number, dst?: T) => T;
truncate: <T extends Vec3Arg = VecType>(a: Vec3Arg, maxLen: number, dst?: T) => T;
midpoint: <T extends Vec3Arg = VecType>(a: Vec3Arg, b: Vec3Arg, dst?: T) => T;
};
type API<T extends BaseArgType = Float32Array> = ReturnType<typeof getAPIImpl<T>>;
export declare function getAPI<T extends Mat4Arg = Float32Array>(Ctor: Vec3Ctor<T>): API<T>;