summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/render/geometry/geometry.cpp32
-rw-r--r--src/render/geometry/qgeometry.cpp12
-rw-r--r--tests/auto/render/geometry/tst_geometry.cpp18
-rw-r--r--tests/auto/render/qgeometry/tst_qgeometry.cpp20
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();
}