aboutsummaryrefslogtreecommitdiff
path: root/src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs
diff options
context:
space:
mode:
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.rs14
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]];