diff options
author | Kevin Ottens <kevin.ottens@kdab.com> | 2014-10-15 11:20:02 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2014-10-15 19:37:49 +0200 |
commit | 0f1d0ff5b3adb16afcda091e4ff4657f53581f79 (patch) | |
tree | bc82ff1bd2f31fe5fa54590ab3f1500d716b07eb /src/render/frontend/qrenderpass.cpp | |
parent | a4b9ce44ae244104a941981405742ee42d53ebe0 (diff) |
Hide doClone implementations behind a macro
This way we will avoid inconsistencies. It also means making some of the
copy() implementations more clever.
Change-Id: Ic79c9ec7c9c32f8951d5d9f5184592880bf8d5fd
Reviewed-by: James Turner <james.turner@kdab.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/frontend/qrenderpass.cpp')
-rw-r--r-- | src/render/frontend/qrenderpass.cpp | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/src/render/frontend/qrenderpass.cpp b/src/render/frontend/qrenderpass.cpp index ad5142533..7057103f5 100644 --- a/src/render/frontend/qrenderpass.cpp +++ b/src/render/frontend/qrenderpass.cpp @@ -61,6 +61,20 @@ QRenderPassPrivate::QRenderPassPrivate(QRenderPass *qq) { } +void QRenderPassPrivate::copy(const QNodePrivate *ref) +{ + QNodePrivate::copy(ref); + const QRenderPassPrivate *other = static_cast<const QRenderPassPrivate*>(ref); + m_shader = qobject_cast<QShaderProgram *>(QNodePrivate::get(other->m_shader)->clone()); + + Q_FOREACH (QCriterion *crit, other->m_criteriaList) + q_func()->addCriterion(qobject_cast<QCriterion *>(QNodePrivate::get(crit)->clone())); + Q_FOREACH (QParameterMapper *binding, other->m_bindings) + q_func()->addBinding(qobject_cast<QParameterMapper *>(QNodePrivate::get(binding)->clone())); + Q_FOREACH (QRenderState *renderState, other->m_renderStates) + q_func()->addRenderState(qobject_cast<QRenderState *>(QNodePrivate::get(renderState)->clone())); +} + QRenderPass::QRenderPass(QNode *parent) : QNode(*new QRenderPassPrivate(this), parent) { @@ -71,24 +85,6 @@ QRenderPass::QRenderPass(QRenderPassPrivate &dd, QNode *parent) { } -QRenderPass *QRenderPass::doClone() const -{ - Q_D(const QRenderPass); - QRenderPass *pass = new QRenderPass(); - - pass->d_func()->copy(d_func()); - - Q_FOREACH (QCriterion *crit, d->m_criteriaList) - pass->addCriterion(qobject_cast<QCriterion *>(QNodePrivate::get(crit)->clone())); - Q_FOREACH (QParameterMapper *binding, d->m_bindings) - pass->addBinding(qobject_cast<QParameterMapper *>(QNodePrivate::get(binding)->clone())); - Q_FOREACH (QRenderState *renderState, d->m_renderStates) - pass->addRenderState(qobject_cast<QRenderState *>(QNodePrivate::get(renderState)->clone())); - pass->d_func()->m_shader = qobject_cast<QShaderProgram *>(QNodePrivate::get(d->m_shader)->clone()); - - return pass; -} - ParameterList QRenderPass::attributes() const { Q_D(const QRenderPass); |