: QSGGeometryNodePrivate()
, m_texCoordMode(QSGSimpleTextureNode::NoTransform)
, isAtlasTexture(false)
+ , ownsTexture(false)
{}
QSGSimpleTextureNode::TextureCoordinatesTransformMode m_texCoordMode;
uint isAtlasTexture : 1;
+ uint ownsTexture : 1;
};
static void qsgsimpletexturenode_update(QSGGeometry *g,
}
/*!
+ Destroys the texture node
+ */
+QSGSimpleTextureNode::~QSGSimpleTextureNode()
+{
+ Q_D(QSGSimpleTextureNode);
+ if (d->ownsTexture)
+ delete m_material.texture();
+}
+
+/*!
Sets the filtering to be used for this texture node to \a filtering.
For smooth scaling, use QSGTexture::Linear; for normal scaling, use
/*!
Sets the texture of this texture node to \a texture.
+ Use setOwnsTexture() to set whether the node should take
+ ownership of the texture. By default, the node does not
+ take ownership.
+
\warning A texture node must have a texture before being added
to the scenegraph to be rendered.
*/
return d->m_texCoordMode;
}
+/*!
+ Sets whether the node takes ownership of the texture to \a owns.
+
+ By default, the node does not take ownership of the texture.
+
+ \sa setTexture()
+ */
+void QSGSimpleTextureNode::setOwnsTexture(bool owns)
+{
+ Q_D(QSGSimpleTextureNode);
+ d->ownsTexture = owns;
+}
+
+/*!
+ Returns \c true if the node takes ownership of the texture; otherwise returns \c false.
+ */
+bool QSGSimpleTextureNode::ownsTexture() const
+{
+ Q_D(const QSGSimpleTextureNode);
+ return d->ownsTexture;
+}
+
QT_END_NAMESPACE
{
public:
QSGSimpleTextureNode();
+ ~QSGSimpleTextureNode();
void setRect(const QRectF &rect);
inline void setRect(qreal x, qreal y, qreal w, qreal h) { setRect(QRectF(x, y, w, h)); }
void setTextureCoordinatesTransform(TextureCoordinatesTransformMode mode);
TextureCoordinatesTransformMode textureCoordinatesTransform() const;
+ void setOwnsTexture(bool owns);
+ bool ownsTexture() const;
+
private:
QSGGeometry m_geometry;
QSGOpaqueTextureMaterial m_opaque_material;
#include <QtQuick/private/qsgcontext_p.h>
#include <QtQuick/qsgsimplerectnode.h>
+#include <QtQuick/qsgsimpletexturenode.h>
+#include <QtQuick/private/qsgtexture_p.h>
class NodesTest : public QObject
{
void isBlockedCheck();
+ void textureNodeTextureOwnership();
+
private:
QOffscreenSurface *surface;
QOpenGLContext *context;
QVERIFY(!updater.isNodeBlocked(node, &root));
}
+void NodesTest::textureNodeTextureOwnership()
+{
+ { // Check that it is not deleted by default
+ QPointer<QSGTexture> texture(new QSGPlainTexture());
+
+ QSGSimpleTextureNode *tn = new QSGSimpleTextureNode();
+ QVERIFY(!tn->ownsTexture());
+
+ tn->setTexture(texture);
+ delete tn;
+ QVERIFY(!texture.isNull());
+ }
+
+ { // Check that it is deleted when we so desire
+ QPointer<QSGTexture> texture(new QSGPlainTexture());
+
+ QSGSimpleTextureNode *tn = new QSGSimpleTextureNode();
+ tn->setOwnsTexture(true);
+ QVERIFY(tn->ownsTexture());
+
+ tn->setTexture(texture);
+ delete tn;
+ QVERIFY(texture.isNull());
+ }
+}
+
QTEST_MAIN(NodesTest);
#include "tst_nodestest.moc"