diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-09-19 10:23:48 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-09-25 15:37:22 +0200 |
commit | 29dc5ced83b9d992ca533711d25ab31ebe984ee4 (patch) | |
tree | 22f7aa93d5246ab82ce935fdf8c361cd36a4abc7 | |
parent | c718f6c7c9354f897c210ba74a8d8887762648f3 (diff) |
Update QFilterKey to use direct sync
Change-Id: Ibeaa98c6aeb3180a233fba0d65e62c3076802833
Reviewed-by: Mike Krus <mike.krus@kdab.com>
-rw-r--r-- | src/render/frontend/qrenderaspect.cpp | 2 | ||||
-rw-r--r-- | src/render/materialsystem/filterkey.cpp | 28 | ||||
-rw-r--r-- | src/render/materialsystem/filterkey_p.h | 4 | ||||
-rw-r--r-- | tests/auto/render/filterkey/tst_filterkey.cpp | 44 | ||||
-rw-r--r-- | tests/auto/render/technique/tst_technique.cpp | 17 |
5 files changed, 49 insertions, 46 deletions
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp index 03d3038fe..ec8664e2b 100644 --- a/src/render/frontend/qrenderaspect.cpp +++ b/src/render/frontend/qrenderaspect.cpp @@ -282,7 +282,7 @@ void QRenderAspectPrivate::registerBackendTypes() // Material system q->registerBackendType<QEffect, true>(QSharedPointer<Render::NodeFunctor<Render::Effect, Render::EffectManager> >::create(m_renderer)); - q->registerBackendType<QFilterKey>(QSharedPointer<Render::NodeFunctor<Render::FilterKey, Render::FilterKeyManager> >::create(m_renderer)); + q->registerBackendType<QFilterKey, true>(QSharedPointer<Render::NodeFunctor<Render::FilterKey, Render::FilterKeyManager> >::create(m_renderer)); 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)); diff --git a/src/render/materialsystem/filterkey.cpp b/src/render/materialsystem/filterkey.cpp index 167413451..d51a06eec 100644 --- a/src/render/materialsystem/filterkey.cpp +++ b/src/render/materialsystem/filterkey.cpp @@ -65,31 +65,23 @@ void FilterKey::cleanup() m_value.clear(); } -void FilterKey::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) +void FilterKey::syncFromFrontEnd(const QNode *frontEnd, bool firstTime) { - const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QFilterKeyData>>(change); - const auto &data = typedChange->data; - m_name = data.name; - m_value = data.value; -} + const QFilterKey *node = qobject_cast<const QFilterKey *>(frontEnd); + if (!node) + return; -void FilterKey::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) -{ - switch (e->type()) { - case PropertyUpdated: { - QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<QPropertyUpdatedChange>(e); - if (propertyChange->propertyName() == QByteArrayLiteral("value")) - m_value = propertyChange->value(); - else if (propertyChange->propertyName() == QByteArrayLiteral("name")) - m_name = propertyChange->value().toString(); + BackendNode::syncFromFrontEnd(frontEnd, firstTime); + if (node->name() != m_name) { + m_name = node->name(); markDirty(AbstractRenderer::AllDirty); } - default: - break; + if (node->value() != m_value) { + m_value = node->value(); + markDirty(AbstractRenderer::AllDirty); } - BackendNode::sceneChangeEvent(e); } bool FilterKey::operator ==(const FilterKey &other) diff --git a/src/render/materialsystem/filterkey_p.h b/src/render/materialsystem/filterkey_p.h index 69d298503..f4fb2c3d0 100644 --- a/src/render/materialsystem/filterkey_p.h +++ b/src/render/materialsystem/filterkey_p.h @@ -71,13 +71,11 @@ public: const QVariant &value() const { return m_value; } const QString &name() const { return m_name; } - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override; + void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; bool operator ==(const FilterKey &other); bool operator !=(const FilterKey &other); private: - void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final; - QVariant m_value; QString m_name; }; diff --git a/tests/auto/render/filterkey/tst_filterkey.cpp b/tests/auto/render/filterkey/tst_filterkey.cpp index 15d07d65f..c998cc603 100644 --- a/tests/auto/render/filterkey/tst_filterkey.cpp +++ b/tests/auto/render/filterkey/tst_filterkey.cpp @@ -56,16 +56,18 @@ private Q_SLOTS: void checkCleanupState() { // GIVEN + TestRenderer renderer; Qt3DRender::Render::FilterKey backendFilterKey; // WHEN + backendFilterKey.setRenderer(&renderer); backendFilterKey.setEnabled(true); { Qt3DRender::QFilterKey filterKey; filterKey.setName(QStringLiteral("Tim")); filterKey.setValue(QVariant(QStringLiteral("McGraw"))); - simulateInitialization(&filterKey, &backendFilterKey); + simulateInitializationSync(&filterKey, &backendFilterKey); } backendFilterKey.cleanup(); @@ -79,6 +81,7 @@ private Q_SLOTS: void checkInitializeFromPeer() { // GIVEN + TestRenderer renderer; Qt3DRender::QFilterKey filterKey; filterKey.setName(QStringLiteral("Dallas")); filterKey.setValue(QVariant(QStringLiteral("Smith"))); @@ -86,7 +89,8 @@ private Q_SLOTS: { // WHEN Qt3DRender::Render::FilterKey backendFilterKey; - simulateInitialization(&filterKey, &backendFilterKey); + backendFilterKey.setRenderer(&renderer); + simulateInitializationSync(&filterKey, &backendFilterKey); // THEN QCOMPARE(backendFilterKey.isEnabled(), true); @@ -97,8 +101,9 @@ private Q_SLOTS: { // WHEN Qt3DRender::Render::FilterKey backendFilterKey; + backendFilterKey.setRenderer(&renderer); filterKey.setEnabled(false); - simulateInitialization(&filterKey, &backendFilterKey); + simulateInitializationSync(&filterKey, &backendFilterKey); // THEN QCOMPARE(backendFilterKey.peerId(), filterKey.id()); @@ -110,16 +115,16 @@ private Q_SLOTS: { // GIVEN Qt3DRender::Render::FilterKey backendFilterKey; + Qt3DRender::QFilterKey frontend; TestRenderer renderer; backendFilterKey.setRenderer(&renderer); + simulateInitializationSync(&frontend, &backendFilterKey); { // WHEN const bool newValue = false; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("enabled"); - change->setValue(newValue); - backendFilterKey.sceneChangeEvent(change); + frontend.setEnabled(newValue); + backendFilterKey.syncFromFrontEnd(&frontend, false); // THEN QCOMPARE(backendFilterKey.isEnabled(), newValue); @@ -127,10 +132,8 @@ private Q_SLOTS: { // WHEN const QVariant newValue(383.0f); - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("value"); - change->setValue(QVariant::fromValue(newValue)); - backendFilterKey.sceneChangeEvent(change); + frontend.setValue(newValue); + backendFilterKey.syncFromFrontEnd(&frontend, false); // THEN QCOMPARE(backendFilterKey.value(), newValue); @@ -138,10 +141,8 @@ private Q_SLOTS: { // WHEN const QString newValue = QStringLiteral("Alan"); - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("name"); - change->setValue(QVariant::fromValue(newValue)); - backendFilterKey.sceneChangeEvent(change); + frontend.setName(newValue); + backendFilterKey.syncFromFrontEnd(&frontend, false); // THEN QCOMPARE(backendFilterKey.name(), newValue); @@ -151,10 +152,15 @@ private Q_SLOTS: void checkComparison() { // GIVEN + TestRenderer renderer; Qt3DRender::Render::FilterKey backendFilterKey1; Qt3DRender::Render::FilterKey backendFilterKey2; Qt3DRender::Render::FilterKey backendFilterKey3; Qt3DRender::Render::FilterKey backendFilterKey4; + backendFilterKey1.setRenderer(&renderer); + backendFilterKey2.setRenderer(&renderer); + backendFilterKey3.setRenderer(&renderer); + backendFilterKey4.setRenderer(&renderer); // WHEN { @@ -162,20 +168,20 @@ private Q_SLOTS: filterKey1.setName(QStringLiteral("Dallas")); filterKey1.setValue(QVariant(QStringLiteral("Smith"))); - simulateInitialization(&filterKey1, &backendFilterKey1); - simulateInitialization(&filterKey1, &backendFilterKey4); + simulateInitializationSync(&filterKey1, &backendFilterKey1); + simulateInitializationSync(&filterKey1, &backendFilterKey4); Qt3DRender::QFilterKey filterKey2; filterKey2.setName(QStringLiteral("Tim")); filterKey2.setValue(QVariant(QStringLiteral("Smith"))); - simulateInitialization(&filterKey2, &backendFilterKey2); + simulateInitializationSync(&filterKey2, &backendFilterKey2); Qt3DRender::QFilterKey filterKey3; filterKey3.setName(QStringLiteral("Dallas")); filterKey3.setValue(QVariant(QStringLiteral("McGraw"))); - simulateInitialization(&filterKey3, &backendFilterKey3); + simulateInitializationSync(&filterKey3, &backendFilterKey3); } // THEN diff --git a/tests/auto/render/technique/tst_technique.cpp b/tests/auto/render/technique/tst_technique.cpp index 64a66f0c8..2ed39e315 100644 --- a/tests/auto/render/technique/tst_technique.cpp +++ b/tests/auto/render/technique/tst_technique.cpp @@ -308,6 +308,7 @@ private Q_SLOTS: void checkIsCompatibleWithFilters() { // GIVEN + TestRenderer renderer; Qt3DRender::Render::Technique backendTechnique; Qt3DRender::Render::NodeManagers nodeManagers; @@ -339,11 +340,17 @@ private Q_SLOTS: Qt3DRender::Render::FilterKey *backendFilterKey4 = nodeManagers.filterKeyManager()->getOrCreateResource(filterKey4->id()); Qt3DRender::Render::FilterKey *backendFilterKey5 = nodeManagers.filterKeyManager()->getOrCreateResource(filterKey5->id()); - simulateInitialization(filterKey1, backendFilterKey1); - simulateInitialization(filterKey2, backendFilterKey2); - simulateInitialization(filterKey3, backendFilterKey3); - simulateInitialization(filterKey4, backendFilterKey4); - simulateInitialization(filterKey5, backendFilterKey5); + backendFilterKey1->setRenderer(&renderer); + backendFilterKey2->setRenderer(&renderer); + backendFilterKey3->setRenderer(&renderer); + backendFilterKey4->setRenderer(&renderer); + backendFilterKey5->setRenderer(&renderer); + + simulateInitializationSync(filterKey1, backendFilterKey1); + simulateInitializationSync(filterKey2, backendFilterKey2); + simulateInitializationSync(filterKey3, backendFilterKey3); + simulateInitializationSync(filterKey4, backendFilterKey4); + simulateInitializationSync(filterKey5, backendFilterKey5); // THEN QCOMPARE(nodeManagers.filterKeyManager()->activeHandles().size(), 5); |