//
// 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 "common/vector_utils.h"
#include "util/util_export.h"

struct ANGLE_UTIL_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_UTIL_EXPORT Matrix4 operator*(const Matrix4 &a, const Matrix4 &b);
ANGLE_UTIL_EXPORT Matrix4 &operator*=(Matrix4 &a, const Matrix4 &b);
ANGLE_UTIL_EXPORT Matrix4 operator*(const Matrix4 &a, float b);
ANGLE_UTIL_EXPORT Matrix4 &operator*=(Matrix4 &a, float b);
ANGLE_UTIL_EXPORT angle::Vector4 operator*(const Matrix4 &a, const angle::Vector4 &b);

ANGLE_UTIL_EXPORT bool operator==(const Matrix4 &a, const Matrix4 &b);
ANGLE_UTIL_EXPORT bool operator!=(const Matrix4 &a, const Matrix4 &b);

#endif  // UTIL_MATRIX_H
