From 2c55e121c22601d365aa353cfa39ee856770855c Mon Sep 17 00:00:00 2001
From: Giuseppe D'Angelo
Date: Sun, 17 Jan 2021 19:19:39 +0100
Subject: QMatrix4x4: deprecate operator*(QVector3D, QMatrix4x4)
The operation is sketchy for a number of reasons:
1) Mathematically, it doesn't make sense. The code interprets the
QVector3D as a point, extending it with w=1, and uses it as a
row vector. But similarly, the vector could be intepreted as a
directional vector, with w=0. No semantic is "better" than the
other.
2) QMatrix4x4 is not meant to be postmultiplied. Granted,
one could use a QMatrix4x4 as arbitrary storage for 16 floats,
but QMatrix4x4 builds itself to be always *pre* multiplied
(e.g. translate changes the 4th column, not the 4th row). We
can keep post multiplication for the general case if we do it
against a QVector4D, but I don't feel that we should support it
also for QVector3D.
[ChangeLog][QtGui][QMatrix4x4] The multiplication operator
(operator*) between a QVector3D and a QMatrix4x4 has been deprecated.
User code needs to extend the QVector3D to a QVector4D first
(by specifying the intended w coordinate), and then multiply
the QVector4D by the matrix.
ChangeId: I41b64d8ab7eb6126dc4c49fe29cf3f1b7afc7987
Reviewedby: Edward Welbourne
(cherry picked from commit 654a2164994974639e62f9d388408ed559b797a3)
Reviewedby: Qt Cherrypick Bot

src/gui/math3d/qmatrix4x4.cpp  8 +++++
1 file changed, 5 insertions(+), 3 deletions()
(limited to 'src/gui/math3d/qmatrix4x4.cpp')
diff git a/src/gui/math3d/qmatrix4x4.cpp b/src/gui/math3d/qmatrix4x4.cpp
index 591809df31..947af641d1 100644
 a/src/gui/math3d/qmatrix4x4.cpp
+++ b/src/gui/math3d/qmatrix4x4.cpp
@@ 627,16 +627,18 @@ QMatrix4x4& QMatrix4x4::operator/=(float divisor)
#ifndef QT_NO_VECTOR3D
+#if QT_DEPRECATED_SINCE(6, 1)
+
/*!
\fn QVector3D operator*(const QVector3D& vector, const QMatrix4x4& matrix)
\relates QMatrix4x4
+ \obsolete Convert the QVector3D to a QVector4D first, then multiply.
+
Returns the result of transforming \a vector according to \a matrix,
 with the matrix applied postvector.
+ with the matrix applied postvector. The vector is transformed as a point.
*/
#if QT_DEPRECATED_SINCE(6, 1)

/*!
\fn QVector3D operator*(const QMatrix4x4& matrix, const QVector3D& vector)
\relates QMatrix4x4

cgit v1.2.1