diff options
author | Justin McPherson <justin.mcpherson@nokia.com> | 2012-02-17 13:52:09 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-21 01:21:41 +0100 |
commit | 2954685be016123aac8100f398150a9f8cf01a92 (patch) | |
tree | e64641efb81d91e477f2cfe93f87452c5c59afc7 /src | |
parent | 2d72f97328f3d379476034549a26f1002c0b5fbc (diff) |
Remove the callback facility from context node.
- It's not really necessary.
- It's probably a mis-use of QSGNode::preprocess()
- Because it triggers a race between object deletion in the main thread
and preprocess() in the render thread.
Change-Id: I51433f508db306aab53398f8c3d1d8c9d9e986fd
Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/quick/items/context2d/qquickcanvasitem.cpp | 15 | ||||
-rw-r--r-- | src/quick/items/context2d/qquickcanvasitemnode.cpp | 13 | ||||
-rw-r--r-- | src/quick/items/context2d/qquickcanvasitemnode_p.h | 8 |
3 files changed, 3 insertions, 33 deletions
diff --git a/src/quick/items/context2d/qquickcanvasitem.cpp b/src/quick/items/context2d/qquickcanvasitem.cpp index 783fedf9fc..7031294ecc 100644 --- a/src/quick/items/context2d/qquickcanvasitem.cpp +++ b/src/quick/items/context2d/qquickcanvasitem.cpp @@ -96,16 +96,6 @@ QQuickCanvasItemPrivate::~QQuickCanvasItemPrivate() qDeleteAll(images); } -class QQuickCanvasItemCallback : public QQuickCanvasItemNode::Callback -{ -public: - QQuickCanvasItemCallback(QQuickCanvasItemPrivate *d):item(d) {} - void process() const { - // on SG render thread - item->context->sync(); - } - QQuickCanvasItemPrivate *item; -}; /*! \qmlclass Canvas QQuickCanvasItem @@ -573,10 +563,11 @@ QSGNode *QQuickCanvasItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData QQuickCanvasItemNode *node = static_cast<QQuickCanvasItemNode*>(oldNode); if (!node) { node = new QQuickCanvasItemNode; - if (d->renderStrategy == QQuickCanvasItem::Cooperative) - node->setCallback(new QQuickCanvasItemCallback(d)); } + if (d->renderStrategy == QQuickCanvasItem::Cooperative) + d->context->sync(); + node->setTexture(d->context->texture()); node->setSize(d->canvasWindow.size()); node->update(); diff --git a/src/quick/items/context2d/qquickcanvasitemnode.cpp b/src/quick/items/context2d/qquickcanvasitemnode.cpp index 307d5716e6..b9347dd33c 100644 --- a/src/quick/items/context2d/qquickcanvasitemnode.cpp +++ b/src/quick/items/context2d/qquickcanvasitemnode.cpp @@ -65,13 +65,6 @@ QQuickCanvasItemNode::~QQuickCanvasItemNode() delete m_texture; } -// Must be called before this node is added to SG -void QQuickCanvasItemNode::setCallback(QQuickCanvasItemNode::Callback *cb) -{ - m_cb = cb; - setFlag(UsePreprocess, true); -} - void QQuickCanvasItemNode::setSize(const QSizeF& size) { if (m_size != size) { @@ -80,12 +73,6 @@ void QQuickCanvasItemNode::setSize(const QSizeF& size) } } -void QQuickCanvasItemNode::preprocess() -{ - if (m_cb) - m_cb->process(); -} - void QQuickCanvasItemNode::setTexture(QSGDynamicTexture* texture) { if (texture != m_texture) { diff --git a/src/quick/items/context2d/qquickcanvasitemnode_p.h b/src/quick/items/context2d/qquickcanvasitemnode_p.h index bee221554e..77181c64e6 100644 --- a/src/quick/items/context2d/qquickcanvasitemnode_p.h +++ b/src/quick/items/context2d/qquickcanvasitemnode_p.h @@ -59,18 +59,11 @@ class QSGDynamicTexture; class QQuickCanvasItemNode : public QSGGeometryNode { public: - class Callback { - public: - virtual void process() const = 0; - }; - QQuickCanvasItemNode(); ~QQuickCanvasItemNode(); - void setCallback(Callback *cb); void setTexture(QSGDynamicTexture *texture); void update(); - void preprocess(); void setSize(const QSizeF& size); private: @@ -85,7 +78,6 @@ private: bool m_dirtyGeometry; bool m_dirtyTexture; - Callback *m_cb; }; QT_END_HEADER |