Remove all overlays from Scene on desctruction

This commit is contained in:
Ryan Huffman 2015-05-29 14:55:53 -07:00
parent 3f5b115c67
commit b37a023041

View file

@ -83,6 +83,13 @@ Overlays::~Overlays() {
{ {
QWriteLocker lock(&_lock); QWriteLocker lock(&_lock);
QWriteLocker deleteLock(&_deleteLock);
foreach(Overlay::Pointer overlay, _overlaysHUD) {
_overlaysToDelete.push_back(overlay);
}
foreach(Overlay::Pointer overlay, _overlaysWorld) {
_overlaysToDelete.push_back(overlay);
}
_overlaysHUD.clear(); _overlaysHUD.clear();
_overlaysWorld.clear(); _overlaysWorld.clear();
} }
@ -111,17 +118,20 @@ void Overlays::update(float deltatime) {
void Overlays::cleanupOverlaysToDelete() { void Overlays::cleanupOverlaysToDelete() {
if (!_overlaysToDelete.isEmpty()) { if (!_overlaysToDelete.isEmpty()) {
QWriteLocker lock(&_deleteLock);
render::PendingChanges pendingChanges; render::PendingChanges pendingChanges;
do { {
Overlay::Pointer overlay = _overlaysToDelete.takeLast(); QWriteLocker lock(&_deleteLock);
auto itemID = overlay->getRenderItemID(); do {
if (itemID != render::Item::INVALID_ITEM_ID) { Overlay::Pointer overlay = _overlaysToDelete.takeLast();
pendingChanges.removeItem(itemID);
} auto itemID = overlay->getRenderItemID();
} while (!_overlaysToDelete.isEmpty()); if (itemID != render::Item::INVALID_ITEM_ID) {
pendingChanges.removeItem(itemID);
}
} while (!_overlaysToDelete.isEmpty());
}
if (pendingChanges._removedItems.size() > 0) { if (pendingChanges._removedItems.size() > 0) {
render::ScenePointer scene = Application::getInstance()->getMain3DScene(); render::ScenePointer scene = Application::getInstance()->getMain3DScene();