summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRobert Brock <robert.brock@kdab.com>2016-04-05 16:09:57 +0100
committerRobert Brock <robert.brock@kdab.com>2016-04-19 10:17:48 +0000
commit5d059e75f96a7661b936ed036c44dfa5ee18a108 (patch)
tree66f09ce7a2d345a6d911c3be01478ae3b288ba13 /src
parentd5b665cb40c25ff8ddb5ad7ebe74e04dd91c045b (diff)
Changes to handle ScenePropertyChange
TextureImage loading job now notifies frontend Change-Id: I6d725e4343c4f36a918c4deb38e6c832970fa5e8 Task-number: QTBUG-51453 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/render/frontend/qabstractfunctor.h8
-rw-r--r--src/render/jobs/loadtexturedatajob.cpp9
-rw-r--r--src/render/texture/qtextureimage_p.h7
-rw-r--r--src/render/texture/textureimage.cpp11
-rw-r--r--src/render/texture/textureimage_p.h2
5 files changed, 36 insertions, 1 deletions
diff --git a/src/render/frontend/qabstractfunctor.h b/src/render/frontend/qabstractfunctor.h
index 715b43de8..e99953797 100644
--- a/src/render/frontend/qabstractfunctor.h
+++ b/src/render/frontend/qabstractfunctor.h
@@ -88,6 +88,14 @@ public:
}
};
+template<class T>
+const T *functor_cast(const QAbstractFunctor *other)
+{
+ if (other->id() == functorTypeId<T>())
+ return static_cast<const T *>(other);
+ return Q_NULLPTR;
+}
+
} // Qt3D
QT_END_NAMESPACE
diff --git a/src/render/jobs/loadtexturedatajob.cpp b/src/render/jobs/loadtexturedatajob.cpp
index 698167d13..fb9c466cf 100644
--- a/src/render/jobs/loadtexturedatajob.cpp
+++ b/src/render/jobs/loadtexturedatajob.cpp
@@ -41,6 +41,7 @@
#include <Qt3DRender/private/nodemanagers_p.h>
#include <Qt3DRender/private/managers_p.h>
#include <Qt3DRender/private/texturedatamanager_p.h>
+#include <Qt3DRender/private/qtextureimage_p.h>
#include <Qt3DRender/qtexturedata.h>
#include <QThread>
#include <Qt3DRender/private/job_common_p.h>
@@ -60,7 +61,8 @@ LoadTextureDataJob::~LoadTextureDataJob()
{
}
-static QPair<HTextureData, QTexImageData *> textureDataFromGenerator(TextureDataManager *textureDataManager, QTextureImageDataGeneratorPtr generator)
+static QPair<HTextureData, QTexImageData *> textureDataFromGenerator(TextureDataManager *textureDataManager,
+ QTextureImageDataGeneratorPtr generator)
{
HTextureData textureDataHandle;
QTexImageData *data = Q_NULLPTR;
@@ -128,6 +130,11 @@ void LoadTextureDataJob::run()
QPair<HTextureData, QTexImageData *> handleData = textureDataFromGenerator(textureDataManager, generator);
+ // If using QTextureImage, notify the frontend of the change in status
+ const QImageTextureDataFunctor *imageGenerator = functor_cast<QImageTextureDataFunctor>(generator.data());
+ if (imageGenerator)
+ texImg->setStatus(imageGenerator->status());
+
HTextureData textureDataHandle = handleData.first;
QTexImageData *data = handleData.second;
diff --git a/src/render/texture/qtextureimage_p.h b/src/render/texture/qtextureimage_p.h
index c505e761e..173cbcdb1 100644
--- a/src/render/texture/qtextureimage_p.h
+++ b/src/render/texture/qtextureimage_p.h
@@ -94,6 +94,7 @@ public:
QImage img;
if (img.load(source)) {
dataPtr->setImage(img);
+
return dataPtr;
}
dataPtr.reset();
@@ -110,10 +111,16 @@ public:
return (otherFunctor != Q_NULLPTR && otherFunctor->m_url == m_url);
}
+ QTextureImage::Status status() const
+ {
+ return m_status;
+ }
+
QT3D_FUNCTOR(QImageTextureDataFunctor)
private:
QUrl m_url;
+ QTextureImage::Status m_status;
};
} // namespace Qt3DRender
diff --git a/src/render/texture/textureimage.cpp b/src/render/texture/textureimage.cpp
index 045b8e234..1b451f868 100644
--- a/src/render/texture/textureimage.cpp
+++ b/src/render/texture/textureimage.cpp
@@ -38,6 +38,7 @@
****************************************************************************/
#include "textureimage_p.h"
+#include <Qt3DCore/qbackendscenepropertychange.h>
#include <Qt3DCore/qscenepropertychange.h>
#include <Qt3DRender/private/managers_p.h>
#include <Qt3DRender/private/texturedatamanager_p.h>
@@ -176,6 +177,16 @@ void TextureImage::setTextureDataHandle(HTextureData handle)
updateDNA();
}
+void TextureImage::setStatus(QTextureImage::Status status)
+{
+ // Notify the frontend
+ QBackendScenePropertyChangePtr e(new QBackendScenePropertyChange(NodeUpdated, peerId()));
+ e->setPropertyName("status");
+ e->setValue(status);
+ e->setTargetNode(peerId());
+ notifyObservers(e);
+}
+
void TextureImage::updateDNA()
{
m_dna = ::qHash(m_layer
diff --git a/src/render/texture/textureimage_p.h b/src/render/texture/textureimage_p.h
index 99a7912de..986d73729 100644
--- a/src/render/texture/textureimage_p.h
+++ b/src/render/texture/textureimage_p.h
@@ -54,6 +54,7 @@
#include <Qt3DRender/private/backendnode_p.h>
#include <Qt3DRender/private/handle_types_p.h>
#include <Qt3DRender/qabstracttexture.h>
+#include <Qt3DRender/qtextureimage.h>
#include <Qt3DRender/qabstracttextureimage.h>
#include <qglobal.h>
@@ -90,6 +91,7 @@ public:
void setTextureManager(TextureManager *manager);
void setTextureImageManager(TextureImageManager *manager);
void setTextureDataManager(TextureDataManager *manager);
+ void setStatus(QTextureImage::Status status);
void unsetDirty();
inline bool isDirty() const { return m_dirty; }