summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2019-09-19 12:26:49 +0200
committerPaul Lemire <paul.lemire@kdab.com>2019-09-25 15:36:43 +0200
commit81ba7578c9fa9781f5996aa8bf249ff8abdd1f9f (patch)
tree6f1d80fadc702adb34a12bbefc2a5611a43000bf /src
parentcca7720e68a3bf64dbf549b06ba13547cb29181c (diff)
Update QAbstractTextureImage to use direct sync
Change-Id: Ide55f36fc7e1ac197313307a1c3e58c06ac690a1 Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/render/frontend/qrenderaspect.cpp2
-rw-r--r--src/render/texture/qabstracttextureimage.cpp6
-rw-r--r--src/render/texture/qabstracttextureimage_p.h2
-rw-r--r--src/render/texture/textureimage.cpp53
-rw-r--r--src/render/texture/textureimage_p.h4
5 files changed, 38 insertions, 29 deletions
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp
index c83b5cb69..de27eb84f 100644
--- a/src/render/frontend/qrenderaspect.cpp
+++ b/src/render/frontend/qrenderaspect.cpp
@@ -277,7 +277,7 @@ void QRenderAspectPrivate::registerBackendTypes()
// Textures
q->registerBackendType<QAbstractTexture, true>(QSharedPointer<Render::TextureFunctor>::create(m_renderer, m_nodeManagers->textureManager()));
- q->registerBackendType<QAbstractTextureImage>(QSharedPointer<Render::TextureImageFunctor>::create(m_renderer,
+ q->registerBackendType<QAbstractTextureImage, true>(QSharedPointer<Render::TextureImageFunctor>::create(m_renderer,
m_nodeManagers->textureImageManager()));
// Material system
diff --git a/src/render/texture/qabstracttextureimage.cpp b/src/render/texture/qabstracttextureimage.cpp
index 42f8eb747..a5d342d83 100644
--- a/src/render/texture/qabstracttextureimage.cpp
+++ b/src/render/texture/qabstracttextureimage.cpp
@@ -94,6 +94,12 @@ QAbstractTextureImagePrivate::~QAbstractTextureImagePrivate()
{
}
+QTextureImageDataGeneratorPtr QAbstractTextureImagePrivate::dataGenerator() const
+{
+ Q_Q(const QAbstractTextureImage);
+ return q->dataGenerator();
+}
+
/*!
\qmltype AbstractTextureImage
\instantiates Qt3DRender::QAbstractTextureImage
diff --git a/src/render/texture/qabstracttextureimage_p.h b/src/render/texture/qabstracttextureimage_p.h
index a5299acd7..f93d0e3ca 100644
--- a/src/render/texture/qabstracttextureimage_p.h
+++ b/src/render/texture/qabstracttextureimage_p.h
@@ -54,6 +54,7 @@
#include <Qt3DCore/private/qnode_p.h>
#include <Qt3DRender/private/qt3drender_global_p.h>
#include <Qt3DRender/qabstracttexture.h>
+#include <Qt3DRender/qtextureimagedatagenerator.h>
QT_BEGIN_NAMESPACE
@@ -72,6 +73,7 @@ public:
int m_mipLevel;
int m_layer;
QAbstractTexture::CubeMapFace m_face;
+ QTextureImageDataGeneratorPtr dataGenerator() const;
};
struct QAbstractTextureImageData
diff --git a/src/render/texture/textureimage.cpp b/src/render/texture/textureimage.cpp
index 87cfdbca6..512949d91 100644
--- a/src/render/texture/textureimage.cpp
+++ b/src/render/texture/textureimage.cpp
@@ -72,36 +72,39 @@ void TextureImage::cleanup()
m_face = QAbstractTexture::CubeMapPositiveX;
}
-void TextureImage::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change)
+void TextureImage::syncFromFrontEnd(const QNode *frontEnd, bool firstTime)
{
- 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;
- m_dirty = true;
-}
+ const QAbstractTextureImage *node = qobject_cast<const QAbstractTextureImage *>(frontEnd);
+ if (!node)
+ return;
-void TextureImage::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
-{
- QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<QPropertyUpdatedChange>(e);
-
- if (e->type() == PropertyUpdated) {
- if (propertyChange->propertyName() == QByteArrayLiteral("layer")) {
- m_layer = propertyChange->value().toInt();
- } else if (propertyChange->propertyName() == QByteArrayLiteral("mipLevel")) {
- m_mipLevel = propertyChange->value().toInt();
- } else if (propertyChange->propertyName() == QByteArrayLiteral("face")) {
- m_face = static_cast<QAbstractTexture::CubeMapFace>(propertyChange->value().toInt());
- } else if (propertyChange->propertyName() == QByteArrayLiteral("dataGenerator")) {
- m_generator = propertyChange->value().value<QTextureImageDataGeneratorPtr>();
- }
+ const bool oldEnabled = isEnabled();
+ BackendNode::syncFromFrontEnd(frontEnd, firstTime);
+ m_dirty |= (oldEnabled != isEnabled());
+
+ if (node->layer() != m_layer) {
+ m_layer = node->layer();
+ m_dirty = true;
+ }
+
+ if (node->mipLevel() != m_mipLevel) {
+ m_mipLevel = node->mipLevel();
+ m_dirty = true;
+ }
+
+ if (node->face() != m_face) {
+ m_face = node->face();
+ m_dirty = true;
+ }
+
+ const QAbstractTextureImagePrivate *d = static_cast<const QAbstractTextureImagePrivate *>(QNodePrivate::get(node));
+ if (d->dataGenerator() != m_generator) {
+ m_generator = d->dataGenerator();
m_dirty = true;
}
- markDirty(AbstractRenderer::AllDirty);
- BackendNode::sceneChangeEvent(e);
+ if (m_dirty)
+ markDirty(AbstractRenderer::AllDirty);
}
void TextureImage::unsetDirty()
diff --git a/src/render/texture/textureimage_p.h b/src/render/texture/textureimage_p.h
index 490fe4432..57bbdea75 100644
--- a/src/render/texture/textureimage_p.h
+++ b/src/render/texture/textureimage_p.h
@@ -77,7 +77,7 @@ public:
~TextureImage();
void cleanup();
- void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override;
+ void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override;
inline int layer() const { return m_layer; }
inline int mipLevel() const { return m_mipLevel; }
@@ -87,8 +87,6 @@ public:
void unsetDirty();
private:
- void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final;
-
bool m_dirty;
int m_layer;
int m_mipLevel;