summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/extras/defaults/qt3dwindow.cpp8
-rw-r--r--src/render/backend/rendersettings.cpp64
-rw-r--r--src/render/backend/rendersettings_p.h4
-rw-r--r--src/render/frontend/qrenderaspect.cpp2
-rw-r--r--src/render/frontend/qrendersettings.cpp11
-rw-r--r--src/render/frontend/qrendersettings.h1
-rw-r--r--src/render/frontend/qrendersettings_p.h2
7 files changed, 54 insertions, 38 deletions
diff --git a/src/extras/defaults/qt3dwindow.cpp b/src/extras/defaults/qt3dwindow.cpp
index a2b9ba4bb..ace40c3c1 100644
--- a/src/extras/defaults/qt3dwindow.cpp
+++ b/src/extras/defaults/qt3dwindow.cpp
@@ -61,6 +61,7 @@
#include <Qt3DLogic/qlogicaspect.h>
#include <Qt3DRender/qcamera.h>
#include <QtGui/qopenglcontext.h>
+#include <private/qrendersettings_p.h>
#include <QEvent>
@@ -248,8 +249,11 @@ 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(QLatin1String("InvalidateFrame"));
+ if (needsRedraw && d->m_renderSettings->renderPolicy() == Qt3DRender::QRenderSettings::OnDemand) {
+ Qt3DRender::QRenderSettingsPrivate *p = static_cast<Qt3DRender::QRenderSettingsPrivate *>(
+ Qt3DCore::QNodePrivate::get(d->m_renderSettings));
+ p->invalidateFrame();
+ }
return QWindow::event(e);
}
diff --git a/src/render/backend/rendersettings.cpp b/src/render/backend/rendersettings.cpp
index 2b8067ce8..702be9c60 100644
--- a/src/render/backend/rendersettings.cpp
+++ b/src/render/backend/rendersettings.cpp
@@ -63,42 +63,42 @@ RenderSettings::RenderSettings()
{
}
-void RenderSettings::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change)
+void RenderSettings::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime)
{
- const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QRenderSettingsData>>(change);
- const auto &data = typedChange->data;
- m_activeFrameGraph = data.activeFrameGraphId;
- m_renderPolicy = data.renderPolicy;
- m_pickMethod = data.pickMethod;
- m_pickResultMode = data.pickResultMode;
- m_pickWorldSpaceTolerance = data.pickWorldSpaceTolerance;
- m_faceOrientationPickingMode = data.faceOrientationPickingMode;
-}
+ const QRenderSettings *node = qobject_cast<const QRenderSettings *>(frontEnd);
+ if (!node)
+ return;
-void RenderSettings::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
-{
- if (e->type() == PropertyUpdated) {
- QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<QPropertyUpdatedChange>(e);
- if (propertyChange->propertyName() == QByteArrayLiteral("pickMethod"))
- m_pickMethod = propertyChange->value().value<QPickingSettings::PickMethod>();
- else if (propertyChange->propertyName() == QByteArrayLiteral("pickResult"))
- m_pickResultMode = propertyChange->value().value<QPickingSettings::PickResultMode>();
- else if (propertyChange->propertyName() == QByteArrayLiteral("faceOrientationPickingMode"))
- m_faceOrientationPickingMode = propertyChange->value().value<QPickingSettings::FaceOrientationPickingMode>();
- else if (propertyChange->propertyName() == QByteArrayLiteral("pickWorldSpaceTolerance"))
- m_pickWorldSpaceTolerance = propertyChange->value().toFloat();
- else if (propertyChange->propertyName() == QByteArrayLiteral("activeFrameGraph"))
- m_activeFrameGraph = propertyChange->value().value<QNodeId>();
- else if (propertyChange->propertyName() == QByteArrayLiteral("renderPolicy"))
- m_renderPolicy = propertyChange->value().value<QRenderSettings::RenderPolicy>();
- markDirty(AbstractRenderer::AllDirty);
- } else if (e->type() == CommandRequested) {
- QNodeCommandPtr command = qSharedPointerCast<QNodeCommand>(e);
- if (command->name() == QLatin1String("InvalidateFrame"))
- markDirty(AbstractRenderer::AllDirty);
+ BackendNode::syncFromFrontEnd(frontEnd, firstTime);
+
+ const Qt3DCore::QNodeId activeFGId = Qt3DCore::qIdForNode(node->activeFrameGraph());
+ if (activeFGId != m_activeFrameGraph) {
+ m_activeFrameGraph = activeFGId;
+ }
+
+ if (node->renderPolicy() != m_renderPolicy) {
+ m_renderPolicy = node->renderPolicy();
+ }
+
+ if (node->pickingSettings()->pickMethod() != m_pickMethod) {
+ m_pickMethod = node->pickingSettings()->pickMethod();
+ }
+
+ if (node->pickingSettings()->pickResultMode() != m_pickResultMode) {
+ m_pickResultMode = node->pickingSettings()->pickResultMode();
+ }
+
+ if (node->pickingSettings()->worldSpaceTolerance() != m_pickWorldSpaceTolerance) {
+ m_pickWorldSpaceTolerance = node->pickingSettings()->worldSpaceTolerance();
+ }
+
+ if (node->pickingSettings()->faceOrientationPickingMode() != m_faceOrientationPickingMode) {
+ m_faceOrientationPickingMode = node->pickingSettings()->faceOrientationPickingMode();
}
- BackendNode::sceneChangeEvent(e);
+ // Either because something above as changed or if QRenderSettingsPrivate::invalidFrame()
+ // was called
+ markDirty(AbstractRenderer::AllDirty);
}
RenderSettingsFunctor::RenderSettingsFunctor(AbstractRenderer *renderer)
diff --git a/src/render/backend/rendersettings_p.h b/src/render/backend/rendersettings_p.h
index d2880c134..1c8c0ca72 100644
--- a/src/render/backend/rendersettings_p.h
+++ b/src/render/backend/rendersettings_p.h
@@ -67,7 +67,7 @@ class Q_AUTOTEST_EXPORT RenderSettings : public BackendNode
public:
RenderSettings();
- void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override;
+ void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override;
Qt3DCore::QNodeId activeFrameGraphID() const { return m_activeFrameGraph; }
QRenderSettings::RenderPolicy renderPolicy() const { return m_renderPolicy; }
@@ -80,8 +80,6 @@ public:
void setActiveFrameGraphId(Qt3DCore::QNodeId frameGraphNodeId) { m_activeFrameGraph = frameGraphNodeId; }
private:
- void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final;
-
QRenderSettings::RenderPolicy m_renderPolicy;
QPickingSettings::PickMethod m_pickMethod;
QPickingSettings::PickResultMode m_pickResultMode;
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp
index 2e90375ae..afe9cb1df 100644
--- a/src/render/frontend/qrenderaspect.cpp
+++ b/src/render/frontend/qrenderaspect.cpp
@@ -262,7 +262,7 @@ void QRenderAspectPrivate::registerBackendTypes()
q->registerBackendType<QSceneLoader, true>(QSharedPointer<Render::RenderSceneFunctor>::create(m_renderer, m_nodeManagers->sceneManager()));
q->registerBackendType<QRenderTarget, true>(QSharedPointer<Render::NodeFunctor<Render::RenderTarget, Render::RenderTargetManager> >::create(m_renderer));
q->registerBackendType<QRenderTargetOutput, true>(QSharedPointer<Render::NodeFunctor<Render::RenderTargetOutput, Render::AttachmentManager> >::create(m_renderer));
- q->registerBackendType<QRenderSettings>(QSharedPointer<Render::RenderSettingsFunctor>::create(m_renderer));
+ q->registerBackendType<QRenderSettings, true>(QSharedPointer<Render::RenderSettingsFunctor>::create(m_renderer));
q->registerBackendType<QRenderState>(QSharedPointer<Render::NodeFunctor<Render::RenderStateNode, Render::RenderStateManager> >::create(m_renderer));
// Geometry + Compute
diff --git a/src/render/frontend/qrendersettings.cpp b/src/render/frontend/qrendersettings.cpp
index 6ddef6e8a..d106e4205 100644
--- a/src/render/frontend/qrendersettings.cpp
+++ b/src/render/frontend/qrendersettings.cpp
@@ -96,6 +96,11 @@ void QRenderSettingsPrivate::init()
q, SLOT(_q_onWorldSpaceToleranceChanged(float)));
}
+void QRenderSettingsPrivate::invalidateFrame()
+{
+ update();
+}
+
/*! \internal */
void QRenderSettingsPrivate::_q_onPickingMethodChanged(QPickingSettings::PickMethod pickMethod)
{
@@ -156,6 +161,12 @@ QPickingSettings *QRenderSettings::pickingSettings()
return &(d->m_pickingSettings);
}
+const QPickingSettings *QRenderSettings::pickingSettings() const
+{
+ Q_D(const QRenderSettings);
+ return &(d->m_pickingSettings);
+}
+
/*!
\qmlproperty FrameGraphNode RenderSettings::activeFrameGraph
diff --git a/src/render/frontend/qrendersettings.h b/src/render/frontend/qrendersettings.h
index 9d2baa58b..c8771a8fa 100644
--- a/src/render/frontend/qrendersettings.h
+++ b/src/render/frontend/qrendersettings.h
@@ -71,6 +71,7 @@ public:
Q_ENUM(RenderPolicy) // LCOV_EXCL_LINE
QPickingSettings* pickingSettings();
+ const QPickingSettings* pickingSettings() const;
QFrameGraphNode *activeFrameGraph() const;
RenderPolicy renderPolicy() const;
diff --git a/src/render/frontend/qrendersettings_p.h b/src/render/frontend/qrendersettings_p.h
index f91397bd2..88f91810a 100644
--- a/src/render/frontend/qrendersettings_p.h
+++ b/src/render/frontend/qrendersettings_p.h
@@ -71,6 +71,8 @@ public:
QFrameGraphNode *m_activeFrameGraph;
QRenderSettings::RenderPolicy m_renderPolicy;
+ void invalidateFrame();
+
void _q_onPickingMethodChanged(QPickingSettings::PickMethod pickMethod);
void _q_onPickResultModeChanged(QPickingSettings::PickResultMode pickResultMode);
void _q_onFaceOrientationPickingModeChanged(QPickingSettings::FaceOrientationPickingMode faceOrientationPickingMode);