summaryrefslogtreecommitdiffstats
path: root/src/render/frontend/qrenderpass.cpp
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2014-10-15 11:20:02 +0200
committerSean Harmer <sean.harmer@kdab.com>2014-10-15 19:37:49 +0200
commit0f1d0ff5b3adb16afcda091e4ff4657f53581f79 (patch)
treebc82ff1bd2f31fe5fa54590ab3f1500d716b07eb /src/render/frontend/qrenderpass.cpp
parenta4b9ce44ae244104a941981405742ee42d53ebe0 (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.cpp32
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);