diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2016-04-01 15:26:33 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-04-10 15:03:33 +0000 |
commit | 8f0b53aeb270713a0cd5b92889b91cc3d51849d8 (patch) | |
tree | 1669a9c90d01e8fb3a22318b4e3ad19d944c4c9d /src | |
parent | 1d34ab1358a8e0330755ee222f33883b5fc1d95b (diff) |
QAbstractTextureImage creates creation changes
Backend type handles them too.
Change-Id: Ibd87c2e5a464c0953c1b017db21e7831ca4c6681
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/render/texture/qabstracttextureimage.cpp | 12 | ||||
-rw-r--r-- | src/render/texture/qabstracttextureimage.h | 1 | ||||
-rw-r--r-- | src/render/texture/qabstracttextureimage_p.h | 8 | ||||
-rw-r--r-- | src/render/texture/textureimage.cpp | 23 | ||||
-rw-r--r-- | src/render/texture/textureimage_p.h | 2 |
5 files changed, 46 insertions, 0 deletions
diff --git a/src/render/texture/qabstracttextureimage.cpp b/src/render/texture/qabstracttextureimage.cpp index 0f8af8d58..2f5c7e3c0 100644 --- a/src/render/texture/qabstracttextureimage.cpp +++ b/src/render/texture/qabstracttextureimage.cpp @@ -219,6 +219,18 @@ QAbstractTextureImage::QAbstractTextureImage(QAbstractTextureImagePrivate &dd, Q { } +Qt3DCore::QNodeCreatedChangeBasePtr QAbstractTextureImage::createNodeCreationChange() const +{ + auto creationChange = Qt3DCore::QNodeCreatedChangePtr<QAbstractTextureImageData>::create(this); + auto &data = creationChange->data; + Q_D(const QAbstractTextureImage); + data.mipLevel = d->m_mipLevel; + data.layer = d->m_layer; + data.face = d->m_face; + data.generator = dataGenerator(); + return creationChange; +} + } // namespace Qt3DRender QT_END_NAMESPACE diff --git a/src/render/texture/qabstracttextureimage.h b/src/render/texture/qabstracttextureimage.h index 5a88efc7b..80379fdaa 100644 --- a/src/render/texture/qabstracttextureimage.h +++ b/src/render/texture/qabstracttextureimage.h @@ -100,6 +100,7 @@ protected: private: Q_DECLARE_PRIVATE(QAbstractTextureImage) friend class Render::TextureImage; + Qt3DCore::QNodeCreatedChangeBasePtr createNodeCreationChange() const Q_DECL_OVERRIDE; }; } // namespace Qt3DRender diff --git a/src/render/texture/qabstracttextureimage_p.h b/src/render/texture/qabstracttextureimage_p.h index ac85be831..5630643d8 100644 --- a/src/render/texture/qabstracttextureimage_p.h +++ b/src/render/texture/qabstracttextureimage_p.h @@ -79,6 +79,14 @@ public: QAbstractTexture::CubeMapFace m_face; }; +struct QAbstractTextureImageData +{ + int mipLevel; + int layer; + QAbstractTexture::CubeMapFace face; + QTextureImageDataGeneratorPtr generator; +}; + } // namespace Qt3DRender QT_END_NAMESPACE diff --git a/src/render/texture/textureimage.cpp b/src/render/texture/textureimage.cpp index 5db481fea..8fbcf2fb4 100644 --- a/src/render/texture/textureimage.cpp +++ b/src/render/texture/textureimage.cpp @@ -41,6 +41,7 @@ #include <Qt3DCore/qscenepropertychange.h> #include <Qt3DRender/private/managers_p.h> #include <Qt3DRender/private/texturedatamanager_p.h> +#include <Qt3DRender/private/qabstracttextureimage_p.h> QT_BEGIN_NAMESPACE @@ -97,6 +98,28 @@ void TextureImage::updateFromPeer(Qt3DCore::QNode *peer) } } +void TextureImage::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) +{ + const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QAbstractTextureImageData>>(change); + const auto &data = typedChange->data; + m_mipLevel = data.mipLevel; + m_layer = data.layer; + m_face = data.face; + m_generator = data.generator; + + if (!change->parentId()) { + qWarning() << "No QAbstractTextureProvider parent found"; + } else { + m_textureProviderId = change->parentId(); + m_textureProvider = m_textureManager->lookupHandle(m_textureProviderId); + Texture *texture = m_textureManager->data(m_textureProvider); + Q_ASSERT(texture); + // Notify the Texture that it has a new TextureImage and needs an update + texture->addTextureImageData(m_textureImageManager->lookupHandle(peerId())); + texture->addToPendingTextureJobs(); + } +} + void TextureImage::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) { QScenePropertyChangePtr propertyChange = qSharedPointerCast<QScenePropertyChange>(e); diff --git a/src/render/texture/textureimage_p.h b/src/render/texture/textureimage_p.h index 9a26a25a4..99a7912de 100644 --- a/src/render/texture/textureimage_p.h +++ b/src/render/texture/textureimage_p.h @@ -101,6 +101,8 @@ public: inline QTextureImageDataGeneratorPtr dataGenerator() const { return m_generator; } private: + void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) Q_DECL_FINAL; + void updateDNA(); QTextureImageDataGeneratorPtr m_generator; |