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