diff --git a/apps/openmw/mwphysics/mtphysics.cpp b/apps/openmw/mwphysics/mtphysics.cpp index e43b3bfe5f..ea2060bfc6 100644 --- a/apps/openmw/mwphysics/mtphysics.cpp +++ b/apps/openmw/mwphysics/mtphysics.cpp @@ -7,6 +7,7 @@ #include <BulletCollision/BroadphaseCollision/btDbvtBroadphase.h> #include <BulletCollision/CollisionShapes/btCollisionShape.h> +#include <LinearMath/btThreads.h> #include <osg/Stats> @@ -297,10 +298,11 @@ namespace MWPhysics { namespace { - int getMaxBulletSupportedThreads() + unsigned getMaxBulletSupportedThreads() { auto broad = std::make_unique<btDbvtBroadphase>(); - return broad->m_rayTestStacks.size(); + assert(BT_MAX_THREAD_COUNT > 0); + return std::min<unsigned>(broad->m_rayTestStacks.size(), BT_MAX_THREAD_COUNT - 1); } LockingPolicy detectLockingPolicy() @@ -322,8 +324,8 @@ namespace MWPhysics case LockingPolicy::ExclusiveLocksOnly: return 1; case LockingPolicy::AllowSharedLocks: - return static_cast<unsigned>(std::clamp( - Settings::Manager::getInt("async num threads", "Physics"), 0, getMaxBulletSupportedThreads())); + return std::clamp<unsigned>( + Settings::Manager::getInt("async num threads", "Physics"), 0, getMaxBulletSupportedThreads()); } throw std::runtime_error("Unsupported LockingPolicy: "