diff options
author | Christian Andersen <csandersen3@gmail.com> | 2018-11-04 15:05:16 +0100 |
---|---|---|
committer | Christian Andersen <csandersen3@gmail.com> | 2018-11-06 07:04:27 +0000 |
commit | 325db3b1dabb8508e5c1b4f22d61399e3439f3df (patch) | |
tree | c5e21b5308631b6cb4ea2e4477ebf12dc0a28652 /src/extras/defaults | |
parent | ab5a1549ea25bb2a939b4fe526f5af28bbf2d713 (diff) |
Qt3DWindow: Redraw scene on expose events when using OnDemand rendering
This adds an InvalidateFrame QNodeCommand in QRenderSettings that is
sent to the RenderSettings backend node. The command will mark the
current frame as dirty. This ensures that whenever an expose event is
received, a redraw happens some time in the future.
Task-number: QTBUG-70885
Fixes: QTBUG-59785
Change-Id: I9fd2e19dbc282300479131d95ff8320269f95f24
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/extras/defaults')
-rw-r--r-- | src/extras/defaults/qt3dwindow.cpp | 15 | ||||
-rw-r--r-- | src/extras/defaults/qt3dwindow.h | 1 |
2 files changed, 16 insertions, 0 deletions
diff --git a/src/extras/defaults/qt3dwindow.cpp b/src/extras/defaults/qt3dwindow.cpp index 7091628ba..c3565e416 100644 --- a/src/extras/defaults/qt3dwindow.cpp +++ b/src/extras/defaults/qt3dwindow.cpp @@ -62,6 +62,8 @@ #include <Qt3DRender/qcamera.h> #include <QtGui/qopenglcontext.h> +#include <QEvent> + static void initResources() { #ifdef QT_STATIC @@ -227,6 +229,7 @@ void Qt3DWindow::showEvent(QShowEvent *e) QWindow::showEvent(e); } + /*! Resets the aspect ratio of the 3D window. */ @@ -236,6 +239,18 @@ void Qt3DWindow::resizeEvent(QResizeEvent *) d->m_defaultCamera->setAspectRatio(float(width()) / float(height())); } +/*! + Requests renderer to redraw if we are using OnDemand render policy. +*/ +bool Qt3DWindow::event(QEvent *e) +{ + Q_D(Qt3DWindow); + const bool needsRedraw = (e->type() == QEvent::Expose || e->type() == QEvent::UpdateRequest); + if (needsRedraw && d->m_renderSettings->renderPolicy() == Qt3DRender::QRenderSettings::OnDemand) + d->m_renderSettings->sendCommand(QLatin1Literal("InvalidateFrame")); + return QWindow::event(e); +} + } // Qt3DExtras QT_END_NAMESPACE diff --git a/src/extras/defaults/qt3dwindow.h b/src/extras/defaults/qt3dwindow.h index 73a6af278..7020a2bd5 100644 --- a/src/extras/defaults/qt3dwindow.h +++ b/src/extras/defaults/qt3dwindow.h @@ -112,6 +112,7 @@ Q_SIGNALS: protected: void showEvent(QShowEvent *e) override; void resizeEvent(QResizeEvent *) override; + bool event(QEvent *e) override; private: Q_DECLARE_PRIVATE(Qt3DWindow) |