From 56aac35348b9e9aa08be09eddbcb6534086cb8b3 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Fri, 26 Feb 2016 15:24:37 -0800 Subject: [PATCH] Fix drawInFront bugs --- libraries/render/src/render/Item.h | 4 ++-- libraries/render/src/render/Scene.cpp | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/libraries/render/src/render/Item.h b/libraries/render/src/render/Item.h index ddc5a92c9d..c075b281f3 100644 --- a/libraries/render/src/render/Item.h +++ b/libraries/render/src/render/Item.h @@ -315,9 +315,9 @@ public: // Main scene / item managment interface reset/update/kill void resetPayload(const PayloadPointer& payload); - void resetCell(ItemCell cell, bool _small) { _cell = cell; _key.setSmaller(_small); } + void resetCell(ItemCell cell = INVALID_CELL, bool _small = false) { _cell = cell; _key.setSmaller(_small); } void update(const UpdateFunctorPointer& updateFunctor); // communicate update to payload - void kill() { _payload.reset(); _key._flags.reset(); _cell = INVALID_CELL; } // forget the payload, key, cell + void kill() { _payload.reset(); resetCell(); _key._flags.reset(); } // forget the payload, key, cell // Check heuristic key const ItemKey& getKey() const { return _key; } diff --git a/libraries/render/src/render/Scene.cpp b/libraries/render/src/render/Scene.cpp index 624f639d79..0cdd736fee 100644 --- a/libraries/render/src/render/Scene.cpp +++ b/libraries/render/src/render/Scene.cpp @@ -104,6 +104,8 @@ void Scene::resetItems(const ItemIDs& ids, Payloads& payloads) { if (newKey.isSpatial()) { auto newCell = _masterSpatialTree.resetItem(oldCell, oldKey, item.getBound(), resetID, newKey); item.resetCell(newCell, newKey.isSmall()); + } else { + _masterNonspatialSet.insert(resetID); } // next loop @@ -152,10 +154,13 @@ void Scene::updateItems(const ItemIDs& ids, UpdateFunctors& functors) { } else { if (newKey.isSpatial()) { _masterNonspatialSet.erase(updateID); + auto newCell = _masterSpatialTree.resetItem(oldCell, oldKey, item.getBound(), updateID, newKey); item.resetCell(newCell, newKey.isSmall()); } else { _masterSpatialTree.removeItem(oldCell, oldKey, updateID); + item.resetCell(); + _masterNonspatialSet.insert(updateID); } }