diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-09-18 12:34:03 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-09-25 11:41:04 +0200 |
commit | 20e42a2c2072ab99588566cd5ee67e0dd4efcc44 (patch) | |
tree | 5679f37449b0830ed5e47a8e721063324aa3a614 | |
parent | 6370b00fc647f4c064f5c83cda8f0a5fb82a7fbf (diff) |
Update QRenderTargetOuput to use direct sync
Change-Id: I1ebcd2412a8f7759166bedf88e1c08c8cc816663
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r-- | src/render/backend/rendertargetoutput.cpp | 65 | ||||
-rw-r--r-- | src/render/backend/rendertargetoutput_p.h | 3 | ||||
-rw-r--r-- | src/render/frontend/qrenderaspect.cpp | 2 |
3 files changed, 34 insertions, 36 deletions
diff --git a/src/render/backend/rendertargetoutput.cpp b/src/render/backend/rendertargetoutput.cpp index cba92596d..edfc7132e 100644 --- a/src/render/backend/rendertargetoutput.cpp +++ b/src/render/backend/rendertargetoutput.cpp @@ -55,15 +55,39 @@ RenderTargetOutput::RenderTargetOutput() { } -void RenderTargetOutput::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) +void RenderTargetOutput::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) { - const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QRenderTargetOutputData>>(change); - const auto &data = typedChange->data; - m_attachmentData.m_point = data.attachmentPoint; - m_attachmentData.m_mipLevel = data.mipLevel; - m_attachmentData.m_layer = data.layer; - m_attachmentData.m_face = data.face; - m_attachmentData.m_textureUuid = data.textureId; + const QRenderTargetOutput *node = qobject_cast<const QRenderTargetOutput *>(frontEnd); + if (!node) + return; + + const bool oldEnabled = isEnabled(); + BackendNode::syncFromFrontEnd(frontEnd, firstTime); + + if (node->attachmentPoint() != m_attachmentData.m_point) { + m_attachmentData.m_point = node->attachmentPoint(); + markDirty(AbstractRenderer::AllDirty); + } + if (node->mipLevel() != m_attachmentData.m_mipLevel) { + m_attachmentData.m_mipLevel = node->mipLevel(); + markDirty(AbstractRenderer::AllDirty); + } + if (node->layer() != m_attachmentData.m_layer) { + m_attachmentData.m_layer = node->layer(); + markDirty(AbstractRenderer::AllDirty); + } + if (node->face() != m_attachmentData.m_face) { + m_attachmentData.m_face = node->face(); + markDirty(AbstractRenderer::AllDirty); + } + const auto textureId = Qt3DCore::qIdForNode(node->texture()); + if (textureId != m_attachmentData.m_textureUuid) { + m_attachmentData.m_textureUuid = textureId; + markDirty(AbstractRenderer::AllDirty); + } + + if (oldEnabled != isEnabled()) + markDirty(AbstractRenderer::AllDirty); } Qt3DCore::QNodeId RenderTargetOutput::textureUuid() const @@ -96,31 +120,6 @@ QRenderTargetOutput::AttachmentPoint RenderTargetOutput::point() const return m_attachmentData.m_point; } -void RenderTargetOutput::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) -{ - QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<QPropertyUpdatedChange>(e); - if (e->type() == PropertyUpdated) { - if (propertyChange->propertyName() == QByteArrayLiteral("type")) { - m_attachmentData.m_point = static_cast<QRenderTargetOutput::AttachmentPoint>(propertyChange->value().toInt()); - } - else if (propertyChange->propertyName() == QByteArrayLiteral("texture")) { - m_attachmentData.m_textureUuid = propertyChange->value().value<QNodeId>(); - } - else if (propertyChange->propertyName() == QByteArrayLiteral("mipLevel")) { - m_attachmentData.m_mipLevel = propertyChange->value().toInt(); - } - else if (propertyChange->propertyName() == QByteArrayLiteral("layer")) { - m_attachmentData.m_layer = propertyChange->value().toInt(); - } - else if (propertyChange->propertyName() == QByteArrayLiteral("face")) { - m_attachmentData.m_face = static_cast<QAbstractTexture::CubeMapFace>(propertyChange->value().toInt()); - } - markDirty(AbstractRenderer::AllDirty); - } - - BackendNode::sceneChangeEvent(e); -} - Qt3DRender::Render::Attachment *RenderTargetOutput::attachment() { return &m_attachmentData; diff --git a/src/render/backend/rendertargetoutput_p.h b/src/render/backend/rendertargetoutput_p.h index 20476547b..d72f6d231 100644 --- a/src/render/backend/rendertargetoutput_p.h +++ b/src/render/backend/rendertargetoutput_p.h @@ -76,12 +76,11 @@ public: QString name() const; QAbstractTexture::CubeMapFace face() const; QRenderTargetOutput::AttachmentPoint point() const; - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override; + void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; Attachment *attachment(); const Attachment *attachment() const; private: - void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final; Qt3DCore::QNodeId m_attachmentUuid; Attachment m_attachmentData; }; diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp index 1aef960f3..2e90375ae 100644 --- a/src/render/frontend/qrenderaspect.cpp +++ b/src/render/frontend/qrenderaspect.cpp @@ -261,7 +261,7 @@ void QRenderAspectPrivate::registerBackendTypes() q->registerBackendType<QLevelOfDetailSwitch, true>(QSharedPointer<Render::NodeFunctor<Render::LevelOfDetail, Render::LevelOfDetailManager> >::create(m_renderer)); q->registerBackendType<QSceneLoader, true>(QSharedPointer<Render::RenderSceneFunctor>::create(m_renderer, m_nodeManagers->sceneManager())); q->registerBackendType<QRenderTarget, true>(QSharedPointer<Render::NodeFunctor<Render::RenderTarget, Render::RenderTargetManager> >::create(m_renderer)); - q->registerBackendType<QRenderTargetOutput>(QSharedPointer<Render::NodeFunctor<Render::RenderTargetOutput, Render::AttachmentManager> >::create(m_renderer)); + q->registerBackendType<QRenderTargetOutput, true>(QSharedPointer<Render::NodeFunctor<Render::RenderTargetOutput, Render::AttachmentManager> >::create(m_renderer)); q->registerBackendType<QRenderSettings>(QSharedPointer<Render::RenderSettingsFunctor>::create(m_renderer)); q->registerBackendType<QRenderState>(QSharedPointer<Render::NodeFunctor<Render::RenderStateNode, Render::RenderStateManager> >::create(m_renderer)); |