summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2019-09-18 12:34:03 +0200
committerPaul Lemire <paul.lemire@kdab.com>2019-09-25 11:41:04 +0200
commit20e42a2c2072ab99588566cd5ee67e0dd4efcc44 (patch)
tree5679f37449b0830ed5e47a8e721063324aa3a614
parent6370b00fc647f4c064f5c83cda8f0a5fb82a7fbf (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.cpp65
-rw-r--r--src/render/backend/rendertargetoutput_p.h3
-rw-r--r--src/render/frontend/qrenderaspect.cpp2
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));