mirror of
https://github.com/overte-org/overte.git
synced 2025-08-04 04:03:35 +02:00
Remove all overlays from Scene on desctruction
This commit is contained in:
parent
3f5b115c67
commit
b37a023041
1 changed files with 18 additions and 8 deletions
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue