summaryrefslogtreecommitdiffstats
path: root/src/extras/defaults
diff options
context:
space:
mode:
authorChristian Andersen <csandersen3@gmail.com>2018-11-04 15:05:16 +0100
committerChristian Andersen <csandersen3@gmail.com>2018-11-06 07:04:27 +0000
commit325db3b1dabb8508e5c1b4f22d61399e3439f3df (patch)
treec5e21b5308631b6cb4ea2e4477ebf12dc0a28652 /src/extras/defaults
parentab5a1549ea25bb2a939b4fe526f5af28bbf2d713 (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.cpp15
-rw-r--r--src/extras/defaults/qt3dwindow.h1
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)