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 | |
parent | 8bb3c656be7df26b260c217cd92bab6c9664981a (diff) |
Update QParameter to use direct sync
Change-Id: Iea1a2db5d4bcd2ef563993a434bf8e2166d64ed5
Reviewed-by: Mike Krus <mike.krus@kdab.com>
-rw-r--r-- | src/render/frontend/qrenderaspect.cpp | 2 | ||||
-rw-r--r-- | src/render/materialsystem/parameter.cpp | 47 | ||||
-rw-r--r-- | src/render/materialsystem/parameter_p.h | 5 | ||||
-rw-r--r-- | tests/auto/render/parameter/tst_parameter.cpp | 27 |
4 files changed, 38 insertions, 43 deletions
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp index b7db4c53e..633343f29 100644 --- a/src/render/frontend/qrenderaspect.cpp +++ b/src/render/frontend/qrenderaspect.cpp @@ -286,7 +286,7 @@ void QRenderAspectPrivate::registerBackendTypes() q->registerBackendType<QAbstractLight, true>(QSharedPointer<Render::RenderLightFunctor>::create(m_renderer, m_nodeManagers)); q->registerBackendType<QEnvironmentLight, true>(QSharedPointer<Render::NodeFunctor<Render::EnvironmentLight, Render::EnvironmentLightManager> >::create(m_renderer)); q->registerBackendType<QMaterial, true>(QSharedPointer<Render::NodeFunctor<Render::Material, Render::MaterialManager> >::create(m_renderer)); - q->registerBackendType<QParameter>(QSharedPointer<Render::NodeFunctor<Render::Parameter, Render::ParameterManager> >::create(m_renderer)); + q->registerBackendType<QParameter, true>(QSharedPointer<Render::NodeFunctor<Render::Parameter, Render::ParameterManager> >::create(m_renderer)); q->registerBackendType<QRenderPass>(QSharedPointer<Render::NodeFunctor<Render::RenderPass, Render::RenderPassManager> >::create(m_renderer)); q->registerBackendType<QShaderData>(QSharedPointer<Render::RenderShaderDataFunctor>::create(m_renderer, m_nodeManagers)); q->registerBackendType<QShaderProgram>(QSharedPointer<Render::NodeFunctor<Render::Shader, Render::ShaderManager> >::create(m_renderer)); 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; }; diff --git a/tests/auto/render/parameter/tst_parameter.cpp b/tests/auto/render/parameter/tst_parameter.cpp index 3b83c1c82..44e7b7020 100644 --- a/tests/auto/render/parameter/tst_parameter.cpp +++ b/tests/auto/render/parameter/tst_parameter.cpp @@ -66,7 +66,7 @@ private Q_SLOTS: // WHEN backendParameter.setRenderer(&renderer); - simulateInitialization(¶meter, &backendParameter); + simulateInitializationSync(¶meter, &backendParameter); backendParameter.cleanup(); // THEN @@ -89,7 +89,7 @@ private Q_SLOTS: // WHEN Qt3DRender::Render::Parameter backendParameter; backendParameter.setRenderer(&renderer); - simulateInitialization(¶meter, &backendParameter); + simulateInitializationSync(¶meter, &backendParameter); // THEN QCOMPARE(backendParameter.isEnabled(), true); @@ -105,7 +105,7 @@ private Q_SLOTS: Qt3DRender::Render::Parameter backendParameter; backendParameter.setRenderer(&renderer); parameter.setEnabled(false); - simulateInitialization(¶meter, &backendParameter); + simulateInitializationSync(¶meter, &backendParameter); // THEN QCOMPARE(backendParameter.peerId(), parameter.id()); @@ -121,13 +121,14 @@ private Q_SLOTS: TestRenderer renderer; backendParameter.setRenderer(&renderer); + Qt3DRender::QParameter parameter; + simulateInitializationSync(¶meter, &backendParameter); + { // WHEN const bool newValue = false; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("enabled"); - change->setValue(newValue); - backendParameter.sceneChangeEvent(change); + parameter.setEnabled(newValue); + backendParameter.syncFromFrontEnd(¶meter, false); // THEN QCOMPARE(backendParameter.isEnabled(), newValue); @@ -137,10 +138,8 @@ private Q_SLOTS: { // WHEN const QString newValue = QStringLiteral("C7"); - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("name"); - change->setValue(QVariant::fromValue(newValue)); - backendParameter.sceneChangeEvent(change); + parameter.setName(newValue); + backendParameter.syncFromFrontEnd(¶meter, false); // THEN QCOMPARE(backendParameter.name(), newValue); @@ -152,10 +151,8 @@ private Q_SLOTS: // WHEN const QVariant value = QVariant::fromValue(QVector3D(350.0f, 427.0f, 454.0f)); const Qt3DRender::Render::UniformValue newValue = Qt3DRender::Render::UniformValue::fromVariant(value); - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("value"); - change->setValue(value); - backendParameter.sceneChangeEvent(change); + parameter.setValue(value); + backendParameter.syncFromFrontEnd(¶meter, false); // THEN QCOMPARE(backendParameter.uniformValue(), newValue); |