Commit 46354ec4 authored by Gunnar Sletta's avatar Gunnar Sletta Committed by The Qt Project
Browse files

Opt-in that QSGSimpleTextureNode can own the texture.


Having to subclass just to delete the texture is a bit
tedious.

Change-Id: I26c7e0b5c053ba70e004949ead748e50756d9b39
Reviewed-by: default avatarMichael Brasser <michael.brasser@live.com>
Reviewed-by: default avatarLaszlo Agocs <laszlo.agocs@digia.com>
parent 0cb12e9e
dev 5.10 5.11 5.12 5.12.1 5.12.10 5.12.11 5.12.12 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13 5.13.0 5.13.1 5.13.2 5.14 5.14.0 5.14.1 5.14.2 5.15 5.15.0 5.15.1 5.15.2 5.4 5.5 5.6 5.7 5.8 5.9 5.9.8 6.0 6.0.0 6.1 6.1.0 6.1.1 6.1.2 6.1.3 6.2 6.2.0 6.2.1 6.2.2 wip/cmake wip/dbus wip/itemviews wip/nacl wip/new-backend wip/pointerhandler wip/propertycache-refactor wip/qquickdeliveryagent wip/scenegraphng wip/tizen wip/webassembly v5.15.0-alpha1 v5.14.1 v5.14.0 v5.14.0-rc2 v5.14.0-rc1 v5.14.0-beta3 v5.14.0-beta2 v5.14.0-beta1 v5.14.0-alpha1 v5.13.2 v5.13.1 v5.13.0 v5.13.0-rc3 v5.13.0-rc2 v5.13.0-rc1 v5.13.0-beta4 v5.13.0-beta3 v5.13.0-beta2 v5.13.0-beta1 v5.13.0-alpha1 v5.12.7 v5.12.6 v5.12.5 v5.12.4 v5.12.3 v5.12.2 v5.12.1 v5.12.0 v5.12.0-rc2 v5.12.0-rc1 v5.12.0-beta4 v5.12.0-beta3 v5.12.0-beta2 v5.12.0-beta1 v5.12.0-alpha1 v5.11.3 v5.11.2 v5.11.1 v5.11.0 v5.11.0-rc2 v5.11.0-rc1 v5.11.0-beta4 v5.11.0-beta3 v5.11.0-beta2 v5.11.0-beta1 v5.11.0-alpha1 v5.10.1 v5.10.0 v5.10.0-rc3 v5.10.0-rc2 v5.10.0-rc1 v5.10.0-beta4 v5.10.0-beta3 v5.10.0-beta2 v5.10.0-beta1 v5.10.0-alpha1 v5.9.9 v5.9.8 v5.9.7 v5.9.6 v5.9.5 v5.9.4 v5.9.3 v5.9.2 v5.9.1 v5.9.0 v5.9.0-rc2 v5.9.0-rc1 v5.9.0-beta4 v5.9.0-beta3 v5.9.0-beta2 v5.9.0-beta1 v5.9.0-alpha1 v5.8.0 v5.8.0-rc1 v5.8.0-beta1 v5.8.0-alpha1 v5.7.1 v5.7.0 v5.7.0-rc1 v5.7.0-beta1 v5.7.0-alpha1 v5.6.3 v5.6.2 v5.6.1 v5.6.1-1 v5.6.0 v5.6.0-rc1 v5.6.0-beta1 v5.6.0-alpha1 v5.5.1 v5.5.0 v5.5.0-rc1 v5.5.0-beta1 v5.5.0-alpha1 v5.4.2 v5.4.1 v5.4.0 v5.4.0-rc1 v5.4.0-beta1 v5.4.0-alpha1
No related merge requests found
Showing with 72 additions and 0 deletions
......@@ -52,10 +52,12 @@ public:
: 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,
......@@ -110,6 +112,16 @@ QSGSimpleTextureNode::QSGSimpleTextureNode()
#endif
}
/*!
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.
......@@ -168,6 +180,10 @@ QRectF QSGSimpleTextureNode::rect() const
/*!
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.
*/
......@@ -244,4 +260,26 @@ QSGSimpleTextureNode::TextureCoordinatesTransformMode QSGSimpleTextureNode::text
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
......@@ -54,6 +54,7 @@ class Q_QUICK_EXPORT QSGSimpleTextureNode : public QSGGeometryNode
{
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)); }
......@@ -75,6 +76,9 @@ public:
void setTextureCoordinatesTransform(TextureCoordinatesTransformMode mode);
TextureCoordinatesTransformMode textureCoordinatesTransform() const;
void setOwnsTexture(bool owns);
bool ownsTexture() const;
private:
QSGGeometry m_geometry;
QSGOpaqueTextureMaterial m_opaque_material;
......
......@@ -52,6 +52,8 @@
#include <QtQuick/private/qsgcontext_p.h>
#include <QtQuick/qsgsimplerectnode.h>
#include <QtQuick/qsgsimpletexturenode.h>
#include <QtQuick/private/qsgtexture_p.h>
class NodesTest : public QObject
{
......@@ -74,6 +76,8 @@ private Q_SLOTS:
void isBlockedCheck();
void textureNodeTextureOwnership();
private:
QOffscreenSurface *surface;
QOpenGLContext *context;
......@@ -259,6 +263,32 @@ void NodesTest::isBlockedCheck()
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"
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment