diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-09-17 14:10:35 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-09-20 14:26:13 +0200 |
commit | 88f97f70f8eeb6de4739175827d492019258312e (patch) | |
tree | 5a3a98ca070c2dcfdc78129e878c76d10c3a5fdd /src/render/framegraph | |
parent | b27d2684e765b4cd49d985e23768a9199e72a509 (diff) |
Update QTechniqueFilter to use direct sync
Change-Id: I03da474dffbc8171fc4c3cbd24fe0e5e8432979e
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/render/framegraph')
-rw-r--r-- | src/render/framegraph/qtechniquefilter.cpp | 24 | ||||
-rw-r--r-- | src/render/framegraph/techniquefilternode.cpp | 62 | ||||
-rw-r--r-- | src/render/framegraph/techniquefilternode_p.h | 4 |
3 files changed, 28 insertions, 62 deletions
diff --git a/src/render/framegraph/qtechniquefilter.cpp b/src/render/framegraph/qtechniquefilter.cpp index 404ad6991..28b151fc7 100644 --- a/src/render/framegraph/qtechniquefilter.cpp +++ b/src/render/framegraph/qtechniquefilter.cpp @@ -147,11 +147,7 @@ void QTechniqueFilter::addMatch(QFilterKey *filterKey) if (!filterKey->parent()) filterKey->setParent(this); - if (d->m_changeArbiter != nullptr) { - const auto change = QPropertyNodeAddedChangePtr::create(id(), filterKey); - change->setPropertyName("matchAll"); - d->notifyObservers(change); - } + d->update(); } } @@ -162,11 +158,7 @@ void QTechniqueFilter::removeMatch(QFilterKey *filterKey) { Q_ASSERT(filterKey); Q_D(QTechniqueFilter); - if (d->m_changeArbiter != nullptr) { - const auto change = QPropertyNodeRemovedChangePtr::create(id(), filterKey); - change->setPropertyName("matchAll"); - d->notifyObservers(change); - } + d->update(); d->m_matchList.removeOne(filterKey); // Remove bookkeeping connection d->unregisterDestructionHelper(filterKey); @@ -192,11 +184,7 @@ void QTechniqueFilter::addParameter(QParameter *parameter) if (!parameter->parent()) parameter->setParent(this); - if (d->m_changeArbiter != nullptr) { - const auto change = QPropertyNodeAddedChangePtr::create(id(), parameter); - change->setPropertyName("parameter"); - d->notifyObservers(change); - } + d->update(); } } @@ -207,11 +195,7 @@ void QTechniqueFilter::removeParameter(QParameter *parameter) { Q_ASSERT(parameter); Q_D(QTechniqueFilter); - if (d->m_changeArbiter != nullptr) { - const auto change = QPropertyNodeRemovedChangePtr::create(id(), parameter); - change->setPropertyName("parameter"); - d->notifyObservers(change); - } + d->update(); d->m_parameters.removeOne(parameter); // Remove bookkeeping connection d->unregisterDestructionHelper(parameter); diff --git a/src/render/framegraph/techniquefilternode.cpp b/src/render/framegraph/techniquefilternode.cpp index 8816984ee..8739143e6 100644 --- a/src/render/framegraph/techniquefilternode.cpp +++ b/src/render/framegraph/techniquefilternode.cpp @@ -59,13 +59,30 @@ TechniqueFilter::TechniqueFilter() { } -void TechniqueFilter::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) +void TechniqueFilter::syncFromFrontEnd(const QNode *frontEnd, bool firstTime) { - FrameGraphNode::initializeFromPeer(change); - const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QTechniqueFilterData>>(change); - const auto &data = typedChange->data; - m_filters = data.matchIds; - m_parameterPack.setParameters(data.parameterIds); + const QTechniqueFilter *node = qobject_cast<const QTechniqueFilter *>(frontEnd); + if (!node) + return; + + FrameGraphNode::syncFromFrontEnd(frontEnd, firstTime); + + if (firstTime) + m_parameterPack.clear(); + + auto parameters = qIdsForNodes(node->parameters()); + std::sort(std::begin(parameters), std::end(parameters)); + if (m_parameterPack.parameters() != parameters) { + m_parameterPack.setParameters(parameters); + markDirty(AbstractRenderer::FrameGraphDirty); + } + + auto filterIds = qIdsForNodes(node->matchAll()); + std::sort(std::begin(filterIds), std::end(filterIds)); + if (m_filters != filterIds) { + m_filters = filterIds; + markDirty(AbstractRenderer::FrameGraphDirty); + } } QVector<Qt3DCore::QNodeId> TechniqueFilter::parameters() const @@ -89,39 +106,6 @@ void TechniqueFilter::removeFilter(Qt3DCore::QNodeId criterionId) m_filters.removeOne(criterionId); } -void TechniqueFilter::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) -{ - switch (e->type()) { - case PropertyValueAdded: { - const auto change = qSharedPointerCast<QPropertyNodeAddedChange>(e); - if (change->propertyName() == QByteArrayLiteral("matchAll")) { - appendFilter(change->addedNodeId()); - markDirty(AbstractRenderer::FrameGraphDirty); - } else if (change->propertyName() == QByteArrayLiteral("parameter")) { - m_parameterPack.appendParameter(change->addedNodeId()); - markDirty(AbstractRenderer::FrameGraphDirty); - } - break; - } - - case PropertyValueRemoved: { - const auto change = qSharedPointerCast<QPropertyNodeRemovedChange>(e); - if (change->propertyName() == QByteArrayLiteral("matchAll")) { - removeFilter(change->removedNodeId()); - markDirty(AbstractRenderer::FrameGraphDirty); - } else if (change->propertyName() == QByteArrayLiteral("parameter")) { - m_parameterPack.removeParameter(change->removedNodeId()); - markDirty(AbstractRenderer::FrameGraphDirty); - } - break; - } - - default: - break; - } - FrameGraphNode::sceneChangeEvent(e); -} - } // namespace Render } // namespace Qt3DRender diff --git a/src/render/framegraph/techniquefilternode_p.h b/src/render/framegraph/techniquefilternode_p.h index d7e6c1508..e424e37e5 100644 --- a/src/render/framegraph/techniquefilternode_p.h +++ b/src/render/framegraph/techniquefilternode_p.h @@ -79,11 +79,9 @@ public: QVector<Qt3DCore::QNodeId> parameters() const; QVector<Qt3DCore::QNodeId> filters() const; - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override; + void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; private: - void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final; - void appendFilter(Qt3DCore::QNodeId criterionId); void removeFilter(Qt3DCore::QNodeId criterionId); |