summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2019-09-19 10:23:48 +0200
committerPaul Lemire <paul.lemire@kdab.com>2019-09-25 15:37:22 +0200
commit29dc5ced83b9d992ca533711d25ab31ebe984ee4 (patch)
tree22f7aa93d5246ab82ce935fdf8c361cd36a4abc7
parentc718f6c7c9354f897c210ba74a8d8887762648f3 (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.cpp2
-rw-r--r--src/render/materialsystem/filterkey.cpp28
-rw-r--r--src/render/materialsystem/filterkey_p.h4
-rw-r--r--tests/auto/render/filterkey/tst_filterkey.cpp44
-rw-r--r--tests/auto/render/technique/tst_technique.cpp17
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);