diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-03-27 12:10:00 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-05-09 20:06:32 +0000 |
commit | dad271abb485cffd48417605bc030ad5c6a6845e (patch) | |
tree | a1fd555b252a2f1832b24163b9af16595d780f08 /src/render/frontend | |
parent | 4cf6ff4a0771fc2dab90525b084c2e90e5335bc2 (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.cpp | 42 | ||||
-rw-r--r-- | src/render/frontend/qrenderpass.h | 4 | ||||
-rw-r--r-- | src/render/frontend/qrenderpass_p.h | 1 |
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; }; |