diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2017-04-14 12:39:20 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@kdab.com> | 2017-04-14 17:24:53 +0000 |
commit | 98170e4d7bc2fae438b649a8a5afc23705dd2593 (patch) | |
tree | 3ba5f69a6872712d77b8539e6eada6466e91fbc6 /src | |
parent | 1936d0cf5bac6cd3bf62f3e8995cbfed98650155 (diff) |
QMatrix4x4: fix aliasing problem in operator*=
When multiplying a QMatrix4x4 by itself, we were clobbering the very
matrix we read from. Employ read-caching to avoid this aliasing problem.
[ChangeLog][QtGui][QMatrix4x4] operator*=() now calculates the correct
result even if the RHS and LHS are the same object.
Change-Id: I8534d56cfdd62c336577125127f05173fcec2873
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
(cherry picked from commit 5662234afaf23d88e1f3fa4bee2a59b61bd0c267)
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/math3d/qmatrix4x4.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/gui/math3d/qmatrix4x4.h b/src/gui/math3d/qmatrix4x4.h index cd5686be94..10de9ae3ec 100644 --- a/src/gui/math3d/qmatrix4x4.h +++ b/src/gui/math3d/qmatrix4x4.h @@ -413,8 +413,9 @@ inline QMatrix4x4& QMatrix4x4::operator-=(const QMatrix4x4& other) return *this; } -inline QMatrix4x4& QMatrix4x4::operator*=(const QMatrix4x4& other) +inline QMatrix4x4& QMatrix4x4::operator*=(const QMatrix4x4& o) { + const QMatrix4x4 other = o; // prevent aliasing when &o == this ### Qt 6: take o by value flagBits |= other.flagBits; if (flagBits < Rotation2D) { |