mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 12:18:36 +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() {
|
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;
|
||||||
|
@ -2135,13 +2136,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);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -781,7 +781,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) {
|
||||||
|
|
|
@ -614,7 +614,13 @@ public:
|
||||||
virtual ShapeKey getShapeKey() = 0;
|
virtual ShapeKey getShapeKey() = 0;
|
||||||
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) 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);
|
template <> const ItemKey payloadGetKey(const PayloadProxyInterface::Pointer& payload);
|
||||||
|
|
Loading…
Reference in a new issue