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 {};