From b788273f47f72e24b19ae63ea17084e33e20c76b Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Thu, 24 Aug 2017 17:33:51 -0700 Subject: [PATCH] fix repeat First traversals mid-First-traversal --- assignment-client/src/entities/EntityTreeSendThread.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/assignment-client/src/entities/EntityTreeSendThread.cpp b/assignment-client/src/entities/EntityTreeSendThread.cpp index 08fcc39a0f..bdeb3bdbca 100644 --- a/assignment-client/src/entities/EntityTreeSendThread.cpp +++ b/assignment-client/src/entities/EntityTreeSendThread.cpp @@ -17,7 +17,7 @@ #include "EntityServer.h" -//#define SEND_SORTED_ENTITIES +#define SEND_SORTED_ENTITIES void EntityTreeSendThread::preDistributionProcessing() { auto node = _node.toStrongRef(); @@ -89,7 +89,7 @@ void EntityTreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, O if (nodeData->getUsesFrustum()) { // DEBUG HACK: trigger traversal (Repeat) every so often const uint64_t TRAVERSE_AGAIN_PERIOD = 4 * USECS_PER_SECOND; - bool repeatTraversal = usecTimestampNow() > _traversal.getStartOfCompletedTraversal() + TRAVERSE_AGAIN_PERIOD; + bool repeatTraversal = _traversal.finished() && usecTimestampNow() > _traversal.getStartOfCompletedTraversal() + TRAVERSE_AGAIN_PERIOD; if (viewFrustumChanged || repeatTraversal) { ViewFrustum viewFrustum; nodeData->copyCurrentViewFrustum(viewFrustum); @@ -272,8 +272,8 @@ void EntityTreeSendThread::startNewTraversal(const ViewFrustum& view, EntityTree break; case DiffTraversal::Repeat: _traversal.setScanCallback([&] (DiffTraversal::VisibleElement& next) { - if (next.element->getLastChangedContent() > _traversal.getStartOfCompletedTraversal()) { - uint64_t timestamp = _traversal.getStartOfCompletedTraversal(); + uint64_t timestamp = _traversal.getStartOfCompletedTraversal(); + if (next.element->getLastChangedContent() > timestamp) { next.element->forEachEntity([&](EntityItemPointer entity) { // Bail early if we've already checked this entity this frame if (_entitiesInQueue.find(entity.get()) != _entitiesInQueue.end()) {