diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2016-06-17 15:07:41 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2016-07-04 06:09:50 +0000 |
commit | 18f0b45c23adc5bee4c784a8d81c697aeb831c93 (patch) | |
tree | 0ed82a149d4e1556f730e899a4776387c3cbb975 /src/render/geometry | |
parent | 23c499a0390c1ba3ad33597f86e8915ef4ed94da (diff) |
QGeometryRenderer: fix notification of geometry changing
Change-Id: Ic0fc25a9aacf47863d0ac058d3be687415b2cbdd
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/geometry')
-rw-r--r-- | src/render/geometry/geometryrenderer.cpp | 21 | ||||
-rw-r--r-- | src/render/geometry/qgeometryrenderer.cpp | 17 |
2 files changed, 3 insertions, 35 deletions
diff --git a/src/render/geometry/geometryrenderer.cpp b/src/render/geometry/geometryrenderer.cpp index 25cf43642..70266ac52 100644 --- a/src/render/geometry/geometryrenderer.cpp +++ b/src/render/geometry/geometryrenderer.cpp @@ -164,23 +164,8 @@ void GeometryRenderer::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) m_geometryFactory = newFunctor; if (m_geometryFactory && m_manager != nullptr) m_manager->addDirtyGeometryRenderer(peerId()); - } - break; - } - - case PropertyValueAdded: { - const auto change = qSharedPointerCast<QPropertyNodeAddedChange>(e); - if (change->propertyName() == QByteArrayLiteral("geometry")) { - m_geometryId = change->addedNodeId(); - m_dirty = true; - } - break; - } - - case PropertyValueRemoved: { - const auto change = qSharedPointerCast<QPropertyNodeAddedChange>(e); - if (change->propertyName() == QByteArrayLiteral("geometry")) { - m_geometryId = QNodeId(); + } else if (propertyName == QByteArrayLiteral("geometry")) { + m_geometryId = propertyChange->value().value<Qt3DCore::QNodeId>(); m_dirty = true; } break; @@ -210,7 +195,7 @@ void GeometryRenderer::executeFunctor() geometry->moveToThread(appThread); auto e = QGeometryChangePtr::create(peerId()); - e->setDeliveryFlags(Qt3DCore::QSceneChange::DeliverToAll); + e->setDeliveryFlags(Qt3DCore::QSceneChange::Nodes); e->setPropertyName("geometry"); e->data = std::move(geometry); notifyObservers(e); diff --git a/src/render/geometry/qgeometryrenderer.cpp b/src/render/geometry/qgeometryrenderer.cpp index 9a8b318d0..ddc1b1b23 100644 --- a/src/render/geometry/qgeometryrenderer.cpp +++ b/src/render/geometry/qgeometryrenderer.cpp @@ -390,14 +390,6 @@ void QGeometryRenderer::setGeometry(QGeometry *geometry) if (d->m_geometry == geometry) return; - // TODO: Investigate if we can rely upon the automatic property change notifications - // rather than having to manually send a PropertyValueRemoved followed by a PropertyValueAdded change. - if (d->m_geometry && d->m_changeArbiter) { - const auto change = QPropertyNodeRemovedChangePtr::create(id(), d->m_geometry); - change->setPropertyName("geometry"); - d->notifyObservers(change); - } - if (d->m_geometry) d->unregisterDestructionHelper(d->m_geometry); @@ -406,20 +398,11 @@ void QGeometryRenderer::setGeometry(QGeometry *geometry) d->m_geometry = geometry; - // Ensures proper bookkeeping if (d->m_geometry) d->registerDestructionHelper(d->m_geometry, &QGeometryRenderer::setGeometry, d->m_geometry); - const bool blocked = blockNotifications(true); emit geometryChanged(geometry); - blockNotifications(blocked); - - if (d->m_geometry && d->m_changeArbiter) { - const auto change = QPropertyNodeAddedChangePtr::create(id(), d->m_geometry); - change->setPropertyName("geometry"); - d->notifyObservers(change); - } } void QGeometryRenderer::setPrimitiveType(QGeometryRenderer::PrimitiveType primitiveType) |