mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-08 15:43:17 +02:00
fix layered rendering of group culled sub items
This commit is contained in:
parent
c76d267c2a
commit
a5b92a6c7b
3 changed files with 19 additions and 6 deletions
|
@ -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<TextEntityRenderer>(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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -30,7 +30,7 @@ void RenderFetchCullSortTask::build(JobModel& task, const Varying& input, Varyin
|
|||
const auto culledSpatialSelection = task.addJob<CullSpatialSelection>("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<FetchNonspatialItems>("FetchLayeredSelection", nonspatialFilter);
|
||||
|
||||
|
|
Loading…
Reference in a new issue