summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-03-27 14:36:37 +0100
committerSean Harmer <sean.harmer@kdab.com>2015-05-09 20:06:47 +0000
commitb3566c035298feb506a83ef0dda81c6135c784a1 (patch)
tree93a814c0faa95f5614b15b1ab9991b094d1d61ae
parent83cb091f77e68d40fa0e338c6a6202617b94887a (diff)
QTechniqueFilter: add/remove QParameter
Change-Id: Ia198b01555bbeeaecc7062dbdd05275b49b43b62 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r--src/render/backend/framegraph/techniquefilternode.cpp13
-rw-r--r--src/render/backend/framegraph/techniquefilternode_p.h4
-rw-r--r--src/render/frontend/framegraph-components/qtechniquefilter.cpp42
-rw-r--r--src/render/frontend/framegraph-components/qtechniquefilter.h5
-rw-r--r--src/render/frontend/framegraph-components/qtechniquefilter_p.h1
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