Outsource the Shape trait, wquadtree, and shape types.

This commit is contained in:
Crozet Sébastien
2020-12-14 15:51:43 +01:00
parent 9bf1321f8f
commit cc6d1b9730
47 changed files with 444 additions and 3363 deletions

View File

@@ -53,14 +53,6 @@ macro_rules! array(
#[allow(dead_code)]
fn create_arr<T>(mut callback: impl FnMut(usize) -> T) -> [T; SIMD_WIDTH] {
[callback(0usize), callback(1usize), callback(2usize), callback(3usize)]
// [callback(0usize), callback(1usize), callback(2usize), callback(3usize),
// callback(4usize), callback(5usize), callback(6usize), callback(7usize)]
// [callback(0usize), callback(1usize), callback(2usize), callback(3usize),
// callback(4usize), callback(5usize), callback(6usize), callback(7usize),
// callback(8usize), callback(9usize), callback(10usize), callback(11usize),
// callback(12usize), callback(13usize), callback(14usize), callback(15usize)]
}
create_arr($callback)
@@ -136,134 +128,4 @@ pub mod dynamics;
pub mod geometry;
pub mod pipeline;
pub mod utils;
#[cfg(feature = "dim2")]
/// Math primitives used throughout Rapier.
pub mod math {
pub use super::simd::*;
use na::{Isometry2, Matrix2, Point2, Translation2, UnitComplex, Vector2, Vector3, U1, U2};
/// The dimension of the physics simulated by this crate.
pub const DIM: usize = 2;
/// The maximum number of point a contact manifold can hold.
pub const MAX_MANIFOLD_POINTS: usize = 2;
/// The dimension of the physics simulated by this crate, given as a type-level-integer.
pub type Dim = U2;
/// The maximum number of angular degrees of freedom of a rigid body given as a type-level-integer.
pub type AngDim = U1;
/// A 2D isometry, i.e., a rotation followed by a translation.
pub type Isometry<N> = Isometry2<N>;
/// A 2D vector.
pub type Vector<N> = Vector2<N>;
/// A scalar used for angular velocity.
///
/// This is called `AngVector` for coherence with the 3D version of this crate.
pub type AngVector<N> = N;
/// A 2D point.
pub type Point<N> = Point2<N>;
/// A 2D rotation expressed as an unit complex number.
pub type Rotation<N> = UnitComplex<N>;
/// A 2D translation.
pub type Translation<N> = Translation2<N>;
/// The angular inertia of a rigid body.
pub type AngularInertia<N> = N;
/// The principal angular inertia of a rigid body.
pub type PrincipalAngularInertia<N> = N;
/// A matrix that represent the cross product with a given vector.
pub type CrossMatrix<N> = Vector2<N>;
/// A 2x2 matrix.
pub type Matrix<N> = Matrix2<N>;
/// A vector with a dimension equal to the maximum number of degrees of freedom of a rigid body.
pub type SpacialVector<N> = Vector3<N>;
/// A 2D symmetric-definite-positive matrix.
pub type SdpMatrix<N> = crate::utils::SdpMatrix2<N>;
}
#[cfg(feature = "dim3")]
/// Math primitives used throughout Rapier.
pub mod math {
pub use super::simd::*;
use na::{Isometry3, Matrix3, Point3, Translation3, UnitQuaternion, Vector3, Vector6, U3};
/// The dimension of the physics simulated by this crate.
pub const DIM: usize = 3;
/// The maximum number of point a contact manifold can hold.
pub const MAX_MANIFOLD_POINTS: usize = 4;
/// The dimension of the physics simulated by this crate, given as a type-level-integer.
pub type Dim = U3;
/// The maximum number of angular degrees of freedom of a rigid body given as a type-level-integer.
pub type AngDim = U3;
/// A 3D isometry, i.e., a rotation followed by a translation.
pub type Isometry<N> = Isometry3<N>;
/// A 3D vector.
pub type Vector<N> = Vector3<N>;
/// An axis-angle vector used for angular velocity.
pub type AngVector<N> = Vector3<N>;
/// A 3D point.
pub type Point<N> = Point3<N>;
/// A 3D rotation expressed as an unit quaternion.
pub type Rotation<N> = UnitQuaternion<N>;
/// A 3D translation.
pub type Translation<N> = Translation3<N>;
/// The angular inertia of a rigid body.
pub type AngularInertia<N> = crate::utils::SdpMatrix3<N>;
/// The principal angular inertia of a rigid body.
pub type PrincipalAngularInertia<N> = Vector3<N>;
/// A matrix that represent the cross product with a given vector.
pub type CrossMatrix<N> = Matrix3<N>;
/// A 3x3 matrix.
pub type Matrix<N> = Matrix3<N>;
/// A vector with a dimension equal to the maximum number of degrees of freedom of a rigid body.
pub type SpacialVector<N> = Vector6<N>;
/// A 3D symmetric-definite-positive matrix.
pub type SdpMatrix<N> = crate::utils::SdpMatrix3<N>;
}
#[cfg(not(feature = "simd-is-enabled"))]
mod simd {
use simba::simd::{AutoBoolx4, AutoF32x4};
/// The number of lanes of a SIMD number.
pub const SIMD_WIDTH: usize = 4;
/// SIMD_WIDTH - 1
pub const SIMD_LAST_INDEX: usize = 3;
/// A SIMD float with SIMD_WIDTH lanes.
pub type SimdFloat = AutoF32x4;
/// A SIMD bool with SIMD_WIDTH lanes.
pub type SimdBool = AutoBoolx4;
}
#[cfg(feature = "simd-is-enabled")]
mod simd {
#[allow(unused_imports)]
#[cfg(feature = "simd-nightly")]
use simba::simd::{f32x16, f32x4, f32x8, m32x16, m32x4, m32x8, u8x16, u8x4, u8x8};
#[cfg(feature = "simd-stable")]
use simba::simd::{WideBoolF32x4, WideF32x4};
/// The number of lanes of a SIMD number.
pub const SIMD_WIDTH: usize = 4;
/// SIMD_WIDTH - 1
pub const SIMD_LAST_INDEX: usize = 3;
#[cfg(not(feature = "simd-nightly"))]
/// A SIMD float with SIMD_WIDTH lanes.
pub type SimdFloat = WideF32x4;
#[cfg(not(feature = "simd-nightly"))]
/// A SIMD bool with SIMD_WIDTH lanes.
pub type SimdBool = WideBoolF32x4;
#[cfg(feature = "simd-nightly")]
/// A SIMD float with SIMD_WIDTH lanes.
pub type SimdFloat = f32x4;
#[cfg(feature = "simd-nightly")]
/// A bool float with SIMD_WIDTH lanes.
pub type SimdBool = m32x4;
// pub const SIMD_WIDTH: usize = 8;
// pub const SIMD_LAST_INDEX: usize = 7;
// pub type SimdFloat = f32x8;
// pub type SimdBool = m32x8;
// pub const SIMD_WIDTH: usize = 16;
// pub const SIMD_LAST_INDEX: usize = 15;
// pub type SimdFloat = f32x16;
// pub type SimdBool = m32x16;
}
pub use buckler::math;