solvers: remove erroneous 'break' statement that can occur with incorrectly flagged objects; also added asserts to warn when incorrectly flagged objects are detected

This commit is contained in:
Lunkhound
2018-05-12 19:54:39 -07:00
parent 8d5cd1c324
commit 4254837170
2 changed files with 6 additions and 3 deletions

View File

@@ -780,6 +780,8 @@ int btSequentialImpulseConstraintSolver::getOrInitSolverBody(btCollisionObject&
}
else
{
// Incorrectly set collision object flags can degrade performance in various ways.
btAssert( body.isStaticOrKinematicObject() );
// all fixed bodies (inf mass) get mapped to a single solver id
if ( m_fixedBodyId < 0 )
{

View File

@@ -422,9 +422,10 @@ void btSequentialImpulseConstraintSolverMt::internalCollectContactManifoldCached
btSolverBody* solverBodyA = &m_tmpSolverBodyPool[ solverBodyIdA ];
btSolverBody* solverBodyB = &m_tmpSolverBodyPool[ solverBodyIdB ];
///avoid collision response between two static objects
if ( solverBodyA->m_invMass.fuzzyZero() && solverBodyB->m_invMass.fuzzyZero() )
break;
// A contact manifold between 2 static object should not exist!
// check the collision flags of your objects if this assert fires.
// Incorrectly set collision object flags can degrade performance in various ways.
btAssert( !m_tmpSolverBodyPool[ solverBodyIdA ].m_invMass.isZero() || !m_tmpSolverBodyPool[ solverBodyIdB ].m_invMass.isZero() );
int iContact = 0;
for ( int j = 0; j < manifold->getNumContacts(); j++ )