diff options
-rw-r--r-- | src/quick3d/quick3dscene2d/items/scene2d.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/quick3d/quick3dscene2d/items/scene2d.cpp b/src/quick3d/quick3dscene2d/items/scene2d.cpp index b8f99ae1b..bfd6ce7ef 100644 --- a/src/quick3d/quick3dscene2d/items/scene2d.cpp +++ b/src/quick3d/quick3dscene2d/items/scene2d.cpp @@ -208,11 +208,16 @@ void Scene2D::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) if (!entity) return; - registerObjectPickerEvents(entity); + if (registerObjectPickerEvents(entity)) + m_entities.push_back(id); + else + Qt3DCore::QNodePrivate::get(const_cast<Qt3DCore::QNode *>(frontEnd))->update(); } - for (const auto &id: removedEntities) + for (const auto &id: removedEntities) { + m_entities.removeOne(id); unregisterObjectPickerEvents(id); - m_entities = ids; + } + std::sort(std::begin(m_entities), std::end(m_entities)); if (firstTime) setSharedObject(dnode->m_renderManager->m_sharedObject); @@ -428,8 +433,11 @@ bool Scene2D::registerObjectPickerEvents(Qt3DCore::QEntity *qentity) { Entity *entity = nullptr; if (!resourceAccessor()->accessResource(RenderBackendResourceAccessor::EntityHandle, - qentity->id(), (void**)&entity, nullptr)) + qentity->id(), (void**)&entity, nullptr)) { + qCWarning(Qt3DRender::Quick::Scene2D) << Q_FUNC_INFO + << "Entity not yet available in backend"; return false; + } if (!entity->containsComponentsOfType<ObjectPicker>() || !entity->containsComponentsOfType<GeometryRenderer>()) { |