diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-09-06 15:49:20 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-09-19 13:42:10 +0200 |
commit | 56785807dc5aec77506ea02174fd46a67de57b5f (patch) | |
tree | 6733628b760e0995282c17cd1dd6b3cfa939cc62 /src/render/materialsystem | |
parent | 8bb3c656be7df26b260c217cd92bab6c9664981a (diff) |
Update QParameter to use direct sync
Change-Id: Iea1a2db5d4bcd2ef563993a434bf8e2166d64ed5
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/render/materialsystem')
-rw-r--r-- | src/render/materialsystem/parameter.cpp | 47 | ||||
-rw-r--r-- | src/render/materialsystem/parameter_p.h | 5 |
2 files changed, 25 insertions, 27 deletions
diff --git a/src/render/materialsystem/parameter.cpp b/src/render/materialsystem/parameter.cpp index 86ca418aa..d32e60a2d 100644 --- a/src/render/materialsystem/parameter.cpp +++ b/src/render/materialsystem/parameter.cpp @@ -70,34 +70,33 @@ void Parameter::cleanup() m_uniformValue = UniformValue(); } -void Parameter::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) +void Parameter::syncFromFrontEnd(const QNode *frontEnd, bool firstTime) { - const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QParameterData>>(change); - const auto &data = typedChange->data; - m_name = data.name; - m_nameId = StringToInt::lookupId(m_name); - m_uniformValue = UniformValue::fromVariant(data.backendValue); - markDirty(AbstractRenderer::ParameterDirty); -} + const QParameter *node = qobject_cast<const QParameter *>(frontEnd); + if (!node) + return; -void Parameter::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) -{ - QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<QPropertyUpdatedChange>(e); - - if (e->type() == PropertyUpdated) { - if (propertyChange->propertyName() == QByteArrayLiteral("name")) { - m_name = propertyChange->value().toString(); - m_nameId = StringToInt::lookupId(m_name); - markDirty(AbstractRenderer::MaterialDirty | AbstractRenderer::ParameterDirty); - } else if (propertyChange->propertyName() == QByteArrayLiteral("value")) { - m_uniformValue = UniformValue::fromVariant(propertyChange->value()); - markDirty(AbstractRenderer::ParameterDirty); - } else if (propertyChange->propertyName() == QByteArrayLiteral("enabled")) { - markDirty(AbstractRenderer::MaterialDirty | AbstractRenderer::ParameterDirty); - } + AbstractRenderer::BackendNodeDirtySet dirty = firstTime ? AbstractRenderer::ParameterDirty : static_cast<AbstractRenderer::BackendNodeDirtyFlag>(0); + if (node->isEnabled() != isEnabled()) + dirty |= (AbstractRenderer::MaterialDirty | AbstractRenderer::ParameterDirty); + + if (node->name() != m_name) { + m_name = node->name(); + m_nameId = StringToInt::lookupId(m_name); + dirty |= (AbstractRenderer::MaterialDirty | AbstractRenderer::ParameterDirty); } - BackendNode::sceneChangeEvent(e); + QParameterPrivate* d = static_cast<QParameterPrivate *>(QParameterPrivate::get(const_cast<QParameter *>(node))); + if (d->m_backendValue != m_backendValue) { + m_backendValue = d->m_backendValue; + m_uniformValue = UniformValue::fromVariant(m_backendValue); + dirty |= (AbstractRenderer::ParameterDirty); + } + + if (dirty) + markDirty(dirty); + + BackendNode::syncFromFrontEnd(frontEnd, firstTime); } QString Parameter::name() const diff --git a/src/render/materialsystem/parameter_p.h b/src/render/materialsystem/parameter_p.h index 4ab04bc8e..9deaa11f3 100644 --- a/src/render/materialsystem/parameter_p.h +++ b/src/render/materialsystem/parameter_p.h @@ -71,16 +71,15 @@ public: void cleanup(); - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override; + void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; QString name() const; int nameId() const Q_DECL_NOTHROW { return m_nameId; } const UniformValue &uniformValue() const { return m_uniformValue; } private: - void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final; - QString m_name; + QVariant m_backendValue; UniformValue m_uniformValue; int m_nameId; }; |