diff options
author | Jocelyn Turcotte <jocelyn.turcotte@digia.com> | 2014-07-07 18:21:52 +0200 |
---|---|---|
committer | Jocelyn Turcotte <jocelyn.turcotte@digia.com> | 2014-08-06 19:07:45 +0200 |
commit | fffb6233a366a92336aeed690cae0b704358511d (patch) | |
tree | d7ee82c5dfc696151aba1e2f134c1b350f15de1c /src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp | |
parent | 83a6c1b92f38b4b0bdb3f90d67be7bb1e4caef7a (diff) |
Use QSGEngine instead of the private QSGRenderContext
QSGEngine was added in Qt 5.4 to allow using the scene graph
without QQuickWindow. Use it for our FBO as well as for the
QOpenGLWidget rendering.
Change-Id: If4665d4f33c9dad69d2d4269309163bb5ffbd8e3
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
Diffstat (limited to 'src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp')
-rw-r--r-- | src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp | 42 |
1 files changed, 20 insertions, 22 deletions
diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp index 33ef3a3c0..2fb03f02e 100644 --- a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp +++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp @@ -43,21 +43,22 @@ #include "qwebenginepage_p.h" #include "qwebengineview.h" +#include <QGuiApplication> #include <QLayout> +#include <QMouseEvent> +#include <QOpenGLContext> +#include <QResizeEvent> +#include <QSGAbstractRenderer> +#include <QSGEngine> #include <QSGNode> -#include <private/qsgadaptationlayer_p.h> -#include <private/qsgcontext_p.h> -#include <private/qsgrenderer_p.h> -#include <private/qwidget_p.h> static const int MaxTooltipLength = 1024; RenderWidgetHostViewQtDelegateWidget::RenderWidgetHostViewQtDelegateWidget(RenderWidgetHostViewQtDelegateClient *client, QWidget *parent) : QOpenGLWidget(parent) , m_client(client) - , rootNode(new QSGRootNode) - , sgContext(QSGContext::createDefaultContext()) - , sgRenderContext(new QSGRenderContext(sgContext.data())) + , m_rootNode(new QSGRootNode) + , m_sgEngine(new QSGEngine) , m_isPopup(false) { setFocusPolicy(Qt::StrongFocus); @@ -222,9 +223,10 @@ bool RenderWidgetHostViewQtDelegateWidget::event(QEvent *event) void RenderWidgetHostViewQtDelegateWidget::initializeGL() { - sgRenderContext->initialize(QOpenGLContext::currentContext()); - sgRenderer.reset(sgRenderContext->createRenderer()); - sgRenderer->setRootNode(rootNode.data()); + m_sgEngine->initialize(QOpenGLContext::currentContext()); + m_sgRenderer.reset(m_sgEngine->createRenderer()); + m_sgRenderer->setRootNode(m_rootNode.data()); + m_sgRenderer->setClearColor(Qt::white); } void RenderWidgetHostViewQtDelegateWidget::paintGL() @@ -234,19 +236,15 @@ void RenderWidgetHostViewQtDelegateWidget::paintGL() if (!QOpenGLContext::currentContext()) return; #endif - QSGNode *paintNode = m_client->updatePaintNode(rootNode->firstChild(), sgRenderContext.data()); - if (paintNode != rootNode->firstChild()) { - delete rootNode->firstChild(); - rootNode->appendChildNode(paintNode); + QSGNode *paintNode = m_client->updatePaintNode(m_rootNode->firstChild()); + if (paintNode != m_rootNode->firstChild()) { + delete m_rootNode->firstChild(); + m_rootNode->appendChildNode(paintNode); } - rootNode->markDirty(QSGNode::DirtyForceUpdate); // Force matrix, clip and opacity update. - sgRenderer->nodeChanged(rootNode.data(), QSGNode::DirtyForceUpdate); // Force render list update. + m_sgRenderer->setDeviceRect(size()); + m_sgRenderer->setViewportRect(size()); + m_sgRenderer->setProjectionMatrixToRect(QRectF(QPointF(), size())); - sgRenderer->setDeviceRect(size()); - sgRenderer->setViewportRect(size()); - sgRenderer->setProjectionMatrixToRect(QRectF(QPointF(), size())); - sgRenderer->setClearColor(Qt::white); - - sgRenderContext->renderNextFrame(sgRenderer.data(), defaultFramebufferObject()); + m_sgRenderer->renderScene(defaultFramebufferObject()); } |