diff options
| author | Sébastien Crozet <developer@crozet.re> | 2020-10-06 16:53:54 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-06 16:53:54 +0200 |
| commit | 24a25f8ae7a62c5c5afa24825b063fbb1b603922 (patch) | |
| tree | 5302f5282fe963b72dbd9e94f422994b6ab11eca /src/utils.rs | |
| parent | 99f28ba4b4a14254b4160a191cbeb15211cdd2d2 (diff) | |
| parent | 25b8486ebf8bdfa0d165300a30877293e9e40c51 (diff) | |
| download | rapier-24a25f8ae7a62c5c5afa24825b063fbb1b603922.tar.gz rapier-24a25f8ae7a62c5c5afa24825b063fbb1b603922.tar.bz2 rapier-24a25f8ae7a62c5c5afa24825b063fbb1b603922.zip | |
Merge pull request #28 from dimforge/raycast
Add the QueryPipeline for ray-casting and other geometrical queries in the future
Diffstat (limited to 'src/utils.rs')
| -rw-r--r-- | src/utils.rs | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/src/utils.rs b/src/utils.rs index 91ce41c..ecdd4fd 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -5,13 +5,15 @@ use crate::dynamics::RigidBodyHandle; use indexmap::IndexMap as HashMap; use na::{Matrix2, Matrix3, Matrix3x2, Point2, Point3, Scalar, SimdRealField, Vector2, Vector3}; use num::Zero; -#[cfg(feature = "simd-is-enabled")] use simba::simd::SimdValue; #[cfg(all(not(feature = "enhanced-determinism"), feature = "serde-serialize"))] use std::collections::HashMap; use std::ops::{Add, Mul}; -#[cfg(feature = "simd-is-enabled")] -use {crate::simd::SimdFloat, na::SimdPartialOrd, num::One}; +use { + crate::simd::{SimdBool, SimdFloat}, + na::SimdPartialOrd, + num::One, +}; // pub(crate) const SIN_10_DEGREES: f32 = 0.17364817766; // pub(crate) const COS_10_DEGREES: f32 = 0.98480775301; @@ -31,6 +33,16 @@ pub(crate) fn inv(val: f32) -> f32 { } } +/// Conditionally swaps each lanes of `a` with those of `b`. +/// +/// For each `i in [0..SIMD_WIDTH[`, if `do_swap.extract(i)` is `true` then +/// `a.extract(i)` is swapped with `b.extract(i)`. +pub fn simd_swap(do_swap: SimdBool, a: &mut SimdFloat, b: &mut SimdFloat) { + let _a = *a; + *a = b.select(do_swap, *a); + *b = _a.select(do_swap, *b); +} + /// Trait to copy the sign of each component of one scalar/vector/matrix to another. pub trait WSign<Rhs>: Sized { // See SIMD implementations of copy_sign there: https://stackoverflow.com/a/57872652 @@ -77,7 +89,6 @@ impl<N: Scalar + Copy + WSign<N>> WSign<Vector3<N>> for Vector3<N> { } } -#[cfg(feature = "simd-is-enabled")] impl WSign<SimdFloat> for SimdFloat { fn copy_sign_to(self, to: SimdFloat) -> SimdFloat { self.simd_copysign(to) @@ -102,7 +113,6 @@ impl WComponent for f32 { } } -#[cfg(feature = "simd-is-enabled")] impl WComponent for SimdFloat { type Element = f32; @@ -319,7 +329,6 @@ impl WDot<f32> for f32 { } } -#[cfg(feature = "simd-is-enabled")] impl WCrossMatrix for Vector3<SimdFloat> { type CrossMat = Matrix3<SimdFloat>; @@ -334,7 +343,6 @@ impl WCrossMatrix for Vector3<SimdFloat> { } } -#[cfg(feature = "simd-is-enabled")] impl WCrossMatrix for Vector2<SimdFloat> { type CrossMat = Vector2<SimdFloat>; @@ -344,7 +352,6 @@ impl WCrossMatrix for Vector2<SimdFloat> { } } -#[cfg(feature = "simd-is-enabled")] impl WCross<Vector3<SimdFloat>> for Vector3<SimdFloat> { type Result = Vector3<SimdFloat>; @@ -353,7 +360,6 @@ impl WCross<Vector3<SimdFloat>> for Vector3<SimdFloat> { } } -#[cfg(feature = "simd-is-enabled")] impl WCross<Vector2<SimdFloat>> for SimdFloat { type Result = Vector2<SimdFloat>; @@ -362,7 +368,6 @@ impl WCross<Vector2<SimdFloat>> for SimdFloat { } } -#[cfg(feature = "simd-is-enabled")] impl WCross<Vector2<SimdFloat>> for Vector2<SimdFloat> { type Result = SimdFloat; @@ -373,7 +378,6 @@ impl WCross<Vector2<SimdFloat>> for Vector2<SimdFloat> { } } -#[cfg(feature = "simd-is-enabled")] impl WDot<Vector3<SimdFloat>> for Vector3<SimdFloat> { type Result = SimdFloat; @@ -382,7 +386,6 @@ impl WDot<Vector3<SimdFloat>> for Vector3<SimdFloat> { } } -#[cfg(feature = "simd-is-enabled")] impl WDot<Vector2<SimdFloat>> for Vector2<SimdFloat> { type Result = SimdFloat; @@ -391,7 +394,6 @@ impl WDot<Vector2<SimdFloat>> for Vector2<SimdFloat> { } } -#[cfg(feature = "simd-is-enabled")] impl WDot<SimdFloat> for SimdFloat { type Result = SimdFloat; @@ -445,7 +447,6 @@ impl WAngularInertia<f32> for f32 { } } -#[cfg(feature = "simd-is-enabled")] impl WAngularInertia<SimdFloat> for SimdFloat { type AngVector = SimdFloat; type LinVector = Vector2<SimdFloat>; @@ -860,7 +861,6 @@ impl WAngularInertia<f32> for SdpMatrix3<f32> { } } -#[cfg(feature = "simd-is-enabled")] impl WAngularInertia<SimdFloat> for SdpMatrix3<SimdFloat> { type AngVector = Vector3<SimdFloat>; type LinVector = Vector3<SimdFloat>; |
