|  | // | 
|  | // Copyright (c) 2014 The ANGLE Project Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  | // | 
|  | // Matrix: | 
|  | //   Helper class for doing matrix math. | 
|  | // | 
|  |  | 
|  | #ifndef UTIL_MATRIX_H | 
|  | #define UTIL_MATRIX_H | 
|  |  | 
|  | #include <export.h> | 
|  |  | 
|  | #include "common/vector_utils.h" | 
|  |  | 
|  | struct ANGLE_EXPORT Matrix4 | 
|  | { | 
|  | float data[16]; | 
|  |  | 
|  | Matrix4(); | 
|  | Matrix4(float m00, | 
|  | float m01, | 
|  | float m02, | 
|  | float m03, | 
|  | float m10, | 
|  | float m11, | 
|  | float m12, | 
|  | float m13, | 
|  | float m20, | 
|  | float m21, | 
|  | float m22, | 
|  | float m23, | 
|  | float m30, | 
|  | float m31, | 
|  | float m32, | 
|  | float m33); | 
|  |  | 
|  | static Matrix4 identity(); | 
|  | static Matrix4 rotate(float angle, const angle::Vector3 &p); | 
|  | static Matrix4 translate(const angle::Vector3 &t); | 
|  | static Matrix4 scale(const angle::Vector3 &s); | 
|  | static Matrix4 frustum(float l, float r, float b, float t, float n, float f); | 
|  | static Matrix4 perspective(float fov, float aspectRatio, float n, float f); | 
|  | static Matrix4 ortho(float l, float r, float b, float t, float n, float f); | 
|  | static Matrix4 rollPitchYaw(float roll, float pitch, float yaw); | 
|  |  | 
|  | static Matrix4 invert(const Matrix4 &mat); | 
|  | static Matrix4 transpose(const Matrix4 &mat); | 
|  | static angle::Vector3 transform(const Matrix4 &mat, const angle::Vector3 &pt); | 
|  | static angle::Vector3 transform(const Matrix4 &mat, const angle::Vector4 &pt); | 
|  | }; | 
|  |  | 
|  | ANGLE_EXPORT Matrix4 operator*(const Matrix4 &a, const Matrix4 &b); | 
|  | ANGLE_EXPORT Matrix4 &operator*=(Matrix4 &a, const Matrix4 &b); | 
|  | ANGLE_EXPORT Matrix4 operator*(const Matrix4 &a, float b); | 
|  | ANGLE_EXPORT Matrix4 &operator*=(Matrix4 &a, float b); | 
|  | ANGLE_EXPORT angle::Vector4 operator*(const Matrix4 &a, const angle::Vector4 &b); | 
|  |  | 
|  | ANGLE_EXPORT bool operator==(const Matrix4 &a, const Matrix4 &b); | 
|  | ANGLE_EXPORT bool operator!=(const Matrix4 &a, const Matrix4 &b); | 
|  |  | 
|  | #endif  // UTIL_MATRIX_H |