diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-09-06 15:22:25 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-09-19 09:46:46 +0200 |
commit | d7857a310b86b22340acbfb569fd18b7c647d171 (patch) | |
tree | 4207ec62d77b9b55317a3dd2e0f94f63135c6042 /src/render/materialsystem | |
parent | b16ff31b2689a43bdbcb3e84094b49ab99a4cd92 (diff) |
Update QMaterial to use direct sync
Change-Id: I3e2a687ab46196728083a91ce114066329e77278
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/materialsystem')
-rw-r--r-- | src/render/materialsystem/material.cpp | 59 | ||||
-rw-r--r-- | src/render/materialsystem/material_p.h | 4 | ||||
-rw-r--r-- | src/render/materialsystem/qmaterial.cpp | 12 |
3 files changed, 22 insertions, 53 deletions
diff --git a/src/render/materialsystem/material.cpp b/src/render/materialsystem/material.cpp index a69ff8a13..07764c207 100644 --- a/src/render/materialsystem/material.cpp +++ b/src/render/materialsystem/material.cpp @@ -73,47 +73,26 @@ void Material::cleanup() m_parameterPack.clear(); } -void Material::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) +void Material::syncFromFrontEnd(const QNode *frontEnd, bool firstTime) { - const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QMaterialData>>(change); - const auto &data = typedChange->data; - m_effectUuid = data.effectId; - m_parameterPack.setParameters(data.parameterIds); - - markDirty(AbstractRenderer::MaterialDirty); -} - -void Material::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) -{ - - switch (e->type()) { - case PropertyUpdated: { - const auto change = qSharedPointerCast<QPropertyUpdatedChange>(e); - if (change->propertyName() == QByteArrayLiteral("effect")) - m_effectUuid = change->value().value<QNodeId>(); - break; - } - - case PropertyValueAdded: { - const auto change = qSharedPointerCast<QPropertyNodeAddedChange>(e); - if (change->propertyName() == QByteArrayLiteral("parameter")) - m_parameterPack.appendParameter(change->addedNodeId()); - break; - } - - case PropertyValueRemoved: { - const auto change = qSharedPointerCast<QPropertyNodeRemovedChange>(e); - if (change->propertyName() == QByteArrayLiteral("parameter")) - m_parameterPack.removeParameter(change->removedNodeId()); - break; - } - - default: - break; - } - markDirty(AbstractRenderer::AllDirty); - - BackendNode::sceneChangeEvent(e); + BackendNode::syncFromFrontEnd(frontEnd, firstTime); + const QMaterial *node = qobject_cast<const QMaterial *>(frontEnd); + if (!node) + return; + + auto parameters = qIdsForNodes(node->parameters()); + std::sort(std::begin(parameters), std::end(parameters)); + if (m_parameterPack.parameters() != parameters) + m_parameterPack.setParameters(parameters); + + const auto effectId = node->effect() ? node->effect()->id() : QNodeId{}; + if (effectId != m_effectUuid) + m_effectUuid = effectId; + + if (firstTime) + markDirty(AbstractRenderer::MaterialDirty); + else + markDirty(AbstractRenderer::AllDirty); } QVector<Qt3DCore::QNodeId> Material::parameters() const diff --git a/src/render/materialsystem/material_p.h b/src/render/materialsystem/material_p.h index 3b55dc657..7a02c6691 100644 --- a/src/render/materialsystem/material_p.h +++ b/src/render/materialsystem/material_p.h @@ -79,14 +79,12 @@ public: ~Material(); void cleanup(); - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override; + void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; QVector<Qt3DCore::QNodeId> parameters() const; Qt3DCore::QNodeId effect() const; private: - void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final; - ParameterPack m_parameterPack; Qt3DCore::QNodeId m_effectUuid; }; diff --git a/src/render/materialsystem/qmaterial.cpp b/src/render/materialsystem/qmaterial.cpp index c6913441e..db523a700 100644 --- a/src/render/materialsystem/qmaterial.cpp +++ b/src/render/materialsystem/qmaterial.cpp @@ -275,11 +275,7 @@ void QMaterial::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(); } } @@ -290,11 +286,7 @@ void QMaterial::removeParameter(QParameter *parameter) { Q_ASSERT(parameter); Q_D(QMaterial); - 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); } |