diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-03-27 14:36:37 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-05-09 20:06:47 +0000 |
commit | b3566c035298feb506a83ef0dda81c6135c784a1 (patch) | |
tree | 93a814c0faa95f5614b15b1ab9991b094d1d61ae | |
parent | 83cb091f77e68d40fa0e338c6a6202617b94887a (diff) |
QTechniqueFilter: add/remove QParameter
Change-Id: Ia198b01555bbeeaecc7062dbdd05275b49b43b62
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
5 files changed, 65 insertions, 0 deletions
diff --git a/src/render/backend/framegraph/techniquefilternode.cpp b/src/render/backend/framegraph/techniquefilternode.cpp index c9256ea87..9f8bd3c78 100644 --- a/src/render/backend/framegraph/techniquefilternode.cpp +++ b/src/render/backend/framegraph/techniquefilternode.cpp @@ -39,6 +39,7 @@ #include "qtechniquefilter.h" #include <Qt3DRenderer/private/managers_p.h> #include <Qt3DCore/qscenepropertychange.h> +#include <Qt3DRenderer/qparameter.h> QT_BEGIN_NAMESPACE @@ -54,11 +55,19 @@ void TechniqueFilter::updateFromPeer(QNode *peer) { QTechniqueFilter *filter = static_cast<QTechniqueFilter *>(peer); m_filters.clear(); + m_parameterPack.clear(); Q_FOREACH (QAnnotation *criterion, filter->criteria()) appendFilter(criterion); + Q_FOREACH (QParameter *p, filter->parameters()) + m_parameterPack.appendParameter(p->id()); setEnabled(filter->isEnabled()); } +QList<QNodeId> TechniqueFilter::parameters() const +{ + return m_parameterPack.parameters(); +} + QList<QNodeId> TechniqueFilter::filters() const { return m_filters; @@ -89,11 +98,15 @@ void TechniqueFilter::sceneChangeEvent(const QSceneChangePtr &e) case NodeAdded: { if (propertyChange->propertyName() == QByteArrayLiteral("require")) appendFilter(propertyChange->value().value<QAnnotation *>()); + else if (propertyChange->propertyName() == QByteArrayLiteral("parameter")) + m_parameterPack.appendParameter(propertyChange->value().value<QNodeId>()); } break; case NodeRemoved: { if (propertyChange->propertyName() == QByteArrayLiteral("require")) removeFilter(propertyChange->value().value<QNodeId>()); + else if (propertyChange->propertyName() == QByteArrayLiteral("parameter")) + m_parameterPack.removeParameter(propertyChange->value().value<QNodeId>()); } break; default: diff --git a/src/render/backend/framegraph/techniquefilternode_p.h b/src/render/backend/framegraph/techniquefilternode_p.h index 1d4338d37..af32e991c 100644 --- a/src/render/backend/framegraph/techniquefilternode_p.h +++ b/src/render/backend/framegraph/techniquefilternode_p.h @@ -38,6 +38,7 @@ #define QT3D_RENDER_TECHNIQUEFILTER_H #include <Qt3DRenderer/private/framegraphnode_p.h> +#include <Qt3DRenderer/private/parameterpack_p.h> #include <QList> #include <QString> @@ -62,6 +63,8 @@ public: TechniqueFilter(); void updateFromPeer(QNode *peer) Q_DECL_OVERRIDE; + QList<QNodeId> parameters() const; + QList<QNodeId> filters() const; void sceneChangeEvent(const QSceneChangePtr &e) Q_DECL_OVERRIDE; @@ -70,6 +73,7 @@ private: void removeFilter(const QNodeId &criterionId); QList<QNodeId> m_filters; + ParameterPack m_parameterPack; }; } // Render diff --git a/src/render/frontend/framegraph-components/qtechniquefilter.cpp b/src/render/frontend/framegraph-components/qtechniquefilter.cpp index 70984bd0d..d0801a535 100644 --- a/src/render/frontend/framegraph-components/qtechniquefilter.cpp +++ b/src/render/frontend/framegraph-components/qtechniquefilter.cpp @@ -38,6 +38,7 @@ #include "qtechniquefilter.h" #include "qtechniquefilter_p.h" #include <Qt3DRenderer/qannotation.h> +#include <Qt3DRenderer/qparameter.h> #include <Qt3DCore/qscenepropertychange.h> QT_BEGIN_NAMESPACE @@ -111,6 +112,47 @@ void QTechniqueFilter::removeRequirement(QAnnotation *criterion) d->m_requireList.removeOne(criterion); } +void QTechniqueFilter::addParameter(QParameter *parameter) +{ + Q_D(QTechniqueFilter); + if (!d->m_parameters.contains(parameter)) { + d->m_parameters.append(parameter); + + // 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, the child parameters get destroyed as well + if (!parameter->parent()) + parameter->setParent(this); + + if (d->m_changeArbiter != Q_NULLPTR) { + QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); + change->setPropertyName("parameter"); + change->setValue(QVariant::fromValue(parameter->id())); + d->notifyObservers(change); + } + } +} + +void QTechniqueFilter::removeParameter(QParameter *parameter) +{ + Q_D(QTechniqueFilter); + + if (d->m_changeArbiter != Q_NULLPTR) { + QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); + change->setPropertyName("parameter"); + change->setValue(QVariant::fromValue(parameter->id())); + d->notifyObservers(change); + } + d->m_parameters.removeOne(parameter); +} + +QList<QParameter *> QTechniqueFilter::parameters() const +{ + Q_D(const QTechniqueFilter); + return d->m_parameters; +} + } // Qt3D QT_END_NAMESPACE diff --git a/src/render/frontend/framegraph-components/qtechniquefilter.h b/src/render/frontend/framegraph-components/qtechniquefilter.h index 6d509d12c..b7ddcb9b4 100644 --- a/src/render/frontend/framegraph-components/qtechniquefilter.h +++ b/src/render/frontend/framegraph-components/qtechniquefilter.h @@ -46,6 +46,7 @@ namespace Qt3D { class QTechniqueFilterPrivate; class QAnnotation; +class QParameter; class QT3DRENDERERSHARED_EXPORT QTechniqueFilter : public QFrameGraphNode { @@ -57,6 +58,10 @@ public: void addRequirement(QAnnotation *criterion); void removeRequirement(QAnnotation *criterion); + void addParameter(QParameter *p); + void removeParameter(QParameter *p); + QList<QParameter *> parameters() const; + protected: QTechniqueFilter(QTechniqueFilterPrivate &dd, QNode *parent = 0); void copy(const QNode *ref) Q_DECL_OVERRIDE; diff --git a/src/render/frontend/framegraph-components/qtechniquefilter_p.h b/src/render/frontend/framegraph-components/qtechniquefilter_p.h index 08e03cb4f..eb522c6cc 100644 --- a/src/render/frontend/framegraph-components/qtechniquefilter_p.h +++ b/src/render/frontend/framegraph-components/qtechniquefilter_p.h @@ -52,6 +52,7 @@ public : Q_DECLARE_PUBLIC(QTechniqueFilter) QList<QAnnotation *> m_requireList; + QList<QParameter *> m_parameters; }; } // Qt3D |