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,
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)
218 update.timeStep = 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()
btDiscreteDynamicsWorld(btDispatcher *dispatcher, btBroadphaseInterface *pairCache, btConstraintSolver *constraintSolver, btCollisionConfiguration *collisionConfiguration)
this btDiscreteDynamicsWorld constructor gets created objects from the user, and will not delete thos...
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)
btTypedConstraint(btTypedConstraintType type, btRigidBody &rbA)
SIMD_FORCE_INLINE void reserve(int _Count)
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 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)
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