summaryrefslogtreecommitdiffstats
path: root/src/render/framegraph/subtreeenabler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/framegraph/subtreeenabler.cpp')
-rw-r--r--src/render/framegraph/subtreeenabler.cpp37
1 files changed, 36 insertions, 1 deletions
diff --git a/src/render/framegraph/subtreeenabler.cpp b/src/render/framegraph/subtreeenabler.cpp
index e4b4e4ba7..160e1a5b5 100644
--- a/src/render/framegraph/subtreeenabler.cpp
+++ b/src/render/framegraph/subtreeenabler.cpp
@@ -38,6 +38,8 @@
****************************************************************************/
#include "subtreeenabler_p.h"
+#include <Qt3DRender/private/qsubtreeenabler_p.h>
+#include <Qt3DCore/qpropertyupdatedchange.h>
QT_BEGIN_NAMESPACE
@@ -46,10 +48,43 @@ namespace Qt3DRender {
namespace Render {
SubtreeEnabler::SubtreeEnabler()
- : FrameGraphNode(FrameGraphNode::SubtreeEnabler)
+ : FrameGraphNode(FrameGraphNode::SubtreeEnabler, FrameGraphNode::ReadWrite)
{
}
+void SubtreeEnabler::sendDisableToFrontend()
+{
+ if (m_enablement != QSubtreeEnabler::SingleShot)
+ return;
+
+ if (isEnabled())
+ return;
+
+ auto e = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId());
+ e->setDeliveryFlags(Qt3DCore::QSceneChange::DeliverToAll);
+ e->setPropertyName("enabled");
+ e->setValue(false);
+ notifyObservers(e);
+}
+
+void SubtreeEnabler::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime)
+{
+ const QSubtreeEnabler *node = qobject_cast<const QSubtreeEnabler *>(frontEnd);
+ if (!node)
+ return;
+
+ if (node->isEnabled() != isEnabled())
+ markDirty(AbstractRenderer::AllDirty);
+
+ FrameGraphNode::syncFromFrontEnd(frontEnd, firstTime);
+
+ const auto enablement = node->enablement();
+ if (enablement != m_enablement) {
+ m_enablement = enablement;
+ markDirty(AbstractRenderer::FrameGraphDirty);
+ }
+}
+
} //Render
} //Qt3DRender