summaryrefslogtreecommitdiffstats
path: root/src/core/transforms
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/transforms')
-rw-r--r--src/core/transforms/matrix4x4_avx2_p.h14
-rw-r--r--src/core/transforms/matrix4x4_sse_p.h14
-rw-r--r--src/core/transforms/qjoint.cpp14
-rw-r--r--src/core/transforms/qtransform.cpp13
-rw-r--r--src/core/transforms/qtransform.h1
-rw-r--r--src/core/transforms/qtransform_p.h2
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