diff options
author | Jocelyn Turcotte <jocelyn.turcotte@digia.com> | 2014-03-28 17:14:30 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-04-08 14:00:10 +0200 |
commit | 96425960f9d57387c33e3ba50785aaa81255bc98 (patch) | |
tree | 01799f1235c85ffef420c06c5598ebd4e028339e /src/core | |
parent | 84f31c11b77a62212451cb77adae63219e06de96 (diff) |
Render the widgets view using the scene graph into a QOpenGLWidget
This means that widgets application now need to setup the GL context
sharing as well. QWebEngineWidgets::initialize() must be called,
which has the same effect as QWebEngine::initialize().
The QtWebEngineWidgets now depends on the QtWebEngine module to make
this happen.
Since QOpenGLWidget is only available in Qt 5.3, this patch also
disables the webenginewidgets module completely when building using
Qt 5.2.
Change-Id: I0e99a779d1eb080f2ccf5a338ff0763ad64e6eba
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/content_browser_client_qt.cpp | 7 | ||||
-rw-r--r-- | src/core/delegated_frame_node.cpp | 17 | ||||
-rw-r--r-- | src/core/delegated_frame_node.h | 6 | ||||
-rw-r--r-- | src/core/render_widget_host_view_qt.cpp | 4 | ||||
-rw-r--r-- | src/core/render_widget_host_view_qt.h | 2 | ||||
-rw-r--r-- | src/core/render_widget_host_view_qt_delegate.h | 4 |
6 files changed, 20 insertions, 20 deletions
diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp index 628aa6ed2..86ff11efb 100644 --- a/src/core/content_browser_client_qt.cpp +++ b/src/core/content_browser_client_qt.cpp @@ -58,6 +58,7 @@ #include "web_contents_view_qt.h" #include <QGuiApplication> +#include <QtGui/private/qopenglcontext_p.h> #include <QtQuick/private/qsgcontext_p.h> #include <qpa/qplatformnativeinterface.h> @@ -248,9 +249,13 @@ private: void ShareGroupQtQuick::AboutToAddFirstContext() { // This currently has to be setup by ::main in all applications using QQuickWebEngineView with delegated rendering. +#if (QT_VERSION < QT_VERSION_CHECK(5, 3, 0)) QOpenGLContext *shareContext = QSGContext::sharedOpenGLContext(); +#else + QOpenGLContext *shareContext = QOpenGLContextPrivate::globalShareContext(); +#endif if (!shareContext) { - qFatal("QWebEngine: OpenGL resource sharing is not set up in QtQuick. Please make sure to call QWebEngine::initialize() in your main() function."); + qFatal("QWebEngine: OpenGL resource sharing is not set up in QtQuick. Please make sure to call QWebEngine::initialize() or QWebEngineWidgets::initialize() in your main() function."); } m_shareContextQtQuick = make_scoped_refptr(new QtShareGLContext(shareContext)); } diff --git a/src/core/delegated_frame_node.cpp b/src/core/delegated_frame_node.cpp index 2cfcd4afe..1f7084d18 100644 --- a/src/core/delegated_frame_node.cpp +++ b/src/core/delegated_frame_node.cpp @@ -70,7 +70,6 @@ #include <QSGSimpleTextureNode> #include <QSGTexture> #include <QtQuick/private/qquickclipnode_p.h> -#include <QtQuick/private/qquickwindow_p.h> #include <QtQuick/private/qsgadaptationlayer_p.h> #include <QtQuick/private/qsgcontext_p.h> #include <QtQuick/private/qsgrenderer_p.h> @@ -286,8 +285,8 @@ void MailboxTexture::fetchTexture(gpu::gles2::MailboxManager *mailboxManager) m_textureId = service_id(tex); } -DelegatedFrameNode::DelegatedFrameNode(QQuickWindow *window) - : m_window(window) +DelegatedFrameNode::DelegatedFrameNode(QSGRenderContext *sgRenderContext) + : m_sgRenderContext(sgRenderContext) , m_numPendingSyncPoints(0) { setFlag(UsePreprocess); @@ -370,10 +369,8 @@ void DelegatedFrameNode::commit(DelegatedFrameNodeData* data, cc::ReturnedResour QSGNode *renderPassParent = 0; if (pass != rootRenderPass) { QSharedPointer<RenderPassTexture> rpTexture = findRenderPassTexture(pass->id, oldRenderPassTextures); - if (!rpTexture) { - QSGRenderContext *sgrc = QQuickWindowPrivate::get(m_window)->context; - rpTexture = QSharedPointer<RenderPassTexture>(new RenderPassTexture(pass->id, sgrc)); - } + if (!rpTexture) + rpTexture = QSharedPointer<RenderPassTexture>(new RenderPassTexture(pass->id, m_sgRenderContext)); m_renderPassTextures.append(rpTexture); rpTexture->setDevicePixelRatio(m_data->frameDevicePixelRatio); rpTexture->setRect(toQt(pass->output_rect)); @@ -404,8 +401,7 @@ void DelegatedFrameNode::commit(DelegatedFrameNodeData* data, cc::ReturnedResour switch (quad->material) { case cc::DrawQuad::CHECKERBOARD: { const cc::CheckerboardDrawQuad *cbquad = cc::CheckerboardDrawQuad::MaterialCast(quad); - QSGRenderContext *sgrc = QQuickWindowPrivate::get(m_window)->context; - QSGRectangleNode *rectangleNode = sgrc->sceneGraphContext()->createRectangleNode(); + QSGRectangleNode *rectangleNode = m_sgRenderContext->sceneGraphContext()->createRectangleNode(); rectangleNode->setRect(toQt(quad->rect)); rectangleNode->setColor(toQt(cbquad->color)); @@ -450,8 +446,7 @@ void DelegatedFrameNode::commit(DelegatedFrameNodeData* data, cc::ReturnedResour break; } case cc::DrawQuad::SOLID_COLOR: { const cc::SolidColorDrawQuad *scquad = cc::SolidColorDrawQuad::MaterialCast(quad); - QSGRenderContext *sgrc = QQuickWindowPrivate::get(m_window)->context; - QSGRectangleNode *rectangleNode = sgrc->sceneGraphContext()->createRectangleNode(); + QSGRectangleNode *rectangleNode = m_sgRenderContext->sceneGraphContext()->createRectangleNode(); // Qt only supports MSAA and this flag shouldn't be needed. // If we ever want to use QSGRectangleNode::setAntialiasing for this we should diff --git a/src/core/delegated_frame_node.h b/src/core/delegated_frame_node.h index 71a3e1d25..214894821 100644 --- a/src/core/delegated_frame_node.h +++ b/src/core/delegated_frame_node.h @@ -51,7 +51,7 @@ #include <QWaitCondition> QT_BEGIN_NAMESPACE -class QQuickWindow; +class QSGRenderContext; QT_END_NAMESPACE namespace cc { @@ -73,14 +73,14 @@ public: class DelegatedFrameNode : public QSGTransformNode { public: - DelegatedFrameNode(QQuickWindow *window); + DelegatedFrameNode(QSGRenderContext *sgRenderContext); ~DelegatedFrameNode(); void preprocess(); void commit(DelegatedFrameNodeData* data, cc::ReturnedResourceArray *resourcesToRelease); private: QExplicitlySharedDataPointer<DelegatedFrameNodeData> m_data; - QQuickWindow *m_window; + QSGRenderContext *m_sgRenderContext; QList<QSharedPointer<RenderPassTexture> > m_renderPassTextures; int m_numPendingSyncPoints; QWaitCondition m_mailboxesFetchedWaitCond; diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index 7430f6756..7df9ee46a 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -685,11 +685,11 @@ void RenderWidgetHostViewQt::paint(QPainter *painter, const QRectF& boundingRect m_backingStore->paintToTarget(painter, boundingRect); } -QSGNode *RenderWidgetHostViewQt::updatePaintNode(QSGNode *oldNode, QQuickWindow *window) +QSGNode *RenderWidgetHostViewQt::updatePaintNode(QSGNode *oldNode, QSGRenderContext *sgRenderContext) { DelegatedFrameNode *frameNode = static_cast<DelegatedFrameNode *>(oldNode); if (!frameNode) - frameNode = new DelegatedFrameNode(window); + frameNode = new DelegatedFrameNode(sgRenderContext); frameNode->commit(m_frameNodeData.data(), &m_resourcesToRelease); diff --git a/src/core/render_widget_host_view_qt.h b/src/core/render_widget_host_view_qt.h index 7ecfe7ecb..208336b8b 100644 --- a/src/core/render_widget_host_view_qt.h +++ b/src/core/render_widget_host_view_qt.h @@ -168,7 +168,7 @@ public: // Overridden from RenderWidgetHostViewQtDelegateClient. virtual void paint(QPainter *, const QRectF& boundingRect) Q_DECL_OVERRIDE; - virtual QSGNode *updatePaintNode(QSGNode *, QQuickWindow *) Q_DECL_OVERRIDE; + virtual QSGNode *updatePaintNode(QSGNode *, QSGRenderContext *) Q_DECL_OVERRIDE; virtual void fetchBackingStore() Q_DECL_OVERRIDE; virtual void notifyResize() Q_DECL_OVERRIDE; virtual bool forwardEvent(QEvent *) Q_DECL_OVERRIDE; diff --git a/src/core/render_widget_host_view_qt_delegate.h b/src/core/render_widget_host_view_qt_delegate.h index 08d66745b..ddfa2b3c8 100644 --- a/src/core/render_widget_host_view_qt_delegate.h +++ b/src/core/render_widget_host_view_qt_delegate.h @@ -51,8 +51,8 @@ QT_BEGIN_NAMESPACE class QCursor; class QEvent; class QPainter; -class QQuickWindow; class QSGNode; +class QSGRenderContext; class QVariant; class QWindow; class QInputMethodEvent; @@ -64,7 +64,7 @@ class QWEBENGINE_EXPORT RenderWidgetHostViewQtDelegateClient { public: virtual ~RenderWidgetHostViewQtDelegateClient() { } virtual void paint(QPainter *, const QRectF& boundingRect) = 0; - virtual QSGNode *updatePaintNode(QSGNode *, QQuickWindow *) = 0; + virtual QSGNode *updatePaintNode(QSGNode *, QSGRenderContext *) = 0; virtual void fetchBackingStore() = 0; virtual void notifyResize() = 0; virtual bool forwardEvent(QEvent *) = 0; |