summaryrefslogtreecommitdiffstats
path: root/src/render/frontend/qlayer.cpp
diff options
context:
space:
mode:
authorJuan José Casafranca <juan.casafranca@kdab.com>2017-05-23 23:38:53 +0200
committerSean Harmer <sean.harmer@kdab.com>2017-08-02 17:56:42 +0000
commitafd242a810612341a37d496007ad79317d2efbea (patch)
treed260149db9753cb2d05e8374f6aa137f0d4852be /src/render/frontend/qlayer.cpp
parent4392fa4df4a8f4623dd3ff881f2dd03c94b50c30 (diff)
Accept/Drop entities and filter recursively
The layer now may specify if a subtree must be completely accepted recursively. The layerfilter can specify if the entities must be accepted or dropped. Task-number: QTBUG-59814 Change-Id: I7beff9e036d5de8b128cf960ba5f11477e5784e1 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/frontend/qlayer.cpp')
-rw-r--r--src/render/frontend/qlayer.cpp45
1 files changed, 42 insertions, 3 deletions
diff --git a/src/render/frontend/qlayer.cpp b/src/render/frontend/qlayer.cpp
index cd7d92caf..416525360 100644
--- a/src/render/frontend/qlayer.cpp
+++ b/src/render/frontend/qlayer.cpp
@@ -46,6 +46,7 @@ namespace Qt3DRender {
QLayerPrivate::QLayerPrivate()
: QComponentPrivate()
+ , m_recursive(false)
{
}
@@ -58,7 +59,7 @@ QLayerPrivate::QLayerPrivate()
Qt3DRender::QLayer works in conjunction with the Qt3DRender::QLayerFilter in the FrameGraph.
\sa Qt3DRender::QLayerFilter
- Qt3DRender::QLayer doesn't define any new properties but is supposed to only be referenced.
+ A QLayer can be applied to a subtree of entities by setting the recursive property to true.
\code
#include <Qt3DCore/QEntity>
@@ -73,6 +74,7 @@ QLayerPrivate::QLayerPrivate()
Qt3DCore::QEntity *renderableEntity = new Qt3DCore::Qt3DCore::QEntity(rootEntity);
Qt3DRender::QGeometryRenderer *geometryRenderer = new Qt3DCore::QGeometryRenderer(renderableEntity);
Qt3DRender::QLayer *layer1 = new Qt3DCore::QLayer(renderableEntity);
+ layer1->setRecursive(true);
renderableEntity->addComponent(geometryRenderer);
renderableEntity->addComponent(layer1);
@@ -86,6 +88,10 @@ QLayerPrivate::QLayerPrivate()
...
\endcode
*/
+/*!
+ \property QLayer::recursive
+ Specifies if the layer is also applied to the entity subtree.
+*/
/*!
\qmltype Layer
@@ -98,7 +104,7 @@ QLayerPrivate::QLayerPrivate()
Layer works in conjunction with the LayerFilter in the FrameGraph.
- Layer doesn't define any new properties but is supposed to only be referenced.
+ A Layer can be applied to a subtree of entities by setting the recursive property to true.
\code
import Qt3D.Core 2.0
@@ -125,7 +131,10 @@ QLayerPrivate::QLayerPrivate()
// Scene
Camera { id: mainCamera }
- Layer { id: layer1 }
+ Layer {
+ id: layer1
+ recursive: true
+ }
GeometryRenderer { id: mesh }
@@ -137,6 +146,12 @@ QLayerPrivate::QLayerPrivate()
\endcode
*/
+/*!
+ \qmlproperty bool Layer::recursive
+
+ Specifies if the layer is also applied to the entity subtree.
+*/
+
/*! \fn Qt3DRender::QLayer::QLayer(Qt3DCore::QNode *parent)
Constructs a new QLayer with the specified \a parent.
*/
@@ -151,12 +166,36 @@ QLayer::~QLayer()
{
}
+bool QLayer::recursive() const
+{
+ Q_D(const QLayer);
+ return d->m_recursive;
+}
+
+void QLayer::setRecursive(bool recursive)
+{
+ Q_D(QLayer);
+ if (d->m_recursive != recursive) {
+ d->m_recursive = recursive;
+ emit recursiveChanged();
+ }
+}
+
/*! \internal */
QLayer::QLayer(QLayerPrivate &dd, QNode *parent)
: QComponent(dd, parent)
{
}
+Qt3DCore::QNodeCreatedChangeBasePtr QLayer::createNodeCreationChange() const
+{
+ auto creationChange = Qt3DCore::QNodeCreatedChangePtr<QLayerData>::create(this);
+ auto &data = creationChange->data;
+ Q_D(const QLayer);
+ data.m_recursive = d->m_recursive;
+ return creationChange;
+}
+
} // namespace Qt3DRender
QT_END_NAMESPACE