summaryrefslogtreecommitdiffstats
path: root/src/render/frontend
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-03-27 12:10:00 +0100
committerSean Harmer <sean.harmer@kdab.com>2015-05-09 20:06:32 +0000
commitdad271abb485cffd48417605bc030ad5c6a6845e (patch)
treea1fd555b252a2f1832b24163b9af16595d780f08 /src/render/frontend
parent4cf6ff4a0771fc2dab90525b084c2e90e5335bc2 (diff)
QRenderPass: add/remove Parameters
Change-Id: Ibccaa97c9cd1d9e8229ea59228ef2535b23b64b7 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/frontend')
-rw-r--r--src/render/frontend/qrenderpass.cpp42
-rw-r--r--src/render/frontend/qrenderpass.h4
-rw-r--r--src/render/frontend/qrenderpass_p.h1
3 files changed, 47 insertions, 0 deletions
diff --git a/src/render/frontend/qrenderpass.cpp b/src/render/frontend/qrenderpass.cpp
index cfa6fee2e..3c58b87b1 100644
--- a/src/render/frontend/qrenderpass.cpp
+++ b/src/render/frontend/qrenderpass.cpp
@@ -250,6 +250,48 @@ QList<QRenderState *> QRenderPass::renderStates() const
return d->m_renderStates;
}
+void QRenderPass::addParameter(QParameter *parameter)
+{
+ Q_D(QRenderPass);
+ 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 QRenderPass::removeParameter(QParameter *parameter)
+{
+ Q_D(QRenderPass);
+
+ 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 *> QRenderPass::parameters() const
+{
+ Q_D(const QRenderPass);
+ return d->m_parameters;
+}
+
} // namespace Qt3D
QT_END_NAMESPACE
diff --git a/src/render/frontend/qrenderpass.h b/src/render/frontend/qrenderpass.h
index f4e53552f..1f401860d 100644
--- a/src/render/frontend/qrenderpass.h
+++ b/src/render/frontend/qrenderpass.h
@@ -86,6 +86,10 @@ public:
void removeRenderState(QRenderState *state);
QList<QRenderState *> renderStates() const;
+ void addParameter(QParameter *p);
+ void removeParameter(QParameter *p);
+ QList<QParameter *> parameters() const;
+
Q_SIGNALS:
void shaderProgramChanged();
diff --git a/src/render/frontend/qrenderpass_p.h b/src/render/frontend/qrenderpass_p.h
index 3783e3d2e..33017fd83 100644
--- a/src/render/frontend/qrenderpass_p.h
+++ b/src/render/frontend/qrenderpass_p.h
@@ -71,6 +71,7 @@ public:
QList<QAnnotation *> m_annotationList;
QList<QParameterMapping *> m_bindings;
QList<QRenderState *> m_renderStates;
+ QList<QParameter *> m_parameters;
QShaderProgram *m_shader;
};