From d77c3d5b6812555467835d65a1441f2698d42495 Mon Sep 17 00:00:00 2001 From: Lunkhound Date: Tue, 23 May 2017 02:34:29 -0700 Subject: [PATCH] fix compile errors in non-threadsafe build --- examples/MultiThreadedDemo/CommonRigidBodyMTBase.cpp | 12 ++++++++++++ .../Dynamics/btDiscreteDynamicsWorldMt.cpp | 5 ++++- src/LinearMath/btThreads.cpp | 6 ++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/examples/MultiThreadedDemo/CommonRigidBodyMTBase.cpp b/examples/MultiThreadedDemo/CommonRigidBodyMTBase.cpp index 82797e35e..a47b76da6 100644 --- a/examples/MultiThreadedDemo/CommonRigidBodyMTBase.cpp +++ b/examples/MultiThreadedDemo/CommonRigidBodyMTBase.cpp @@ -250,6 +250,7 @@ public: void init() { addTaskScheduler( btGetSequentialTaskScheduler() ); +#if BT_THREADSAFE addTaskScheduler( btGetOpenMPTaskScheduler() ); addTaskScheduler( btGetTBBTaskScheduler() ); addTaskScheduler( btGetPPLTaskScheduler() ); @@ -263,6 +264,7 @@ public: btSetTaskScheduler( m_taskSchedulers[ 0 ] ); } btGetTaskScheduler()->setNumThreads( btGetTaskScheduler()->getMaxNumThreads() ); +#endif // #if BT_THREADSAFE } void addTaskScheduler( btITaskScheduler* ts ) @@ -353,6 +355,7 @@ static void setSolverTypeCallback(int buttonId, bool buttonState, void* userPoin static void setNumThreads( int numThreads ) { +#if BT_THREADSAFE int newNumThreads = ( std::min )( numThreads, int( BT_MAX_THREAD_COUNT ) ); int oldNumThreads = btGetTaskScheduler()->getNumThreads(); // only call when the thread count is different @@ -360,13 +363,16 @@ static void setNumThreads( int numThreads ) { btGetTaskScheduler()->setNumThreads( newNumThreads ); } +#endif // #if BT_THREADSAFE } static void apiSelectButtonCallback(int buttonId, bool buttonState, void* userPointer) { +#if BT_THREADSAFE // change the task scheduler btSetTaskScheduler( gTaskSchedulerMgr.getTaskScheduler( buttonId ) ); setNumThreads( int( gSliderNumThreads ) ); +#endif // #if BT_THREADSAFE } static void setThreadCountCallback(float val, void* userPtr) @@ -392,6 +398,7 @@ void CommonRigidBodyMTBase::createEmptyDynamicsWorld() #endif if ( gMultithreadedWorld ) { +#if BT_THREADSAFE m_dispatcher = NULL; btDefaultCollisionConstructionInfo cci; cci.m_defaultMaxPersistentManifoldPoolSize = 80000; @@ -416,6 +423,7 @@ void CommonRigidBodyMTBase::createEmptyDynamicsWorld() m_dynamicsWorld = world; m_multithreadedWorld = true; btAssert( btGetTaskScheduler() != NULL ); +#endif // #if BT_THREADSAFE } else { @@ -534,6 +542,7 @@ void CommonRigidBodyMTBase::createDefaultParameters() } if (m_multithreadedWorld) { +#if BT_THREADSAFE // create a button for each supported threading API for ( int iApi = 0; iApi < gTaskSchedulerMgr.getNumTaskSchedulers(); ++iApi ) { @@ -558,6 +567,7 @@ void CommonRigidBodyMTBase::createDefaultParameters() slider.m_clampToIntegers = true; m_guiHelper->getParameterInterface()->registerSliderFloatParameter( slider ); } +#endif // #if BT_THREADSAFE } } @@ -589,6 +599,7 @@ void CommonRigidBodyMTBase::drawScreenText() { if ( m_multithreadedWorld ) { +#if BT_THREADSAFE int numManifolds = m_dispatcher->getNumManifolds(); int numContacts = 0; for ( int i = 0; i < numManifolds; ++i ) @@ -607,6 +618,7 @@ void CommonRigidBodyMTBase::drawScreenText() ); m_guiHelper->getAppInterface()->drawText( msg, 100, yCoord, 0.4f ); yCoord += yStep; +#endif // #if BT_THREADSAFE } { int sm = gSolverMode; diff --git a/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorldMt.cpp b/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorldMt.cpp index faa8193dd..df6c17c5b 100644 --- a/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorldMt.cpp +++ b/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorldMt.cpp @@ -114,7 +114,10 @@ struct InplaceSolverIslandCallbackMt : public btSimulationIslandManagerMt::Islan btConstraintSolverPoolMt::ThreadSolver* btConstraintSolverPoolMt::getAndLockThreadSolver() { - int i = btGetCurrentThreadIndex() % m_solvers.size(); + int i = 0; +#if BT_THREADSAFE + i = btGetCurrentThreadIndex() % m_solvers.size(); +#endif // #if BT_THREADSAFE while ( true ) { ThreadSolver& solver = m_solvers[ i ]; diff --git a/src/LinearMath/btThreads.cpp b/src/LinearMath/btThreads.cpp index 3c73255a1..85de7c4d2 100644 --- a/src/LinearMath/btThreads.cpp +++ b/src/LinearMath/btThreads.cpp @@ -465,6 +465,12 @@ bool btSpinMutex::tryLock() return true; } +// non-parallel version of btParallelFor +void btParallelFor( int iBegin, int iEnd, int grainSize, const btIParallelForBody& body ) +{ + btAssert(!"called btParallelFor in non-threadsafe build. enable BT_THREADSAFE"); + body.forLoop( iBegin, iEnd ); +} #endif // #if BT_THREADSAFE