Merge pull request #2129 from dictoon/master

Fix crash in btGImpactMeshShape vs btBvhTriangleMeshShape
This commit is contained in:
erwincoumans
2019-02-27 11:55:35 -08:00
committed by GitHub

View File

@@ -18,7 +18,7 @@ subject to the following restrictions:
3. This notice may not be removed or altered from any source distribution. 3. This notice may not be removed or altered from any source distribution.
*/ */
/* /*
Author: Francisco Len N<EFBFBD>jera Author: Francisco Leon Najera
Concave-Concave Collision Concave-Concave Collision
*/ */
@@ -590,14 +590,16 @@ void btGImpactCollisionAlgorithm::gimpact_vs_shape(const btCollisionObjectWrappe
} }
btCollisionObjectWrapper ob0(body0Wrap, colshape0, body0Wrap->getCollisionObject(), body0Wrap->getWorldTransform(), m_part0, m_triface0); btCollisionObjectWrapper ob0(body0Wrap, colshape0, body0Wrap->getCollisionObject(), body0Wrap->getWorldTransform(), m_part0, m_triface0);
const btCollisionObjectWrapper* prevObj0 = m_resultOut->getBody0Wrap(); const btCollisionObjectWrapper* prevObj;
if (m_resultOut->getBody0Wrap()->getCollisionObject() == ob0.getCollisionObject()) if (m_resultOut->getBody0Wrap()->getCollisionObject() == ob0.getCollisionObject())
{ {
prevObj = m_resultOut->getBody0Wrap();
m_resultOut->setBody0Wrap(&ob0); m_resultOut->setBody0Wrap(&ob0);
} }
else else
{ {
prevObj = m_resultOut->getBody1Wrap();
m_resultOut->setBody1Wrap(&ob0); m_resultOut->setBody1Wrap(&ob0);
} }
@@ -610,7 +612,15 @@ void btGImpactCollisionAlgorithm::gimpact_vs_shape(const btCollisionObjectWrappe
{ {
shape_vs_shape_collision(&ob0, body1Wrap, colshape0, shape1); shape_vs_shape_collision(&ob0, body1Wrap, colshape0, shape1);
} }
m_resultOut->setBody0Wrap(prevObj0);
if (m_resultOut->getBody0Wrap()->getCollisionObject() == ob0.getCollisionObject())
{
m_resultOut->setBody0Wrap(prevObj);
}
else
{
m_resultOut->setBody1Wrap(prevObj);
}
} }
shape0->unlockChildShapes(); shape0->unlockChildShapes();