summaryrefslogtreecommitdiffstats
path: root/src/quick3d/imports/scene3d/scene3drenderer_p.h
diff options
context:
space:
mode:
authorAndy Shaw <andy.shaw@qt.io>2020-03-03 22:43:22 +0100
committerAndy Shaw <andy.shaw@qt.io>2020-03-19 10:06:17 +0100
commitcdc9efb609894298d8d854a0ec75f9cb8e89f195 (patch)
tree50617c6e80c813cafafd42e2b2367e310fa2b77a /src/quick3d/imports/scene3d/scene3drenderer_p.h
parent5007e6e09db2262d28567ad276771e8fb823b069 (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. This is a fresh version after the previous version was found to have a bug shown in the scene3d-loader test which has now been resolved. Change-Id: I3c711e894018db52ec00a8a5d2e0fb0128743ab1 Done-with: Antti Kokko <antti.kokko@qt.io> Fixes: QTBUG-79192 Reviewed-by: Paul Lemire <paul.lemire@kdab.com> Reviewed-by: Mike Krus <mike.krus@kdab.com> (cherry picked from commit 4eef300be70509a208527bf164f7746fa1bf07a1)
Diffstat (limited to 'src/quick3d/imports/scene3d/scene3drenderer_p.h')
-rw-r--r--src/quick3d/imports/scene3d/scene3drenderer_p.h15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/quick3d/imports/scene3d/scene3drenderer_p.h b/src/quick3d/imports/scene3d/scene3drenderer_p.h
index e28ecbe6e..c3a83e6f9 100644
--- a/src/quick3d/imports/scene3d/scene3drenderer_p.h
+++ b/src/quick3d/imports/scene3d/scene3drenderer_p.h
@@ -76,9 +76,7 @@ class Scene3DRenderer : public QObject
{
Q_OBJECT
public:
- Scene3DRenderer(Scene3DItem *item,
- Qt3DCore::QAspectEngine *aspectEngine,
- QRenderAspect *renderAspect);
+ Scene3DRenderer();
~Scene3DRenderer();
QOpenGLFramebufferObject *createMultisampledFramebufferObject(const QSize &size);
@@ -87,7 +85,12 @@ public:
void setSGNode(Scene3DSGNode *node);
void setCleanerHelper(Scene3DCleaner *cleaner);
void synchronize();
+ void init(Scene3DItem *item, Qt3DCore::QAspectEngine *aspectEngine, QRenderAspect *renderAspect);
+ QRenderAspect *renderAspect() const
+ {
+ return m_renderAspect;
+ }
public Q_SLOTS:
void render();
void shutdown();
@@ -96,13 +99,12 @@ public Q_SLOTS:
private:
Scene3DItem *m_item; // Will be released by the QQuickWindow/QML Engine
- Qt3DCore::QAspectEngine *m_aspectEngine; // Will be released by the Scene3DRendererCleaner
+ Qt3DCore::QAspectEngine *m_aspectEngine; // Will be released by the Scene3DItem
QRenderAspect *m_renderAspect; // Will be released by the aspectEngine
QScopedPointer<QOpenGLFramebufferObject> m_multisampledFBO;
QScopedPointer<QOpenGLFramebufferObject> m_finalFBO;
QScopedPointer<QSGTexture> m_texture;
Scene3DSGNode *m_node; // Will be released by the QtQuick SceneGraph
- Scene3DCleaner *m_cleaner;
QQuickWindow *m_window;
QMutex m_windowMutex;
QSize m_lastSize;
@@ -111,8 +113,9 @@ private:
bool m_needsShutdown;
bool m_blocking;
bool m_forceRecreate;
+ bool m_resetRequested = false;
- friend class Scene3DCleaner;
+ friend class Scene3DItem;
};
} // namespace Qt3DRender