diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-10-23 08:53:46 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-10-23 12:14:32 +0000 |
commit | b9057e508c85c5b1b12efea57daf9dd6f98971d3 (patch) | |
tree | f363260cb1bd7221a7e26d155729b1977d189305 /src | |
parent | d521b994450f0a4febbd789ba66701ba24fdbe22 (diff) |
Fix Scene2D initialization
The entity that Scene2D uses to track events may not exist yet
when Scene2D is initialized. If so, mark QScene2D as dirty again
so it gets updated again on the next frame.
Change-Id: I0649a4073afca38ff569cd683d8f2b96c1899ba8
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src')
-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>()) { |