diff options
| author | Sébastien Crozet <developer@crozet.re> | 2021-01-29 14:42:32 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-29 14:42:32 +0100 |
| commit | 7ca46f38cde6cf8bf8bf41ea6067ae5bc938205c (patch) | |
| tree | 3781b9d7c92a6a8111573ba4cae1c5d41435950e /src/lib.rs | |
| parent | e6fc8f67faf3e37afe38d683cbd930d457f289be (diff) | |
| parent | 825f33efaec4ce6a8903751e836a0ea9c466ff92 (diff) | |
| download | rapier-7ca46f38cde6cf8bf8bf41ea6067ae5bc938205c.tar.gz rapier-7ca46f38cde6cf8bf8bf41ea6067ae5bc938205c.tar.bz2 rapier-7ca46f38cde6cf8bf8bf41ea6067ae5bc938205c.zip | |
Merge pull request #79 from dimforge/split_geom
Move most of the geometric code to another crate.
Diffstat (limited to 'src/lib.rs')
| -rw-r--r-- | src/lib.rs | 165 |
1 files changed, 24 insertions, 141 deletions
@@ -8,19 +8,22 @@ //! - The ability to run a perfectly deterministic simulation on different machine, as long as they //! are compliant with the IEEE 754-2008 floating point standard. -#![deny(missing_docs)] +#![warn(missing_docs)] + +#[cfg(all(feature = "dim2", feature = "f32"))] +pub extern crate parry2d as parry; +#[cfg(all(feature = "dim2", feature = "f64"))] +pub extern crate parry2d_f64 as parry; +#[cfg(all(feature = "dim3", feature = "f32"))] +pub extern crate parry3d as parry; +#[cfg(all(feature = "dim3", feature = "f64"))] +pub extern crate parry3d_f64 as parry; pub extern crate crossbeam; pub extern crate nalgebra as na; -#[cfg(feature = "dim2")] -pub extern crate ncollide2d as ncollide; -#[cfg(feature = "dim3")] -pub extern crate ncollide3d as ncollide; #[cfg(feature = "serde")] #[macro_use] extern crate serde; -#[macro_use] -extern crate approx; extern crate num_traits as num; // #[macro_use] // extern crate array_macro; @@ -45,6 +48,7 @@ macro_rules! enable_flush_to_zero( } ); +#[cfg(feature = "simd-is-enabled")] macro_rules! array( ($callback: expr; SIMD_WIDTH) => { { @@ -52,14 +56,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) @@ -129,6 +125,9 @@ pub(crate) const INVALID_U32: u32 = u32::MAX; pub(crate) const INVALID_U64: u64 = u64::MAX; pub(crate) const INVALID_USIZE: usize = INVALID_U32 as usize; +/// The string version of Rapier. +pub const VERSION: &'static str = env!("CARGO_PKG_VERSION"); + pub mod counters; pub mod data; pub mod dynamics; @@ -136,133 +135,17 @@ pub mod geometry; pub mod pipeline; pub mod utils; -#[cfg(feature = "dim2")] -/// Math primitives used throughout Rapier. +/// Elementary mathematical entities (vectors, matrices, isometries, etc). 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 use parry::math::*; + /// Max number of pairs of contact points from the same + /// contact manifold that can be solved as part of a + /// single contact constraint. + #[cfg(feature = "dim2")] 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. + /// Max number of pairs of contact points from the same + /// contact manifold that can be solved as part of a + /// single contact constraint. + #[cfg(feature = "dim3")] 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; } |
