diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-02-25 15:38:42 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-02-28 16:28:54 +0000 |
commit | 66fc1e35db664ecaf0b37c855eea7391c0576773 (patch) | |
tree | cb805d9a294c40fb9a08cc985ee41366e962f20e /src | |
parent | 653ff3d4d5f992b64c4949e9741f4213a81a9f42 (diff) |
ChangeArbiter/SceneChange: use id as change subject
Instead of having a QNode* or QObservable as the subject of a change, we use
it's unique NodeId instead. That will prevent the ChangeArbiter from trying to
distribute changes by looking at a QNode/QObservable id when the
QNode/QObservable might have been destroyed in the meantime.
Change-Id: Ia419d5b841434fd65522c8c65de552089cfe97cf
Task-number: QTBUG-44628
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
25 files changed, 81 insertions, 124 deletions
diff --git a/src/core/nodes/qcomponent.cpp b/src/core/nodes/qcomponent.cpp index a05b9980b..2827db9f9 100644 --- a/src/core/nodes/qcomponent.cpp +++ b/src/core/nodes/qcomponent.cpp @@ -59,7 +59,7 @@ void QComponentPrivate::addEntity(QEntity *entity) // We notify only if we have a QChangeArbiter if (m_changeArbiter != Q_NULLPTR) { Q_Q(QComponent); - QScenePropertyChangePtr e(new QScenePropertyChange(ComponentAdded, q)); + QScenePropertyChangePtr e(new QScenePropertyChange(ComponentAdded, QSceneChange::Node, q->id())); e->setPropertyName("entity"); e->setValue(QVariant::fromValue(entity->id())); notifyObservers(e); @@ -71,7 +71,7 @@ void QComponentPrivate::removeEntity(QEntity *entity) // We notify only if we have a QChangeArbiter if (m_changeArbiter != Q_NULLPTR) { Q_Q(QComponent); - QScenePropertyChangePtr e(new QScenePropertyChange(ComponentRemoved, q)); + QScenePropertyChangePtr e(new QScenePropertyChange(ComponentRemoved, QSceneChange::Node, q->id())); e->setPropertyName("entity"); e->setValue(QVariant::fromValue(entity->id())); notifyObservers(e); diff --git a/src/core/nodes/qentity.cpp b/src/core/nodes/qentity.cpp index a0f980b5a..0e8c596d0 100644 --- a/src/core/nodes/qentity.cpp +++ b/src/core/nodes/qentity.cpp @@ -117,7 +117,7 @@ void QEntity::addComponent(QComponent *comp) // Sending a full fledged component in the notification as we'll need // to know which type of component it was and its properties to create // the backend object - QScenePropertyChangePtr propertyChange(new QScenePropertyChange(ComponentAdded, this)); + QScenePropertyChangePtr propertyChange(new QScenePropertyChange(ComponentAdded, QSceneChange::Node, id())); propertyChange->setPropertyName("component"); propertyChange->setValue(QVariant::fromValue(QNodePtr(QNode::clone(comp), &QNodePrivate::nodePtrDeleter))); d->notifyObservers(propertyChange); @@ -137,7 +137,7 @@ void QEntity::removeComponent(QComponent *comp) // Sending just the component id as it is the only part needed to // cleanup the backend object. This way we avoid a clone which might // fail in the case of large scenes. - QScenePropertyChangePtr propertyChange(new QScenePropertyChange(ComponentRemoved, this)); + QScenePropertyChangePtr propertyChange(new QScenePropertyChange(ComponentRemoved, QSceneChange::Node, id())); propertyChange->setValue(QVariant::fromValue(comp->id())); propertyChange->setPropertyName("componentId"); d->notifyObservers(propertyChange); diff --git a/src/core/nodes/qnode.cpp b/src/core/nodes/qnode.cpp index c4b6088e6..4de2f85a5 100644 --- a/src/core/nodes/qnode.cpp +++ b/src/core/nodes/qnode.cpp @@ -82,8 +82,7 @@ void QNodePrivate::addChild(QNode *childNode) // We notify only if we have a QChangeArbiter if (m_changeArbiter != Q_NULLPTR) { - Q_Q(QNode); - QScenePropertyChangePtr e(new QScenePropertyChange(NodeCreated, q)); + QScenePropertyChangePtr e(new QScenePropertyChange(NodeCreated, QSceneChange::Node, m_id)); e->setPropertyName("node"); // We need to clone the parent of the childNode we send QNode *parentClone = QNode::clone(q_func()); @@ -109,8 +108,7 @@ void QNodePrivate::removeChild(QNode *childNode) // Notify only if child isn't a clone if (m_changeArbiter != Q_NULLPTR) { - Q_Q(QNode); - QScenePropertyChangePtr e(new QScenePropertyChange(NodeAboutToBeDeleted, q)); + QScenePropertyChangePtr e(new QScenePropertyChange(NodeAboutToBeDeleted, QSceneChange::Node, m_id)); e->setPropertyName("node"); // We need to clone the parent of the childNode we send // QNode *parentClone = QNode::clone(childNode->parentNode()); @@ -229,8 +227,7 @@ void QNodePrivate::notifyPropertyChange(const char *name, const QVariant &value) if (m_blockNotifications) return; - Q_Q(QNode); - QScenePropertyChangePtr e(new QScenePropertyChange(NodeUpdated, q)); + QScenePropertyChangePtr e(new QScenePropertyChange(NodeUpdated, QSceneChange::Node, m_id)); e->setPropertyName(name); e->setValue(value); notifyObservers(e); diff --git a/src/core/qbackendscenepropertychange.cpp b/src/core/qbackendscenepropertychange.cpp index cdbce641a..7d33414f7 100644 --- a/src/core/qbackendscenepropertychange.cpp +++ b/src/core/qbackendscenepropertychange.cpp @@ -52,8 +52,8 @@ QBackendScenePropertyChangePrivate::~QBackendScenePropertyChangePrivate() { } -QBackendScenePropertyChange::QBackendScenePropertyChange(ChangeFlag type, QBackendNode *subject, QSceneChange::Priority priority) - : QScenePropertyChange(*new QBackendScenePropertyChangePrivate(this), type, subject->d_func(), priority) +QBackendScenePropertyChange::QBackendScenePropertyChange(ChangeFlag type, const QNodeId &subjectId, QSceneChange::Priority priority) + : QScenePropertyChange(*new QBackendScenePropertyChangePrivate(this), type, Observable, subjectId, priority) { } @@ -61,6 +61,7 @@ QBackendScenePropertyChange::~QBackendScenePropertyChange() { } +// TO DO get rid off setTargetNode, use the subject instead ?? void QBackendScenePropertyChange::setTargetNode(const QNodeId &id) { Q_D(QBackendScenePropertyChange); @@ -78,8 +79,8 @@ QBackendScenePropertyChange::QBackendScenePropertyChange(QBackendScenePropertyCh { } -QBackendScenePropertyChange::QBackendScenePropertyChange(QBackendScenePropertyChangePrivate &dd, ChangeFlag type, QBackendNode *subject, QSceneChange::Priority priority) - : QScenePropertyChange(dd, type, subject->d_func(), priority) +QBackendScenePropertyChange::QBackendScenePropertyChange(QBackendScenePropertyChangePrivate &dd, ChangeFlag type, const QNodeId &subjectId, QSceneChange::Priority priority) + : QScenePropertyChange(dd, type, Observable, subjectId, priority) { } diff --git a/src/core/qbackendscenepropertychange.h b/src/core/qbackendscenepropertychange.h index 8f26f9627..382418500 100644 --- a/src/core/qbackendscenepropertychange.h +++ b/src/core/qbackendscenepropertychange.h @@ -50,7 +50,7 @@ class QBackendNode; class QT3DCORESHARED_EXPORT QBackendScenePropertyChange : public QScenePropertyChange { public: - QBackendScenePropertyChange(ChangeFlag type, QBackendNode *subject, + QBackendScenePropertyChange(ChangeFlag type, const QNodeId &subjectId, Priority priority = Standard); virtual ~QBackendScenePropertyChange(); @@ -60,8 +60,7 @@ public: protected: Q_DECLARE_PRIVATE(QBackendScenePropertyChange) QBackendScenePropertyChange(QBackendScenePropertyChangePrivate &dd); - QBackendScenePropertyChange(QBackendScenePropertyChangePrivate &dd, ChangeFlag type, - QBackendNode *subject, Priority priority = Standard); + QBackendScenePropertyChange(QBackendScenePropertyChangePrivate &dd, ChangeFlag type, const QNodeId &subjectId, Priority priority = Standard); }; typedef QSharedPointer<QBackendScenePropertyChange> QBackendScenePropertyChangePtr; diff --git a/src/core/qchangearbiter.cpp b/src/core/qchangearbiter.cpp index 86ddc7d72..1d111d642 100644 --- a/src/core/qchangearbiter.cpp +++ b/src/core/qchangearbiter.cpp @@ -124,8 +124,7 @@ void QChangeArbiter::distributeQueueChanges(QChangeQueue *changeQueue) switch (change->observableType()) { case QSceneChange::Observable: { - QObservableInterface *subject = change->subject().m_observable; - QNodeId nodeId = m_scene->nodeIdFromObservable(subject); + const QNodeId nodeId = change->subjectId(); if (m_nodeObservations.contains(nodeId)) { QObserverList &observers = m_nodeObservations[nodeId]; Q_FOREACH (const QObserverPair&observer, observers) { @@ -139,9 +138,9 @@ void QChangeArbiter::distributeQueueChanges(QChangeQueue *changeQueue) } case QSceneChange::Node: { - QNode *subject = change->subject().m_node; - if (m_nodeObservations.contains(subject->id())) { - QObserverList &observers = m_nodeObservations[subject->id()]; + const QNodeId nodeId = change->subjectId(); + if (m_nodeObservations.contains(nodeId)) { + QObserverList &observers = m_nodeObservations[nodeId]; Q_FOREACH (const QObserverPair&observer, observers) { if ((change->type() & observer.first)) observer.second->sceneChangeEvent(change); diff --git a/src/core/qscenechange.cpp b/src/core/qscenechange.cpp index c5bb1622d..20218f04c 100644 --- a/src/core/qscenechange.cpp +++ b/src/core/qscenechange.cpp @@ -67,26 +67,15 @@ QSceneChangePrivate::~QSceneChangePrivate() { } -QSceneChange::QSceneChange(ChangeFlag type, QObservableInterface *observable, QSceneChange::Priority priority) +QSceneChange::QSceneChange(ChangeFlag type, ObservableType observableType, const QNodeId &subjectId, QSceneChange::Priority priority) : d_ptr(new QSceneChangePrivate(this)) { Q_D(QSceneChange); d->m_type = type; d->m_priority = priority; d->m_timestamp = QDateTime::currentMSecsSinceEpoch(); - d->m_subject.m_observable = observable; - d->m_subjectType = Observable; -} - -QSceneChange::QSceneChange(ChangeFlag type, QNode *node, QSceneChange::Priority priority) - : d_ptr(new QSceneChangePrivate(this)) -{ - Q_D(QSceneChange); - d->m_type = type; - d->m_priority = priority; - d->m_timestamp = QDateTime::currentMSecsSinceEpoch(); - d->m_subject.m_node = node; - d->m_subjectType = Node; + d->m_subjectId = subjectId; + d->m_subjectType = observableType; } QSceneChange::~QSceneChange() @@ -99,26 +88,15 @@ QSceneChange::QSceneChange(QSceneChangePrivate &dd) { } -QSceneChange::QSceneChange(QSceneChangePrivate &dd, ChangeFlag type, QObservableInterface *observable, QSceneChange::Priority priority) - : d_ptr(&dd) -{ - Q_D(QSceneChange); - d->m_type = type; - d->m_priority = priority; - d->m_timestamp = QDateTime::currentMSecsSinceEpoch(); - d->m_subject.m_observable = observable; - d->m_subjectType = Observable; -} - -QSceneChange::QSceneChange(QSceneChangePrivate &dd, ChangeFlag type, QNode *node, QSceneChange::Priority priority) +QSceneChange::QSceneChange(QSceneChangePrivate &dd, ChangeFlag type, ObservableType observableType, const QNodeId &subjectId, QSceneChange::Priority priority) : d_ptr(&dd) { Q_D(QSceneChange); d->m_type = type; d->m_priority = priority; d->m_timestamp = QDateTime::currentMSecsSinceEpoch(); - d->m_subject.m_node = node; - d->m_subjectType = Node; + d->m_subjectId = subjectId; + d->m_subjectType = observableType; } ChangeFlag QSceneChange::type() const @@ -145,10 +123,10 @@ QSceneChange::ObservableType QSceneChange::observableType() const return d->m_subjectType; } -QSceneChange::SubjectUnion QSceneChange::subject() const +QNodeId QSceneChange::subjectId() const { Q_D(const QSceneChange); - return d->m_subject; + return d->m_subjectId; } } // Qt3D diff --git a/src/core/qscenechange.h b/src/core/qscenechange.h index f52871b67..3c22638d3 100644 --- a/src/core/qscenechange.h +++ b/src/core/qscenechange.h @@ -39,6 +39,7 @@ #include <Qt3DCore/qt3dcore_global.h> #include <QSharedPointer> +#include <Qt3DCore/qnodeid.h> QT_BEGIN_NAMESPACE @@ -76,27 +77,20 @@ public: Node }; - union SubjectUnion { - QObservableInterface *m_observable; - QNode *m_node; - }; - - QSceneChange(ChangeFlag type, QObservableInterface *observable, Priority priority = Standard); - QSceneChange(ChangeFlag type, QNode *node, Priority priority = Standard); + QSceneChange(ChangeFlag type, ObservableType observableType, const QNodeId &subjectId, Priority priority = Standard); virtual ~QSceneChange(); ChangeFlag type() const; qint64 timestamp() const; QSceneChange::Priority priority() const; QSceneChange::ObservableType observableType() const; - QSceneChange::SubjectUnion subject() const; + QNodeId subjectId() const; protected: Q_DECLARE_PRIVATE(QSceneChange) QSceneChangePrivate *d_ptr; QSceneChange(QSceneChangePrivate &dd); - QSceneChange(QSceneChangePrivate &dd, ChangeFlag type, QObservableInterface *observable, Priority priority = Standard); - QSceneChange(QSceneChangePrivate &dd, ChangeFlag type, QNode *node, Priority priority = Standard); + QSceneChange(QSceneChangePrivate &dd, ChangeFlag type, ObservableType observableType, const QNodeId &subjectId, Priority priority = Standard); // TODO: add timestamp from central clock and priority level // These can be used to resolve any conflicts between events diff --git a/src/core/qscenechange_p.h b/src/core/qscenechange_p.h index 40748e444..b903b1035 100644 --- a/src/core/qscenechange_p.h +++ b/src/core/qscenechange_p.h @@ -44,6 +44,7 @@ QT_BEGIN_NAMESPACE namespace Qt3D { class QSceneChange; +class QNodeId; class QSceneChangePrivate { @@ -55,7 +56,7 @@ public : QSceneChange *q_ptr; - QSceneChange::SubjectUnion m_subject; + QNodeId m_subjectId; QSceneChange::ObservableType m_subjectType; ChangeFlag m_type; QSceneChange::Priority m_priority; diff --git a/src/core/qscenepropertychange.cpp b/src/core/qscenepropertychange.cpp index 14144b157..9daac1bd0 100644 --- a/src/core/qscenepropertychange.cpp +++ b/src/core/qscenepropertychange.cpp @@ -67,8 +67,8 @@ void QScenePropertyChangePrivate::operator delete(void *ptr, size_t size) QScenePropertyChangePrivate::m_allocator->deallocateRawMemory(ptr, size); } -QScenePropertyChange::QScenePropertyChange(ChangeFlag type, QObservableInterface *subject, QSceneChange::Priority priority) - : QSceneChange(*new QScenePropertyChangePrivate(this), type, subject, priority) +QScenePropertyChange::QScenePropertyChange(ChangeFlag type, ObservableType observableType, const QNodeId &subjectId, QSceneChange::Priority priority) + : QSceneChange(*new QScenePropertyChangePrivate(this), type, observableType, subjectId, priority) { } @@ -77,8 +77,8 @@ QScenePropertyChange::QScenePropertyChange(QScenePropertyChangePrivate &dd) { } -QScenePropertyChange::QScenePropertyChange(ChangeFlag type, QNode *node, QSceneChange::Priority priority) - : QSceneChange(*new QScenePropertyChangePrivate(this), type, node, priority) +QScenePropertyChange::QScenePropertyChange(QScenePropertyChangePrivate &dd, ChangeFlag type, ObservableType observableType, const QNodeId &subjectId, QSceneChange::Priority priority) + : QSceneChange(dd, type, observableType, subjectId, priority) { } @@ -86,16 +86,6 @@ QScenePropertyChange::~QScenePropertyChange() { } -QScenePropertyChange::QScenePropertyChange(QScenePropertyChangePrivate &dd, ChangeFlag type, QObservableInterface *subject, QSceneChange::Priority priority) - : QSceneChange(dd, type, subject, priority) -{ -} - -QScenePropertyChange::QScenePropertyChange(QScenePropertyChangePrivate &dd, ChangeFlag type, QNode *node, QSceneChange::Priority priority) - : QSceneChange(dd, type, node, priority) -{ -} - const char *QScenePropertyChange::propertyName() const { Q_D(const QScenePropertyChange); diff --git a/src/core/qscenepropertychange.h b/src/core/qscenepropertychange.h index 8e1363b9c..dcedf20a5 100644 --- a/src/core/qscenepropertychange.h +++ b/src/core/qscenepropertychange.h @@ -48,7 +48,7 @@ class QScenePropertyChangePrivate; class QT3DCORESHARED_EXPORT QScenePropertyChange : public QSceneChange { public: - QScenePropertyChange(ChangeFlag type, QNode *node, Priority priority = Standard); + QScenePropertyChange(ChangeFlag type, ObservableType observableType, const QNodeId &subjectId, Priority priority = Standard); virtual ~QScenePropertyChange(); const char *propertyName() const; @@ -62,10 +62,8 @@ public: protected: Q_DECLARE_PRIVATE(QScenePropertyChange) - QScenePropertyChange(ChangeFlag type, QObservableInterface *subject, Priority priority = Standard); QScenePropertyChange(QScenePropertyChangePrivate &dd); - QScenePropertyChange(QScenePropertyChangePrivate &dd, ChangeFlag type, QObservableInterface *subject, Priority priority = Standard); - QScenePropertyChange(QScenePropertyChangePrivate &dd, ChangeFlag type, QNode *node, Priority priority = Standard); + QScenePropertyChange(QScenePropertyChangePrivate &dd, ChangeFlag type, ObservableType observableType, const QNodeId &subjectId, Priority priority = Standard); }; typedef QSharedPointer<QScenePropertyChange> QScenePropertyChangePtr; diff --git a/src/input/keyboardinput.cpp b/src/input/keyboardinput.cpp index 23edf1a89..1f0b80e5d 100644 --- a/src/input/keyboardinput.cpp +++ b/src/input/keyboardinput.cpp @@ -83,7 +83,7 @@ void KeyboardInput::setFocus(bool focus) { if (focus != m_focus) { m_focus = focus; - QBackendScenePropertyChangePtr e(new QBackendScenePropertyChange(NodeUpdated, this)); + QBackendScenePropertyChangePtr e(new QBackendScenePropertyChange(NodeUpdated, peerUuid())); e->setTargetNode(peerUuid()); e->setPropertyName("focus"); e->setValue(m_focus); @@ -93,7 +93,7 @@ void KeyboardInput::setFocus(bool focus) void KeyboardInput::keyEvent(const Q3DKeyEventPtr &event) { - QBackendScenePropertyChangePtr e(new QBackendScenePropertyChange(NodeUpdated, this)); + QBackendScenePropertyChangePtr e(new QBackendScenePropertyChange(NodeUpdated, peerUuid())); e->setTargetNode(peerUuid()); e->setPropertyName("event"); e->setValue(QVariant::fromValue(event)); diff --git a/src/render/backend/renderscene.cpp b/src/render/backend/renderscene.cpp index cf2ebb718..d653b80ae 100644 --- a/src/render/backend/renderscene.cpp +++ b/src/render/backend/renderscene.cpp @@ -78,14 +78,14 @@ QUrl RenderScene::source() const void RenderScene::setSceneSubtree(QEntity *subTree) { - QBackendScenePropertyChangePtr e(new QBackendScenePropertyChange(NodeUpdated, this)); + QBackendScenePropertyChangePtr e(new QBackendScenePropertyChange(NodeUpdated, peerUuid())); e->setPropertyName("scene"); // The Frontend element has to perform the clone // So that the objects are created in the main thread e->setValue(QVariant::fromValue(subTree)); e->setTargetNode(peerUuid()); notifyObservers(e); - QBackendScenePropertyChangePtr e2(new QBackendScenePropertyChange(NodeUpdated, this)); + QBackendScenePropertyChangePtr e2(new QBackendScenePropertyChange(NodeUpdated, peerUuid())); e2->setPropertyName("status"); e2->setValue(subTree != Q_NULLPTR ? QAbstractSceneLoader::Loaded : QAbstractSceneLoader::Error); e2->setTargetNode(peerUuid()); diff --git a/src/render/frontend/framegraph-components/qrenderpassfilter.cpp b/src/render/frontend/framegraph-components/qrenderpassfilter.cpp index 5e50706d2..5f22b90f2 100644 --- a/src/render/frontend/framegraph-components/qrenderpassfilter.cpp +++ b/src/render/frontend/framegraph-components/qrenderpassfilter.cpp @@ -73,7 +73,7 @@ void QRenderPassFilter::addInclude(QAnnotation *annotation) annotation->setParent(this); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr propertyChange(new QScenePropertyChange(NodeAdded, this)); + QScenePropertyChangePtr propertyChange(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); propertyChange->setPropertyName("include"); propertyChange->setValue(QVariant::fromValue(annotation)); d->notifyObservers(propertyChange); @@ -85,7 +85,7 @@ void QRenderPassFilter::removeInclude(QAnnotation *annotation) { Q_D(QRenderPassFilter); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr propertyChange(new QScenePropertyChange(NodeRemoved, this)); + QScenePropertyChangePtr propertyChange(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); propertyChange->setPropertyName("include"); propertyChange->setValue(QVariant::fromValue(annotation)); d->notifyObservers(propertyChange); diff --git a/src/render/frontend/framegraph-components/qsortmethod.cpp b/src/render/frontend/framegraph-components/qsortmethod.cpp index 04eb3b3ce..08725b6f6 100644 --- a/src/render/frontend/framegraph-components/qsortmethod.cpp +++ b/src/render/frontend/framegraph-components/qsortmethod.cpp @@ -77,7 +77,7 @@ void QSortMethod::addCriterion(QSortCriterion *criterion) criterion->setParent(this); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr propertyChange(new QScenePropertyChange(NodeAdded, this)); + QScenePropertyChangePtr propertyChange(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); propertyChange->setPropertyName("sortCriterion"); propertyChange->setValue(QVariant::fromValue(criterion)); d->notifyObservers(propertyChange); @@ -89,7 +89,7 @@ void QSortMethod::removeCriterion(QSortCriterion *criterion) { Q_D(QSortMethod); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr propertyChange(new QScenePropertyChange(NodeRemoved, this)); + QScenePropertyChangePtr propertyChange(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); propertyChange->setPropertyName("sortCriterion"); propertyChange->setValue(QVariant::fromValue(criterion)); d->notifyObservers(propertyChange); diff --git a/src/render/frontend/framegraph-components/qtechniquefilter.cpp b/src/render/frontend/framegraph-components/qtechniquefilter.cpp index ee7507810..4fbbb0c75 100644 --- a/src/render/frontend/framegraph-components/qtechniquefilter.cpp +++ b/src/render/frontend/framegraph-components/qtechniquefilter.cpp @@ -88,7 +88,7 @@ void QTechniqueFilter::addRequirement(QAnnotation *criterion) criterion->setParent(this); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr propertyChange(new QScenePropertyChange(NodeAdded, this)); + QScenePropertyChangePtr propertyChange(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); propertyChange->setPropertyName("require"); propertyChange->setValue(QVariant::fromValue(criterion)); d->notifyObservers(propertyChange); @@ -99,7 +99,7 @@ void QTechniqueFilter::removeRequirement(QAnnotation *criterion) { Q_D(QTechniqueFilter); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr propertyChange(new QScenePropertyChange(NodeRemoved, this)); + QScenePropertyChangePtr propertyChange(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); propertyChange->setPropertyName("require"); propertyChange->setValue(QVariant::fromValue(criterion->id())); d->notifyObservers(propertyChange); diff --git a/src/render/frontend/qabstractmesh.cpp b/src/render/frontend/qabstractmesh.cpp index f88e6c42b..94495f23d 100644 --- a/src/render/frontend/qabstractmesh.cpp +++ b/src/render/frontend/qabstractmesh.cpp @@ -82,7 +82,7 @@ void QAbstractMesh::update() { Q_D(QAbstractMesh); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeUpdated, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeUpdated, QSceneChange::Node, id())); change->setPropertyName("meshFunctor"); change->setValue(QVariant::fromValue(meshFunctor())); d->notifyObservers(change); diff --git a/src/render/frontend/qabstracttextureimage.cpp b/src/render/frontend/qabstracttextureimage.cpp index 229e324d0..8f012652c 100644 --- a/src/render/frontend/qabstracttextureimage.cpp +++ b/src/render/frontend/qabstracttextureimage.cpp @@ -146,7 +146,7 @@ void QAbstractTextureImage::update() { Q_D(QAbstractTextureImage); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeUpdated, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeUpdated, QSceneChange::Node, id())); change->setPropertyName("dataFunctor"); change->setValue(QVariant::fromValue(dataFunctor())); d->notifyObservers(change); diff --git a/src/render/frontend/qabstracttextureprovider.cpp b/src/render/frontend/qabstracttextureprovider.cpp index 087c5ed61..8d08b76b6 100644 --- a/src/render/frontend/qabstracttextureprovider.cpp +++ b/src/render/frontend/qabstracttextureprovider.cpp @@ -288,7 +288,7 @@ void QAbstractTextureProvider::addTextureImage(QAbstractTextureImage *textureIma textureImage->setParent(this); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); change->setPropertyName("textureImage"); change->setValue(QVariant::fromValue(textureImage->id())); d->notifyObservers(change); @@ -303,7 +303,7 @@ void QAbstractTextureProvider::removeTextureImage(QAbstractTextureImage *texture { Q_D(QAbstractTextureProvider); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); change->setPropertyName("textureImage"); change->setValue(QVariant::fromValue(textureImage->id())); d->notifyObservers(change); @@ -391,21 +391,21 @@ void QAbstractTextureProvider::setWrapMode(const QTextureWrapMode &wrapMode) Q_D(QAbstractTextureProvider); if (d->m_wrapMode.x() != wrapMode.x()) { d->m_wrapMode.setX(wrapMode.x()); - QScenePropertyChangePtr e(new QScenePropertyChange(NodeUpdated, this)); + QScenePropertyChangePtr e(new QScenePropertyChange(NodeUpdated, QSceneChange::Node, id())); e->setPropertyName("wrapModeX"); e->setValue(static_cast<int>(d->m_wrapMode.x())); d->notifyObservers(e); } if (d->m_wrapMode.y() != wrapMode.y()) { d->m_wrapMode.setY(wrapMode.y()); - QScenePropertyChangePtr e(new QScenePropertyChange(NodeUpdated, this)); + QScenePropertyChangePtr e(new QScenePropertyChange(NodeUpdated, QSceneChange::Node, id())); e->setPropertyName("wrapModeY"); e->setValue(static_cast<int>(d->m_wrapMode.y())); d->notifyObservers(e); } if (d->m_wrapMode.z() != wrapMode.z()) { d->m_wrapMode.setZ(wrapMode.z()); - QScenePropertyChangePtr e(new QScenePropertyChange(NodeUpdated, this)); + QScenePropertyChangePtr e(new QScenePropertyChange(NodeUpdated, QSceneChange::Node, id())); e->setPropertyName("wrapModeZ"); e->setValue(static_cast<int>(d->m_wrapMode.z())); d->notifyObservers(e); diff --git a/src/render/frontend/qeffect.cpp b/src/render/frontend/qeffect.cpp index 781173c73..57527fc4b 100644 --- a/src/render/frontend/qeffect.cpp +++ b/src/render/frontend/qeffect.cpp @@ -84,7 +84,7 @@ void QEffect::addParameter(QParameter *parameter) parameter->setParent(this); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); change->setPropertyName("parameter"); change->setValue(QVariant::fromValue(parameter->id())); d->notifyObservers(change); @@ -97,7 +97,7 @@ void QEffect::removeParameter(QParameter *parameter) Q_D(QEffect); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); change->setPropertyName("parameter"); change->setValue(QVariant::fromValue(parameter->id())); d->notifyObservers(change); @@ -131,7 +131,7 @@ void QEffect::addTechnique(QTechnique *t) t->setParent(this); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr e(new QScenePropertyChange(NodeAdded, this)); + QScenePropertyChangePtr e(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); e->setPropertyName("technique"); e->setValue(QVariant::fromValue(t->id())); d->notifyObservers(e); @@ -148,7 +148,7 @@ void QEffect::removeTechnique(QTechnique *t) { Q_D(QEffect); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr e(new QScenePropertyChange(NodeRemoved, this)); + QScenePropertyChangePtr e(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); e->setPropertyName("technique"); e->setValue(QVariant::fromValue(t->id())); d->notifyObservers(e); diff --git a/src/render/frontend/qmaterial.cpp b/src/render/frontend/qmaterial.cpp index 79652d032..e9de8a21c 100644 --- a/src/render/frontend/qmaterial.cpp +++ b/src/render/frontend/qmaterial.cpp @@ -99,7 +99,7 @@ void QMaterial::setEffect(QEffect *effect) if (effect != d->m_effect) { if (d->m_effect && d->m_changeArbiter) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); change->setPropertyName("effect"); change->setValue(QVariant::fromValue(d->m_effect->id())); d->notifyObservers(change); @@ -116,7 +116,7 @@ void QMaterial::setEffect(QEffect *effect) effect->setParent(this); if (d->m_effect && d->m_changeArbiter) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); change->setPropertyName("effect"); change->setValue(QVariant::fromValue(effect->id())); d->notifyObservers(change); @@ -147,7 +147,7 @@ void QMaterial::addParameter(QParameter *parameter) parameter->setParent(this); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); change->setPropertyName("parameter"); change->setValue(QVariant::fromValue(parameter->id())); d->notifyObservers(change); @@ -159,7 +159,7 @@ void QMaterial::removeParameter(QParameter *parameter) { Q_D(QMaterial); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); change->setPropertyName("parameter"); change->setValue(QVariant::fromValue(parameter->id())); d->notifyObservers(change); diff --git a/src/render/frontend/qparameter.cpp b/src/render/frontend/qparameter.cpp index 5ecf24092..9a1ec67c5 100644 --- a/src/render/frontend/qparameter.cpp +++ b/src/render/frontend/qparameter.cpp @@ -117,7 +117,7 @@ void QParameter::setValue(const QVariant &dv) if (txt != Q_NULLPTR && !txt->parent()) txt->setParent(this); - QScenePropertyChangePtr change(new QScenePropertyChange(NodeUpdated, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeUpdated, QSceneChange::Node, id())); change->setPropertyName(d->m_name.toUtf8().data()); if (txt != Q_NULLPTR) change->setValue(QVariant::fromValue(QNode::clone(txt))); diff --git a/src/render/frontend/qrenderpass.cpp b/src/render/frontend/qrenderpass.cpp index 89f831f0b..3fa5d0308 100644 --- a/src/render/frontend/qrenderpass.cpp +++ b/src/render/frontend/qrenderpass.cpp @@ -101,7 +101,7 @@ void QRenderPass::setShaderProgram(QShaderProgram *shaderProgram) if (d->m_shader != shaderProgram) { if (d->m_shader != Q_NULLPTR && d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr e(new QScenePropertyChange(NodeRemoved, this)); + QScenePropertyChangePtr e(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); e->setPropertyName("shaderProgram"); e->setValue(QVariant::fromValue(d->m_shader->id())); d->notifyObservers(e); @@ -118,7 +118,7 @@ void QRenderPass::setShaderProgram(QShaderProgram *shaderProgram) shaderProgram->setParent(this); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr e(new QScenePropertyChange(NodeAdded, this)); + QScenePropertyChangePtr e(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); e->setPropertyName("shaderProgram"); e->setValue(QVariant::fromValue(shaderProgram->id())); d->notifyObservers(e); @@ -146,7 +146,7 @@ void QRenderPass::addAnnotation(QAnnotation *annotation) annotation->setParent(this); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); change->setPropertyName("annotation"); change->setValue(QVariant::fromValue(annotation->id())); d->notifyObservers(change); @@ -158,7 +158,7 @@ void QRenderPass::removeAnnotation(QAnnotation *annotation) { Q_D(QRenderPass); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); change->setPropertyName("annotation"); change->setValue(QVariant::fromValue(annotation->id())); d->notifyObservers(change); @@ -182,7 +182,7 @@ void QRenderPass::addBinding(QParameterMapping *binding) binding->setParent(this); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); change->setPropertyName("binding"); change->setValue(QVariant::fromValue(QNode::clone(binding))); d->notifyObservers(change); @@ -194,7 +194,7 @@ void QRenderPass::removeBinding(QParameterMapping *binding) { Q_D(QRenderPass); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); change->setPropertyName("binding"); change->setValue(QVariant::fromValue(binding->id())); d->notifyObservers(change); @@ -219,7 +219,7 @@ void QRenderPass::addRenderState(QRenderState *state) state->setParent(this); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); change->setPropertyName("renderState"); change->setValue(QVariant::fromValue(QNode::clone(state))); d->notifyObservers(change); @@ -231,7 +231,7 @@ void QRenderPass::removeRenderState(QRenderState *state) { Q_D(QRenderPass); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); change->setPropertyName("renderState"); change->setValue(QVariant::fromValue(state->id())); d->notifyObservers(change); diff --git a/src/render/frontend/qrendertarget.cpp b/src/render/frontend/qrendertarget.cpp index 0f6174e40..3eb3b4e08 100644 --- a/src/render/frontend/qrendertarget.cpp +++ b/src/render/frontend/qrendertarget.cpp @@ -76,7 +76,7 @@ void QRenderTarget::addAttachment(QRenderAttachment *attachment) attachment->setParent(this); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); change->setPropertyName("attachment"); change->setValue(QVariant::fromValue(attachment->id())); d->notifyObservers(change); @@ -89,7 +89,7 @@ void QRenderTarget::removeAttachment(QRenderAttachment *attachment) Q_D(QRenderTarget); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); change->setPropertyName("attachment"); change->setValue(QVariant::fromValue(attachment->id())); d->notifyObservers(change); diff --git a/src/render/frontend/qtechnique.cpp b/src/render/frontend/qtechnique.cpp index 74f85cda5..e78d88e01 100644 --- a/src/render/frontend/qtechnique.cpp +++ b/src/render/frontend/qtechnique.cpp @@ -86,7 +86,7 @@ void QTechnique::openGLFilterChanged() { Q_D(QTechnique); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeUpdated, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeUpdated, QSceneChange::Node, id())); change->setPropertyName("openGLFilter"); QOpenGLFilter *clone = new QOpenGLFilter(); clone->copy(d->m_openGLFilter); @@ -109,7 +109,7 @@ void QTechnique::addAnnotation(QAnnotation *criterion) criterion->setParent(this); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); change->setPropertyName("annotation"); change->setValue(QVariant::fromValue(criterion->id())); d->notifyObservers(change); @@ -121,7 +121,7 @@ void QTechnique::removeAnnotation(QAnnotation *criterion) { Q_D(QTechnique); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); change->setPropertyName("annotation"); change->setValue(QVariant::fromValue(criterion->id())); d->notifyObservers(change); @@ -149,7 +149,7 @@ void QTechnique::addParameter(QParameter *parameter) parameter->setParent(this); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); change->setPropertyName("parameter"); change->setValue(QVariant::fromValue(parameter->id())); d->notifyObservers(change); @@ -162,7 +162,7 @@ void QTechnique::removeParameter(QParameter *parameter) Q_D(QTechnique); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, this)); + QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); change->setPropertyName("parameter"); change->setValue(QVariant::fromValue(parameter->id())); d->notifyObservers(change); @@ -189,7 +189,7 @@ void QTechnique::addPass(QRenderPass *pass) pass->setParent(this); if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr e(new QScenePropertyChange(NodeAdded, this)); + QScenePropertyChangePtr e(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); e->setPropertyName("pass"); e->setValue(QVariant::fromValue(pass->id())); d->notifyObservers(e); @@ -206,7 +206,7 @@ void QTechnique::removePass(QRenderPass *pass) { Q_D(QTechnique); if (d->m_changeArbiter) { - QScenePropertyChangePtr e(new QScenePropertyChange(NodeRemoved, this)); + QScenePropertyChangePtr e(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); e->setPropertyName("pass"); e->setValue(QVariant::fromValue(pass->id())); d->notifyObservers(e); |