summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2019-09-17 13:54:50 +0200
committerPaul Lemire <paul.lemire@kdab.com>2019-09-20 14:26:04 +0200
commitb27d2684e765b4cd49d985e23768a9199e72a509 (patch)
tree983e513e87eb9187204675259b9cf82a7342f25e
parentc11cc7dfa5b9b0766bd1c42c7b8ba0ab021a68a8 (diff)
Update QSortPolicy to use direct sync
Change-Id: I8d79c5eab413479a665aa3e7f4576a715547f58e Reviewed-by: Mike Krus <mike.krus@kdab.com>
-rw-r--r--src/render/framegraph/qsortpolicy.cpp3
-rw-r--r--src/render/framegraph/sortpolicy.cpp29
-rw-r--r--src/render/framegraph/sortpolicy_p.h4
-rw-r--r--src/render/frontend/qrenderaspect.cpp2
-rw-r--r--tests/auto/render/sortpolicy/tst_sortpolicy.cpp17
5 files changed, 24 insertions, 31 deletions
diff --git a/src/render/framegraph/qsortpolicy.cpp b/src/render/framegraph/qsortpolicy.cpp
index 6f852afbd..c8e3d23c5 100644
--- a/src/render/framegraph/qsortpolicy.cpp
+++ b/src/render/framegraph/qsortpolicy.cpp
@@ -178,7 +178,10 @@ void QSortPolicy::setSortTypes(const QVector<SortType> &sortTypes)
if (sortTypes != d->m_sortTypes) {
d->m_sortTypes = sortTypes;
emit sortTypesChanged(sortTypes);
+
+ const bool wasBlocked = blockNotifications(true);
emit sortTypesChanged(sortTypesInt());
+ blockNotifications(wasBlocked);
}
}
diff --git a/src/render/framegraph/sortpolicy.cpp b/src/render/framegraph/sortpolicy.cpp
index b81d1f6cb..3c7975945 100644
--- a/src/render/framegraph/sortpolicy.cpp
+++ b/src/render/framegraph/sortpolicy.cpp
@@ -53,18 +53,19 @@ SortPolicy::SortPolicy()
{
}
-void SortPolicy::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
+void SortPolicy::syncFromFrontEnd(const QNode *frontEnd, bool firstTime)
{
- if (e->type() == Qt3DCore::PropertyUpdated) {
- Qt3DCore::QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<Qt3DCore::QPropertyUpdatedChange>(e);
- if (propertyChange->propertyName() == QByteArrayLiteral("sortTypes")) {
- auto sortTypesInt = propertyChange->value().value<QVector<int>>();
- m_sortTypes.clear();
- transformVector(sortTypesInt, m_sortTypes);
- markDirty(AbstractRenderer::FrameGraphDirty);
- }
+ const QSortPolicy *node = qobject_cast<const QSortPolicy *>(frontEnd);
+ if (!node)
+ return;
+
+ FrameGraphNode::syncFromFrontEnd(frontEnd, firstTime);
+
+ const auto sortTypes = node->sortTypes();
+ if (sortTypes != m_sortTypes) {
+ m_sortTypes = sortTypes;
+ markDirty(AbstractRenderer::FrameGraphDirty);
}
- FrameGraphNode::sceneChangeEvent(e);
}
QVector<QSortPolicy::SortType> SortPolicy::sortTypes() const
@@ -72,14 +73,6 @@ QVector<QSortPolicy::SortType> SortPolicy::sortTypes() const
return m_sortTypes;
}
-void SortPolicy::initializeFromPeer(const QNodeCreatedChangeBasePtr &change)
-{
- FrameGraphNode::initializeFromPeer(change);
- const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QSortPolicyData>>(change);
- const QSortPolicyData &data = typedChange->data;
- m_sortTypes = data.sortTypes;
-}
-
} // namepace Render
} // namespace Qt3DRender
diff --git a/src/render/framegraph/sortpolicy_p.h b/src/render/framegraph/sortpolicy_p.h
index ef928af7b..8d572ead7 100644
--- a/src/render/framegraph/sortpolicy_p.h
+++ b/src/render/framegraph/sortpolicy_p.h
@@ -65,13 +65,11 @@ class Q_AUTOTEST_EXPORT SortPolicy : public FrameGraphNode
public:
SortPolicy();
- void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override;
+ void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override;
QVector<Qt3DRender::QSortPolicy::SortType> sortTypes() const;
private:
- void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final;
-
QVector<Qt3DRender::QSortPolicy::SortType> m_sortTypes;
};
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp
index 7ef06c4f7..f7cd73496 100644
--- a/src/render/frontend/qrenderaspect.cpp
+++ b/src/render/frontend/qrenderaspect.cpp
@@ -306,7 +306,7 @@ void QRenderAspectPrivate::registerBackendTypes()
q->registerBackendType<QRenderStateSet, true>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::StateSetNode, QRenderStateSet> >::create(m_renderer));
q->registerBackendType<QRenderSurfaceSelector, true>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::RenderSurfaceSelector, QRenderSurfaceSelector> >::create(m_renderer));
q->registerBackendType<QRenderTargetSelector, true>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::RenderTargetSelector, QRenderTargetSelector> >::create(m_renderer));
- q->registerBackendType<QSortPolicy>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::SortPolicy, QSortPolicy> >::create(m_renderer));
+ q->registerBackendType<QSortPolicy, true>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::SortPolicy, QSortPolicy> >::create(m_renderer));
q->registerBackendType<QTechniqueFilter>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::TechniqueFilter, QTechniqueFilter> >::create(m_renderer));
q->registerBackendType<QViewport>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::ViewportNode, QViewport> >::create(m_renderer));
q->registerBackendType<QRenderCapture>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::RenderCapture, QRenderCapture> >::create(m_renderer));
diff --git a/tests/auto/render/sortpolicy/tst_sortpolicy.cpp b/tests/auto/render/sortpolicy/tst_sortpolicy.cpp
index d79b0b4f7..a4811d82c 100644
--- a/tests/auto/render/sortpolicy/tst_sortpolicy.cpp
+++ b/tests/auto/render/sortpolicy/tst_sortpolicy.cpp
@@ -70,7 +70,7 @@ private Q_SLOTS:
// WHEN
backendNode.setRenderer(&renderer);
- simulateInitialization(&sortPolicy, &backendNode);
+ simulateInitializationSync(&sortPolicy, &backendNode);
// THEN
QCOMPARE(backendNode.peerId(), sortPolicy.id());
@@ -88,15 +88,14 @@ private Q_SLOTS:
Qt3DRender::Render::SortPolicy backendNode;
backendNode.setRenderer(&renderer);
+ Qt3DRender::QSortPolicy sortPolicy;
+ sortPolicy.setSortTypes(sortTypes);
+
+ simulateInitializationSync(&sortPolicy, &backendNode);
+
// WHEN
- auto sortTypeInts = QVector<int>();
- std::transform(sortTypes.constBegin(), sortTypes.constEnd(),
- std::back_inserter(sortTypeInts),
- [] (Qt3DRender::QSortPolicy::SortType type) -> int { return type; });
- Qt3DCore::QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId()));
- updateChange->setValue(QVariant::fromValue(sortTypeInts));
- updateChange->setPropertyName("sortTypes");
- backendNode.sceneChangeEvent(updateChange);
+ sortPolicy.setSortTypes(sortTypes);
+ backendNode.syncFromFrontEnd(&sortPolicy, false);
// THEN
QCOMPARE(backendNode.sortTypes(), sortTypes);