diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-09-17 11:30:33 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-09-20 08:32:15 +0200 |
commit | 5c70df1b5d280259e09e9d14f2aa0a7ee1025603 (patch) | |
tree | 515a037457b5e525784cb2ff76e1cbe7f3ee9a5d /src/render/framegraph | |
parent | e4c9e3b8d6796f92ccd01acf3b89a6d3dea662ff (diff) |
Update QLayerFilter to use direct sync
Change-Id: I8958207f2242c4f0bc9529c4f31a64bdffd9fd3b
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/render/framegraph')
-rw-r--r-- | src/render/framegraph/layerfilternode.cpp | 48 | ||||
-rw-r--r-- | src/render/framegraph/layerfilternode_p.h | 6 | ||||
-rw-r--r-- | src/render/framegraph/qlayerfilter.cpp | 12 |
3 files changed, 18 insertions, 48 deletions
diff --git a/src/render/framegraph/layerfilternode.cpp b/src/render/framegraph/layerfilternode.cpp index f9881be0d..5c53fa681 100644 --- a/src/render/framegraph/layerfilternode.cpp +++ b/src/render/framegraph/layerfilternode.cpp @@ -43,6 +43,7 @@ #include <Qt3DCore/qpropertyupdatedchange.h> #include <Qt3DCore/qpropertynodeaddedchange.h> #include <Qt3DCore/qpropertynoderemovedchange.h> +#include <algorithm> QT_BEGIN_NAMESPACE @@ -57,48 +58,25 @@ LayerFilterNode::LayerFilterNode() { } -void LayerFilterNode::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) +void LayerFilterNode::syncFromFrontEnd(const QNode *frontEnd, bool firstTime) { - FrameGraphNode::initializeFromPeer(change); - const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QLayerFilterData>>(change); - const auto &data = typedChange->data; - setLayerIds(data.layerIds); - m_filterMode = data.filterMode; -} + const QLayerFilter *node = qobject_cast<const QLayerFilter *>(frontEnd); + if (!node) + return; -void LayerFilterNode::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) -{ - switch (e->type()) { - case PropertyValueAdded: { - const auto change = qSharedPointerCast<QPropertyNodeAddedChange>(e); - if (change->propertyName() == QByteArrayLiteral("layer")) - m_layerIds.append(change->addedNodeId()); - markDirty(AbstractRenderer::FrameGraphDirty|AbstractRenderer::LayersDirty); - break; - } + FrameGraphNode::syncFromFrontEnd(frontEnd, firstTime); - case PropertyValueRemoved: { - const auto change = qSharedPointerCast<QPropertyNodeRemovedChange>(e); - if (change->propertyName() == QByteArrayLiteral("layer")) - m_layerIds.removeOne(change->removedNodeId()); + if (m_filterMode != node->filterMode()) { + m_filterMode = node->filterMode(); markDirty(AbstractRenderer::FrameGraphDirty|AbstractRenderer::LayersDirty); - break; } - case PropertyUpdated: { - const auto change = qSharedPointerCast<QPropertyUpdatedChange>(e); - if (change->propertyName() == QByteArrayLiteral("filterMode")) { - m_filterMode = static_cast<QLayerFilter::FilterMode>(change->value().value<int>()); - markDirty(AbstractRenderer::FrameGraphDirty|AbstractRenderer::LayersDirty); - break; - } - } - - default: - break; + auto layerIds = qIdsForNodes(node->layers()); + std::sort(std::begin(layerIds), std::end(layerIds)); + if (m_layerIds != layerIds) { + m_layerIds = layerIds; + markDirty(AbstractRenderer::FrameGraphDirty|AbstractRenderer::LayersDirty); } - - FrameGraphNode::sceneChangeEvent(e); } QNodeIdVector LayerFilterNode::layerIds() const diff --git a/src/render/framegraph/layerfilternode_p.h b/src/render/framegraph/layerfilternode_p.h index 18ba4ee7a..27cdc49d3 100644 --- a/src/render/framegraph/layerfilternode_p.h +++ b/src/render/framegraph/layerfilternode_p.h @@ -53,6 +53,7 @@ #include <Qt3DRender/private/framegraphnode_p.h> #include <Qt3DRender/QLayerFilter> +#include <Qt3DRender/QLayer> #include <QStringList> QT_BEGIN_NAMESPACE @@ -68,15 +69,14 @@ class LayerFilterNode : public FrameGraphNode public: LayerFilterNode(); - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override; + void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; + Qt3DCore::QNodeIdVector layerIds() const; void setLayerIds(const Qt3DCore::QNodeIdVector &list); QLayerFilter::FilterMode filterMode() const; private: - void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final; - Qt3DCore::QNodeIdVector m_layerIds; QLayerFilter::FilterMode m_filterMode; }; diff --git a/src/render/framegraph/qlayerfilter.cpp b/src/render/framegraph/qlayerfilter.cpp index 04ebca572..8b0dd5669 100644 --- a/src/render/framegraph/qlayerfilter.cpp +++ b/src/render/framegraph/qlayerfilter.cpp @@ -206,11 +206,7 @@ void QLayerFilter::addLayer(QLayer *layer) if (!layer->parent()) layer->setParent(this); - if (d->m_changeArbiter != nullptr) { - const auto change = Qt3DCore::QPropertyNodeAddedChangePtr::create(id(), layer); - change->setPropertyName("layer"); - d->notifyObservers(change); - } + d->update(); } } @@ -221,11 +217,7 @@ void QLayerFilter::removeLayer(QLayer *layer) { Q_ASSERT(layer); Q_D(QLayerFilter); - if (d->m_changeArbiter != nullptr) { - const auto change = Qt3DCore::QPropertyNodeRemovedChangePtr::create(id(), layer); - change->setPropertyName("layer"); - d->notifyObservers(change); - } + d->update(); d->m_layers.removeOne(layer); // Remove bookkeeping connection d->unregisterDestructionHelper(layer); |