aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGunnar Sletta <gunnar.sletta@jollamobile.com>2015-01-22 13:26:24 +0100
committerGunnar Sletta <gunnar@sletta.org>2015-01-26 14:26:13 +0100
commit0c461dcae28e20cc55920b45d611f22348f12e62 (patch)
tree76bd867a920cd5524ffd3b76d38790caa5bb0840
parentd896d76b0f2ff0387cd09a04107ea5df087268e1 (diff)
Avoid crashes when resetting the same material or geometry.
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>
-rw-r--r--src/quick/scenegraph/coreapi/qsgnode.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/quick/scenegraph/coreapi/qsgnode.cpp b/src/quick/scenegraph/coreapi/qsgnode.cpp
index 7f78318884..b14c62247e 100644
--- a/src/quick/scenegraph/coreapi/qsgnode.cpp
+++ b/src/quick/scenegraph/coreapi/qsgnode.cpp
@@ -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