diff options
-rw-r--r-- | src/render/geometry/geometry.cpp | 32 | ||||
-rw-r--r-- | src/render/geometry/qgeometry.cpp | 12 | ||||
-rw-r--r-- | tests/auto/render/geometry/tst_geometry.cpp | 18 | ||||
-rw-r--r-- | tests/auto/render/qgeometry/tst_qgeometry.cpp | 20 |
4 files changed, 41 insertions, 41 deletions
diff --git a/src/render/geometry/geometry.cpp b/src/render/geometry/geometry.cpp index 612e4f4e9..5f1b73760 100644 --- a/src/render/geometry/geometry.cpp +++ b/src/render/geometry/geometry.cpp @@ -38,10 +38,12 @@ ****************************************************************************/ #include "geometry_p.h" -#include <Qt3DCore/qnodepropertychange.h> #include <Qt3DRender/qattribute.h> #include <Qt3DRender/qgeometry.h> #include <Qt3DRender/private/qgeometry_p.h> +#include <Qt3DCore/qnodepropertychange.h> +#include <Qt3DCore/qnodeaddedpropertychange.h> +#include <Qt3DCore/qnoderemovedpropertychange.h> QT_BEGIN_NAMESPACE @@ -92,38 +94,30 @@ void Geometry::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &cha void Geometry::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) { - switch (e->type()) { case NodeAdded: { - QNodePropertyChangePtr propertyChange = qSharedPointerCast<QNodePropertyChange>(e); - QByteArray propertyName = propertyChange->propertyName(); - - if (propertyName == QByteArrayLiteral("attribute")) { - m_attributes.push_back(propertyChange->value().value<QNodeId>()); + const auto change = qSharedPointerCast<QNodeAddedPropertyChange>(e); + if (change->propertyName() == QByteArrayLiteral("attribute")) { + m_attributes.push_back(change->addedNodeId()); m_geometryDirty = true; } break; } case NodeRemoved: { - QNodePropertyChangePtr propertyChange = qSharedPointerCast<QNodePropertyChange>(e); - QByteArray propertyName = propertyChange->propertyName(); - - if (propertyName == QByteArrayLiteral("attribute")) { - m_attributes.removeOne(propertyChange->value().value<QNodeId>()); + const auto change = qSharedPointerCast<QNodeRemovedPropertyChange>(e); + if (change->propertyName() == QByteArrayLiteral("attribute")) { + m_attributes.removeOne(change->removedNodeId()); m_geometryDirty = true; } break; } case NodeUpdated: { - // Note: doesn't set dirtyness as this parameter changing doesn't need - // a new VAO update. - QNodePropertyChangePtr propertyChange = qSharedPointerCast<QNodePropertyChange>(e); - QByteArray propertyName = propertyChange->propertyName(); - - if (propertyName == QByteArrayLiteral("boundingVolumePositionAttribute")) { - m_boundingPositionAttribute = propertyChange->value().value<QNodeId>(); + // Note: doesn't set dirtyness as this parameter changing doesn't need a new VAO update. + const auto change = qSharedPointerCast<QNodePropertyChange>(e); + if (change->propertyName() == QByteArrayLiteral("boundingVolumePositionAttribute")) { + m_boundingPositionAttribute = change->value().value<QNodeId>(); break; } } diff --git a/src/render/geometry/qgeometry.cpp b/src/render/geometry/qgeometry.cpp index 834d961ba..5399517e5 100644 --- a/src/render/geometry/qgeometry.cpp +++ b/src/render/geometry/qgeometry.cpp @@ -40,8 +40,10 @@ #include "qgeometry.h" #include "qgeometry_p.h" #include <private/qnode_p.h> -#include <Qt3DCore/qnodepropertychange.h> #include <Qt3DRender/qattribute.h> +#include <Qt3DCore/qnodepropertychange.h> +#include <Qt3DCore/qnodeaddedpropertychange.h> +#include <Qt3DCore/qnoderemovedpropertychange.h> QT_BEGIN_NAMESPACE @@ -97,6 +99,7 @@ QGeometry::QGeometry(QGeometryPrivate &dd, QNode *parent) */ void QGeometry::addAttribute(QAttribute *attribute) { + Q_ASSERT(attribute); Q_D(QGeometry); if (!d->m_attributes.contains(attribute)) { d->m_attributes.append(attribute); @@ -109,9 +112,8 @@ void QGeometry::addAttribute(QAttribute *attribute) attribute->setParent(this); if (d->m_changeArbiter != Q_NULLPTR) { - QNodePropertyChangePtr change(new QNodePropertyChange(NodeAdded, QSceneChange::Node, id())); + const auto change = QNodeAddedPropertyChangePtr::create(id(), attribute->id()); change->setPropertyName("attribute"); - change->setValue(QVariant::fromValue(attribute->id())); d->notifyObservers(change); } } @@ -122,11 +124,11 @@ void QGeometry::addAttribute(QAttribute *attribute) */ void QGeometry::removeAttribute(QAttribute *attribute) { + Q_ASSERT(attribute); Q_D(QGeometry); if (d->m_changeArbiter != Q_NULLPTR) { - QNodePropertyChangePtr change(new QNodePropertyChange(NodeRemoved, QSceneChange::Node, id())); + const auto change = QNodeRemovedPropertyChangePtr::create(id(), attribute->id()); change->setPropertyName("attribute"); - change->setValue(QVariant::fromValue(attribute->id())); d->notifyObservers(change); } d->m_attributes.removeOne(attribute); diff --git a/tests/auto/render/geometry/tst_geometry.cpp b/tests/auto/render/geometry/tst_geometry.cpp index c1536b6c0..5188fc83b 100644 --- a/tests/auto/render/geometry/tst_geometry.cpp +++ b/tests/auto/render/geometry/tst_geometry.cpp @@ -31,6 +31,8 @@ #include <Qt3DRender/qgeometry.h> #include <Qt3DRender/qattribute.h> #include <Qt3DCore/qnodepropertychange.h> +#include <Qt3DCore/qnodeaddedpropertychange.h> +#include <Qt3DCore/qnoderemovedpropertychange.h> #include "testrenderer.h" class tst_RenderGeometry : public QObject @@ -111,10 +113,9 @@ private Q_SLOTS: Qt3DCore::QNodeId geometryId = Qt3DCore::QNodeId::createId(); // WHEN - Qt3DCore::QNodePropertyChangePtr updateChange(new Qt3DCore::QNodePropertyChange(Qt3DCore::NodeAdded, Qt3DCore::QSceneChange::Node, Qt3DCore::QNodeId())); - updateChange->setValue(QVariant::fromValue(geometryId)); - updateChange->setPropertyName("attribute"); - renderGeometry.sceneChangeEvent(updateChange); + const auto nodeAddedChange = Qt3DCore::QNodeAddedPropertyChangePtr::create(Qt3DCore::QNodeId(), geometryId); + nodeAddedChange->setPropertyName("attribute"); + renderGeometry.sceneChangeEvent(nodeAddedChange); // THEN QCOMPARE(renderGeometry.attributes().count(), 1); @@ -124,10 +125,9 @@ private Q_SLOTS: QVERIFY(!renderGeometry.isDirty()); // WHEN - updateChange.reset(new Qt3DCore::QNodePropertyChange(Qt3DCore::NodeRemoved, Qt3DCore::QSceneChange::Node, Qt3DCore::QNodeId())); - updateChange->setValue(QVariant::fromValue(geometryId)); - updateChange->setPropertyName("attribute"); - renderGeometry.sceneChangeEvent(updateChange); + const auto nodeRemovedChange = Qt3DCore::QNodeRemovedPropertyChangePtr::create(Qt3DCore::QNodeId(), geometryId); + nodeRemovedChange->setPropertyName("attribute"); + renderGeometry.sceneChangeEvent(nodeRemovedChange); // THEN QCOMPARE(renderGeometry.attributes().count(), 0); @@ -138,7 +138,7 @@ private Q_SLOTS: // WHEN const Qt3DCore::QNodeId boundingAttrId = Qt3DCore::QNodeId::createId(); - updateChange.reset(new Qt3DCore::QNodePropertyChange(Qt3DCore::NodeUpdated, Qt3DCore::QSceneChange::Node, Qt3DCore::QNodeId())); + Qt3DCore::QNodePropertyChangePtr updateChange(new Qt3DCore::QNodePropertyChange(Qt3DCore::NodeUpdated, Qt3DCore::QSceneChange::Node, Qt3DCore::QNodeId())); updateChange->setValue(QVariant::fromValue(boundingAttrId)); updateChange->setPropertyName("boundingVolumePositionAttribute"); renderGeometry.sceneChangeEvent(updateChange); diff --git a/tests/auto/render/qgeometry/tst_qgeometry.cpp b/tests/auto/render/qgeometry/tst_qgeometry.cpp index 72c3f4977..8dcc6f9df 100644 --- a/tests/auto/render/qgeometry/tst_qgeometry.cpp +++ b/tests/auto/render/qgeometry/tst_qgeometry.cpp @@ -34,6 +34,10 @@ #include <Qt3DRender/qattribute.h> #include <Qt3DRender/qbuffer.h> +#include <Qt3DCore/QNodePropertyChange> +#include <Qt3DCore/QNodeAddedPropertyChange> +#include <Qt3DCore/QNodeRemovedPropertyChange> + #include "testpostmanarbiter.h" // We need to call QNode::clone which is protected @@ -115,10 +119,10 @@ private Q_SLOTS: // THEN QCOMPARE(arbiter.events.size(), 1); - Qt3DCore::QNodePropertyChangePtr change = arbiter.events.first().staticCast<Qt3DCore::QNodePropertyChange>(); - QCOMPARE(change->propertyName(), "attribute"); - QCOMPARE(change->value().value<Qt3DCore::QNodeId>(), attr.id()); - QCOMPARE(change->type(), Qt3DCore::NodeAdded); + Qt3DCore::QNodeAddedPropertyChangePtr nodeAddedChange = arbiter.events.first().staticCast<Qt3DCore::QNodeAddedPropertyChange>(); + QCOMPARE(nodeAddedChange->propertyName(), "attribute"); + QCOMPARE(nodeAddedChange->addedNodeId(), attr.id()); + QCOMPARE(nodeAddedChange->type(), Qt3DCore::NodeAdded); arbiter.events.clear(); @@ -135,10 +139,10 @@ private Q_SLOTS: // THEN QCOMPARE(arbiter.events.size(), 1); - change = arbiter.events.first().staticCast<Qt3DCore::QNodePropertyChange>(); - QCOMPARE(change->propertyName(), "attribute"); - QCOMPARE(change->value().value<Qt3DCore::QNodeId>(), attr.id()); - QCOMPARE(change->type(), Qt3DCore::NodeRemoved); + Qt3DCore::QNodeRemovedPropertyChangePtr nodeRemovedChange = arbiter.events.first().staticCast<Qt3DCore::QNodeRemovedPropertyChange>(); + QCOMPARE(nodeRemovedChange->propertyName(), "attribute"); + QCOMPARE(nodeRemovedChange->removedNodeId(), attr.id()); + QCOMPARE(nodeRemovedChange->type(), Qt3DCore::NodeRemoved); arbiter.events.clear(); } |