diff --git a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp index 381edd8731..c9d6df8c8f 100644 --- a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp @@ -54,6 +54,10 @@ Item::Bound TextEntityRenderer::getBound() { return bound; } +ItemKey TextEntityRenderer::getKey() { + return ItemKey::Builder(Parent::getKey()).withMetaCullGroup(); +} + ShapeKey TextEntityRenderer::getShapeKey() { auto builder = render::ShapeKey::Builder(); if (isTransparent()) { @@ -65,6 +69,15 @@ ShapeKey TextEntityRenderer::getShapeKey() { return builder.build(); } +uint32_t TextEntityRenderer::metaFetchMetaSubItems(ItemIDs& subItems) { + auto parentSubs = Parent::metaFetchMetaSubItems(subItems); + if (Item::isValidID(_textRenderID)) { + subItems.emplace_back(_textRenderID); + return parentSubs + 1; + } + return parentSubs; +} + bool TextEntityRenderer::needsRenderUpdateFromTypedEntity(const TypedEntityPointer& entity) const { if (_text != entity->getText()) { return true; @@ -249,14 +262,12 @@ ItemKey entities::TextPayload::getKey() const { auto textRenderable = std::static_pointer_cast(renderable); ItemKey::Builder key; // Similar to EntityRenderer::getKey() - // FIXME: should be withSubMetaCulled and not meta, but there's a bug in the layer rendering that won't render it in that case - // (the TextEntityRenderer should also be withMetaCullGroup) if (textRenderable->isTextTransparent()) { - key = ItemKey::Builder::transparentShape().withTypeMeta().withTagBits(textRenderable->getTagMask()).withLayer(textRenderable->getHifiRenderLayer()); + key = ItemKey::Builder::transparentShape().withSubMetaCulled().withTagBits(textRenderable->getTagMask()).withLayer(textRenderable->getHifiRenderLayer()); } else if (textRenderable->_canCastShadow) { - key = ItemKey::Builder::opaqueShape().withTypeMeta().withTagBits(textRenderable->getTagMask()).withShadowCaster().withLayer(textRenderable->getHifiRenderLayer()); + key = ItemKey::Builder::opaqueShape().withSubMetaCulled().withTagBits(textRenderable->getTagMask()).withShadowCaster().withLayer(textRenderable->getHifiRenderLayer()); } else { - key = ItemKey::Builder::opaqueShape().withTypeMeta().withTagBits(textRenderable->getTagMask()).withLayer(textRenderable->getHifiRenderLayer()); + key = ItemKey::Builder::opaqueShape().withSubMetaCulled().withTagBits(textRenderable->getTagMask()).withLayer(textRenderable->getHifiRenderLayer()); } if (!textRenderable->_visible) { diff --git a/libraries/entities-renderer/src/RenderableTextEntityItem.h b/libraries/entities-renderer/src/RenderableTextEntityItem.h index 04b1c7a851..d5e36a4622 100644 --- a/libraries/entities-renderer/src/RenderableTextEntityItem.h +++ b/libraries/entities-renderer/src/RenderableTextEntityItem.h @@ -34,6 +34,8 @@ protected: bool isTextTransparent() const; Item::Bound getBound() override; ShapeKey getShapeKey() override; + ItemKey getKey() override; + virtual uint32_t metaFetchMetaSubItems(ItemIDs& subItems) override; void onAddToSceneTyped(const TypedEntityPointer& entity) override; void onRemoveFromSceneTyped(const TypedEntityPointer& entity) override; diff --git a/libraries/render/src/render/RenderFetchCullSortTask.cpp b/libraries/render/src/render/RenderFetchCullSortTask.cpp index d82fdef258..6b1a57ed88 100644 --- a/libraries/render/src/render/RenderFetchCullSortTask.cpp +++ b/libraries/render/src/render/RenderFetchCullSortTask.cpp @@ -30,7 +30,7 @@ void RenderFetchCullSortTask::build(JobModel& task, const Varying& input, Varyin const auto culledSpatialSelection = task.addJob("CullSceneSelection", cullInputs, cullFunctor, RenderDetails::ITEM); // Layered objects are not culled - const ItemFilter layeredFilter = ItemFilter::Builder().withVisible().withoutSubMetaCulled().withTagBits(tagBits, tagMask); + const ItemFilter layeredFilter = ItemFilter::Builder::visibleWorldItems().withTagBits(tagBits, tagMask); const auto nonspatialFilter = render::Varying(layeredFilter); const auto nonspatialSelection = task.addJob("FetchLayeredSelection", nonspatialFilter);