diff --git a/irr/include/matrix4.h b/irr/include/matrix4.h index 36f98bb70..7897b9acb 100644 --- a/irr/include/matrix4.h +++ b/irr/include/matrix4.h @@ -13,11 +13,6 @@ #include "rect.h" #include "IrrCompileConfig.h" // for IRRLICHT_API -// enable this to keep track of changes to the matrix -// and make simpler identity check for seldom changing matrices -// otherwise identity check will always compare the elements -// #define USE_MATRIX_TEST - namespace irr { namespace core @@ -81,9 +76,6 @@ public: //! Simple operator for directly accessing every element of the matrix. T &operator()(const s32 row, const s32 col) { -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return M[row * 4 + col]; } @@ -93,9 +85,6 @@ public: //! Simple operator for linearly accessing every element of the matrix. T &operator[](u32 index) { -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return M[index]; } @@ -112,19 +101,12 @@ public: const T *pointer() const { return M; } T *pointer() { -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return M; } //! Returns true if other matrix is equal to this matrix. constexpr bool operator==(const CMatrix4 &other) const { -#if defined(USE_MATRIX_TEST) - if (definitelyIdentityMatrix && other.definitelyIdentityMatrix) - return true; -#endif for (s32 i = 0; i < 16; ++i) if (M[i] != other.M[i]) return false; @@ -443,31 +425,17 @@ public: //! Sets all matrix data members at once CMatrix4 &setM(const T *data); - //! Sets if the matrix is definitely identity matrix - void setDefinitelyIdentityMatrix(bool isDefinitelyIdentityMatrix); - - //! Gets if the matrix is definitely identity matrix - bool getDefinitelyIdentityMatrix() const; - //! Compare two matrices using the equal method bool equals(const core::CMatrix4 &other, const T tolerance = (T)ROUNDING_ERROR_f64) const; private: //! Matrix data, stored in row-major order T M[16]; -#if defined(USE_MATRIX_TEST) - //! Flag is this matrix is identity matrix - mutable u32 definitelyIdentityMatrix; -#endif }; // Default constructor template inline CMatrix4::CMatrix4(eConstructor constructor) -#if defined(USE_MATRIX_TEST) - : - definitelyIdentityMatrix(BIT_UNTESTED) -#endif { switch (constructor) { case EM4CONST_NOTHING: @@ -484,10 +452,6 @@ inline CMatrix4::CMatrix4(eConstructor constructor) // Copy constructor template inline CMatrix4::CMatrix4(const CMatrix4 &other, eConstructor constructor) -#if defined(USE_MATRIX_TEST) - : - definitelyIdentityMatrix(BIT_UNTESTED) -#endif { switch (constructor) { case EM4CONST_IDENTITY: @@ -713,9 +677,6 @@ inline CMatrix4 &CMatrix4::setbyproduct_nocheck(const CMatrix4 &other_a M[13] = m1[1] * m2[12] + m1[5] * m2[13] + m1[9] * m2[14] + m1[13] * m2[15]; M[14] = m1[2] * m2[12] + m1[6] * m2[13] + m1[10] * m2[14] + m1[14] * m2[15]; M[15] = m1[3] * m2[12] + m1[7] * m2[13] + m1[11] * m2[14] + m1[15] * m2[15]; -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return *this; } @@ -787,9 +748,6 @@ inline CMatrix4 &CMatrix4::setTranslation(const vector3d &translation) M[12] = translation.X; M[13] = translation.Y; M[14] = translation.Z; -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return *this; } @@ -799,9 +757,6 @@ inline CMatrix4 &CMatrix4::setInverseTranslation(const vector3d &transl M[12] = -translation.X; M[13] = -translation.Y; M[14] = -translation.Z; -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return *this; } @@ -811,9 +766,6 @@ inline CMatrix4 &CMatrix4::setScale(const vector3d &scale) M[0] = scale.X; M[5] = scale.Y; M[10] = scale.Z; -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return *this; } @@ -877,9 +829,6 @@ inline CMatrix4 &CMatrix4::setRotationRadians(const vector3d &rotation) M[8] = (T)(cPitch_sYaw * cRoll + sPitch * sRoll); M[9] = (T)(cPitch_sYaw * sRoll - sPitch * cRoll); M[10] = (T)(cPitch * cYaw); -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return *this; } @@ -981,9 +930,6 @@ inline CMatrix4 &CMatrix4::setInverseRotationRadians(const vector3d &ro M[2] = (T)(cPitch_sYaw * cRoll + sPitch * sRoll); M[6] = (T)(cPitch_sYaw * sRoll - sPitch * cRoll); M[10] = (T)(cPitch * cYaw); -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return *this; } @@ -1015,9 +961,6 @@ inline CMatrix4 &CMatrix4::setRotationAxisRadians(const T &angle, const ve M[9] = (T)(tz * axis.Y - sx); M[10] = (T)(tz * axis.Z + c); -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return *this; } @@ -1028,9 +971,6 @@ inline CMatrix4 &CMatrix4::makeIdentity() { memset(M, 0, 16 * sizeof(T)); M[0] = M[5] = M[10] = M[15] = (T)1; -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = true; -#endif return *this; } @@ -1041,10 +981,6 @@ inline CMatrix4 &CMatrix4::makeIdentity() template inline bool CMatrix4::isIdentity() const { -#if defined(USE_MATRIX_TEST) - if (definitelyIdentityMatrix) - return true; -#endif if (!core::equals(M[12], (T)0) || !core::equals(M[13], (T)0) || !core::equals(M[14], (T)0) || !core::equals(M[15], (T)1)) return false; @@ -1068,9 +1004,6 @@ inline bool CMatrix4::isIdentity() const if ((j != i) && (!iszero((*this)(i,j)))) return false; */ -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = true; -#endif return true; } @@ -1106,10 +1039,6 @@ inline bool CMatrix4::isOrthogonal() const template inline bool CMatrix4::isIdentity_integer_base() const { -#if defined(USE_MATRIX_TEST) - if (definitelyIdentityMatrix) - return true; -#endif if (IR(M[0]) != F32_VALUE_1) return false; if (IR(M[1]) != 0) @@ -1146,9 +1075,6 @@ inline bool CMatrix4::isIdentity_integer_base() const if (IR(M[15]) != F32_VALUE_1) return false; -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = true; -#endif return true; } @@ -1402,9 +1328,6 @@ inline bool CMatrix4::getInverse(CMatrix4 &out) const m[1] * (m[6] * m[8] - m[4] * m[10]) + m[2] * (m[4] * m[9] - m[5] * m[8])); -#if defined(USE_MATRIX_TEST) - out.definitelyIdentityMatrix = definitelyIdentityMatrix; -#endif return true; } @@ -1433,9 +1356,6 @@ inline bool CMatrix4::getInversePrimitive(CMatrix4 &out) const out.M[14] = (T) - (M[12] * M[8] + M[13] * M[9] + M[14] * M[10]); out.M[15] = 1; -#if defined(USE_MATRIX_TEST) - out.definitelyIdentityMatrix = definitelyIdentityMatrix; -#endif return true; } @@ -1444,10 +1364,6 @@ inline bool CMatrix4::getInversePrimitive(CMatrix4 &out) const template inline bool CMatrix4::makeInverse() { -#if defined(USE_MATRIX_TEST) - if (definitelyIdentityMatrix) - return true; -#endif CMatrix4 temp(EM4CONST_NOTHING); if (getInverse(temp)) { @@ -1464,9 +1380,6 @@ inline CMatrix4 &CMatrix4::operator=(const T &scalar) for (s32 i = 0; i < 16; ++i) M[i] = scalar; -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return *this; } @@ -1509,9 +1422,6 @@ inline CMatrix4 &CMatrix4::buildProjectionMatrixPerspectiveFovRH( M[14] = (T)(2.0f * zNear * zFar / (zNear - zFar)); } -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return *this; } @@ -1554,9 +1464,6 @@ inline CMatrix4 &CMatrix4::buildProjectionMatrixPerspectiveFovLH( M[14] = (T)(2.0f * zNear * zFar / (zNear - zFar)); } -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return *this; } @@ -1589,9 +1496,6 @@ inline CMatrix4 &CMatrix4::buildProjectionMatrixPerspectiveFovInfinityLH( M[14] = (T)(zNear * (epsilon - 1.f)); M[15] = 0; -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return *this; } @@ -1631,9 +1535,6 @@ inline CMatrix4 &CMatrix4::buildProjectionMatrixOrthoLH( M[14] = (T) - (zFar + zNear) / (zFar - zNear); } -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return *this; } @@ -1673,9 +1574,6 @@ inline CMatrix4 &CMatrix4::buildProjectionMatrixOrthoRH( M[14] = (T) - (zFar + zNear) / (zFar - zNear); } -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return *this; } @@ -1716,9 +1614,6 @@ inline CMatrix4 &CMatrix4::buildProjectionMatrixPerspectiveRH( M[14] = (T)(2.0f * zNear * zFar / (zNear - zFar)); } -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return *this; } @@ -1759,9 +1654,6 @@ inline CMatrix4 &CMatrix4::buildProjectionMatrixPerspectiveLH( M[14] = (T)(2.0f * zNear * zFar / (zNear - zFar)); } -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return *this; } @@ -1791,9 +1683,7 @@ inline CMatrix4 &CMatrix4::buildShadowMatrix(const core::vector3df &light, M[13] = (T)(-plane.D * light.Y); M[14] = (T)(-plane.D * light.Z); M[15] = (T)(-plane.D * point + d); -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif + return *this; } @@ -1831,9 +1721,7 @@ inline CMatrix4 &CMatrix4::buildCameraLookAtMatrixLH( M[13] = (T)-yaxis.dotProduct(position); M[14] = (T)-zaxis.dotProduct(position); M[15] = 1; -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif + return *this; } @@ -1871,9 +1759,7 @@ inline CMatrix4 &CMatrix4::buildCameraLookAtMatrixRH( M[13] = (T)-yaxis.dotProduct(position); M[14] = (T)-zaxis.dotProduct(position); M[15] = 1; -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif + return *this; } @@ -1924,9 +1810,6 @@ inline void CMatrix4::getTransposed(CMatrix4 &o) const o[13] = M[7]; o[14] = M[11]; o[15] = M[15]; -#if defined(USE_MATRIX_TEST) - o.definitelyIdentityMatrix = definitelyIdentityMatrix; -#endif } // used to scale <-1,-1><1,1> to viewport @@ -2064,9 +1947,6 @@ inline void CMatrix4::setRotationCenter(const core::vector3df ¢er, const M[13] = -M[1] * center.X - M[5] * center.Y - M[9] * center.Z + (center.Y - translation.Y); M[14] = -M[2] * center.X - M[6] * center.Y - M[10] * center.Z + (center.Z - translation.Z); M[15] = (T)1.0; -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif } /*! @@ -2108,9 +1988,7 @@ inline CMatrix4 &CMatrix4::buildTextureTransform(f32 rotateRad, M[13] = 0; M[14] = 0; M[15] = 1; -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif + return *this; } @@ -2129,9 +2007,6 @@ inline CMatrix4 &CMatrix4::setTextureRotationCenter(f32 rotateRad) M[8] = (T)(0.5f * (s - c) + 0.5f); M[9] = (T)(-0.5f * (s + c) + 0.5f); -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = definitelyIdentityMatrix && (rotateRad == 0.0f); -#endif return *this; } @@ -2141,9 +2016,6 @@ inline CMatrix4 &CMatrix4::setTextureTranslate(f32 x, f32 y) M[8] = (T)x; M[9] = (T)y; -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = definitelyIdentityMatrix && (x == 0.0f) && (y == 0.0f); -#endif return *this; } @@ -2159,10 +2031,6 @@ inline CMatrix4 &CMatrix4::setTextureTranslateTransposed(f32 x, f32 y) { M[2] = (T)x; M[6] = (T)y; - -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = definitelyIdentityMatrix && (x == 0.0f) && (y == 0.0f); -#endif return *this; } @@ -2171,9 +2039,6 @@ inline CMatrix4 &CMatrix4::setTextureScale(f32 sx, f32 sy) { M[0] = (T)sx; M[5] = (T)sy; -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = definitelyIdentityMatrix && (sx == 1.0f) && (sy == 1.0f); -#endif return *this; } @@ -2191,10 +2056,6 @@ inline CMatrix4 &CMatrix4::setTextureScaleCenter(f32 sx, f32 sy) M[5] = (T)sy; M[8] = (T)(0.5f - 0.5f * sx); M[9] = (T)(0.5f - 0.5f * sy); - -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = definitelyIdentityMatrix && (sx == 1.0f) && (sy == 1.0f); -#endif return *this; } @@ -2203,43 +2064,13 @@ template inline CMatrix4 &CMatrix4::setM(const T *data) { memcpy(M, data, 16 * sizeof(T)); - -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = false; -#endif return *this; } -// sets if the matrix is definitely identity matrix -template -inline void CMatrix4::setDefinitelyIdentityMatrix(bool isDefinitelyIdentityMatrix) -{ -#if defined(USE_MATRIX_TEST) - definitelyIdentityMatrix = isDefinitelyIdentityMatrix; -#else - (void)isDefinitelyIdentityMatrix; // prevent compiler warning -#endif -} - -// gets if the matrix is definitely identity matrix -template -inline bool CMatrix4::getDefinitelyIdentityMatrix() const -{ -#if defined(USE_MATRIX_TEST) - return definitelyIdentityMatrix; -#else - return false; -#endif -} - //! Compare two matrices using the equal method template inline bool CMatrix4::equals(const core::CMatrix4 &other, const T tolerance) const { -#if defined(USE_MATRIX_TEST) - if (definitelyIdentityMatrix && other.definitelyIdentityMatrix) - return true; -#endif for (s32 i = 0; i < 16; ++i) if (!core::equals(M[i], other.M[i], tolerance)) return false; diff --git a/irr/include/quaternion.h b/irr/include/quaternion.h index 4e90fa067..e23b1317d 100644 --- a/irr/include/quaternion.h +++ b/irr/include/quaternion.h @@ -358,8 +358,6 @@ inline void quaternion::getMatrixFast(matrix4 &dest) const dest[13] = 0.f; dest[14] = 0.f; dest[15] = 1.f; - - dest.setDefinitelyIdentityMatrix(false); } /*! @@ -397,8 +395,6 @@ inline void quaternion::getMatrix(matrix4 &dest, dest[13] = center.Y; dest[14] = center.Z; dest[15] = 1.f; - - dest.setDefinitelyIdentityMatrix(false); } /*! @@ -471,8 +467,6 @@ inline void quaternion::getMatrix_transposed(matrix4 &dest) const dest[7] = 0.f; dest[11] = 0.f; dest[15] = 1.f; - - dest.setDefinitelyIdentityMatrix(false); } // Inverts this quaternion