get rid of nullptr and std::function

This commit is contained in:
Xuchen Han
2019-08-03 00:10:36 -07:00
parent 021cbb2a0e
commit c5d84c1a0b
5 changed files with 28 additions and 10 deletions

View File

@@ -256,7 +256,7 @@ void Pinch::initPhysics()
m_dynamicsWorld->setGravity(gravity);
getDeformableDynamicsWorld()->getWorldInfo().m_gravity = gravity;
getDeformableDynamicsWorld()->m_beforeSolverCallbacks.push_back(dynamics);
getDeformableDynamicsWorld()->setSolverCallback(dynamics);
m_guiHelper->createPhysicsDebugDrawer(m_dynamicsWorld);
//create a ground

View File

@@ -29,7 +29,7 @@ struct DeformableContactConstraint
DeformableContactConstraint(const btVector3 dir)
{
m_contact.push_back(nullptr);
m_contact.push_back(NULL);
m_direction.push_back(dir);
m_value.push_back(0);
m_accumulated_normal_impulse.push_back(0);
@@ -37,7 +37,7 @@ struct DeformableContactConstraint
DeformableContactConstraint()
{
m_contact.push_back(nullptr);
m_contact.push_back(NULL);
m_direction.push_back(btVector3(0,0,0));
m_value.push_back(0);
m_accumulated_normal_impulse.push_back(0);

View File

@@ -59,7 +59,7 @@ void btDeformableContactProjection::update()
DeformableFrictionConstraint& friction = frictions[i];
for (int j = 0; j < constraint.m_contact.size(); ++j)
{
if (constraint.m_contact[j] == nullptr)
if (constraint.m_contact[j] == NULL)
{
// nothing needs to be done for dirichelet constraints
continue;

View File

@@ -58,7 +58,7 @@ void btDeformableRigidDynamicsWorld::positionCorrection(btScalar dt)
{
const btSoftBody::RContact* c = constraint.m_contact[j];
// skip anchor points
if (c == nullptr || c->m_node->m_im == 0)
if (c == NULL || c->m_node->m_im == 0)
continue;
const btSoftBody::sCti& cti = c->m_cti;
btVector3 va(0, 0, 0);
@@ -206,14 +206,24 @@ void btDeformableRigidDynamicsWorld::beforeSolverCallbacks(btScalar timeStep)
{
(*m_internalTickCallback)(this, timeStep);
}
for (int i = 0; i < m_beforeSolverCallbacks.size(); ++i)
m_beforeSolverCallbacks[i](m_internalTime, this);
if (0 != m_solverCallback)
{
(*m_solverCallback)(m_internalTime, this);
}
// for (int i = 0; i < m_beforeSolverCallbacks.size(); ++i)
// m_beforeSolverCallbacks[i](m_internalTime, this);
}
void btDeformableRigidDynamicsWorld::afterSolverCallbacks(btScalar timeStep)
{
for (int i = 0; i < m_beforeSolverCallbacks.size(); ++i)
m_beforeSolverCallbacks[i](m_internalTime, this);
if (0 != m_solverCallback)
{
(*m_solverCallback)(m_internalTime, this);
}
// for (int i = 0; i < m_beforeSolverCallbacks.size(); ++i)
// m_beforeSolverCallbacks[i](m_internalTime, this);
}
void btDeformableRigidDynamicsWorld::addForce(btSoftBody* psb, btDeformableLagrangianForce* force)

View File

@@ -75,7 +75,15 @@ public:
m_sbi.m_sparsesdf.Initialize();
m_internalTime = 0.0;
}
btAlignedObjectArray<std::function<void(btScalar, btDeformableRigidDynamicsWorld*)> > m_beforeSolverCallbacks;
// btAlignedObjectArray<std::function<void(btScalar, btDeformableRigidDynamicsWorld*)> > m_beforeSolverCallbacks;
typedef void (*btSolverCallback)(btScalar time, btDeformableRigidDynamicsWorld* world);
btSolverCallback m_solverCallback;
void setSolverCallback(btSolverCallback cb)
{
m_solverCallback = cb;
}
virtual ~btDeformableRigidDynamicsWorld()
{
}