diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2014-07-30 08:36:30 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2014-08-14 15:17:42 +0200 |
commit | 6c7171798c62e997a0eb7bbf3eed1059462c020a (patch) | |
tree | 99d99978cab13081dd3c58af959936c4c922831a /src/render/frontend/qtechnique.cpp | |
parent | 4444673206845a81291adf88c26f2a162b4ac6a7 (diff) |
QTechnique criterion added as child if declared inline
Also connect the OpenGLFilter openGLFilterChanged signal to a slot that
notifies the backend about the change with a clone of the OpenGLFilter.
Change-Id: I2b426892c36e2d1d7e192a1adf174c675a7b4408
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/frontend/qtechnique.cpp')
-rw-r--r-- | src/render/frontend/qtechnique.cpp | 81 |
1 files changed, 58 insertions, 23 deletions
diff --git a/src/render/frontend/qtechnique.cpp b/src/render/frontend/qtechnique.cpp index 685497556..09004419e 100644 --- a/src/render/frontend/qtechnique.cpp +++ b/src/render/frontend/qtechnique.cpp @@ -59,6 +59,8 @@ QTechniquePrivate::QTechniquePrivate(QTechnique *qq) QTechnique::QTechnique(QNode *parent) : QAbstractTechnique(*new QTechniquePrivate(this), parent) { + Q_D(QTechnique); + QObject::connect(d->m_openGLFilter, SIGNAL(openGLFilterChanged()), this, SLOT(openGLFilterChanged())); } void QTechnique::copy(const QNode *ref) @@ -74,6 +76,8 @@ void QTechnique::copy(const QNode *ref) QTechnique::QTechnique(QTechniquePrivate &dd, QNode *parent) : QAbstractTechnique(dd, parent) { + Q_D(QTechnique); + QObject::connect(d->m_openGLFilter, SIGNAL(openGLFilterChanged()), this, SLOT(openGLFilterChanged())); } QTechnique *QTechnique::doClone(QNode *clonedParent) const @@ -91,26 +95,51 @@ QTechnique *QTechnique::doClone(QNode *clonedParent) const return technique; } +void QTechnique::openGLFilterChanged() +{ + Q_D(QTechnique); + if (d->m_changeArbiter != Q_NULLPTR) { + QScenePropertyChangePtr change(new QScenePropertyChange(NodeUpdated, this)); + change->setPropertyName(QByteArrayLiteral("openGLFilter")); + QOpenGLFilter *clone = new QOpenGLFilter(); + clone->copy(d->m_openGLFilter); + change->setValue(QVariant::fromValue(clone)); + notifyObservers(change); + } +} + void QTechnique::addCriterion(QCriterion *criterion) { Q_D(QTechnique); if (!d->m_criteriaList.contains(criterion)) { d->m_criteriaList.append(criterion); - QScenePropertyChangePtr change(new QScenePropertyChange(ComponentAdded, this)); - change->setPropertyName(QByteArrayLiteral("criterion")); - change->setValue(QVariant::fromValue(criterion)); - notifyObservers(change); + + // 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, it gets destroyed as well + if (!criterion->parent() || criterion->parent() == this) + QNode::addChild(criterion); + + if (d->m_changeArbiter != Q_NULLPTR) { + QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, this)); + change->setPropertyName(QByteArrayLiteral("criterion")); + change->setValue(QVariant::fromValue(criterion)); + notifyObservers(change); + } } } void QTechnique::removeCriterion(QCriterion *criterion) { Q_D(QTechnique); + if (d->m_changeArbiter != Q_NULLPTR) { + QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, this)); + change->setPropertyName(QByteArrayLiteral("criterion")); + change->setValue(QVariant::fromValue(criterion->uuid())); + notifyObservers(change); + } d->m_criteriaList.removeOne(criterion); - QScenePropertyChangePtr change(new QScenePropertyChange(ComponentAdded, this)); - change->setPropertyName(QByteArrayLiteral("criterion")); - change->setValue(QVariant::fromValue(criterion->uuid())); - notifyObservers(change); } QList<QCriterion *> QTechnique::criteria() const @@ -126,33 +155,39 @@ void QTechnique::clearCriteria() removeCriterion(d->m_criteriaList.takeFirst()); } -void QTechnique::addPass(QAbstractRenderPass *pass) -{ - Q_CHECK_PTR(pass); - pass->setParent(this); - QAbstractTechnique::addPass(pass); -} - void QTechnique::addParameter(QParameter *parameter) { Q_D(QTechnique); if (!d->m_parameters.contains(parameter)) { d->m_parameters.append(parameter); - QScenePropertyChangePtr change(new QScenePropertyChange(ComponentAdded, this)); - change->setPropertyName(QByteArrayLiteral("parameter")); - change->setValue(QVariant::fromValue(parameter)); - notifyObservers(change); + + // 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->parent() == this) + QNode::addChild(parameter); + + if (d->m_changeArbiter != Q_NULLPTR) { + QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, this)); + change->setPropertyName(QByteArrayLiteral("parameter")); + change->setValue(QVariant::fromValue(parameter)); + notifyObservers(change); + } } } void QTechnique::removeParameter(QParameter *parameter) { Q_D(QTechnique); + + if (d->m_changeArbiter != Q_NULLPTR) { + QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, this)); + change->setPropertyName(QByteArrayLiteral("parameter")); + change->setValue(QVariant::fromValue(parameter)); + notifyObservers(change); + } d->m_parameters.removeOne(parameter); - QScenePropertyChangePtr change(new QScenePropertyChange(ComponentRemoved, this)); - change->setPropertyName(QByteArrayLiteral("parameter")); - change->setValue(QVariant::fromValue(parameter)); - notifyObservers(change); } QList<QParameter *> QTechnique::parameters() const |