diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2016-04-10 17:38:01 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2016-04-12 12:49:15 +0000 |
commit | 5b277d1c6df11cdeb66745bf92c0ca34bfb5d659 (patch) | |
tree | 03e2fcce67a93584f7d9cad7b7c910d15b63b464 /src | |
parent | 54fc2c8b4889f46bc3e4b0763dbc42c0cdd55c60 (diff) |
Protect against bad cast in GeometryRenderer
Change-Id: I27607880f6bf411e55cbf2416e6da36fa38e84ef
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/render/geometry/geometry.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/render/geometry/geometry.cpp b/src/render/geometry/geometry.cpp index 50756a687..200725f2e 100644 --- a/src/render/geometry/geometry.cpp +++ b/src/render/geometry/geometry.cpp @@ -91,11 +91,12 @@ void Geometry::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &cha void Geometry::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) { - QScenePropertyChangePtr propertyChange = qSharedPointerCast<QScenePropertyChange>(e); - QByteArray propertyName = propertyChange->propertyName(); switch (e->type()) { case NodeAdded: { + QScenePropertyChangePtr propertyChange = qSharedPointerCast<QScenePropertyChange>(e); + QByteArray propertyName = propertyChange->propertyName(); + if (propertyName == QByteArrayLiteral("attribute")) { m_attributes.push_back(propertyChange->value().value<QNodeId>()); m_geometryDirty = true; @@ -104,6 +105,9 @@ void Geometry::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) } case NodeRemoved: { + QScenePropertyChangePtr propertyChange = qSharedPointerCast<QScenePropertyChange>(e); + QByteArray propertyName = propertyChange->propertyName(); + if (propertyName == QByteArrayLiteral("attribute")) { m_attributes.removeOne(propertyChange->value().value<QNodeId>()); m_geometryDirty = true; @@ -111,13 +115,17 @@ void Geometry::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) break; } - case NodeUpdated: + case NodeUpdated: { // Note: doesn't set dirtyness as this parameter changing doesn't need // a new VAO update. + QScenePropertyChangePtr propertyChange = qSharedPointerCast<QScenePropertyChange>(e); + QByteArray propertyName = propertyChange->propertyName(); + if (propertyName == QByteArrayLiteral("boundingVolumePositionAttribute")) { m_boundingPositionAttribute = propertyChange->value().value<QNodeId>(); break; } + } default: break; |