diff options
Diffstat (limited to 'src/core/transforms')
-rw-r--r-- | src/core/transforms/matrix4x4_avx2_p.h | 14 | ||||
-rw-r--r-- | src/core/transforms/matrix4x4_sse_p.h | 14 | ||||
-rw-r--r-- | src/core/transforms/qjoint.cpp | 14 | ||||
-rw-r--r-- | src/core/transforms/qtransform.cpp | 13 | ||||
-rw-r--r-- | src/core/transforms/qtransform.h | 1 | ||||
-rw-r--r-- | src/core/transforms/qtransform_p.h | 2 |
6 files changed, 25 insertions, 33 deletions
diff --git a/src/core/transforms/matrix4x4_avx2_p.h b/src/core/transforms/matrix4x4_avx2_p.h index 74e7c911c..63858b35c 100644 --- a/src/core/transforms/matrix4x4_avx2_p.h +++ b/src/core/transforms/matrix4x4_avx2_p.h @@ -473,15 +473,13 @@ public: Vector3D_SSE mapVector(const Vector3D_SSE &vector) const { - const __m128 row1 = _mm_set_ps(0.0f, m13(), m12(), m11()); - const __m128 row2 = _mm_set_ps(0.0f, m23(), m22(), m21()); - const __m128 row3 = _mm_set_ps(0.0f, m33(), m32(), m31()); + const Vector3D_SSE row1(m11(), m12(), m13()); + const Vector3D_SSE row2(m21(), m22(), m23()); + const Vector3D_SSE row3(m31(), m32(), m33()); - const __m128 tmp = _mm_add_ps(_mm_mul_ps(vector.m_xyzw, row1), _mm_mul_ps(vector.m_xyzw, row2)); - - Vector3D_SSE v(Qt::Uninitialized); - v.m_xyzw = _mm_add_ps(tmp, _mm_mul_ps(vector.m_xyzw, row3)); - return v; + return Vector3D(Vector3D_SSE::dotProduct(row1, vector), + Vector3D_SSE::dotProduct(row2, vector), + Vector3D_SSE::dotProduct(row3, vector)); } friend Vector4D operator*(const Vector4D &vector, const Matrix4x4_AVX2 &matrix); diff --git a/src/core/transforms/matrix4x4_sse_p.h b/src/core/transforms/matrix4x4_sse_p.h index 287094be5..0ea2e37ad 100644 --- a/src/core/transforms/matrix4x4_sse_p.h +++ b/src/core/transforms/matrix4x4_sse_p.h @@ -356,15 +356,13 @@ public: Q_ALWAYS_INLINE Vector3D_SSE mapVector(const Vector3D_SSE &vector) const { - const __m128 row1 = _mm_set_ps(0.0f, m13(), m12(), m11()); - const __m128 row2 = _mm_set_ps(0.0f, m23(), m22(), m21()); - const __m128 row3 = _mm_set_ps(0.0f, m33(), m32(), m31()); + const Vector3D_SSE row1(m11(), m12(), m13()); + const Vector3D_SSE row2(m21(), m22(), m23()); + const Vector3D_SSE row3(m31(), m32(), m33()); - const __m128 tmp = _mm_add_ps(_mm_mul_ps(vector.m_xyzw, row1), _mm_mul_ps(vector.m_xyzw, row2)); - - Vector3D_SSE v(Qt::Uninitialized); - v.m_xyzw = _mm_add_ps(tmp, _mm_mul_ps(vector.m_xyzw, row3)); - return v; + return Vector3D(Vector3D_SSE::dotProduct(row1, vector), + Vector3D_SSE::dotProduct(row2, vector), + Vector3D_SSE::dotProduct(row3, vector)); } friend Q_ALWAYS_INLINE Vector4D operator*(const Vector4D &vector, const Matrix4x4_SSE &matrix); diff --git a/src/core/transforms/qjoint.cpp b/src/core/transforms/qjoint.cpp index 017773ff6..553fbd654 100644 --- a/src/core/transforms/qjoint.cpp +++ b/src/core/transforms/qjoint.cpp @@ -352,11 +352,8 @@ void QJoint::addChildJoint(QJoint *joint) // Ensures proper bookkeeping d->registerDestructionHelper(joint, &QJoint::removeChildJoint, d->m_childJoints); - if (d->m_changeArbiter != nullptr) { - const auto change = QPropertyNodeAddedChangePtr::create(id(), joint); - change->setPropertyName("childJoint"); - d->notifyObservers(change); - } + if (d->m_changeArbiter != nullptr) + d->update(); } } @@ -369,11 +366,8 @@ void QJoint::removeChildJoint(QJoint *joint) Q_D(QJoint); if (d->m_childJoints.contains(joint)) { - if (d->m_changeArbiter != nullptr) { - const auto change = QPropertyNodeRemovedChangePtr::create(id(), joint); - change->setPropertyName("childJoint"); - d->notifyObservers(change); - } + if (d->m_changeArbiter != nullptr) + d->update(); d->m_childJoints.removeOne(joint); diff --git a/src/core/transforms/qtransform.cpp b/src/core/transforms/qtransform.cpp index bedf108f2..e5902f11f 100644 --- a/src/core/transforms/qtransform.cpp +++ b/src/core/transforms/qtransform.cpp @@ -239,12 +239,13 @@ QTransform::QTransform(QTransformPrivate &dd, QNode *parent) */ void QTransform::sceneChangeEvent(const QSceneChangePtr &change) { + Q_D(QTransform); switch (change->type()) { case PropertyUpdated: { Qt3DCore::QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<Qt3DCore::QPropertyUpdatedChange>(change); if (propertyChange->propertyName() == QByteArrayLiteral("worldMatrix")) { const bool blocked = blockNotifications(true); - setWorldMatrix(propertyChange->value().value<QMatrix4x4>()); + d->setWorldMatrix(propertyChange->value().value<QMatrix4x4>()); blockNotifications(blocked); } break; @@ -254,13 +255,13 @@ void QTransform::sceneChangeEvent(const QSceneChangePtr &change) } } -void QTransform::setWorldMatrix(const QMatrix4x4 &worldMatrix) +void QTransformPrivate::setWorldMatrix(const QMatrix4x4 &worldMatrix) { - Q_D(QTransform); - if (d->m_worldMatrix == worldMatrix) + Q_Q(QTransform); + if (m_worldMatrix == worldMatrix) return; - d->m_worldMatrix = worldMatrix; - emit worldMatrixChanged(worldMatrix); + m_worldMatrix = worldMatrix; + emit q->worldMatrixChanged(worldMatrix); } void QTransform::setMatrix(const QMatrix4x4 &m) diff --git a/src/core/transforms/qtransform.h b/src/core/transforms/qtransform.h index 527760df7..503ea4d4a 100644 --- a/src/core/transforms/qtransform.h +++ b/src/core/transforms/qtransform.h @@ -120,7 +120,6 @@ Q_SIGNALS: protected: explicit QTransform(QTransformPrivate &dd, QNode *parent = nullptr); void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &change) override; - void setWorldMatrix(const QMatrix4x4 &worldMatrix); private: Q_DECLARE_PRIVATE(QTransform) diff --git a/src/core/transforms/qtransform_p.h b/src/core/transforms/qtransform_p.h index d44e5e157..028a9aba7 100644 --- a/src/core/transforms/qtransform_p.h +++ b/src/core/transforms/qtransform_p.h @@ -77,6 +77,8 @@ public: mutable bool m_matrixDirty; QMatrix4x4 m_worldMatrix; + + void setWorldMatrix(const QMatrix4x4 &worldMatrix); }; struct QTransformData |