diff options
Diffstat (limited to 'src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs')
| -rw-r--r-- | src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs b/src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs index cd2ea56..03c1abe 100644 --- a/src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs +++ b/src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs @@ -154,7 +154,7 @@ impl SimdOneBodyConstraintBuilder { rhs: na::zero(), rhs_wo_bias: na::zero(), impulse: na::zero(), - total_impulse: na::zero(), + impulse_accumulator: na::zero(), r: projected_mass, }; } @@ -259,19 +259,18 @@ impl SimdOneBodyConstraintBuilder { .simd_clamp(-max_penetration_correction, SimdReal::zero()) * erp_inv_dt; let new_rhs = rhs_wo_bias + rhs_bias; - let total_impulse = element.normal_part.total_impulse + element.normal_part.impulse; is_fast_contact = is_fast_contact | (-new_rhs * dt).simd_gt(ccd_thickness * SimdReal::splat(0.5)); element.normal_part.rhs_wo_bias = rhs_wo_bias; element.normal_part.rhs = new_rhs; - element.normal_part.total_impulse = total_impulse; + element.normal_part.impulse_accumulator += element.normal_part.impulse; element.normal_part.impulse = na::zero(); } // tangent parts. { - element.tangent_part.total_impulse += element.tangent_part.impulse; + element.tangent_part.impulse_accumulator += element.tangent_part.impulse; element.tangent_part.impulse = na::zero(); for j in 0..DIM - 1 { @@ -334,11 +333,12 @@ impl OneBodyConstraintSimd { // FIXME: duplicated code. This is exactly the same as in the two-body velocity constraint. pub fn writeback_impulses(&self, manifolds_all: &mut [&mut ContactManifold]) { for k in 0..self.num_contacts as usize { - let impulses: [_; SIMD_WIDTH] = self.elements[k].normal_part.impulse.into(); + let impulses: [_; SIMD_WIDTH] = self.elements[k].normal_part.total_impulse().into(); #[cfg(feature = "dim2")] - let tangent_impulses: [_; SIMD_WIDTH] = self.elements[k].tangent_part.impulse[0].into(); + let tangent_impulses: [_; SIMD_WIDTH] = + self.elements[k].tangent_part.total_impulse()[0].into(); #[cfg(feature = "dim3")] - let tangent_impulses = self.elements[k].tangent_part.impulse; + let tangent_impulses = self.elements[k].tangent_part.total_impulse(); for ii in 0..SIMD_WIDTH { let manifold = &mut manifolds_all[self.manifold_id[ii]]; |
