From d615e2e83b68e59c9d538fa31ff9f78c030096e9 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Tue, 1 Mar 2016 17:46:53 -0800 Subject: [PATCH] Avoid redundant zone updates --- .../entities-renderer/src/EntityTreeRenderer.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 44c3146b41..dc59d40e82 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -158,6 +158,8 @@ void EntityTreeRenderer::update() { } bool EntityTreeRenderer::checkEnterLeaveEntities() { + bool didUpdate = false; + if (_tree && !_shuttingDown) { glm::vec3 avatarPosition = _viewState->getAvatarPosition(); @@ -172,6 +174,7 @@ bool EntityTreeRenderer::checkEnterLeaveEntities() { std::static_pointer_cast(_tree)->findEntities(avatarPosition, radius, foundEntities); // Whenever you're in an intersection between zones, we will always choose the smallest zone. + auto oldBestZone = _bestZone; _bestZone = nullptr; // NOTE: Is this what we want? _bestZoneVolume = std::numeric_limits::max(); @@ -204,7 +207,10 @@ bool EntityTreeRenderer::checkEnterLeaveEntities() { } } - applyZonePropertiesToScene(_bestZone); + if (_bestZone != oldBestZone) { + applyZonePropertiesToScene(_bestZone); + didUpdate = true; + } }); // Note: at this point we don't need to worry about the tree being locked, because we only deal with @@ -228,11 +234,9 @@ bool EntityTreeRenderer::checkEnterLeaveEntities() { } _currentEntitiesInside = entitiesContainingAvatar; _lastAvatarPosition = avatarPosition; - - return true; } } - return false; + return didUpdate; } void EntityTreeRenderer::leaveAllEntities() {