fix uninitialized data in btMultiBodyPoint2Point, thanks to Valgrind
valgrind --track-origins=yes --log-file="dump_valgrind.txt" ./App_AllBullet2Demos_codeblocks_x64_debug
This commit is contained in:
@@ -4,8 +4,8 @@ Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
|
|||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
@@ -26,7 +26,7 @@ subject to the following restrictions:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
btMultiBodyPoint2Point::btMultiBodyPoint2Point(btMultiBody* body, int link, btRigidBody* bodyB, const btVector3& pivotInA, const btVector3& pivotInB)
|
btMultiBodyPoint2Point::btMultiBodyPoint2Point(btMultiBody* body, int link, btRigidBody* bodyB, const btVector3& pivotInA, const btVector3& pivotInB)
|
||||||
:btMultiBodyConstraint(body,0,link,-1,BTMBP2PCONSTRAINT_DIM,false),
|
:btMultiBodyConstraint(body,0,link,-1,BTMBP2PCONSTRAINT_DIM,false),
|
||||||
m_rigidBodyA(0),
|
m_rigidBodyA(0),
|
||||||
m_rigidBodyB(bodyB),
|
m_rigidBodyB(bodyB),
|
||||||
m_pivotInA(pivotInA),
|
m_pivotInA(pivotInA),
|
||||||
@@ -95,15 +95,23 @@ void btMultiBodyPoint2Point::createConstraintRows(btMultiBodyConstraintArray& co
|
|||||||
const btContactSolverInfo& infoGlobal)
|
const btContactSolverInfo& infoGlobal)
|
||||||
{
|
{
|
||||||
|
|
||||||
// int i=1;
|
// int i=1;
|
||||||
for (int i=0;i<BTMBP2PCONSTRAINT_DIM;i++)
|
int numDim = BTMBP2PCONSTRAINT_DIM;
|
||||||
|
for (int i=0;i<numDim;i++)
|
||||||
{
|
{
|
||||||
|
|
||||||
btMultiBodySolverConstraint& constraintRow = constraintRows.expandNonInitializing();
|
btMultiBodySolverConstraint& constraintRow = constraintRows.expandNonInitializing();
|
||||||
|
//memset(&constraintRow,0xffffffff,sizeof(btMultiBodySolverConstraint));
|
||||||
|
constraintRow.m_relpos1CrossNormal.setValue(0,0,0);
|
||||||
|
constraintRow.m_contactNormal1.setValue(0,0,0);
|
||||||
|
constraintRow.m_relpos2CrossNormal.setValue(0,0,0);
|
||||||
|
constraintRow.m_contactNormal2.setValue(0,0,0);
|
||||||
|
constraintRow.m_angularComponentA.setValue(0,0,0);
|
||||||
|
constraintRow.m_angularComponentB.setValue(0,0,0);
|
||||||
|
|
||||||
constraintRow.m_solverBodyIdA = data.m_fixedBodyId;
|
constraintRow.m_solverBodyIdA = data.m_fixedBodyId;
|
||||||
constraintRow.m_solverBodyIdB = data.m_fixedBodyId;
|
constraintRow.m_solverBodyIdB = data.m_fixedBodyId;
|
||||||
|
|
||||||
btVector3 contactNormalOnB(0,0,0);
|
btVector3 contactNormalOnB(0,0,0);
|
||||||
#ifndef BTMBP2PCONSTRAINT_BLOCK_ANGULAR_MOTION_TEST
|
#ifndef BTMBP2PCONSTRAINT_BLOCK_ANGULAR_MOTION_TEST
|
||||||
contactNormalOnB[i] = -1;
|
contactNormalOnB[i] = -1;
|
||||||
@@ -117,7 +125,7 @@ void btMultiBodyPoint2Point::createConstraintRows(btMultiBodyConstraintArray& co
|
|||||||
btVector3 pivotAworld = m_pivotInA;
|
btVector3 pivotAworld = m_pivotInA;
|
||||||
if (m_rigidBodyA)
|
if (m_rigidBodyA)
|
||||||
{
|
{
|
||||||
|
|
||||||
constraintRow.m_solverBodyIdA = m_rigidBodyA->getCompanionId();
|
constraintRow.m_solverBodyIdA = m_rigidBodyA->getCompanionId();
|
||||||
pivotAworld = m_rigidBodyA->getCenterOfMassTransform()*m_pivotInA;
|
pivotAworld = m_rigidBodyA->getCenterOfMassTransform()*m_pivotInA;
|
||||||
} else
|
} else
|
||||||
@@ -134,20 +142,22 @@ void btMultiBodyPoint2Point::createConstraintRows(btMultiBodyConstraintArray& co
|
|||||||
{
|
{
|
||||||
if (m_bodyB)
|
if (m_bodyB)
|
||||||
pivotBworld = m_bodyB->localPosToWorld(m_linkB, m_pivotInB);
|
pivotBworld = m_bodyB->localPosToWorld(m_linkB, m_pivotInB);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
btScalar posError = i < 3 ? (pivotAworld-pivotBworld).dot(contactNormalOnB) : 0;
|
btScalar posError = i < 3 ? (pivotAworld-pivotBworld).dot(contactNormalOnB) : 0;
|
||||||
|
|
||||||
#ifndef BTMBP2PCONSTRAINT_BLOCK_ANGULAR_MOTION_TEST
|
#ifndef BTMBP2PCONSTRAINT_BLOCK_ANGULAR_MOTION_TEST
|
||||||
|
|
||||||
|
|
||||||
fillMultiBodyConstraint(constraintRow, data, 0, 0,
|
fillMultiBodyConstraint(constraintRow, data, 0, 0,
|
||||||
contactNormalOnB, pivotAworld, pivotBworld, //sucks but let it be this way "for the time being"
|
contactNormalOnB, pivotAworld, pivotBworld, //sucks but let it be this way "for the time being"
|
||||||
posError,
|
posError,
|
||||||
infoGlobal,
|
infoGlobal,
|
||||||
-m_maxAppliedImpulse, m_maxAppliedImpulse
|
-m_maxAppliedImpulse, m_maxAppliedImpulse
|
||||||
);
|
);
|
||||||
|
//@todo: support the case of btMultiBody versus btRigidBody,
|
||||||
|
//see btPoint2PointConstraint::getInfo2NonVirtual
|
||||||
#else
|
#else
|
||||||
const btVector3 dummy(0, 0, 0);
|
const btVector3 dummy(0, 0, 0);
|
||||||
|
|
||||||
@@ -167,4 +177,4 @@ void btMultiBodyPoint2Point::createConstraintRows(btMultiBodyConstraintArray& co
|
|||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user