diff options
author | Andy Shaw <andy.shaw@qt.io> | 2019-10-18 08:33:47 +0200 |
---|---|---|
committer | Antti Määttä <antti.maatta@qt.io> | 2020-02-07 07:20:30 +0200 |
commit | 648b7459e8a6ce8ce1f115a14da63d546b743439 (patch) | |
tree | c185ea3fd483bcbd819a28d38c00785e18385dd2 /src/quick3d/imports/scene3d/scene3ditem_p.h | |
parent | d33c1630b09fcdad83f69bfd2530354584b2f42b (diff) |
Allow for when a Scene3D item switches screens
When a Scene3D item switches screens then it will need to be
reinitalized so that the supporting contexts, offscreen surfaces are
set to use the same screen and not the original one. This ensures that
the item is still rendered correctly on the new screen.
This includes a manual test using QQuickWidget in separate windows that
enables it going from one screen to the other.
Fixes: QTBUG-79192
Change-Id: Id5bbc0d30d04ea4a945463238868b68283df0543
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'src/quick3d/imports/scene3d/scene3ditem_p.h')
-rw-r--r-- | src/quick3d/imports/scene3d/scene3ditem_p.h | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/quick3d/imports/scene3d/scene3ditem_p.h b/src/quick3d/imports/scene3d/scene3ditem_p.h index e46bb20af..0beaf94c0 100644 --- a/src/quick3d/imports/scene3d/scene3ditem_p.h +++ b/src/quick3d/imports/scene3d/scene3ditem_p.h @@ -71,6 +71,7 @@ class Scene3DRenderer; class Scene3DCleaner; class Scene3DView; class QFrameGraphNode; +class QRenderSurfaceSelector; class Scene3DItem : public QQuickItem { @@ -138,16 +139,20 @@ private: void updateCameraAspectRatio(); void mousePressEvent(QMouseEvent *event) override; bool needsRender(); + void updateWindowSurface(); + void createDummySurface(QWindow *window, QRenderSurfaceSelector *surfaceSelector); + void applyAspects(); QStringList m_aspects; - Qt3DCore::QEntity *m_entity; + // Store as shared pointer so that aspect engine doesn't delete it. + QSharedPointer<Qt3DCore::QEntity> m_entity; Qt3DCore::QEntity *m_viewHolderEntity; Qt3DRender::QFrameGraphNode *m_viewHolderFG; Qt3DCore::QAspectEngine *m_aspectEngine; + Qt3DCore::QAspectEngine *m_aspectToDelete; QRenderAspect *m_renderAspect; Scene3DRenderer *m_renderer; - Scene3DCleaner *m_rendererCleaner; bool m_multisample; bool m_dirty; @@ -160,6 +165,7 @@ private: CompositingMode m_compositingMode; QOffscreenSurface *m_dummySurface; QVector<Scene3DView *> m_views; + QMetaObject::Connection m_windowConnection; }; } // Qt3DRender |