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); m_dynamicsWorld->setGravity(gravity);
getDeformableDynamicsWorld()->getWorldInfo().m_gravity = gravity; getDeformableDynamicsWorld()->getWorldInfo().m_gravity = gravity;
getDeformableDynamicsWorld()->m_beforeSolverCallbacks.push_back(dynamics); getDeformableDynamicsWorld()->setSolverCallback(dynamics);
m_guiHelper->createPhysicsDebugDrawer(m_dynamicsWorld); m_guiHelper->createPhysicsDebugDrawer(m_dynamicsWorld);
//create a ground //create a ground

View File

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

View File

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

View File

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

View File

@@ -75,7 +75,15 @@ public:
m_sbi.m_sparsesdf.Initialize(); m_sbi.m_sparsesdf.Initialize();
m_internalTime = 0.0; 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() virtual ~btDeformableRigidDynamicsWorld()
{ {
} }