53btConstraintSolverPoolMt::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();
148btDiscreteDynamicsWorldMt::btDiscreteDynamicsWorldMt(
btDispatcher* dispatcher,
153 : btDiscreteDynamicsWorld(dispatcher, pairCache, solverPool, collisionConfiguration)
166 m_constraintSolverMt = constraintSolverMt;
169btDiscreteDynamicsWorldMt::~btDiscreteDynamicsWorldMt()
183 solverParams.
m_solverMt = m_constraintSolverMt;
199 for (
int i = iBegin; i < iEnd; ++i)
202 if (!body->isStaticOrKinematicObject())
212void btDiscreteDynamicsWorldMt::predictUnconstraintMotion(
btScalar timeStep)
225void btDiscreteDynamicsWorldMt::createPredictiveContacts(
btScalar timeStep)
233 update.timeStep = timeStep;
240void btDiscreteDynamicsWorldMt::integrateTransforms(
btScalar timeStep)
247 update.timeStep = timeStep;
254int btDiscreteDynamicsWorldMt::stepSimulation(
btScalar timeStep,
int maxSubSteps,
btScalar fixedTimeStep)
256 int numSubSteps = btDiscreteDynamicsWorld::stepSimulation(timeStep, maxSubSteps, fixedTimeStep);
260 scheduler->sleepWorkerThreadsHint();
#define btAlignedFree(ptr)
#define btAlignedAlloc(size, alignment)
@ BT_SEQUENTIAL_IMPULSE_SOLVER
btSimulationIslandManager * m_islandManager
btAlignedObjectArray< btRigidBody * > m_nonStaticRigidBodies
btCollisionWorld * getCollisionWorld()
btAlignedObjectArray< btTypedConstraint * > m_constraints
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 numConstraints
btSequentialImpulseConstraintSolverMt int numBodies
btSequentialImpulseConstraintSolverMt int btPersistentManifold int numManifolds
btSequentialImpulseConstraintSolver()
unsigned int btGetCurrentThreadIndex()
btITaskScheduler * btGetTaskScheduler()
void btParallelFor(int iBegin, int iEnd, int grainSize, const btIParallelForBody &body)
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)
virtual btScalar solveGroup(btCollisionObject **bodies, int numBodies, btPersistentManifold **manifold, int numManifolds, btTypedConstraint **constraints, int numConstraints, const btContactSolverInfo &info, class btIDebugDraw *debugDrawer, btDispatcher *dispatcher)=0
solve a group of constraints
virtual void reset()=0
clear internal cached data and reset random seed
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