Bullet Collision Detection & Physics Library: btSequentialImpulseConstraintSolverMt Class Reference

Bullet Collision Detection & Physics Library

Classes | Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
btSequentialImpulseConstraintSolverMt Class Reference

btSequentialImpulseConstraintSolverMt More...

`#include <btSequentialImpulseConstraintSolverMt.h>`

Inheritance diagram for btSequentialImpulseConstraintSolverMt:
[legend]
Collaboration diagram for btSequentialImpulseConstraintSolverMt:
[legend]

## Classes
struct | btContactManifoldCachedInfo
struct | JointParams

## Public Member Functions
virtual void | solveGroupCacheFriendlySplitImpulseIterations (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer) BT_OVERRIDE
virtual btScalar | solveSingleIteration (int iteration, btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer) BT_OVERRIDE
virtual btScalar | solveGroupCacheFriendlySetup (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer) BT_OVERRIDE
virtual btScalar | solveGroupCacheFriendlyFinish (btCollisionObject **bodies, int numBodies, const btContactSolverInfo &infoGlobal) BT_OVERRIDE
void | internalInitMultipleJoints (btTypedConstraint **constraints, int iBegin, int iEnd)
void | internalConvertMultipleJoints (const btAlignedObjectArray< JointParams > &jointParamsArray, btTypedConstraint **constraints, int iBegin, int iEnd, const btContactSolverInfo &infoGlobal)
| BT_DECLARE_ALIGNED_ALLOCATOR ()
| btSequentialImpulseConstraintSolverMt ()
virtual | ~btSequentialImpulseConstraintSolverMt ()
btScalar | resolveMultipleJointConstraints (const btAlignedObjectArray< int > &consIndices, int batchBegin, int batchEnd, int iteration)
btScalar | resolveMultipleContactConstraints (const btAlignedObjectArray< int > &consIndices, int batchBegin, int batchEnd)
btScalar | resolveMultipleContactSplitPenetrationImpulseConstraints (const btAlignedObjectArray< int > &consIndices, int batchBegin, int batchEnd)
btScalar | resolveMultipleContactFrictionConstraints (const btAlignedObjectArray< int > &consIndices, int batchBegin, int batchEnd)
btScalar | resolveMultipleContactRollingFrictionConstraints (const btAlignedObjectArray< int > &consIndices, int batchBegin, int batchEnd)
btScalar | resolveMultipleContactConstraintsInterleaved (const btAlignedObjectArray< int > &contactIndices, int batchBegin, int batchEnd)
void | internalCollectContactManifoldCachedInfo (btContactManifoldCachedInfo *cachedInfoArray, btPersistentManifold **manifoldPtr, int numManifolds, const btContactSolverInfo &infoGlobal)
void | internalAllocContactConstraints (const btContactManifoldCachedInfo *cachedInfoArray, int numManifolds)
void | internalSetupContactConstraints (int iContactConstraint, const btContactSolverInfo &infoGlobal)
void | internalConvertBodies (btCollisionObject **bodies, int iBegin, int iEnd, const btContactSolverInfo &infoGlobal)
void | internalWriteBackContacts (int iBegin, int iEnd, const btContactSolverInfo &infoGlobal)
void | internalWriteBackJoints (int iBegin, int iEnd, const btContactSolverInfo &infoGlobal)
void | internalWriteBackBodies (int iBegin, int iEnd, const btContactSolverInfo &infoGlobal)
Public Member Functions inherited from btSequentialImpulseConstraintSolver
| BT_DECLARE_ALIGNED_ALLOCATOR ()
| btSequentialImpulseConstraintSolver ()
virtual | ~btSequentialImpulseConstraintSolver ()
virtual btScalar | solveGroup (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifold, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &info, btIDebugDraw *debugDrawer, btDispatcher *dispatcher)
| btSequentialImpulseConstraintSolver Sequentially applies impulses More...
virtual void | reset ()
| clear internal cached data and reset random seed More...
unsigned long | btRand2 ()
int | btRandInt2 (int n)
void | setRandSeed (unsigned long seed)
unsigned long | getRandSeed () const
virtual btConstraintSolverType | getSolverType () const
btSingleConstraintRowSolver | getActiveConstraintRowSolverGeneric ()
void | setConstraintRowSolverGeneric (btSingleConstraintRowSolver rowSolver)
btSingleConstraintRowSolver | getActiveConstraintRowSolverLowerLimit ()
void | setConstraintRowSolverLowerLimit (btSingleConstraintRowSolver rowSolver)
btSingleConstraintRowSolver | getScalarConstraintRowSolverGeneric ()
| Various implementations of solving a single constraint row using a generic equality constraint, using scalar reference, SSE2 or SSE4. More...
btSingleConstraintRowSolver | getSSE2ConstraintRowSolverGeneric ()
btSingleConstraintRowSolver | getSSE4_1ConstraintRowSolverGeneric ()
btSingleConstraintRowSolver | getScalarConstraintRowSolverLowerLimit ()
| Various implementations of solving a single constraint row using an inequality (lower limit) constraint, using scalar reference, SSE2 or SSE4. More...
btSingleConstraintRowSolver | getSSE2ConstraintRowSolverLowerLimit ()
btSingleConstraintRowSolver | getSSE4_1ConstraintRowSolverLowerLimit ()
Public Member Functions inherited from btConstraintSolver
virtual | ~btConstraintSolver ()
virtual void | prepareSolve (int, int)
virtual btScalar | solveGroup (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifold, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &info, class btIDebugDraw *debugDrawer, btDispatcher *dispatcher)=0
| solve a group of constraints More...
virtual void | allSolved (const btContactSolverInfo &, class btIDebugDraw *)
virtual void | reset ()=0
| clear internal cached data and reset random seed More...
virtual btConstraintSolverType | getSolverType () const =0

## Static Public Attributes
static bool | s_allowNestedParallelForLoops = false
static int | s_minimumContactManifoldsForBatching = 250
static btBatchedConstraints::BatchingMethod | s_contactBatchingMethod = btBatchedConstraints::BATCHING_METHOD_SPATIAL_GRID_2D
static btBatchedConstraints::BatchingMethod | s_jointBatchingMethod = btBatchedConstraints::BATCHING_METHOD_SPATIAL_GRID_2D
static int | s_minBatchSize = 50
static int | s_maxBatchSize = 100

## Protected Member Functions
virtual void | randomizeConstraintOrdering (int iteration, int numIterations)
virtual btScalar | resolveAllJointConstraints (int iteration)
virtual btScalar | resolveAllContactConstraints ()
virtual btScalar | resolveAllContactFrictionConstraints ()
virtual btScalar | resolveAllContactConstraintsInterleaved ()
virtual btScalar | resolveAllRollingFrictionConstraints ()
virtual void | setupBatchedContactConstraints ()
virtual void | setupBatchedJointConstraints ()
virtual void | convertJoints (btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal) BT_OVERRIDE
virtual void | convertContacts (btPersistentManifold **manifoldPtr, int numManifolds, const btContactSolverInfo &infoGlobal) BT_OVERRIDE
virtual void | convertBodies (btCollisionObject **bodies, int numBodies, const btContactSolverInfo &infoGlobal) BT_OVERRIDE
int | getOrInitSolverBodyThreadsafe (btCollisionObject &body, btScalar timeStep)
void | allocAllContactConstraints (btPersistentManifold **manifoldPtr, int numManifolds, const btContactSolverInfo &infoGlobal)
void | setupAllContactConstraints (const btContactSolverInfo &infoGlobal)
void | randomizeBatchedConstraintOrdering (btBatchedConstraints *batchedConstraints)
Protected Member Functions inherited from btSequentialImpulseConstraintSolver
void | setupSolverFunctions (bool useSimd)
void | setupFrictionConstraint (btSolverConstraint &solverConstraint, const btVector3 &normalAxis, int solverBodyIdA, int solverBodyIdB, btManifoldPoint &cp, const btVector3 &rel_pos1, const btVector3 &rel_pos2, btCollisionObject *colObj0, btCollisionObject *colObj1, btScalar relaxation, const btContactSolverInfo &infoGlobal, btScalar desiredVelocity=0., btScalar cfmSlip=0.)
void | setupTorsionalFrictionConstraint (btSolverConstraint &solverConstraint, const btVector3 &normalAxis, int solverBodyIdA, int solverBodyIdB, btManifoldPoint &cp, btScalar combinedTorsionalFriction, const btVector3 &rel_pos1, const btVector3 &rel_pos2, btCollisionObject *colObj0, btCollisionObject *colObj1, btScalar relaxation, btScalar desiredVelocity=0., btScalar cfmSlip=0.)
btSolverConstraint & | addFrictionConstraint (const btVector3 &normalAxis, int solverBodyIdA, int solverBodyIdB, int frictionIndex, btManifoldPoint &cp, const btVector3 &rel_pos1, const btVector3 &rel_pos2, btCollisionObject *colObj0, btCollisionObject *colObj1, btScalar relaxation, const btContactSolverInfo &infoGlobal, btScalar desiredVelocity=0., btScalar cfmSlip=0.)
btSolverConstraint & | addTorsionalFrictionConstraint (const btVector3 &normalAxis, int solverBodyIdA, int solverBodyIdB, int frictionIndex, btManifoldPoint &cp, btScalar torsionalFriction, const btVector3 &rel_pos1, const btVector3 &rel_pos2, btCollisionObject *colObj0, btCollisionObject *colObj1, btScalar relaxation, btScalar desiredVelocity=0, btScalar cfmSlip=0.f)
void | setupContactConstraint (btSolverConstraint &solverConstraint, int solverBodyIdA, int solverBodyIdB, btManifoldPoint &cp, const btContactSolverInfo &infoGlobal, btScalar &relaxation, const btVector3 &rel_pos1, const btVector3 &rel_pos2)
void | setFrictionConstraintImpulse (btSolverConstraint &solverConstraint, int solverBodyIdA, int solverBodyIdB, btManifoldPoint &cp, const btContactSolverInfo &infoGlobal)
btScalar | restitutionCurve (btScalar rel_vel, btScalar restitution, btScalar velocityThreshold)
virtual void | convertContacts (btPersistentManifold **manifoldPtr, int numManifolds, const btContactSolverInfo &infoGlobal)
void | convertContact (btPersistentManifold *manifold, const btContactSolverInfo &infoGlobal)
virtual void | convertJoints (btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal)
void | convertJoint (btSolverConstraint *currentConstraintRow, btTypedConstraint *constraint, const btTypedConstraint::btConstraintInfo1 &info1, int solverBodyIdA, int solverBodyIdB, const btContactSolverInfo &infoGlobal)
virtual void | convertBodies (btCollisionObject **bodies, int numBodies, const btContactSolverInfo &infoGlobal)
btScalar | resolveSplitPenetrationSIMD (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
btScalar | resolveSplitPenetrationImpulseCacheFriendly (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
int | getOrInitSolverBody (btCollisionObject &body, btScalar timeStep)
void | initSolverBody (btSolverBody *solverBody, btCollisionObject *collisionObject, btScalar timeStep)
btScalar | resolveSingleConstraintRowGeneric (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
btScalar | resolveSingleConstraintRowGenericSIMD (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
btScalar | resolveSingleConstraintRowLowerLimit (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
btScalar | resolveSingleConstraintRowLowerLimitSIMD (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
btScalar | resolveSplitPenetrationImpulse (btSolverBody &bodyA, btSolverBody &bodyB, const btSolverConstraint &contactConstraint)
void | writeBackContacts (int iBegin, int iEnd, const btContactSolverInfo &infoGlobal)
void | writeBackJoints (int iBegin, int iEnd, const btContactSolverInfo &infoGlobal)
void | writeBackBodies (int iBegin, int iEnd, const btContactSolverInfo &infoGlobal)
virtual void | solveGroupCacheFriendlySplitImpulseIterations (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer)
virtual btScalar | solveGroupCacheFriendlyFinish (btCollisionObject **bodies, int numBodies, const btContactSolverInfo &infoGlobal)
virtual btScalar | solveSingleIteration (int iteration, btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer)
virtual btScalar | solveGroupCacheFriendlySetup (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer)
virtual btScalar | solveGroupCacheFriendlyIterations (btCollisionObject **bodies, int numBodies, btPersistentManifold **manifoldPtr, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &infoGlobal, btIDebugDraw *debugDrawer)

## Protected Attributes
btBatchedConstraints | m_batchedContactConstraints
btBatchedConstraints | m_batchedJointConstraints
int | m_numFrictionDirections
bool | m_useBatching
bool | m_useObsoleteJointConstraints
btAlignedObjectArray< btContactManifoldCachedInfo > | m_manifoldCachedInfoArray
btAlignedObjectArray< int > | m_rollingFrictionIndexTable
btSpinMutex | m_bodySolverArrayMutex
char | m_antiFalseSharingPadding [CACHE_LINE_SIZE]
btSpinMutex | m_kinematicBodyUniqueIdToSolverBodyTableMutex
btAlignedObjectArray< char > | m_scratchMemory
Protected Attributes inherited from btSequentialImpulseConstraintSolver
btAlignedObjectArray< btSolverBody > | m_tmpSolverBodyPool
btConstraintArray | m_tmpSolverContactConstraintPool
btConstraintArray | m_tmpSolverNonContactConstraintPool
btConstraintArray | m_tmpSolverContactFrictionConstraintPool
btConstraintArray | m_tmpSolverContactRollingFrictionConstraintPool
btAlignedObjectArray< int > | m_orderTmpConstraintPool
btAlignedObjectArray< int > | m_orderNonContactConstraintPool
btAlignedObjectArray< int > | m_orderFrictionConstraintPool
btAlignedObjectArray< btTypedConstraint::btConstraintInfo1 > | m_tmpConstraintSizesPool
int | m_maxOverrideNumSolverIterations
int | m_fixedBodyId
btAlignedObjectArray< int > | m_kinematicBodyUniqueIdToSolverBodyTable
btSingleConstraintRowSolver | m_resolveSingleConstraintRowGeneric
btSingleConstraintRowSolver | m_resolveSingleConstraintRowLowerLimit
btSingleConstraintRowSolver | m_resolveSplitPenetrationImpulse
int | m_cachedSolverMode
btScalar | m_leastSquaresResidual
unsigned long | m_btSeed2
| m_btSeed2 is used for re-arranging the constraint rows. improves convergence/quality of friction More...

## Static Protected Attributes
static const int | CACHE_LINE_SIZE = 64

## Additional Inherited Members
Public Attributes inherited from btSequentialImpulseConstraintSolver
btSolverAnalyticsData | m_analyticsData
Static Protected Member Functions inherited from btSequentialImpulseConstraintSolver
static void | applyAnisotropicFriction (btCollisionObject *colObj, btVector3 &frictionDirection, int frictionMode)

## Detailed Description

btSequentialImpulseConstraintSolverMt

A multithreaded variant of the sequential impulse constraint solver. The constraints to be solved are grouped into batches and phases where each batch of constraints within a given phase can be solved in parallel with the rest. Ideally we want as few phases as possible, and each phase should have many batches, and all of the batches should have about the same number of constraints. This method works best on a large island of many constraints.

Supports all of the features of the normal sequential impulse solver such as:

- split penetration impulse
- rolling friction
- interleaving constraints
- warmstarting
- 2 friction directions
- randomized constraint ordering
- early termination when leastSquaresResidualThreshold is satisfied

When the SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS flag is enabled, unlike the normal SequentialImpulse solver, the rolling friction is interleaved as well. Interleaving the contact penetration constraints with friction reduces the number of parallel loops that need to be done, which reduces threading overhead so it can be a performance win, however, it does seem to produce a less stable simulation, at least on stacks of blocks.

When the SOLVER_RANDMIZE_ORDER flag is enabled, the ordering of phases, and the ordering of constraints within each batch is randomized, however it does not swap constraints between batches. This is to avoid regenerating the batches for each solver iteration which would be quite costly in performance.

Note that a non-zero leastSquaresResidualThreshold could possibly affect the determinism of the simulation if the task scheduler's parallelSum operation is non-deterministic. The parallelSum operation can be non-deterministic because floating point addition is not associative due to rounding errors. The task scheduler can and should ensure that the result of any parallelSum operation is deterministic.

Definition at line 56 of file btSequentialImpulseConstraintSolverMt.h.

## Constructor & Destructor Documentation

## ◆ btSequentialImpulseConstraintSolverMt()

btSequentialImpulseConstraintSolverMt::btSequentialImpulseConstraintSolverMt | ( |  | ) |

Definition at line 32 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ ~btSequentialImpulseConstraintSolverMt()

btSequentialImpulseConstraintSolverMt::~btSequentialImpulseConstraintSolverMt | ( |  | ) |
| virtual

Definition at line 39 of file btSequentialImpulseConstraintSolverMt.cpp.

## Member Function Documentation

## ◆ allocAllContactConstraints()

void btSequentialImpulseConstraintSolverMt::allocAllContactConstraints | ( | btPersistentManifold ** | manifoldPtr,
|  | int | numManifolds,
|  | const btContactSolverInfo & | infoGlobal
| ) |  |
| protected

Definition at line 513 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ BT_DECLARE_ALIGNED_ALLOCATOR()

btSequentialImpulseConstraintSolverMt::BT_DECLARE_ALIGNED_ALLOCATOR | ( |  | ) |

## ◆ convertBodies()

void btSequentialImpulseConstraintSolverMt::convertBodies | ( | btCollisionObject ** | bodies,
|  | int | numBodies,
|  | const btContactSolverInfo & | infoGlobal
| ) |  |
| protectedvirtual

Reimplemented from btSequentialImpulseConstraintSolver.

Definition at line 802 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ convertContacts()

void btSequentialImpulseConstraintSolverMt::convertContacts | ( | btPersistentManifold ** | manifoldPtr,
|  | int | numManifolds,
|  | const btContactSolverInfo & | infoGlobal
| ) |  |
| protectedvirtual

Reimplemented from btSequentialImpulseConstraintSolver.

Definition at line 573 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ convertJoints()

void btSequentialImpulseConstraintSolverMt::convertJoints | ( | btTypedConstraint ** | constraints,
|  | int | numConstraints,
|  | const btContactSolverInfo & | infoGlobal
| ) |  |
| protectedvirtual

setup the btSolverConstraints

Reimplemented from btSequentialImpulseConstraintSolver.

Definition at line 686 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ getOrInitSolverBodyThreadsafe()

int btSequentialImpulseConstraintSolverMt::getOrInitSolverBodyThreadsafe | ( | btCollisionObject & | body,
|  | btScalar | timeStep
| ) |  |
| protected

Definition at line 297 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ internalAllocContactConstraints()

void btSequentialImpulseConstraintSolverMt::internalAllocContactConstraints | ( | const btContactManifoldCachedInfo * | cachedInfoArray,
|  | int | numManifolds
| ) |  |

Definition at line 450 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ internalCollectContactManifoldCachedInfo()

void btSequentialImpulseConstraintSolverMt::internalCollectContactManifoldCachedInfo | ( | btContactManifoldCachedInfo * | cachedInfoArray,
|  | btPersistentManifold ** | manifoldPtr,
|  | int | numManifolds,
|  | const btContactSolverInfo & | infoGlobal
| ) |  |

Definition at line 389 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ internalConvertBodies()

void btSequentialImpulseConstraintSolverMt::internalConvertBodies | ( | btCollisionObject ** | bodies,
|  | int | iBegin,
|  | int | iEnd,
|  | const btContactSolverInfo & | infoGlobal
| ) |  |

Definition at line 747 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ internalConvertMultipleJoints()

void btSequentialImpulseConstraintSolverMt::internalConvertMultipleJoints | ( | const btAlignedObjectArray< JointParams > & | jointParamsArray,
|  | btTypedConstraint ** | constraints,
|  | int | iBegin,
|  | int | iEnd,
|  | const btContactSolverInfo & | infoGlobal
| ) |  |

Definition at line 643 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ internalInitMultipleJoints()

void btSequentialImpulseConstraintSolverMt::internalInitMultipleJoints | ( | btTypedConstraint ** | constraints,
|  | int | iBegin,
|  | int | iEnd
| ) |  |

Definition at line 598 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ internalSetupContactConstraints()

void btSequentialImpulseConstraintSolverMt::internalSetupContactConstraints | ( | int | iContactConstraint,
|  | const btContactSolverInfo & | infoGlobal
| ) |  |

Bullet has several options to set the friction directions By default, each contact has only a single friction direction that is recomputed automatically very frame based on the relative linear velocity. If the relative velocity it zero, it will automatically compute a friction direction.

You can also enable two friction directions, using the SOLVER_USE_2_FRICTION_DIRECTIONS. In that case, the second friction direction will be orthogonal to both contact normal and first friction direction.

If you choose SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION, then the friction will be independent from the relative projected velocity.

The user can manually override the friction directions for certain contacts using a contact callback, and set the cp.m_lateralFrictionInitialized to true In that case, you can set the target relative motion in each friction direction (cp.m_contactMotion1 and cp.m_contactMotion2) this will give a conveyor belt effect

Definition at line 65 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ internalWriteBackBodies()

void btSequentialImpulseConstraintSolverMt::internalWriteBackBodies | ( | int | iBegin,
|  | int | iEnd,
|  | const btContactSolverInfo & | infoGlobal
| ) |  |

Definition at line 1471 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ internalWriteBackContacts()

void btSequentialImpulseConstraintSolverMt::internalWriteBackContacts | ( | int | iBegin,
|  | int | iEnd,
|  | const btContactSolverInfo & | infoGlobal
| ) |  |

Definition at line 1447 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ internalWriteBackJoints()

void btSequentialImpulseConstraintSolverMt::internalWriteBackJoints | ( | int | iBegin,
|  | int | iEnd,
|  | const btContactSolverInfo & | infoGlobal
| ) |  |

Definition at line 1465 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ randomizeBatchedConstraintOrdering()

void btSequentialImpulseConstraintSolverMt::randomizeBatchedConstraintOrdering | ( | btBatchedConstraints * | batchedConstraints | ) |
| protected

Definition at line 1168 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ randomizeConstraintOrdering()

void btSequentialImpulseConstraintSolverMt::randomizeConstraintOrdering | ( | int | iteration,
|  | int | numIterations
| ) |  |
| protectedvirtual

Definition at line 1192 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ resolveAllContactConstraints()

btScalar btSequentialImpulseConstraintSolverMt::resolveAllContactConstraints | ( |  | ) |
| protectedvirtual

Definition at line 1268 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ resolveAllContactConstraintsInterleaved()

btScalar btSequentialImpulseConstraintSolverMt::resolveAllContactConstraintsInterleaved | ( |  | ) |
| protectedvirtual

Definition at line 1346 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ resolveAllContactFrictionConstraints()

btScalar btSequentialImpulseConstraintSolverMt::resolveAllContactFrictionConstraints | ( |  | ) |
| protectedvirtual

Definition at line 1307 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ resolveAllJointConstraints()

btScalar btSequentialImpulseConstraintSolverMt::resolveAllJointConstraints | ( | int | iteration | ) |
| protectedvirtual

Definition at line 1229 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ resolveAllRollingFrictionConstraints()

btScalar btSequentialImpulseConstraintSolverMt::resolveAllRollingFrictionConstraints | ( |  | ) |
| protectedvirtual

Definition at line 1385 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ resolveMultipleContactConstraints()

btScalar btSequentialImpulseConstraintSolverMt::resolveMultipleContactConstraints | ( | const btAlignedObjectArray< int > & | consIndices,
|  | int | batchBegin,
|  | int | batchEnd
| ) |  |

Definition at line 1013 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ resolveMultipleContactConstraintsInterleaved()

btScalar btSequentialImpulseConstraintSolverMt::resolveMultipleContactConstraintsInterleaved | ( | const btAlignedObjectArray< int > & | contactIndices,
|  | int | batchBegin,
|  | int | batchEnd
| ) |  |

Definition at line 1099 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ resolveMultipleContactFrictionConstraints()

btScalar btSequentialImpulseConstraintSolverMt::resolveMultipleContactFrictionConstraints | ( | const btAlignedObjectArray< int > & | consIndices,
|  | int | batchBegin,
|  | int | batchEnd
| ) |  |

Definition at line 1028 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ resolveMultipleContactRollingFrictionConstraints()

btScalar btSequentialImpulseConstraintSolverMt::resolveMultipleContactRollingFrictionConstraints | ( | const btAlignedObjectArray< int > & | consIndices,
|  | int | batchBegin,
|  | int | batchEnd
| ) |  |

Definition at line 1059 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ resolveMultipleContactSplitPenetrationImpulseConstraints()

btScalar btSequentialImpulseConstraintSolverMt::resolveMultipleContactSplitPenetrationImpulseConstraints | ( | const btAlignedObjectArray< int > & | consIndices,
|  | int | batchBegin,
|  | int | batchEnd
| ) |  |

Definition at line 858 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ resolveMultipleJointConstraints()

btScalar btSequentialImpulseConstraintSolverMt::resolveMultipleJointConstraints | ( | const btAlignedObjectArray< int > & | consIndices,
|  | int | batchBegin,
|  | int | batchEnd,
|  | int | iteration
| ) |  |

Definition at line 995 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ setupAllContactConstraints()

void btSequentialImpulseConstraintSolverMt::setupAllContactConstraints | ( | const btContactSolverInfo & | infoGlobal | ) |
| protected

Definition at line 273 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ setupBatchedContactConstraints()

void btSequentialImpulseConstraintSolverMt::setupBatchedContactConstraints | ( |  | ) |
| protectedvirtual

Definition at line 43 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ setupBatchedJointConstraints()

void btSequentialImpulseConstraintSolverMt::setupBatchedJointConstraints | ( |  | ) |
| protectedvirtual

Definition at line 54 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ solveGroupCacheFriendlyFinish()

btScalar btSequentialImpulseConstraintSolverMt::solveGroupCacheFriendlyFinish | ( | btCollisionObject ** | bodies,
|  | int | numBodies,
|  | const btContactSolverInfo & | infoGlobal
| ) |  |
| virtual

Reimplemented from btSequentialImpulseConstraintSolver.

Definition at line 1525 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ solveGroupCacheFriendlySetup()

btScalar btSequentialImpulseConstraintSolverMt::solveGroupCacheFriendlySetup | ( | btCollisionObject ** | bodies,
|  | int | numBodies,
|  | btPersistentManifold ** | manifoldPtr,
|  | int | numManifolds,
|  | btTypedConstraint ** | constraints,
|  | int | numConstraints,
|  | const btContactSolverInfo & | infoGlobal,
|  | btIDebugDraw * | debugDrawer
| ) |  |
| virtual

Reimplemented from btSequentialImpulseConstraintSolver.

Definition at line 828 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ solveGroupCacheFriendlySplitImpulseIterations()

void btSequentialImpulseConstraintSolverMt::solveGroupCacheFriendlySplitImpulseIterations | ( | btCollisionObject ** | bodies,
|  | int | numBodies,
|  | btPersistentManifold ** | manifoldPtr,
|  | int | numManifolds,
|  | btTypedConstraint ** | constraints,
|  | int | numConstraints,
|  | const btContactSolverInfo & | infoGlobal,
|  | btIDebugDraw * | debugDrawer
| ) |  |
| virtual

Reimplemented from btSequentialImpulseConstraintSolver.

Definition at line 896 of file btSequentialImpulseConstraintSolverMt.cpp.

## ◆ solveSingleIteration()

btScalar btSequentialImpulseConstraintSolverMt::solveSingleIteration | ( | int | iteration,
|  | btCollisionObject ** | bodies,
|  | int | numBodies,
|  | btPersistentManifold ** | manifoldPtr,
|  | int | numManifolds,
|  | btTypedConstraint ** | constraints,
|  | int | numConstraints,
|  | const btContactSolverInfo & | infoGlobal,
|  | btIDebugDraw * | debugDrawer
| ) |  |
| virtual

solve all joint constraints

Reimplemented from btSequentialImpulseConstraintSolver.

Definition at line 933 of file btSequentialImpulseConstraintSolverMt.cpp.

## Member Data Documentation

## ◆ CACHE_LINE_SIZE

const int btSequentialImpulseConstraintSolverMt::CACHE_LINE_SIZE = 64
| staticprotected

Definition at line 96 of file btSequentialImpulseConstraintSolverMt.h.

## ◆ m_antiFalseSharingPadding

char btSequentialImpulseConstraintSolverMt::m_antiFalseSharingPadding[CACHE_LINE_SIZE]
| protected

Definition at line 106 of file btSequentialImpulseConstraintSolverMt.h.

## ◆ m_batchedContactConstraints

btBatchedConstraints btSequentialImpulseConstraintSolverMt::m_batchedContactConstraints
| protected

Definition at line 98 of file btSequentialImpulseConstraintSolverMt.h.

## ◆ m_batchedJointConstraints

btBatchedConstraints btSequentialImpulseConstraintSolverMt::m_batchedJointConstraints
| protected

Definition at line 99 of file btSequentialImpulseConstraintSolverMt.h.

## ◆ m_bodySolverArrayMutex

btSpinMutex btSequentialImpulseConstraintSolverMt::m_bodySolverArrayMutex
| protected

Definition at line 105 of file btSequentialImpulseConstraintSolverMt.h.

## ◆ m_kinematicBodyUniqueIdToSolverBodyTableMutex

btSpinMutex btSequentialImpulseConstraintSolverMt::m_kinematicBodyUniqueIdToSolverBodyTableMutex
| protected

Definition at line 107 of file btSequentialImpulseConstraintSolverMt.h.

## ◆ m_manifoldCachedInfoArray

btAlignedObjectArray<btContactManifoldCachedInfo> btSequentialImpulseConstraintSolverMt::m_manifoldCachedInfoArray
| protected

Definition at line 103 of file btSequentialImpulseConstraintSolverMt.h.

## ◆ m_numFrictionDirections

int btSequentialImpulseConstraintSolverMt::m_numFrictionDirections
| protected

Definition at line 100 of file btSequentialImpulseConstraintSolverMt.h.

## ◆ m_rollingFrictionIndexTable

btAlignedObjectArray<int> btSequentialImpulseConstraintSolverMt::m_rollingFrictionIndexTable
| protected

Definition at line 104 of file btSequentialImpulseConstraintSolverMt.h.

## ◆ m_scratchMemory

btAlignedObjectArray<char> btSequentialImpulseConstraintSolverMt::m_scratchMemory
| protected

Definition at line 108 of file btSequentialImpulseConstraintSolverMt.h.

## ◆ m_useBatching

bool btSequentialImpulseConstraintSolverMt::m_useBatching
| protected

Definition at line 101 of file btSequentialImpulseConstraintSolverMt.h.

## ◆ m_useObsoleteJointConstraints

bool btSequentialImpulseConstraintSolverMt::m_useObsoleteJointConstraints
| protected

Definition at line 102 of file btSequentialImpulseConstraintSolverMt.h.

## ◆ s_allowNestedParallelForLoops

bool btSequentialImpulseConstraintSolverMt::s_allowNestedParallelForLoops = false
| static

Definition at line 88 of file btSequentialImpulseConstraintSolverMt.h.

## ◆ s_contactBatchingMethod

btBatchedConstraints::BatchingMethod btSequentialImpulseConstraintSolverMt::s_contactBatchingMethod = btBatchedConstraints::BATCHING_METHOD_SPATIAL_GRID_2D
| static

Definition at line 90 of file btSequentialImpulseConstraintSolverMt.h.

## ◆ s_jointBatchingMethod

btBatchedConstraints::BatchingMethod btSequentialImpulseConstraintSolverMt::s_jointBatchingMethod = btBatchedConstraints::BATCHING_METHOD_SPATIAL_GRID_2D
| static

Definition at line 91 of file btSequentialImpulseConstraintSolverMt.h.

## ◆ s_maxBatchSize

int btSequentialImpulseConstraintSolverMt::s_maxBatchSize = 100
| static

Definition at line 93 of file btSequentialImpulseConstraintSolverMt.h.

## ◆ s_minBatchSize

int btSequentialImpulseConstraintSolverMt::s_minBatchSize = 50
| static

Definition at line 92 of file btSequentialImpulseConstraintSolverMt.h.

## ◆ s_minimumContactManifoldsForBatching

int btSequentialImpulseConstraintSolverMt::s_minimumContactManifoldsForBatching = 250
| static

Definition at line 89 of file btSequentialImpulseConstraintSolverMt.h.

The documentation for this class was generated from the following files:

- btSequentialImpulseConstraintSolverMt.h
- btSequentialImpulseConstraintSolverMt.cpp