summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2016-04-01 15:26:33 +0100
committerSean Harmer <sean.harmer@kdab.com>2016-04-10 15:03:33 +0000
commit8f0b53aeb270713a0cd5b92889b91cc3d51849d8 (patch)
tree1669a9c90d01e8fb3a22318b4e3ad19d944c4c9d /src
parent1d34ab1358a8e0330755ee222f33883b5fc1d95b (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.cpp12
-rw-r--r--src/render/texture/qabstracttextureimage.h1
-rw-r--r--src/render/texture/qabstracttextureimage_p.h8
-rw-r--r--src/render/texture/textureimage.cpp23
-rw-r--r--src/render/texture/textureimage_p.h2
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;