@@ -114,11 +114,15 @@ class alignas(16) VMatrix
114
114
115
115
const matrix3x4_t & As3x4 () const ;
116
116
void CopyFrom3x4 ( const matrix3x4_t &m3x4 );
117
- void Set3x4 ( matrix3x4_t & matrix3x4 ) const ;
117
+ void Set3x4 ( const matrix3x4_t & matrix3x4 );
118
118
119
119
bool operator ==( const VMatrix& src ) const {
120
- return !memcmp ( src.m , m, sizeof (m) );
120
+ return src.m [0 ][0 ] == m[0 ][0 ] && src.m [0 ][1 ] == m[0 ][1 ] && src.m [0 ][2 ] == m[0 ][2 ] && src.m [0 ][3 ] == m[0 ][3 ] &&
121
+ src.m [1 ][0 ] == m[1 ][0 ] && src.m [1 ][1 ] == m[1 ][1 ] && src.m [1 ][2 ] == m[1 ][2 ] && src.m [1 ][3 ] == m[1 ][3 ] &&
122
+ src.m [2 ][0 ] == m[2 ][0 ] && src.m [2 ][1 ] == m[2 ][1 ] && src.m [2 ][2 ] == m[2 ][2 ] && src.m [2 ][3 ] == m[2 ][3 ] &&
123
+ src.m [3 ][0 ] == m[3 ][0 ] && src.m [3 ][1 ] == m[3 ][1 ] && src.m [3 ][2 ] == m[3 ][2 ] && src.m [3 ][3 ] == m[3 ][3 ];
121
124
}
125
+
122
126
bool operator !=( const VMatrix& src ) const { return !( *this == src ); }
123
127
124
128
#ifndef VECTOR_NO_SLOW_OPERATIONS
@@ -512,14 +516,12 @@ inline void VMatrix::Init(
512
516
// -----------------------------------------------------------------------------
513
517
// Initialize from a 3x4
514
518
// -----------------------------------------------------------------------------
515
- inline void VMatrix::Init ( const matrix3x4_t & matrix3x4 )
519
+ inline void VMatrix::Init ( const matrix3x4_t & _m )
516
520
{
517
- memcpy (m, matrix3x4.Base (), sizeof ( matrix3x4_t ) );
518
-
519
- m[3 ][0 ] = 0 .0f ;
520
- m[3 ][1 ] = 0 .0f ;
521
- m[3 ][2 ] = 0 .0f ;
522
- m[3 ][3 ] = 1 .0f ;
521
+ m[0 ][0 ] = _m[0 ][0 ]; m[0 ][1 ] = _m[0 ][1 ]; m[0 ][2 ] = _m[0 ][2 ]; m[0 ][3 ] = _m[0 ][3 ];
522
+ m[1 ][0 ] = _m[1 ][0 ]; m[1 ][1 ] = _m[1 ][1 ]; m[1 ][2 ] = _m[1 ][2 ]; m[1 ][3 ] = _m[1 ][3 ];
523
+ m[2 ][0 ] = _m[2 ][0 ]; m[2 ][1 ] = _m[2 ][1 ]; m[2 ][2 ] = _m[2 ][2 ]; m[2 ][3 ] = _m[2 ][3 ];
524
+ m[3 ][0 ] = 0 .0f ; m[3 ][1 ] = 0 .0f ; m[3 ][2 ] = 0 .0f ; m[3 ][3 ] = 1 .0f ;
523
525
}
524
526
525
527
// -----------------------------------------------------------------------------
@@ -837,14 +839,14 @@ inline const matrix3x4_t& VMatrix::As3x4() const
837
839
838
840
inline void VMatrix::CopyFrom3x4 ( const matrix3x4_t &m3x4 )
839
841
{
840
- memcpy ( m, m3x4.Base (), sizeof ( matrix3x4_t ) );
841
- m[3 ][0 ] = m[3 ][1 ] = m[3 ][2 ] = 0 ;
842
- m[3 ][3 ] = 1 ;
843
- }
842
+ Init (m3x4);
843
+ }
844
844
845
- inline void VMatrix::Set3x4 ( matrix3x4_t & matrix3x4 ) const
845
+ inline void VMatrix::Set3x4 ( const matrix3x4_t & _m )
846
846
{
847
- memcpy (matrix3x4.Base (), m, sizeof ( matrix3x4_t ) );
847
+ m[0 ][0 ] = _m[0 ][0 ]; m[0 ][1 ] = _m[0 ][1 ]; m[0 ][2 ] = _m[0 ][2 ]; m[0 ][3 ] = _m[0 ][3 ];
848
+ m[1 ][0 ] = _m[1 ][0 ]; m[1 ][1 ] = _m[1 ][1 ]; m[1 ][2 ] = _m[1 ][2 ]; m[1 ][3 ] = _m[1 ][3 ];
849
+ m[2 ][0 ] = _m[2 ][0 ]; m[2 ][1 ] = _m[2 ][1 ]; m[2 ][2 ] = _m[2 ][2 ]; m[2 ][3 ] = _m[2 ][3 ];
848
850
}
849
851
850
852
#ifndef VECTOR_NO_SLOW_OPERATIONS
@@ -1805,26 +1807,27 @@ inline void MatrixBuildScale( VMatrix &dst, const Vector& scale )
1805
1807
MatrixBuildScale ( dst, scale.x , scale.y , scale.z );
1806
1808
}
1807
1809
1810
+ // nillerusr: optimize this bruh later
1808
1811
inline void MatrixBuildPerspective ( VMatrix &dst, float fovX, float fovY, float zNear, float zFar )
1809
1812
{
1810
1813
// FIXME: collapse all of this into one matrix after we figure out what all should be in here.
1811
1814
float width = 2 * zNear * tan ( fovX * ( M_PI/180 .0f ) * 0 .5f );
1812
1815
float height = 2 * zNear * tan ( fovY * ( M_PI/180 .0f ) * 0 .5f );
1813
1816
1814
- memset ( dst.Base (), 0 , sizeof ( dst ) );
1815
- dst[ 0 ][ 0 ] = 2 . 0F * zNear / width;
1816
- dst[ 1 ][ 1 ] = 2 . 0F * zNear / height;
1817
- dst[ 2 ][ 2 ] = -zFar / ( zNear - zFar );
1818
- dst[ 3 ][ 2 ] = 1 .0f ;
1819
- dst[ 2 ][ 3 ] = zNear * zFar / ( zNear - zFar );
1817
+ dst. Init (
1818
+ 2 . 0f * zNear / width, 0 . f , 0 . f , 0 . f ,
1819
+ 0 . f , 2 . 0f * zNear / height, 0 . f , 0 . f ,
1820
+ 0 . f , 0 . f , -zFar / ( zNear - zFar ), zNear * zFar / ( zNear - zFar ),
1821
+ 0 . f , 0 . f , 1 .f , 0 . f
1822
+ );
1820
1823
1821
1824
// negate X and Y so that X points right, and Y points up.
1822
1825
VMatrix negateXY;
1823
1826
negateXY.Identity ();
1824
1827
negateXY[0 ][0 ] = -1 .0f ;
1825
1828
negateXY[1 ][1 ] = -1 .0f ;
1826
1829
MatrixMultiply ( negateXY, dst, dst );
1827
-
1830
+
1828
1831
VMatrix addW;
1829
1832
addW.Identity ();
1830
1833
addW[0 ][3 ] = 1 .0f ;
0 commit comments