53 btConstraintSolverPoolMt::ThreadSolver* btConstraintSolverPoolMt::getAndLockThreadSolver()
61 ThreadSolver& solver = m_solvers[i];
62 if (solver.mutex.tryLock())
67 i = (i + 1) % m_solvers.
size();
75 m_solvers.
resize(numSolvers);
76 for (
int i = 0; i < numSolvers; ++i)
78 m_solvers[i].solver = solvers[i];
91 for (
int i = 0; i < numSolvers; ++i)
96 init(&solvers[0], numSolvers);
102 init(solvers, numSolvers);
108 for (
int i = 0; i < m_solvers.
size(); ++i)
110 ThreadSolver& solver = m_solvers[i];
111 delete solver.solver;
112 solver.solver =
NULL;
127 ThreadSolver* ts = getAndLockThreadSolver();
135 for (
int i = 0; i < m_solvers.
size(); ++i)
137 ThreadSolver& solver = m_solvers[i];
139 solver.solver->reset();
140 solver.mutex.unlock();
166 m_constraintSolverMt = constraintSolverMt;
183 solverParams.
m_solverMt = m_constraintSolverMt;
199 for (
int i = iBegin; i < iEnd; ++i)
202 if (!body->isStaticOrKinematicObject())
218 update.timeStep = timeStep;
233 update.timeStep = timeStep;
247 update.timeStep = timeStep;
260 scheduler->sleepWorkerThreadsHint();
#define btAlignedFree(ptr)
#define btAlignedAlloc(size, alignment)
@ BT_SEQUENTIAL_IMPULSE_SOLVER
btDiscreteDynamicsWorldMt(btDispatcher *dispatcher, btBroadphaseInterface *pairCache, btConstraintSolverPoolMt *solverPool, btConstraintSolver *constraintSolverMt, btCollisionConfiguration *collisionConfiguration)
virtual ~btDiscreteDynamicsWorldMt()
btSimulationIslandManager * m_islandManager
virtual void solveConstraints(btContactSolverInfo &solverInfo)
virtual void createPredictiveContacts(btScalar timeStep)
btAlignedObjectArray< btRigidBody * > m_nonStaticRigidBodies
btDiscreteDynamicsWorld(btDispatcher *dispatcher, btBroadphaseInterface *pairCache, btConstraintSolver *constraintSolver, btCollisionConfiguration *collisionConfiguration)
this btDiscreteDynamicsWorld constructor gets created objects from the user, and will not delete thos...
virtual void predictUnconstraintMotion(btScalar timeStep)
btAlignedObjectArray< btTypedConstraint * > m_constraints
virtual void integrateTransforms(btScalar timeStep)
btCollisionWorld * getCollisionWorld()
virtual int stepSimulation(btScalar timeStep, int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.))
if maxSubSteps > 0, it will interpolate motion between fixedTimeStep's
btConstraintSolver * m_constraintSolver
void releasePredictiveContacts()
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
btSequentialImpulseConstraintSolverMt int btPersistentManifold int btTypedConstraint ** constraints
btSequentialImpulseConstraintSolverMt int btPersistentManifold int btTypedConstraint int const btContactSolverInfo btIDebugDraw *debugDrawer BT_OVERRIDE
btSequentialImpulseConstraintSolverMt int btPersistentManifold int btTypedConstraint int numConstraints
btSequentialImpulseConstraintSolverMt int numBodies
btSequentialImpulseConstraintSolverMt int btPersistentManifold int numManifolds
btSequentialImpulseConstraintSolver()
btITaskScheduler * btGetTaskScheduler()
unsigned int btGetCurrentThreadIndex()
void btParallelFor(int iBegin, int iEnd, int grainSize, const btIParallelForBody &body)
btTypedConstraint(btTypedConstraintType type, btRigidBody &rbA)
SIMD_FORCE_INLINE void reserve(int _Count)
SIMD_FORCE_INLINE int size() const
return the number of elements in the array
SIMD_FORCE_INLINE void resize(int newsize, const T &fillData=T())
SIMD_FORCE_INLINE void push_back(const T &_Val)
btDispatcher * getDispatcher()
virtual void reset() BT_OVERRIDE
clear internal cached data and reset random seed
virtual ~btConstraintSolverPoolMt()
virtual btScalar solveGroup(btCollisionObject **bodies, int numBodies, btPersistentManifold **manifolds, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &info, btIDebugDraw *debugDrawer, btDispatcher *dispatcher) BT_OVERRIDE
solve a group of constraints
btConstraintSolverPoolMt(int numSolvers)
virtual btConstraintSolverType getSolverType() const =0
virtual void allSolved(const btContactSolverInfo &, class btIDebugDraw *)
virtual void prepareSolve(int, int)
void applyDamping(btScalar timeStep)
applyDamping damps the velocity, using the given m_linearDamping and m_angularDamping
void predictIntegratedTransform(btScalar step, btTransform &predictedTransform)
continuous collision detection needs prediction
virtual void buildAndProcessIslands(btDispatcher *dispatcher, btCollisionWorld *collisionWorld, btAlignedObjectArray< btTypedConstraint * > &constraints, const SolverParams &solverParams)
void setMinimumSolverBatchSize(int sz)
virtual ~btSimulationIslandManager()
static void update(bNodeTree *ntree)
btRigidBody ** rigidBodies
void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
btContactSolverInfo * m_solverInfo
btDispatcher * m_dispatcher
btConstraintSolver * m_solverPool
btConstraintSolver * m_solverMt
btIDebugDraw * m_debugDrawer