diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-09-19 12:26:49 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-09-25 15:36:43 +0200 |
commit | 81ba7578c9fa9781f5996aa8bf249ff8abdd1f9f (patch) | |
tree | 6f1d80fadc702adb34a12bbefc2a5611a43000bf /src | |
parent | cca7720e68a3bf64dbf549b06ba13547cb29181c (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.cpp | 2 | ||||
-rw-r--r-- | src/render/texture/qabstracttextureimage.cpp | 6 | ||||
-rw-r--r-- | src/render/texture/qabstracttextureimage_p.h | 2 | ||||
-rw-r--r-- | src/render/texture/textureimage.cpp | 53 | ||||
-rw-r--r-- | src/render/texture/textureimage_p.h | 4 |
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; |