diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index f62eb5a070..efa6f6004b 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -315,6 +315,7 @@ bool Avatar::addToScene(AvatarSharedPointer self, std::shared_ptr void Avatar::removeFromScene(AvatarSharedPointer self, std::shared_ptr scene, render::PendingChanges& pendingChanges) { pendingChanges.removeItem(_renderItemID); + render::Item::clearID(_renderItemID); _skeletonModel.removeFromScene(scene, pendingChanges); getHead()->getFaceModel().removeFromScene(scene, pendingChanges); for (auto& attachmentModel : _attachmentModels) { @@ -323,7 +324,7 @@ void Avatar::removeFromScene(AvatarSharedPointer self, std::shared_ptr>(_renderItemID, [](render::Payload& p) {}); } } diff --git a/interface/src/ui/overlays/Overlay.cpp b/interface/src/ui/overlays/Overlay.cpp index 1e3390e49f..64b5e2aedf 100644 --- a/interface/src/ui/overlays/Overlay.cpp +++ b/interface/src/ui/overlays/Overlay.cpp @@ -229,6 +229,6 @@ bool Overlay::addToScene(Overlay::Pointer overlay, std::shared_ptr scene, render::PendingChanges& pendingChanges) { pendingChanges.removeItem(_renderItemID); - _renderItemID = render::Item::INVALID_ITEM_ID; + render::Item::clearID(_renderItemID); } diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index b53a5a0d05..c2b769d146 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -94,7 +94,7 @@ void Overlays::cleanupOverlaysToDelete() { Overlay::Pointer overlay = _overlaysToDelete.takeLast(); auto itemID = overlay->getRenderItemID(); - if (itemID != render::Item::INVALID_ITEM_ID) { + if (render::Item::isValidID(itemID)) { overlay->removeFromScene(overlay, scene, pendingChanges); } } while (!_overlaysToDelete.isEmpty()); diff --git a/libraries/entities-renderer/src/RenderableEntityItem.h b/libraries/entities-renderer/src/RenderableEntityItem.h index 7b3ea8edaa..30d3f9d83c 100644 --- a/libraries/entities-renderer/src/RenderableEntityItem.h +++ b/libraries/entities-renderer/src/RenderableEntityItem.h @@ -66,10 +66,11 @@ public: void removeFromScene(EntityItemPointer self, std::shared_ptr scene, render::PendingChanges& pendingChanges) { pendingChanges.removeItem(_myItem); + render::Item::clearID(_myItem); } void notifyChanged() { - if (_myItem == render::Item::INVALID_ITEM_ID) { + if (!render::Item::isValidID(_myItem)) { return; } diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 89f819b0da..e3870705c9 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -251,6 +251,7 @@ bool RenderableModelEntityItem::addToScene(EntityItemPointer self, std::shared_p void RenderableModelEntityItem::removeFromScene(EntityItemPointer self, std::shared_ptr scene, render::PendingChanges& pendingChanges) { pendingChanges.removeItem(_myMetaItem); + render::Item::clearID(_myMetaItem); if (_model) { _model->removeFromScene(scene, pendingChanges); } diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index e62dc82988..4d8eebf05b 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -179,6 +179,7 @@ void RenderableParticleEffectEntityItem::removeFromScene(EntityItemPointer self, render::PendingChanges& pendingChanges) { pendingChanges.removeItem(_renderItemId); _scene = nullptr; + render::Item::clearID(_renderItemId); }; void RenderableParticleEffectEntityItem::update(const quint64& now) { @@ -199,7 +200,8 @@ void RenderableParticleEffectEntityItem::update(const quint64& now) { } void RenderableParticleEffectEntityItem::updateRenderItem() { - if (!_scene) { + // this 2 tests are synonyms for this class, but we would like to get rid of the _scene pointer ultimately + if (!_scene || !render::Item::isValidID(_renderItemId)) { return; } if (!getVisible()) { @@ -312,7 +314,7 @@ void RenderableParticleEffectEntityItem::createPipelines() { } void RenderableParticleEffectEntityItem::notifyBoundChanged() { - if (_renderItemId == render::Item::INVALID_ITEM_ID) { + if (!render::Item::isValidID(_renderItemId)) { return; } render::PendingChanges pendingChanges; diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index 1029f3b3af..ef777df403 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -572,6 +572,7 @@ void RenderablePolyVoxEntityItem::removeFromScene(EntityItemPointer self, std::shared_ptr scene, render::PendingChanges& pendingChanges) { pendingChanges.removeItem(_myItem); + render::Item::clearID(_myItem); } namespace render { diff --git a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp index 56771296db..44345ac0a2 100644 --- a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp @@ -230,6 +230,7 @@ bool RenderableZoneEntityItem::addToScene(EntityItemPointer self, std::shared_pt void RenderableZoneEntityItem::removeFromScene(EntityItemPointer self, std::shared_ptr scene, render::PendingChanges& pendingChanges) { pendingChanges.removeItem(_myMetaItem); + render::Item::clearID(_myMetaItem); if (_model) { _model->removeFromScene(scene, pendingChanges); } @@ -237,7 +238,7 @@ void RenderableZoneEntityItem::removeFromScene(EntityItemPointer self, std::shar void RenderableZoneEntityItem::notifyBoundChanged() { - if (_myMetaItem == render::Item::INVALID_ITEM_ID) { + if (!render::Item::isValidID(_myMetaItem)) { return; } render::PendingChanges pendingChanges; diff --git a/libraries/render/src/render/Item.h b/libraries/render/src/render/Item.h index 74c832a0c4..8aaaf07300 100644 --- a/libraries/render/src/render/Item.h +++ b/libraries/render/src/render/Item.h @@ -217,6 +217,10 @@ public: static const ID INVALID_ITEM_ID = 0; static const ItemCell INVALID_CELL = -1; + // Convenient function to clear an ID or check it s valid + static void clearID(ID& id) { id = INVALID_ITEM_ID; } + static bool isValidID(const ID id) { return id != INVALID_ITEM_ID; } + // Bound is the AABBox fully containing this item typedef AABox Bound;