diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-01-28 12:08:34 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-02-08 11:16:09 +0000 |
commit | f06599b246850e4854ee3c83f97b9309e1c0850f (patch) | |
tree | 1fb94d42974de3504714313d899935773d34c4a8 | |
parent | e20c7d31871a7f2ed5e5e6074cafe5595c39b7af (diff) |
Add list of QAbstractTextureImages to QAbstractTextureProvider
Change-Id: I3280112df9614b7142d4e15b3871518896806577
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r-- | src/render/frontend/qabstracttextureprovider.cpp | 50 | ||||
-rw-r--r-- | src/render/frontend/qabstracttextureprovider.h | 15 | ||||
-rw-r--r-- | src/render/frontend/qabstracttextureprovider_p.h | 1 |
3 files changed, 58 insertions, 8 deletions
diff --git a/src/render/frontend/qabstracttextureprovider.cpp b/src/render/frontend/qabstracttextureprovider.cpp index c66a144d6..c1616ad19 100644 --- a/src/render/frontend/qabstracttextureprovider.cpp +++ b/src/render/frontend/qabstracttextureprovider.cpp @@ -42,6 +42,7 @@ #include "qabstracttextureprovider.h" #include "qabstracttextureprovider_p.h" #include <Qt3DCore/qscenepropertychange.h> +#include <Qt3DRenderer/qabstracttextureimage.h> QT_BEGIN_NAMESPACE @@ -299,6 +300,55 @@ QList<TexImageDataPtr> QAbstractTextureProvider::imageData() const } /*! + Adds a new Qt3D::QAbstractTextureImage \a texture image to the texture provider. + */ +void QAbstractTextureProvider::addTextureImage(QAbstractTextureImage *textureImage) +{ + Q_D(QAbstractTextureProvider); + if (!d->m_textureImages.contains(textureImage)) { + d->m_textureImages.append(textureImage); + + // We need to add it as a child of the current node if it has been declared inline + // Or not previously added as a child of the current node so that + // 1) The backend gets notified about it's creation + // 2) When the current node is destroyed, it gets destroyed as well + if (!textureImage->parent()) + textureImage->setParent(this); + + if (d->m_changeArbiter != Q_NULLPTR) { + QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, this)); + change->setPropertyName(QByteArrayLiteral("textureImage")); + change->setValue(QVariant::fromValue(textureImage->id())); + d->notifyObservers(change); + } + } +} + +/*! + Removes a Qt3D::QAbstractTextureImage \a texture image form the texture provider. + */ +void QAbstractTextureProvider::removeTextureImage(QAbstractTextureImage *textureImage) +{ + Q_D(QAbstractTextureProvider); + if (d->m_changeArbiter != Q_NULLPTR) { + QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, this)); + change->setPropertyName(QByteArrayLiteral("textureImage")); + change->setValue(QVariant::fromValue(textureImage->id())); + d->notifyObservers(change); + } + d->m_textureImages.removeOne(textureImage); +} + +/*! +\return the list of QAbstractTextureImage * contained in the texture provider. + */ +QList<QAbstractTextureImage *> QAbstractTextureProvider::textureImages() const +{ + Q_D(const QAbstractTextureProvider); + return d->m_textureImages; +} + +/*! Sets whether the texture provider should auto generate mipmaps. */ void QAbstractTextureProvider::setGenerateMipMaps(bool gen) diff --git a/src/render/frontend/qabstracttextureprovider.h b/src/render/frontend/qabstracttextureprovider.h index dbe9dee62..5d2bb4a92 100644 --- a/src/render/frontend/qabstracttextureprovider.h +++ b/src/render/frontend/qabstracttextureprovider.h @@ -52,6 +52,7 @@ namespace Qt3D { class QAbstractTextureProviderPrivate; class QTextureWrapMode; +class QAbstractTextureImage; class QT3DRENDERERSHARED_EXPORT QAbstractTextureProvider : public QNode { @@ -266,18 +267,16 @@ public: Status status() const; - /** - * @brief setFromQImage - set size and image data based upon a QImage - * Can optionally generate mip-map levels automatically too. Target - * must be Texture2D, Texture2DArray or TextureRectangle. - * @param img - valid QImage. If Texture2D is set, should be power-of-2 - * dimensions. - */ + // Those 3 methods should be removed + // kept to keep things working a little longer; bool setFromQImage(QImage img, int layer = 0); - void addImageData(TexImageDataPtr imgData); QList<TexImageDataPtr> imageData() const; + void addTextureImage(QAbstractTextureImage *textureImage); + void removeTextureImage(QAbstractTextureImage *textureImage); + QList<QAbstractTextureImage *> textureImages() const; + void setGenerateMipMaps(bool gen); bool generateMipMaps() const; diff --git a/src/render/frontend/qabstracttextureprovider_p.h b/src/render/frontend/qabstracttextureprovider_p.h index b9b7f51dd..e40e1c106 100644 --- a/src/render/frontend/qabstracttextureprovider_p.h +++ b/src/render/frontend/qabstracttextureprovider_p.h @@ -72,6 +72,7 @@ public : float m_maximumAnisotropy; QAbstractTextureProvider::ComparisonFunction m_comparisonFunction; QAbstractTextureProvider::ComparisonMode m_comparisonMode; + QList<QAbstractTextureImage *> m_textureImages; }; } // QT3D |