diff options
Diffstat (limited to 'src/quick3d/quick3dscene2d/items/scene2d.cpp')
-rw-r--r-- | src/quick3d/quick3dscene2d/items/scene2d.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/quick3d/quick3dscene2d/items/scene2d.cpp b/src/quick3d/quick3dscene2d/items/scene2d.cpp index 981b290e2..063464b95 100644 --- a/src/quick3d/quick3dscene2d/items/scene2d.cpp +++ b/src/quick3d/quick3dscene2d/items/scene2d.cpp @@ -45,12 +45,12 @@ #include <QtCore/qthread.h> #include <QtCore/qatomic.h> #include <QtGui/qevent.h> +#include <QtGui/QOpenGLFunctions> #include <private/qscene2d_p.h> #include <private/scene2d_p.h> #include <private/scene2dmanager_p.h> #include <private/scene2devent_p.h> -#include <private/graphicscontext_p.h> #include <private/texture_p.h> #include <private/nodemanagers_p.h> #include <private/resourceaccessor_p.h> @@ -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>()) { |