diff options
author | Juan José Casafranca <juan.casafranca@kdab.com> | 2017-05-23 23:38:53 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-08-02 17:56:42 +0000 |
commit | afd242a810612341a37d496007ad79317d2efbea (patch) | |
tree | d260149db9753cb2d05e8374f6aa137f0d4852be /src/render/frontend/qlayer.cpp | |
parent | 4392fa4df4a8f4623dd3ff881f2dd03c94b50c30 (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.cpp | 45 |
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 |