mod matrix;
mod quat;
mod vec;
pub use half::f16;
pub use matrix::{Mat2d, Mat3d, Matrix4d};
pub use quat::{Quatd, Quatf, Quath};
pub use vec::{Vec2d, Vec2f, Vec2h, Vec2i, Vec3d, Vec3f, Vec3h, Vec3i, Vec4d, Vec4f, Vec4h, Vec4i};
pub fn vec2f(x: f32, y: f32) -> Vec2f {
Vec2f { x, y }
}
pub fn vec3f(x: f32, y: f32, z: f32) -> Vec3f {
Vec3f { x, y, z }
}
pub fn vec4f(x: f32, y: f32, z: f32, w: f32) -> Vec4f {
Vec4f { x, y, z, w }
}
pub fn vec2d(x: f64, y: f64) -> Vec2d {
Vec2d { x, y }
}
pub fn vec3d(x: f64, y: f64, z: f64) -> Vec3d {
Vec3d { x, y, z }
}
pub fn vec4d(x: f64, y: f64, z: f64, w: f64) -> Vec4d {
Vec4d { x, y, z, w }
}
pub fn vec2i(x: i32, y: i32) -> Vec2i {
Vec2i { x, y }
}
pub fn vec3i(x: i32, y: i32, z: i32) -> Vec3i {
Vec3i { x, y, z }
}
pub fn vec4i(x: i32, y: i32, z: i32, w: i32) -> Vec4i {
Vec4i { x, y, z, w }
}
pub fn vec2h(x: f16, y: f16) -> Vec2h {
Vec2h { x, y }
}
pub fn vec3h(x: f16, y: f16, z: f16) -> Vec3h {
Vec3h { x, y, z }
}
pub fn vec4h(x: f16, y: f16, z: f16, w: f16) -> Vec4h {
Vec4h { x, y, z, w }
}
pub fn lerp<T>(a: T, b: T, t: T) -> T
where
T: Copy + std::ops::Add<Output = T> + std::ops::Sub<Output = T> + std::ops::Mul<Output = T>,
{
a + (b - a) * t
}
pub fn lerp_half(a: f16, b: f16, t: f32) -> f16 {
f16::from_f32(lerp(a.to_f32(), b.to_f32(), t))
}
pub fn quatf(w: f32, x: f32, y: f32, z: f32) -> Quatf {
Quatf { w, x, y, z }
}
pub fn quatd(w: f64, x: f64, y: f64, z: f64) -> Quatd {
Quatd { w, x, y, z }
}
pub fn quath(w: f16, x: f16, y: f16, z: f16) -> Quath {
Quath { w, x, y, z }
}