mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-07 07:02:46 +02:00
fix wearables not disappearing with avatar
This commit is contained in:
parent
e0a29d9367
commit
398562321d
4 changed files with 31 additions and 4 deletions
|
@ -2121,6 +2121,7 @@ void Avatar::updateAttachmentRenderIDs() {
|
|||
|
||||
void Avatar::updateDescendantRenderIDs() {
|
||||
_subItemLock.withWriteLock([&] {
|
||||
auto oldDescendantRenderIDs = _descendantRenderIDs;
|
||||
_descendantRenderIDs.clear();
|
||||
auto entityTreeRenderer = DependencyManager::get<EntityTreeRenderer>();
|
||||
EntityTreePointer entityTree = entityTreeRenderer ? entityTreeRenderer->getTree() : nullptr;
|
||||
|
@ -2135,13 +2136,29 @@ void Avatar::updateDescendantRenderIDs() {
|
|||
render::ItemIDs renderableSubItems;
|
||||
uint32_t numRenderableSubItems = renderer->metaFetchMetaSubItems(renderableSubItems);
|
||||
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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -781,7 +781,7 @@ protected:
|
|||
void updateAttachmentRenderIDs();
|
||||
render::ItemIDs _attachmentRenderIDs;
|
||||
void updateDescendantRenderIDs();
|
||||
render::ItemIDs _descendantRenderIDs;
|
||||
render::ItemIDSet _descendantRenderIDs;
|
||||
uint32_t _lastAncestorChainRenderableVersion { 0 };
|
||||
};
|
||||
|
||||
|
|
|
@ -123,7 +123,11 @@ namespace render {
|
|||
if (!payload) {
|
||||
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) {
|
||||
|
|
|
@ -614,7 +614,13 @@ public:
|
|||
virtual ShapeKey getShapeKey() = 0;
|
||||
virtual Item::Bound getBound() = 0;
|
||||
virtual void render(RenderArgs* args) = 0;
|
||||
virtual uint32_t metaFetchMetaSubItems(ItemIDs& subItems) const = 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);
|
||||
|
|
Loading…
Reference in a new issue