Avoid crashes when resetting the same material or geometry.
authorGunnar Sletta <gunnar.sletta@jollamobile.com>
Thu, 22 Jan 2015 12:26:24 +0000 (13:26 +0100)
committerGunnar Sletta <gunnar@sletta.org>
Mon, 26 Jan 2015 13:26:13 +0000 (14:26 +0100)
We still need to call markDirty() though, to avoid changing
behavior.

Change-Id: I9df00e8d1cbe95bfae96b9ba9162bd6f226b5bdc
Reviewed-by: Florian Hänel <florian.haenel@basyskom.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
src/quick/scenegraph/coreapi/qsgnode.cpp

index 7f78318..b14c622 100644 (file)
@@ -787,7 +787,7 @@ QSGBasicGeometryNode::~QSGBasicGeometryNode()
 
 void QSGBasicGeometryNode::setGeometry(QSGGeometry *geometry)
 {
-    if (flags() & OwnsGeometry)
+    if ((flags() & OwnsGeometry) != 0 && m_geometry != geometry)
         delete m_geometry;
     m_geometry = geometry;
     markDirty(DirtyGeometry);
@@ -954,7 +954,7 @@ void QSGGeometryNode::setRenderOrder(int order)
  */
 void QSGGeometryNode::setMaterial(QSGMaterial *material)
 {
-    if (flags() & OwnsMaterial)
+    if ((flags() & OwnsMaterial) != 0 && m_material != material)
         delete m_material;
     m_material = material;
 #ifndef QT_NO_DEBUG
@@ -985,7 +985,7 @@ void QSGGeometryNode::setMaterial(QSGMaterial *material)
  */
 void QSGGeometryNode::setOpaqueMaterial(QSGMaterial *material)
 {
-    if (flags() & OwnsOpaqueMaterial)
+    if ((flags() & OwnsOpaqueMaterial) != 0 && m_opaque_material != m_material)
         delete m_opaque_material;
     m_opaque_material = material;
 #ifndef QT_NO_DEBUG