import { BinaryOp, Dyno, TrinaryOp, UnaryOp } from './base'; import { FloatTypes, IntTypes, MatFloatTypes, SquareMatTypes, UintTypes, VectorElementType, VectorTypes } from './types'; import { DynoVal, DynoValue, HasDynoOut } from './value'; export declare const length: (a: DynoVal) => DynoVal<"float">; export declare const distance: (a: DynoVal, b: DynoVal) => DynoVal<"float">; export declare const dot: (a: DynoVal, b: DynoVal) => DynoVal<"float">; export declare const cross: (a: DynoVal<"vec3">, b: DynoVal<"vec3">) => DynoVal<"vec3">; export declare const normalize: (a: DynoVal) => DynoVal; export declare const faceforward: (a: DynoVal, b: DynoVal, c: DynoVal) => DynoVal; export declare const reflectVec: (incident: DynoVal, normal: DynoVal) => DynoVal; export declare const refractVec: (incident: DynoVal, normal: DynoVal, eta: DynoVal<"float">) => DynoVal; export declare const split: (vector: DynoVal) => Split; export declare const combine: >({ vector, vectorType, x, y, z, w, r, g, b, a, }: { vector?: DynoVal; vectorType?: V; x?: DynoVal; y?: DynoVal; z?: DynoVal; w?: DynoVal; r?: DynoVal; g?: DynoVal; b?: DynoVal; a?: DynoVal; }) => DynoVal; export declare const projectH: (a: DynoVal) => DynoVal>; export declare const extendVec: (a: DynoVal, b: DynoVal<"float">) => DynoVal>; export declare const swizzle: (a: DynoVal, select: S) => DynoVal>>; export declare const compMult: (a: DynoVal, b: DynoVal) => DynoVal; export declare const outer: (a: DynoVal, b: DynoVal) => DynoVal>; export declare const transpose: (a: DynoVal) => DynoVal>; export declare const determinant: (a: DynoVal) => DynoVal<"float">; export declare const inverse: (a: DynoVal) => DynoVal; export declare class Length extends UnaryOp { constructor({ a }: { a: DynoVal; }); } export declare class Distance extends BinaryOp { constructor({ a, b }: { a: DynoVal; b: DynoVal; }); } export declare class Dot extends BinaryOp { constructor({ a, b }: { a: DynoVal; b: DynoVal; }); } export declare class Cross extends BinaryOp<"vec3", "vec3", "vec3", "cross"> { constructor({ a, b }: { a: DynoVal<"vec3">; b: DynoVal<"vec3">; }); } export declare class Normalize extends UnaryOp { constructor({ a }: { a: DynoVal; }); } type ProjectHOutput = A extends "vec3" ? "vec2" : A extends "vec4" ? "vec3" : never; export declare class ProjectH extends UnaryOp, "projected"> { constructor({ a }: { a: DynoVal; }); } type ExtendVecOutput = A extends "float" ? "vec2" : A extends "vec2" ? "vec3" : A extends "vec3" ? "vec4" : never; export declare class ExtendVec extends BinaryOp, "extend"> { constructor({ a, b }: { a: DynoVal; b: DynoVal<"float">; }); } export declare class FaceForward extends TrinaryOp { constructor({ a, b, c }: { a: DynoVal; b: DynoVal; c: DynoVal; }); } export declare class ReflectVec extends BinaryOp { constructor({ incident, normal, }: { incident: DynoVal; normal: DynoVal; }); } export declare class RefractVec extends TrinaryOp { constructor({ incident, normal, eta, }: { incident: DynoVal; normal: DynoVal; eta: DynoVal<"float">; }); } export declare class CompMult extends BinaryOp { constructor({ a, b }: { a: DynoVal; b: DynoVal; }); } type OuterOutput = A extends "vec2" ? B extends "vec2" ? "mat2" : B extends "vec3" ? "mat3x2" : B extends "vec4" ? "mat4x2" : never : A extends "vec3" ? B extends "vec2" ? "mat2x3" : B extends "vec3" ? "mat3" : B extends "vec4" ? "mat4x3" : never : A extends "vec4" ? B extends "vec2" ? "mat2x4" : B extends "vec3" ? "mat3x4" : B extends "vec4" ? "mat4" : never : never; export declare class Outer extends BinaryOp, "outer"> { constructor({ a, b }: { a: DynoVal; b: DynoVal; }); } type TransposeOutput = A extends SquareMatTypes ? A : A extends "mat2x3" ? "mat3x2" : A extends "mat2x4" ? "mat4x2" : A extends "mat3x2" ? "mat2x3" : A extends "mat3x4" ? "mat4x3" : A extends "mat4x2" ? "mat2x4" : A extends "mat4x3" ? "mat3x4" : never; export declare class Transpose extends UnaryOp, "transpose"> { constructor({ a }: { a: DynoVal; }); } export declare class Determinant extends UnaryOp { constructor({ a }: { a: DynoVal; }); } export declare class Inverse extends UnaryOp { constructor({ a }: { a: DynoVal; }); } type SplitOutTypes = A extends "vec2" ? { x: "float"; y: "float"; r: "float"; g: "float"; } : A extends "vec3" ? { x: "float"; y: "float"; z: "float"; r: "float"; g: "float"; b: "float"; } : A extends "vec4" ? { x: "float"; y: "float"; z: "float"; w: "float"; r: "float"; g: "float"; b: "float"; a: "float"; } : A extends "ivec2" ? { x: "int"; y: "int"; r: "int"; g: "int"; } : A extends "ivec3" ? { x: "int"; y: "int"; z: "int"; r: "int"; g: "int"; b: "int"; } : A extends "ivec4" ? { x: "int"; y: "int"; z: "int"; w: "int"; r: "int"; g: "int"; b: "int"; a: "int"; } : A extends "uvec2" ? { x: "uint"; y: "uint"; r: "uint"; g: "uint"; } : A extends "uvec3" ? { x: "uint"; y: "uint"; z: "uint"; r: "uint"; g: "uint"; b: "uint"; } : A extends "uvec4" ? { x: "uint"; y: "uint"; z: "uint"; w: "uint"; r: "uint"; g: "uint"; b: "uint"; a: "uint"; } : never; export declare class Split extends Dyno<{ vector: V; }, SplitOutTypes> { constructor({ vector }: { vector: DynoVal; }); } export declare class Combine> extends Dyno & { vector: V; }, { vector: V; }> implements HasDynoOut { constructor({ vector, vectorType, x, y, z, w, r, g, b, a, }: { vector?: DynoVal; vectorType?: V; x?: DynoVal; y?: DynoVal; z?: DynoVal; w?: DynoVal; r?: DynoVal; g?: DynoVal; b?: DynoVal; a?: DynoVal; }); dynoOut(): DynoValue; } type SwizzleOutput = A extends FloatTypes ? Len extends 1 ? "float" : Len extends 2 ? "vec2" : Len extends 3 ? "vec3" : Len extends 4 ? "vec4" : never : A extends IntTypes ? Len extends 1 ? "int" : Len extends 2 ? "ivec2" : Len extends 3 ? "ivec3" : Len extends 4 ? "ivec4" : never : A extends UintTypes ? Len extends 1 ? "uint" : Len extends 2 ? "uvec2" : Len extends 3 ? "uvec3" : Len extends 4 ? "uvec4" : never : never; type SwizzleSelectLen = S extends Swizzle1Select ? 1 : S extends Swizzle2Select ? 2 : S extends Swizzle3Select ? 3 : S extends Swizzle4Select ? 4 : never; type Swizzle1Select = `${"x" | "y" | "z" | "w"}|${"r" | "g" | "b" | "a"}`; type Swizzle2Select = `${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}` | `${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}`; type Swizzle3Select = `${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}` | `${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}`; type Swizzle4Select = `${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}` | `${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}`; type SwizzleSelect = Swizzle1Select | Swizzle2Select | Swizzle3Select | Swizzle4Select; export declare class Swizzle extends UnaryOp>, "swizzle"> { constructor({ vector, select }: { vector: DynoVal; select: S; }); } export {};