diff options
author | Andy Shaw <andy.shaw@qt.io> | 2019-10-09 11:14:36 +0200 |
---|---|---|
committer | Andy Shaw <andy.shaw@qt.io> | 2019-10-10 15:19:49 +0200 |
commit | 93aa379ae5cf624f024aa9173ce42e90b5c58002 (patch) | |
tree | e4daef84bdd097935f8aa082f6904fff35515f16 /src/quick3d/imports/scene3d/scene3ditem.cpp | |
parent | e628cf90be9eef43d7a80a35067a5f4a6ef80809 (diff) |
Make sure right screen is set on QOpenGLContext and QOffscreenSurface
When the Qt3D window is on a specific screen, then it needs to ensure
that any supporting QOpenGLContexts and QOffscreenSurfaces are set to
be using that same screen or it will fail to render the content.
Change-Id: Ief4f3e88bf6f71862bc5dace0cb0bddcdf3a98b5
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/quick3d/imports/scene3d/scene3ditem.cpp')
-rw-r--r-- | src/quick3d/imports/scene3d/scene3ditem.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/quick3d/imports/scene3d/scene3ditem.cpp b/src/quick3d/imports/scene3d/scene3ditem.cpp index f5173497b..eb8c6ffd9 100644 --- a/src/quick3d/imports/scene3d/scene3ditem.cpp +++ b/src/quick3d/imports/scene3d/scene3ditem.cpp @@ -66,6 +66,7 @@ #include <QtQuick/qquickrendercontrol.h> #include <Qt3DRender/private/qrendersurfaceselector_p.h> +#include <Qt3DRender/private/qrenderaspect_p.h> #include <scene3dcleaner_p.h> #include <scene3dlogging_p.h> #include <scene3drenderer_p.h> @@ -301,6 +302,7 @@ void Scene3DItem::setWindowSurface(QObject *rootObject) m_dummySurface = new QOffscreenSurface; m_dummySurface->setParent(qGuiApp); // parent to something suitably long-living m_dummySurface->setFormat(rw->format()); + m_dummySurface->setScreen(rw->screen()); m_dummySurface->create(); surfaceSelector->setSurface(m_dummySurface); } else { @@ -388,6 +390,9 @@ QSGNode *Scene3DItem::updatePaintNode(QSGNode *node, QQuickItem::UpdatePaintNode // If the render aspect wasn't created yet, do so now if (m_renderAspect == nullptr) { m_renderAspect = new QRenderAspect(QRenderAspect::Synchronous); + auto *rw = QQuickRenderControl::renderWindowFor(window()); + static_cast<Qt3DRender::QRenderAspectPrivate *>(Qt3DRender::QRenderAspectPrivate::get(m_renderAspect))->m_screen = + (rw ? rw->screen() : window()->screen()); m_aspectEngine->registerAspect(m_renderAspect); } |