pub mod common;
pub mod math;
pub mod noise;
pub mod particles;
pub mod rand;
use sapiens_sys::*;
pub type SPQuat = SPVec4;
pub fn min(x: f64, y: f64) -> f64 {
unsafe { spMin(x, y) }
}
pub fn max(x: f64, y: f64) -> f64 {
unsafe { spMax(x, y) }
}
pub fn clamp(x: f64, min: f64, max: f64) -> f64 {
unsafe { spClamp(x, min, max) }
}
pub fn mix(x: f64, y: f64, a: f64) -> f64 {
unsafe { spMix(x, y, a) }
}
pub fn smooth_step(edge0: f64, edge1: f64, x: f64) -> f64 {
unsafe { spSmoothStep(edge0, edge1, x) }
}
pub fn vec2_add(a: SPVec2, b: SPVec2) -> SPVec2 {
unsafe { spVec2Add(a, b) }
}
pub fn vec2_sub(a: SPVec2, b: SPVec2) -> SPVec2 {
unsafe { spVec2Sub(a, b) }
}
pub fn vec2_mul(a: SPVec2, b: f64) -> SPVec2 {
unsafe { spVec2Mul(a, b) }
}
pub fn vec2_div(a: SPVec2, b: f64) -> SPVec2 {
unsafe { spVec2Div(a, b) }
}
pub fn vec2_neg(a: SPVec2) -> SPVec2 {
unsafe { spVec2Neg(a) }
}
pub fn vec3_add(a: SPVec3, b: SPVec3) -> SPVec3 {
unsafe { spVec3Add(a, b) }
}
pub fn vec3_sub(a: SPVec3, b: SPVec3) -> SPVec3 {
unsafe { spVec3Sub(a, b) }
}
pub fn vec3_mul(a: SPVec3, b: f64) -> SPVec3 {
unsafe { spVec3Mul(a, b) }
}
pub fn vec3_div(a: SPVec3, b: f64) -> SPVec3 {
unsafe { spVec3Div(a, b) }
}
pub fn vec3_neg(a: SPVec3) -> SPVec3 {
unsafe { spVec3Neg(a) }
}
pub fn vec4_add(a: SPVec4, b: SPVec4) -> SPVec4 {
unsafe { spVec4Add(a, b) }
}
pub fn vec4_sub(a: SPVec4, b: SPVec4) -> SPVec4 {
unsafe { spVec4Sub(a, b) }
}
pub fn vec4_mul(a: SPVec4, b: f64) -> SPVec4 {
unsafe { spVec4Mul(a, b) }
}
pub fn vec4_div(a: SPVec4, b: f64) -> SPVec4 {
unsafe { spVec4Div(a, b) }
}
pub fn vec4_neg(a: SPVec4) -> SPVec4 {
unsafe { spVec4Neg(a) }
}
pub fn vec3_normalize(a: SPVec3) -> SPVec3 {
unsafe { spVec3Normalize(a) }
}
pub fn vec3_dot(a: SPVec3, b: SPVec3) -> f64 {
unsafe { spVec3Dot(a, b) }
}
pub fn vec3_cross(a: SPVec3, b: SPVec3) -> SPVec3 {
unsafe { spVec3Cross(a, b) }
}
pub fn vec3_length(v: SPVec3) -> f64 {
unsafe { spVec3Length(v) }
}
pub fn vec3_length2(v: SPVec3) -> f64 {
unsafe { spVec3Length2(v) }
}
pub fn vec3_distance(a: SPVec3, b: SPVec3) -> f64 {
unsafe { spVec3Distance(a, b) }
}
pub fn vec3_distance2(a: SPVec3, b: SPVec3) -> f64 {
unsafe { spVec3Distance2(a, b) }
}
pub fn vec3_x_mat3(v: SPVec3, m: SPMat3) -> SPVec3 {
unsafe { spVec3xMat3(v, m) }
}
#[allow(clippy::not_unsafe_ptr_arg_deref)]
pub fn quat_cast(m: *mut SPMat3) -> SPQuat {
unsafe { spQuatCast(m) }
}
#[allow(clippy::not_unsafe_ptr_arg_deref)]
pub fn mat3_cast(q: *mut SPQuat, m: *mut SPMat3) {
unsafe { spMat3Cast(q, m) }
}
pub fn quat_slerp(a: SPQuat, b: SPQuat, x: f64) -> SPQuat {
unsafe { spQuatSlerp(a, b, x) }
}
pub fn mat3_identity() -> SPMat3 {
unsafe { spMat3Identity() }
}
pub fn mat3_rotate(m: SPMat3, angle: f64, axis: SPVec3) -> SPMat3 {
unsafe { spMat3Rotate(m, angle, axis) }
}
pub fn mat3_inverse(m: SPMat3) -> SPMat3 {
unsafe { spMat3Inverse(m) }
}
pub fn mat3_multiply(a: SPMat3, b: SPMat3) -> SPMat3 {
unsafe { spMat3Multiply(a, b) }
}
pub fn mat3_slerp(a: SPMat3, b: SPMat3, fraction: f64) -> SPMat3 {
unsafe { spMat3Slerp(a, b, fraction) }
}
pub fn mat3_get_row(m: SPMat3, row_index: i32) -> SPVec3 {
unsafe { spMat3GetRow(m, row_index) }
}
pub fn mat3_from_vec3s(a: SPVec3, b: SPVec3, c: SPVec3) -> SPMat3 {
unsafe { spMat3FromVec3s(a, b, c) }
}
pub fn mat3_look_at_inverse(look: SPVec3, up: SPVec3) -> SPMat3 {
unsafe { spMat3LookAtInverse(look, up) }
}
#[allow(clippy::not_unsafe_ptr_arg_deref)]
pub fn mat3_rotate_ptr(m: *mut SPMat3, angle: f64, axis: *mut SPVec3, result: *mut SPMat3) {
unsafe { spMat3RotatePtr(m, angle, axis, result) }
}
#[allow(clippy::not_unsafe_ptr_arg_deref)]
pub fn mat3_look_at_inverse_ptr(look: *mut SPVec3, up: *mut SPVec3, result: *mut SPMat3) {
unsafe { spMat3LookAtInversePtr(look, up, result) }
}
#[allow(clippy::not_unsafe_ptr_arg_deref)]
pub fn mat3_inverse_ptr(m: *mut SPMat3, result: *mut SPMat3) {
unsafe { spMat3InversePtr(m, result) }
}
#[allow(clippy::not_unsafe_ptr_arg_deref)]
pub fn mat3_slerp_ptr(a: *mut SPMat3, b: *mut SPMat3, fraction: f64, result: *mut SPMat3) {
unsafe { spMat3SlerpPtr(a, b, fraction, result) }
}
pub fn point_is_left_of_line(p: SPVec3, a: SPVec3, b: SPVec3) -> bool {
unsafe { spPointIsLeftOfLine(p, a, b) }
}