3
0
Fork 0
mirror of https://github.com/JulianGro/overte.git synced 2025-05-01 06:27:31 +02:00

remember list of stale proxies

This commit is contained in:
Andrew Meadows 2018-03-01 09:26:52 -08:00
parent f9db9e999e
commit 67c78a2df1
4 changed files with 13 additions and 22 deletions
assignment-client/src/entities
libraries
entities-renderer/src
entities/src

View file

@ -35,10 +35,6 @@ void EntityTreeHeadlessViewer::update() {
EntityTreePointer tree = std::static_pointer_cast<EntityTree>(_tree);
tree->withTryWriteLock([&] {
tree->update();
// flush final EntityTree references to deleted entities
std::vector<EntityItemPointer> deletedEntities;
tree->swapRemovedEntities(deletedEntities);
});
}
}

View file

@ -431,18 +431,12 @@ void EntityTreeRenderer::update(bool simulate) {
_space->updateProxies(_spaceUpdates);
_spaceUpdates.clear();
}
{ // flush final EntityTree references to removed entities
std::vector<EntityItemPointer> deletedEntities;
tree->swapRemovedEntities(deletedEntities);
{ // delete proxies from workload::Space
std::vector<int32_t> deadProxies;
{
std::vector<int32_t> staleProxies;
tree->swapStaleProxies(staleProxies);
{
std::unique_lock<std::mutex> lock(_spaceLock);
for (auto entity : deletedEntities) {
int32_t spaceIndex = entity->getSpaceIndex();
disconnect(entity.get(), &EntityItem::spaceUpdate, this, &EntityTreeRenderer::handleSpaceUpdate);
deadProxies.push_back(spaceIndex);
}
_space->deleteProxies(deadProxies);
_space->deleteProxies(staleProxies);
}
}

View file

@ -697,10 +697,11 @@ void EntityTree::processRemovedEntities(const DeleteEntityOperator& theOperator)
_simulation->prepareEntityForDelete(theEntity);
}
// We save a pointer to theEntity for external contexts that need it
// but this means: external contexts that remove entities from the tree
// must occasionally swapRemovedEntities() to flush these references.
_removedEntities.push_back(theEntity);
// keep a record of valid stale spaceIndices so they can be removed from the Space
int32_t spaceIndex = theEntity->getSpaceIndex();
if (spaceIndex != -1) {
_staleProxies.push_back(spaceIndex);
}
}
}
@ -2476,4 +2477,4 @@ bool EntityTree::removeMaterialFromOverlay(const QUuid& overlayID, graphics::Mat
return _removeMaterialFromOverlayOperator(overlayID, material, parentMaterialName);
}
return false;
}
}

View file

@ -283,7 +283,7 @@ public:
void setMyAvatar(std::shared_ptr<AvatarData> myAvatar) { _myAvatar = myAvatar; }
void swapRemovedEntities(std::vector<EntityItemPointer>& entities) { entities.swap(_removedEntities); }
void swapStaleProxies(std::vector<int>& proxies) { proxies.swap(_staleProxies); }
static void setAddMaterialToEntityOperator(std::function<bool(const QUuid&, graphics::MaterialLayer, const std::string&)> addMaterialToEntityOperator) { _addMaterialToEntityOperator = addMaterialToEntityOperator; }
static void setRemoveMaterialFromEntityOperator(std::function<bool(const QUuid&, graphics::MaterialPointer, const std::string&)> removeMaterialFromEntityOperator) { _removeMaterialFromEntityOperator = removeMaterialFromEntityOperator; }
@ -415,7 +415,7 @@ private:
static std::function<bool(const QUuid&, graphics::MaterialLayer, const std::string&)> _addMaterialToOverlayOperator;
static std::function<bool(const QUuid&, graphics::MaterialPointer, const std::string&)> _removeMaterialFromOverlayOperator;
std::vector<EntityItemPointer> _removedEntities;
std::vector<int32_t> _staleProxies;
};
#endif // hifi_EntityTree_h