From 637e8ecd441ab21502192b6e3bbb350859a863b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Wed, 10 Jul 2019 14:09:36 +0200 Subject: [PATCH] Math: de-duplicate code in Matrix4::perspectiveProjection(). --- src/Magnum/Math/Matrix4.h | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Magnum/Math/Matrix4.h b/src/Magnum/Math/Matrix4.h index 88e0f71a6..f716ff9a9 100644 --- a/src/Magnum/Math/Matrix4.h +++ b/src/Magnum/Math/Matrix4.h @@ -955,18 +955,20 @@ template Matrix4 Matrix4::orthographicProjection(const Vector2 template Matrix4 Matrix4::perspectiveProjection(const Vector2& size, const T near, const T far) { const Vector2 xyScale = 2*near/size; + T m22, m32; if(far == Constants::inf()) { - return {{xyScale.x(), T(0), T(0), T(0)}, - { T(0), xyScale.y(), T(0), T(0)}, - { T(0), T(0), T(-1), T(-1)}, - { T(0), T(0), T(-2)*near, T(0)}}; + m22 = T(-1); + m32 = T(-2)*near; } else { const T zScale = T(1.0)/(near-far); - return {{xyScale.x(), T(0), T(0), T(0)}, - { T(0), xyScale.y(), T(0), T(0)}, - { T(0), T(0), (far+near)*zScale, T(-1)}, - { T(0), T(0), T(2)*far*near*zScale, T(0)}}; + m22 = (far+near)*zScale; + m32 = T(2)*far*near*zScale; } + + return {{xyScale.x(), T(0), T(0), T(0)}, + { T(0), xyScale.y(), T(0), T(0)}, + { T(0), T(0), m22, T(-1)}, + { T(0), T(0), m32, T(0)}}; } template Matrix4 Matrix4::lookAt(const Vector3& eye, const Vector3& target, const Vector3& up) {