diff options
Diffstat (limited to 'src/core/transforms/qtransform.cpp')
-rw-r--r-- | src/core/transforms/qtransform.cpp | 48 |
1 files changed, 17 insertions, 31 deletions
diff --git a/src/core/transforms/qtransform.cpp b/src/core/transforms/qtransform.cpp index 96226c08e..8a4caf8ff 100644 --- a/src/core/transforms/qtransform.cpp +++ b/src/core/transforms/qtransform.cpp @@ -52,6 +52,7 @@ namespace Qt3D { QTransformPrivate::QTransformPrivate(QTransform *qq) : QComponentPrivate(qq) + , m_transformsDirty(false) , m_transforms() , m_matrix() , m_sceneMatrix() @@ -64,31 +65,25 @@ void QTransform::copy(const QNode *ref) const QTransform *transform = static_cast<const QTransform*>(ref); d_func()->m_matrix = transform->d_func()->m_matrix; Q_FOREACH (QAbstractTransform *t, transform->d_func()->m_transforms) - appendTransform(qobject_cast<QAbstractTransform *>(QNodePrivate::get(t)->clone())); + addTransform(qobject_cast<QAbstractTransform *>(QNodePrivate::get(t)->clone())); } QTransform::QTransform(QNode *parent) : Qt3D::QComponent(*new QTransformPrivate(this), parent) { - Q_D(QTransform); - d->m_transformsDirty.fetchAndStoreOrdered(0); } QTransform::QTransform(QList<QAbstractTransform *> transforms, QNode *parent) : Qt3D::QComponent(*new QTransformPrivate(this), parent) { - Q_D(QTransform); - d->m_transformsDirty.fetchAndStoreOrdered(0); Q_FOREACH (QAbstractTransform *t, transforms) - appendTransform(t); + addTransform(t); } QTransform::QTransform(QAbstractTransform *transform, QNode *parent) : Qt3D::QComponent(*new QTransformPrivate(this), parent) { - Q_D(QTransform); - d->m_transformsDirty.fetchAndStoreOrdered(0); - appendTransform(transform); + addTransform(transform); } QTransform::QTransform(QTransformPrivate &dd, QNode *parent) @@ -96,34 +91,23 @@ QTransform::QTransform(QTransformPrivate &dd, QNode *parent) { } -void QTransform::setTransformsDirty() +void QTransformPrivate::_q_update() { - Q_D(QTransform); - if (!d->m_transformsDirty.loadAcquire()) { - d->m_transformsDirty.fetchAndStoreOrdered(1); - } - emit matrixChanged(); + if (!m_transformsDirty) + m_transformsDirty = true; + emit static_cast<QTransform *>(q_ptr)->matrixChanged(); } QMatrix4x4 QTransform::matrix() const { Q_D(const QTransform); - if (d->m_transformsDirty.loadAcquire()) { + if (d->m_transformsDirty) { d->m_matrix = applyTransforms(); - d->m_transformsDirty.fetchAndStoreOrdered(0); + d->m_transformsDirty = false; } return d->m_matrix; } -void QTransform::setMatrix(const QMatrix4x4 &m) -{ - Q_D(QTransform); - qDeleteAll(d->m_transforms); - d->m_transforms.clear(); - appendTransform(new QMatrixTransform(m)); - setTransformsDirty(); -} - /*! The center of rotation for the entity. Defaults to the local origin. */ @@ -146,20 +130,20 @@ void QTransform::setRotationCenter(const QVector3D &rc) Q_UNUSED(rc); } -void QTransform::appendTransform(QAbstractTransform *transform) +void QTransform::addTransform(QAbstractTransform *transform) { Q_D(QTransform); d->m_transforms.append(transform); - QObject::connect(transform, SIGNAL(transformMatrixChanged()), this, SLOT(setTransformsDirty())); - setTransformsDirty(); + QObject::connect(transform, SIGNAL(transformMatrixChanged()), this, SLOT(_q_update())); + d->_q_update(); } void QTransform::removeTransform(QAbstractTransform *transform) { Q_D(QTransform); d->m_transforms.removeOne(transform); - QObject::disconnect(transform, SIGNAL(transformMatrixChanged()), this, SLOT(setTransformsDirty())); - setTransformsDirty(); + QObject::disconnect(transform, SIGNAL(transformMatrixChanged()), this, SLOT(_q_update())); + d->_q_update(); } QMatrix4x4 QTransform::applyTransforms() const @@ -180,3 +164,5 @@ QList<QAbstractTransform *> QTransform::transformList() const } // namespace Qt3D QT_END_NAMESPACE + +#include "moc_qtransform.cpp" |