diff options
Diffstat (limited to 'src/render/materialsystem/material.cpp')
-rw-r--r-- | src/render/materialsystem/material.cpp | 59 |
1 files changed, 19 insertions, 40 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 |