summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
authorJocelyn Turcotte <jocelyn.turcotte@digia.com>2014-03-28 17:14:30 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-04-08 14:00:10 +0200
commit96425960f9d57387c33e3ba50785aaa81255bc98 (patch)
tree01799f1235c85ffef420c06c5598ebd4e028339e /src/core
parent84f31c11b77a62212451cb77adae63219e06de96 (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.cpp7
-rw-r--r--src/core/delegated_frame_node.cpp17
-rw-r--r--src/core/delegated_frame_node.h6
-rw-r--r--src/core/render_widget_host_view_qt.cpp4
-rw-r--r--src/core/render_widget_host_view_qt.h2
-rw-r--r--src/core/render_widget_host_view_qt_delegate.h4
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;