From 0757777f196647e04c6813f0347179437fdc4812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Br=C3=BCning?= Date: Wed, 26 Apr 2017 09:40:37 +0200 Subject: Add a method to query the scene graph backend Since 5.8, it has been possible to set the scene graph backend using QQuickWindow::setSceneGraphBackend instead of using the environment variables. This caused some trouble with modules that need to know which backend is used and relied on the environment variables or command line options for getting this information. One example of such a module is Qt WebEngine, which crashed because it ended up trying to use OpenGL resources with the Qt Quick scenegraph software backend. Task-number: QTBUG-60232 Change-Id: Ia7c4860b16a9ce6fe9af73dfe5a5d2d19ebf5bfd Reviewed-by: Laszlo Agocs --- src/quick/items/qquickwindow.cpp | 14 ++++++++++++++ src/quick/items/qquickwindow.h | 1 + src/quick/scenegraph/qsgcontext_p.h | 1 + src/quick/scenegraph/qsgcontextplugin.cpp | 9 +++++++++ 4 files changed, 25 insertions(+) (limited to 'src/quick') diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index a8606ff1b6..8e78586697 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -4563,6 +4563,20 @@ void QQuickWindow::setSceneGraphBackend(const QString &backend) QSGContext::setBackend(backend); } +/*! + Returns the requested Qt Quick scenegraph \a backend. + + \note The return value of this function may still be outdated by + subsequent calls to setSceneGraphBackend() until the first QQuickWindow in the + application has been constructed. + + \since 5.9 + */ +QString QQuickWindow::sceneGraphBackend() +{ + return QSGContext::backend(); +} + /*! Creates a simple rectangle node. When the scenegraph is not initialized, the return value is null. diff --git a/src/quick/items/qquickwindow.h b/src/quick/items/qquickwindow.h index 27a73988ae..9c3e7277bc 100644 --- a/src/quick/items/qquickwindow.h +++ b/src/quick/items/qquickwindow.h @@ -162,6 +162,7 @@ public: static void setSceneGraphBackend(QSGRendererInterface::GraphicsApi api); static void setSceneGraphBackend(const QString &backend); + static QString sceneGraphBackend(); QSGRectangleNode *createRectangleNode() const; QSGImageNode *createImageNode() const; diff --git a/src/quick/scenegraph/qsgcontext_p.h b/src/quick/scenegraph/qsgcontext_p.h index 2f5d5790ee..1c4cd0ce90 100644 --- a/src/quick/scenegraph/qsgcontext_p.h +++ b/src/quick/scenegraph/qsgcontext_p.h @@ -145,6 +145,7 @@ public: static QSGRenderLoop *createWindowManager(); static void setBackend(const QString &backend); + static QString backend(); }; class Q_QUICK_PRIVATE_EXPORT QSGRenderContext : public QObject diff --git a/src/quick/scenegraph/qsgcontextplugin.cpp b/src/quick/scenegraph/qsgcontextplugin.cpp index 46c2a1dbd9..b8b5141957 100644 --- a/src/quick/scenegraph/qsgcontextplugin.cpp +++ b/src/quick/scenegraph/qsgcontextplugin.cpp @@ -232,6 +232,15 @@ void QSGContext::setBackend(const QString &backend) backendData->quickWindowBackendRequest = backend; } +QString QSGContext::backend() +{ + QSGAdaptationBackendData *backendData = qsg_adaptation_data(); + if (backendData->tried) + return backendData->name; + + return backendData->quickWindowBackendRequest; +} + QT_END_NAMESPACE #include "moc_qsgcontextplugin_p.cpp" -- cgit v1.2.3