| #include "rive/math/mat4.hpp" |
| #include "rive/math/mat2d.hpp" |
| #include <cmath> |
| |
| using namespace rive; |
| |
| Mat4::Mat4(const Mat2D& mat2d) : |
| m_Buffer{ |
| // clang-format off |
| mat2d[0], mat2d[1], 0.0f, 0.0f, |
| mat2d[2], mat2d[3], 0.0f, 0.0f, |
| 0.0f, 0.0f, 1.0f, 0.0f, |
| mat2d[4], mat2d[5], 0.0f, 1.0f, |
| // clang-format on |
| } {} |
| |
| Mat4 Mat4::multiply(const Mat4& a, const Mat4& b) { |
| return { |
| // clang-format off |
| b[0] * a[0] + b[1] * a[4] + b[2] * a[8] + b[3] * a[12], |
| b[0] * a[1] + b[1] * a[5] + b[2] * a[9] + b[3] * a[13], |
| b[0] * a[2] + b[1] * a[6] + b[2] * a[10] + b[3] * a[14], |
| b[0] * a[3] + b[1] * a[7] + b[2] * a[11] + b[3] * a[15], |
| |
| b[4] * a[0] + b[5] * a[4] + b[6] * a[8] + b[7] * a[12], |
| b[4] * a[1] + b[5] * a[5] + b[6] * a[9] + b[7] * a[13], |
| b[4] * a[2] + b[5] * a[6] + b[6] * a[10] + b[7] * a[14], |
| b[4] * a[3] + b[5] * a[7] + b[6] * a[11] + b[7] * a[15], |
| |
| b[8] * a[0] + b[9] * a[4] + b[10] * a[8] + b[11] * a[12], |
| b[8] * a[1] + b[9] * a[5] + b[10] * a[9] + b[11] * a[13], |
| b[8] * a[2] + b[9] * a[6] + b[10] * a[10] + b[11] * a[14], |
| b[8] * a[3] + b[9] * a[7] + b[10] * a[11] + b[11] * a[15], |
| |
| b[12] * a[0] + b[13] * a[4] + b[14] * a[8] + b[15] * a[12], |
| b[12] * a[1] + b[13] * a[5] + b[14] * a[9] + b[15] * a[13], |
| b[12] * a[2] + b[13] * a[6] + b[14] * a[10] + b[15] * a[14], |
| b[12] * a[3] + b[13] * a[7] + b[14] * a[11] + b[15] * a[15], |
| // clang-format on |
| }; |
| } |
| |
| Mat4 Mat4::multiply(const Mat4& a, const Mat2D& b) { |
| return { |
| // clang-format off |
| b[0] * a[0] + b[1] * a[4], |
| b[0] * a[1] + b[1] * a[5], |
| b[0] * a[2] + b[1] * a[6], |
| b[0] * a[3] + b[1] * a[7], |
| |
| b[2] * a[0] + b[3] * a[4], |
| b[2] * a[1] + b[3] * a[5], |
| b[2] * a[2] + b[3] * a[6], |
| b[2] * a[3] + b[3] * a[7], |
| |
| a[8], |
| a[9], |
| a[10], |
| a[11], |
| |
| b[4] * a[0] + b[5] * a[4] + a[12], |
| b[4] * a[1] + b[5] * a[5] + a[13], |
| b[4] * a[2] + b[5] * a[6] + a[14], |
| b[4] * a[3] + b[5] * a[7] + a[15], |
| // clang-format on |
| }; |
| } |