xref: /aosp_15_r20/external/angle/util/Matrix.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2014 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker // Matrix:
7*8975f5c5SAndroid Build Coastguard Worker //   Helper class for doing matrix math.
8*8975f5c5SAndroid Build Coastguard Worker //
9*8975f5c5SAndroid Build Coastguard Worker 
10*8975f5c5SAndroid Build Coastguard Worker #ifndef UTIL_MATRIX_H
11*8975f5c5SAndroid Build Coastguard Worker #define UTIL_MATRIX_H
12*8975f5c5SAndroid Build Coastguard Worker 
13*8975f5c5SAndroid Build Coastguard Worker #include "common/vector_utils.h"
14*8975f5c5SAndroid Build Coastguard Worker #include "util/util_export.h"
15*8975f5c5SAndroid Build Coastguard Worker 
16*8975f5c5SAndroid Build Coastguard Worker struct ANGLE_UTIL_EXPORT Matrix4
17*8975f5c5SAndroid Build Coastguard Worker {
18*8975f5c5SAndroid Build Coastguard Worker     float data[16];
19*8975f5c5SAndroid Build Coastguard Worker 
20*8975f5c5SAndroid Build Coastguard Worker     Matrix4();
21*8975f5c5SAndroid Build Coastguard Worker     Matrix4(float m00,
22*8975f5c5SAndroid Build Coastguard Worker             float m01,
23*8975f5c5SAndroid Build Coastguard Worker             float m02,
24*8975f5c5SAndroid Build Coastguard Worker             float m03,
25*8975f5c5SAndroid Build Coastguard Worker             float m10,
26*8975f5c5SAndroid Build Coastguard Worker             float m11,
27*8975f5c5SAndroid Build Coastguard Worker             float m12,
28*8975f5c5SAndroid Build Coastguard Worker             float m13,
29*8975f5c5SAndroid Build Coastguard Worker             float m20,
30*8975f5c5SAndroid Build Coastguard Worker             float m21,
31*8975f5c5SAndroid Build Coastguard Worker             float m22,
32*8975f5c5SAndroid Build Coastguard Worker             float m23,
33*8975f5c5SAndroid Build Coastguard Worker             float m30,
34*8975f5c5SAndroid Build Coastguard Worker             float m31,
35*8975f5c5SAndroid Build Coastguard Worker             float m32,
36*8975f5c5SAndroid Build Coastguard Worker             float m33);
37*8975f5c5SAndroid Build Coastguard Worker 
38*8975f5c5SAndroid Build Coastguard Worker     static Matrix4 identity();
39*8975f5c5SAndroid Build Coastguard Worker     static Matrix4 rotate(float angle, const angle::Vector3 &p);
40*8975f5c5SAndroid Build Coastguard Worker     static Matrix4 translate(const angle::Vector3 &t);
41*8975f5c5SAndroid Build Coastguard Worker     static Matrix4 scale(const angle::Vector3 &s);
42*8975f5c5SAndroid Build Coastguard Worker     static Matrix4 frustum(float l, float r, float b, float t, float n, float f);
43*8975f5c5SAndroid Build Coastguard Worker     static Matrix4 perspective(float fov, float aspectRatio, float n, float f);
44*8975f5c5SAndroid Build Coastguard Worker     static Matrix4 ortho(float l, float r, float b, float t, float n, float f);
45*8975f5c5SAndroid Build Coastguard Worker     static Matrix4 rollPitchYaw(float roll, float pitch, float yaw);
46*8975f5c5SAndroid Build Coastguard Worker 
47*8975f5c5SAndroid Build Coastguard Worker     static Matrix4 invert(const Matrix4 &mat);
48*8975f5c5SAndroid Build Coastguard Worker     static Matrix4 transpose(const Matrix4 &mat);
49*8975f5c5SAndroid Build Coastguard Worker     static angle::Vector3 transform(const Matrix4 &mat, const angle::Vector3 &pt);
50*8975f5c5SAndroid Build Coastguard Worker     static angle::Vector3 transform(const Matrix4 &mat, const angle::Vector4 &pt);
51*8975f5c5SAndroid Build Coastguard Worker };
52*8975f5c5SAndroid Build Coastguard Worker 
53*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT Matrix4 operator*(const Matrix4 &a, const Matrix4 &b);
54*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT Matrix4 &operator*=(Matrix4 &a, const Matrix4 &b);
55*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT Matrix4 operator*(const Matrix4 &a, float b);
56*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT Matrix4 &operator*=(Matrix4 &a, float b);
57*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT angle::Vector4 operator*(const Matrix4 &a, const angle::Vector4 &b);
58*8975f5c5SAndroid Build Coastguard Worker 
59*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT bool operator==(const Matrix4 &a, const Matrix4 &b);
60*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT bool operator!=(const Matrix4 &a, const Matrix4 &b);
61*8975f5c5SAndroid Build Coastguard Worker 
62*8975f5c5SAndroid Build Coastguard Worker #endif  // UTIL_MATRIX_H
63