summaryrefslogtreecommitdiffstats
path: root/src/render/framegraph/qlayerfilter.cpp
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2016-05-04 12:23:32 +0200
committerSean Harmer <sean.harmer@kdab.com>2016-05-04 15:32:52 +0000
commit7fa8b1523a0791a159c594687c89af7ae621752a (patch)
tree37d514632251ca22ba9713226a877de88ea2e663 /src/render/framegraph/qlayerfilter.cpp
parent2339fb571f1ca2e5d9057cccbb5989841c524dea (diff)
Get rid of QLayer::names
Don't reinvent a variable naming system (string based global variables even) and instead use pointer to QLayer instance everywhere, even with QLayerFilter. The wave and deferred-renderer-cpp examples have been ported to the new API. Change-Id: I82a858770954a8743a5c3d2ce0c463e62844871f Task-number: QTBUG-51440 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/framegraph/qlayerfilter.cpp')
-rw-r--r--src/render/framegraph/qlayerfilter.cpp40
1 files changed, 34 insertions, 6 deletions
diff --git a/src/render/framegraph/qlayerfilter.cpp b/src/render/framegraph/qlayerfilter.cpp
index 5a9f9d692..3d472805b 100644
--- a/src/render/framegraph/qlayerfilter.cpp
+++ b/src/render/framegraph/qlayerfilter.cpp
@@ -39,7 +39,10 @@
#include "qlayerfilter.h"
#include "qlayerfilter_p.h"
+#include "qlayer.h"
#include <Qt3DCore/qnodepropertychange.h>
+#include <Qt3DCore/qnodeaddedpropertychange.h>
+#include <Qt3DCore/qnoderemovedpropertychange.h>
QT_BEGIN_NAMESPACE
@@ -90,16 +93,41 @@ QLayerFilter::QLayerFilter(QLayerFilterPrivate &dd, QNode *parent)
*/
-void QLayerFilter::setLayers(const QStringList &layers)
+void QLayerFilter::addLayer(QLayer *layer)
{
+ Q_ASSERT(layer);
Q_D(QLayerFilter);
- if (d->m_layers != layers) {
- d->m_layers = layers;
- emit layersChanged(layers);
+ if (!d->m_layers.contains(layer)) {
+ d->m_layers.append(layer);
+
+ // We need to add it as a child of the current node if it has been declared inline
+ // Or not previously added as a child of the current node so that
+ // 1) The backend gets notified about it's creation
+ // 2) When the current node is destroyed, it gets destroyed as well
+ if (!layer->parent())
+ layer->setParent(this);
+
+ if (d->m_changeArbiter != nullptr) {
+ const auto change = Qt3DCore::QNodeAddedPropertyChangePtr::create(id(), layer);
+ change->setPropertyName("layer");
+ d->notifyObservers(change);
+ }
}
}
-QStringList QLayerFilter::layers() const
+void QLayerFilter::removeLayer(QLayer *layer)
+{
+ Q_ASSERT(layer);
+ Q_D(QLayerFilter);
+ if (d->m_changeArbiter != nullptr) {
+ const auto change = Qt3DCore::QNodeRemovedPropertyChangePtr::create(id(), layer);
+ change->setPropertyName("layer");
+ d->notifyObservers(change);
+ }
+ d->m_layers.removeOne(layer);
+}
+
+QVector<QLayer *> QLayerFilter::layers() const
{
Q_D(const QLayerFilter);
return d->m_layers;
@@ -110,7 +138,7 @@ Qt3DCore::QNodeCreatedChangeBasePtr QLayerFilter::createNodeCreationChange() con
auto creationChange = Qt3DCore::QNodeCreatedChangePtr<QLayerFilterData>::create(this);
auto &data = creationChange->data;
Q_D(const QLayerFilter);
- data.layers = d->m_layers;
+ data.layerIds = qIdsForNodes(d->m_layers);
return creationChange;
}