diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2014-09-19 08:37:03 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2014-09-30 12:16:39 +0200 |
commit | 94bb50fba66435a078f30b1da9cf5507522ab136 (patch) | |
tree | 1c48f4e4463dd0f28fcd38efb259017987bbc8d6 /src/render/frontend/qrenderpass.cpp | |
parent | 616e8083872c953a31acc871749e05c621c18bd1 (diff) |
Improved/Refactored cloning and doClone off all subclasses
Note: As we are using QScene during cloning, it is important that node hierarchy
be created and added in the proper order (parent then child).
Change-Id: I8fd53f7ca696ec9aca19cc70dc116ccba4154911
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/frontend/qrenderpass.cpp')
-rw-r--r-- | src/render/frontend/qrenderpass.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/render/frontend/qrenderpass.cpp b/src/render/frontend/qrenderpass.cpp index fd7168f84..8c805992c 100644 --- a/src/render/frontend/qrenderpass.cpp +++ b/src/render/frontend/qrenderpass.cpp @@ -67,18 +67,21 @@ QRenderPass::QRenderPass(QRenderPassPrivate &dd, QNode *parent) { } -QRenderPass *QRenderPass::doClone(QNode *clonedParent) const +QRenderPass *QRenderPass::doClone(bool isClone) const { Q_D(const QRenderPass); - QRenderPass *pass = new QRenderPass(clonedParent); + QRenderPass *pass = new QRenderPass(); + + pass->copy(this); + pass->d_func()->m_isClone = isClone; Q_FOREACH (QCriterion *crit, d->m_criteriaList) - pass->addCriterion(qobject_cast<QCriterion *>(crit->clone(pass))); + pass->addCriterion(qobject_cast<QCriterion *>(crit->clone(isClone))); Q_FOREACH (QParameterMapper *binding, d->m_bindings) - pass->addBinding(qobject_cast<QParameterMapper *>(binding->clone(pass))); + pass->addBinding(qobject_cast<QParameterMapper *>(binding->clone(isClone))); Q_FOREACH (QRenderState *renderState, d->m_renderStates) - pass->addRenderState(qobject_cast<QRenderState *>(renderState->clone(pass))); - pass->d_func()->m_shader = qobject_cast<QShaderProgram *>(d->m_shader->clone(pass)); + pass->addRenderState(qobject_cast<QRenderState *>(renderState->clone(isClone))); + pass->d_func()->m_shader = qobject_cast<QShaderProgram *>(d->m_shader->clone(isClone)); return pass; } |