diff options
| author | Sébastien Crozet <developer@crozet.re> | 2020-11-23 15:52:22 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-23 15:52:22 +0100 |
| commit | c641114f016c47f6b22acc084610847f88ff5a66 (patch) | |
| tree | d171cf0a72927b76ee20fda8f215477b4a5cd987 /src | |
| parent | 4219bedb8b09a31a7ee8a9cd687db493215174a3 (diff) | |
| parent | c7ed2c99c12747ce8dc765e0ac0f40967bc8bacd (diff) | |
| download | rapier-c641114f016c47f6b22acc084610847f88ff5a66.tar.gz rapier-c641114f016c47f6b22acc084610847f88ff5a66.tar.bz2 rapier-c641114f016c47f6b22acc084610847f88ff5a66.zip | |
Merge pull request #67 from dimforge/determinism_apple_m1
Fix cross-platform determinism on the Apple M1 processor
Diffstat (limited to 'src')
| -rw-r--r-- | src/geometry/waabb.rs | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/geometry/waabb.rs b/src/geometry/waabb.rs index 645ac04..1ebf528 100644 --- a/src/geometry/waabb.rs +++ b/src/geometry/waabb.rs @@ -105,7 +105,16 @@ impl WAABB { } pub fn dilate_by_factor(&mut self, factor: SimdFloat) { - let dilation = (self.maxs - self.mins) * factor; + // If some of the AABBs on this WAABB are invalid, + // don't, dilate them. + let is_valid = self.mins.x.simd_le(self.maxs.x); + let factor = factor.select(is_valid, SimdFloat::zero()); + + // NOTE: we multiply each by factor instead of doing + // (maxs - mins) * factor. That's to avoid overflows (and + // therefore NaNs if this WAABB contains some invalid + // AABBs initialised with f32::MAX + let dilation = self.maxs * factor - self.mins * factor; self.mins -= dilation; self.maxs += dilation; } |
