summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2016-04-10 17:38:01 +0100
committerPaul Lemire <paul.lemire@kdab.com>2016-04-12 12:49:15 +0000
commit5b277d1c6df11cdeb66745bf92c0ca34bfb5d659 (patch)
tree03e2fcce67a93584f7d9cad7b7c910d15b63b464 /src
parent54fc2c8b4889f46bc3e4b0763dbc42c0cdd55c60 (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.cpp14
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;