aboutsummaryrefslogtreecommitdiff
path: root/src/dynamics/solver/joint_constraint/revolute_position_constraint_wide.rs
diff options
context:
space:
mode:
authorCrozet Sébastien <developer@crozet.re>2021-04-26 17:59:25 +0200
committerCrozet Sébastien <developer@crozet.re>2021-04-26 18:00:50 +0200
commitc32da78f2a6014c491aa3e975fb83ddb7c80610e (patch)
treeedd20f23270baee1577c486f78d825eb93ea0de0 /src/dynamics/solver/joint_constraint/revolute_position_constraint_wide.rs
parentaaf80bfa872c6f29b248cab8eb5658ab0d73cb4a (diff)
downloadrapier-c32da78f2a6014c491aa3e975fb83ddb7c80610e.tar.gz
rapier-c32da78f2a6014c491aa3e975fb83ddb7c80610e.tar.bz2
rapier-c32da78f2a6014c491aa3e975fb83ddb7c80610e.zip
Split rigid-bodies and colliders into multiple components
Diffstat (limited to 'src/dynamics/solver/joint_constraint/revolute_position_constraint_wide.rs')
-rw-r--r--src/dynamics/solver/joint_constraint/revolute_position_constraint_wide.rs34
1 files changed, 27 insertions, 7 deletions
diff --git a/src/dynamics/solver/joint_constraint/revolute_position_constraint_wide.rs b/src/dynamics/solver/joint_constraint/revolute_position_constraint_wide.rs
index e2d140d..5881cb3 100644
--- a/src/dynamics/solver/joint_constraint/revolute_position_constraint_wide.rs
+++ b/src/dynamics/solver/joint_constraint/revolute_position_constraint_wide.rs
@@ -1,5 +1,7 @@
use super::{RevolutePositionConstraint, RevolutePositionGroundConstraint};
-use crate::dynamics::{IntegrationParameters, RevoluteJoint, RigidBody};
+use crate::dynamics::{
+ IntegrationParameters, RevoluteJoint, RigidBodyIds, RigidBodyMassProps, RigidBodyPosition,
+};
use crate::math::{Isometry, Real, SIMD_WIDTH};
// TODO: this does not uses SIMD optimizations yet.
@@ -10,12 +12,22 @@ pub(crate) struct WRevolutePositionConstraint {
impl WRevolutePositionConstraint {
pub fn from_params(
- rbs1: [&RigidBody; SIMD_WIDTH],
- rbs2: [&RigidBody; SIMD_WIDTH],
+ rbs1: (
+ [&RigidBodyMassProps; SIMD_WIDTH],
+ [&RigidBodyIds; SIMD_WIDTH],
+ ),
+ rbs2: (
+ [&RigidBodyMassProps; SIMD_WIDTH],
+ [&RigidBodyIds; SIMD_WIDTH],
+ ),
cparams: [&RevoluteJoint; SIMD_WIDTH],
) -> Self {
Self {
- constraints: array![|ii| RevolutePositionConstraint::from_params(rbs1[ii], rbs2[ii], cparams[ii]); SIMD_WIDTH],
+ constraints: gather![|ii| RevolutePositionConstraint::from_params(
+ (rbs1.0[ii], rbs1.1[ii]),
+ (rbs2.0[ii], rbs2.1[ii]),
+ cparams[ii]
+ )],
}
}
@@ -33,13 +45,21 @@ pub(crate) struct WRevolutePositionGroundConstraint {
impl WRevolutePositionGroundConstraint {
pub fn from_params(
- rbs1: [&RigidBody; SIMD_WIDTH],
- rbs2: [&RigidBody; SIMD_WIDTH],
+ rbs1: [&RigidBodyPosition; SIMD_WIDTH],
+ rbs2: (
+ [&RigidBodyMassProps; SIMD_WIDTH],
+ [&RigidBodyIds; SIMD_WIDTH],
+ ),
cparams: [&RevoluteJoint; SIMD_WIDTH],
flipped: [bool; SIMD_WIDTH],
) -> Self {
Self {
- constraints: array![|ii| RevolutePositionGroundConstraint::from_params(rbs1[ii], rbs2[ii], cparams[ii], flipped[ii]); SIMD_WIDTH],
+ constraints: gather![|ii| RevolutePositionGroundConstraint::from_params(
+ rbs1[ii],
+ (rbs2.0[ii], rbs2.1[ii]),
+ cparams[ii],
+ flipped[ii]
+ )],
}
}