mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 01:36:56 +02:00
fix wearables not disappearing with avatar
This commit is contained in:
parent
324bbadcfc
commit
d99af64410
4 changed files with 30 additions and 3 deletions
|
@ -2111,6 +2111,7 @@ void Avatar::updateAttachmentRenderIDs() {
|
||||||
|
|
||||||
void Avatar::updateDescendantRenderIDs() {
|
void Avatar::updateDescendantRenderIDs() {
|
||||||
_subItemLock.withWriteLock([&] {
|
_subItemLock.withWriteLock([&] {
|
||||||
|
auto oldDescendantRenderIDs = _descendantRenderIDs;
|
||||||
_descendantRenderIDs.clear();
|
_descendantRenderIDs.clear();
|
||||||
auto entityTreeRenderer = DependencyManager::get<EntityTreeRenderer>();
|
auto entityTreeRenderer = DependencyManager::get<EntityTreeRenderer>();
|
||||||
EntityTreePointer entityTree = entityTreeRenderer ? entityTreeRenderer->getTree() : nullptr;
|
EntityTreePointer entityTree = entityTreeRenderer ? entityTreeRenderer->getTree() : nullptr;
|
||||||
|
@ -2125,13 +2126,29 @@ void Avatar::updateDescendantRenderIDs() {
|
||||||
render::ItemIDs renderableSubItems;
|
render::ItemIDs renderableSubItems;
|
||||||
uint32_t numRenderableSubItems = renderer->metaFetchMetaSubItems(renderableSubItems);
|
uint32_t numRenderableSubItems = renderer->metaFetchMetaSubItems(renderableSubItems);
|
||||||
if (numRenderableSubItems > 0) {
|
if (numRenderableSubItems > 0) {
|
||||||
_descendantRenderIDs.insert(_descendantRenderIDs.end(), renderableSubItems.begin(), renderableSubItems.end());
|
for (auto& renderID : renderableSubItems) {
|
||||||
|
_descendantRenderIDs.insert(renderID);
|
||||||
|
oldDescendantRenderIDs.erase(renderID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
render::Transaction transaction;
|
||||||
|
for (auto& oldDescendantRenderID : oldDescendantRenderIDs) {
|
||||||
|
transaction.updateItem<render::PayloadProxyInterface>(oldDescendantRenderID, [](render::PayloadProxyInterface& self) {
|
||||||
|
self.setOverrideSubMetaCulled(false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
for (auto& descendantRenderIDs : _descendantRenderIDs) {
|
||||||
|
transaction.updateItem<render::PayloadProxyInterface>(descendantRenderIDs, [](render::PayloadProxyInterface& self) {
|
||||||
|
self.setOverrideSubMetaCulled(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
AbstractViewStateInterface::instance()->getMain3DScene()->enqueueTransaction(transaction);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -776,7 +776,7 @@ protected:
|
||||||
void updateAttachmentRenderIDs();
|
void updateAttachmentRenderIDs();
|
||||||
render::ItemIDs _attachmentRenderIDs;
|
render::ItemIDs _attachmentRenderIDs;
|
||||||
void updateDescendantRenderIDs();
|
void updateDescendantRenderIDs();
|
||||||
render::ItemIDs _descendantRenderIDs;
|
render::ItemIDSet _descendantRenderIDs;
|
||||||
uint32_t _lastAncestorChainRenderableVersion { 0 };
|
uint32_t _lastAncestorChainRenderableVersion { 0 };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -123,7 +123,11 @@ namespace render {
|
||||||
if (!payload) {
|
if (!payload) {
|
||||||
return ItemKey::Builder::opaqueShape().withTypeMeta();
|
return ItemKey::Builder::opaqueShape().withTypeMeta();
|
||||||
}
|
}
|
||||||
return payload->getKey();
|
if (payload->overrideSubMetaCulled()) {
|
||||||
|
return ItemKey::Builder(payload->getKey()).withSubMetaCulled();
|
||||||
|
} else {
|
||||||
|
return payload->getKey();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <> const ShapeKey shapeGetShapeKey(const PayloadProxyInterface::Pointer& payload) {
|
template <> const ShapeKey shapeGetShapeKey(const PayloadProxyInterface::Pointer& payload) {
|
||||||
|
|
|
@ -599,6 +599,12 @@ public:
|
||||||
virtual Item::Bound getBound() = 0;
|
virtual Item::Bound getBound() = 0;
|
||||||
virtual void render(RenderArgs* args) = 0;
|
virtual void render(RenderArgs* args) = 0;
|
||||||
virtual uint32_t metaFetchMetaSubItems(ItemIDs& subItems) = 0;
|
virtual uint32_t metaFetchMetaSubItems(ItemIDs& subItems) = 0;
|
||||||
|
|
||||||
|
bool overrideSubMetaCulled() const { return _overrideSubMetaCulled; }
|
||||||
|
void setOverrideSubMetaCulled(bool overrideSubMetaCulled) { _overrideSubMetaCulled = overrideSubMetaCulled; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool _overrideSubMetaCulled { false };
|
||||||
};
|
};
|
||||||
|
|
||||||
template <> const ItemKey payloadGetKey(const PayloadProxyInterface::Pointer& payload);
|
template <> const ItemKey payloadGetKey(const PayloadProxyInterface::Pointer& payload);
|
||||||
|
|
Loading…
Reference in a new issue