aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickborderimage.cpp
diff options
context:
space:
mode:
authorGunnar Sletta <gunnar.sletta@digia.com>2013-10-15 09:12:09 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-21 13:38:42 +0200
commit486d367e8086e63f51707e78c07ef77fa6240f0a (patch)
tree6722f818311ce2bd537944f314fb8d60c81b516c /src/quick/items/qquickborderimage.cpp
parent19d6806716946081bc08169d3f702acf33560a89 (diff)
Prevent badly formed texture nodes in the scene graph.
A texture based node without a valid texture is not allowed, as the material and the renderer will only tolerate well-formed nodes. If a node is missing any part of its material state it should not be in the scene graph in the first place. Because of an "optimization" in QSGDefaultImageNode::setTexture and QSGSimpleTextureNode::setTexture, we must temporarily set the texture to 0 to ensure that it gets updated properly. This temporarily puts the node into an invalid state which can lead to crashes when QSGNode::markDirty() reaches the renderer. Task-number: QTBUG-34062 Change-Id: Ic1735c9b974b90b3684262de9589133c961bac6e Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Diffstat (limited to 'src/quick/items/qquickborderimage.cpp')
-rw-r--r--src/quick/items/qquickborderimage.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/quick/items/qquickborderimage.cpp b/src/quick/items/qquickborderimage.cpp
index 3cbcf1937f..9fc9752707 100644
--- a/src/quick/items/qquickborderimage.cpp
+++ b/src/quick/items/qquickborderimage.cpp
@@ -560,10 +560,14 @@ QSGNode *QQuickBorderImage::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeDat
QSGImageNode *node = static_cast<QSGImageNode *>(oldNode);
- if (!node)
+ bool updatePixmap = d->pixmapChanged;
+ if (!node) {
node = d->sceneGraphContext()->createImageNode();
+ updatePixmap = true;
+ }
- node->setTexture(texture);
+ if (updatePixmap)
+ node->setTexture(texture);
// Don't implicitly create the scalegrid in the rendering thread...
QRectF innerSourceRect(0, 0, 1, 1);