mirror of
https://github.com/overte-org/overte.git
synced 2025-04-08 00:52:27 +02:00
BUGZ-87 - loading/physics stuck when entering domain
A race condition was occurring when multiple entities using the same models were handed over to physics around the same time. The first model is passed to a worker thread to turn it into a shape and subsequent models note they are the same and don't create a shape or worker thread. The physics system was ignoring these, never marking them as ready for physics.
This commit is contained in:
parent
7440ef3cf3
commit
0ac597d76e
1 changed files with 5 additions and 1 deletions
|
@ -49,11 +49,15 @@ const btCollisionShape* ShapeManager::getShape(const ShapeInfo& info) {
|
|||
const btCollisionShape* shape = nullptr;
|
||||
if (info.getType() == SHAPE_TYPE_STATIC_MESH) {
|
||||
uint64_t hash = info.getHash();
|
||||
|
||||
// bump the request count to the caller knows we're
|
||||
// starting or waiting on a thread.
|
||||
++_workRequestCount;
|
||||
|
||||
const auto itr = std::find(_pendingMeshShapes.begin(), _pendingMeshShapes.end(), hash);
|
||||
if (itr == _pendingMeshShapes.end()) {
|
||||
// start a worker
|
||||
_pendingMeshShapes.push_back(hash);
|
||||
++_workRequestCount;
|
||||
// try to recycle old deadWorker
|
||||
ShapeFactory::Worker* worker = _deadWorker;
|
||||
if (!worker) {
|
||||
|
|
Loading…
Reference in a new issue