10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/*
20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2011 The Android Open Source Project
30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License");
50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License.
60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at
70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *      http://www.apache.org/licenses/LICENSE-2.0
90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software
110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and
140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License.
150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/** @file rs_matrix.rsh
180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  \brief Matrix routines
190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#ifndef __RS_MATRIX_RSH__
240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define __RS_MATRIX_RSH__
250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Set one element of a matrix.
280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m The matrix to be set
300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param row
310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param col
320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param v
330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @return void
350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME void __attribute__((overloadable))
370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixSet(rs_matrix4x4 *m, uint32_t row, uint32_t col, float v);
380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME void __attribute__((overloadable))
420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixSet(rs_matrix3x3 *m, uint32_t row, uint32_t col, float v);
430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME void __attribute__((overloadable))
470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixSet(rs_matrix2x2 *m, uint32_t row, uint32_t col, float v);
480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Get one element of a matrix.
510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m The matrix to read from
530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param row
540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param col
550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @return float
570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME float __attribute__((overloadable))
590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixGet(const rs_matrix4x4 *m, uint32_t row, uint32_t col);
600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME float __attribute__((overloadable))
640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixGet(const rs_matrix3x3 *m, uint32_t row, uint32_t col);
650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME float __attribute__((overloadable))
690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixGet(const rs_matrix2x2 *m, uint32_t row, uint32_t col);
700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Set the elements of a matrix to the identity matrix.
730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m
750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix4x4 *m);
770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix3x3 *m);
810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix2x2 *m);
850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Set the elements of a matrix from an array of floats.
880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m
900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const float *v);
920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix3x3 *m, const float *v);
960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix2x2 *m, const float *v);
1000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
1020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix4x4 *v);
1040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
1060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix3x3 *v);
1080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Set the elements of a matrix from another matrix.
1110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m
1130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix2x2 *v);
1150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
1170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix3x3 *m, const rs_matrix3x3 *v);
1190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
1210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix2x2 *m, const rs_matrix2x2 *v);
1230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Load a rotation matrix.
1260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m
1280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param rot
1290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param x
1300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param y
1310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param z
1320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixLoadRotate(rs_matrix4x4 *m, float rot, float x, float y, float z);
1350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Load a scale matrix.
1380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m
1400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param x
1410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param y
1420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param z
1430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixLoadScale(rs_matrix4x4 *m, float x, float y, float z);
1460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Load a translation matrix.
1490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m
1510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param x
1520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param y
1530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param z
1540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixLoadTranslate(rs_matrix4x4 *m, float x, float y, float z);
1570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Multiply two matrix (lhs, rhs) and place the result in m.
1600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m
1620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param lhs
1630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param rhs
1640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixLoadMultiply(rs_matrix4x4 *m, const rs_matrix4x4 *lhs, const rs_matrix4x4 *rhs);
1670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
1690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixLoadMultiply(rs_matrix3x3 *m, const rs_matrix3x3 *lhs, const rs_matrix3x3 *rhs);
1720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
1740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixLoadMultiply(rs_matrix2x2 *m, const rs_matrix2x2 *lhs, const rs_matrix2x2 *rhs);
1770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Multiply the matrix m by rhs and place the result back into m.
1800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m (lhs)
1820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param rhs
1830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixMultiply(rs_matrix4x4 *m, const rs_matrix4x4 *rhs);
1860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
1880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixMultiply(rs_matrix3x3 *m, const rs_matrix3x3 *rhs);
1910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
1930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixMultiply(rs_matrix2x2 *m, const rs_matrix2x2 *rhs);
1960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Multiple matrix m with a rotation matrix
1990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
2000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m
2010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param rot
2020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param x
2030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param y
2040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param z
2050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
2070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixRotate(rs_matrix4x4 *m, float rot, float x, float y, float z);
2080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Multiple matrix m with a scale matrix
2110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
2120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m
2130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param x
2140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param y
2150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param z
2160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
2180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixScale(rs_matrix4x4 *m, float x, float y, float z);
2190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Multiple matrix m with a translation matrix
2220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
2230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m
2240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param x
2250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param y
2260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param z
2270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
2290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixTranslate(rs_matrix4x4 *m, float x, float y, float z);
2300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Load an Ortho projection matrix constructed from the 6 planes
2330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
2340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m
2350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param left
2360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param right
2370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param bottom
2380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param top
2390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param near
2400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param far
2410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
2430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixLoadOrtho(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far);
2440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Load an Frustum projection matrix constructed from the 6 planes
2470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
2480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m
2490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param left
2500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param right
2510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param bottom
2520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param top
2530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param near
2540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param far
2550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
2570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixLoadFrustum(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far);
2580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Load an perspective projection matrix constructed from the 6 planes
2610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
2620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m
2630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param fovy Field of view, in degrees along the Y axis.
2640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param aspect Ratio of x / y.
2650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param near
2660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param far
2670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
2690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixLoadPerspective(rs_matrix4x4* m, float fovy, float aspect, float near, float far);
2700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#if !defined(RS_VERSION) || (RS_VERSION < 14)
2720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Multiply a vector by a matrix and return the result vector.
2740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * API version 10-13
2750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME float4 __attribute__((overloadable))
2770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixMultiply(rs_matrix4x4 *m, float4 in);
2780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
2810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME float4 __attribute__((overloadable))
2830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixMultiply(rs_matrix4x4 *m, float3 in);
2840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
2870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME float4 __attribute__((overloadable))
2890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixMultiply(rs_matrix4x4 *m, float2 in);
2900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
2930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME float3 __attribute__((overloadable))
2950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixMultiply(rs_matrix3x3 *m, float3 in);
2960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
2990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME float3 __attribute__((overloadable))
3010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixMultiply(rs_matrix3x3 *m, float2 in);
3020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
3050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME float2 __attribute__((overloadable))
3070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixMultiply(rs_matrix2x2 *m, float2 in);
3080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#else
3090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Multiply a vector by a matrix and return the result vector.
3110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * API version 14+
3120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME float4 __attribute__((overloadable))
3140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixMultiply(const rs_matrix4x4 *m, float4 in);
3150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
3180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME float4 __attribute__((overloadable))
3200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixMultiply(const rs_matrix4x4 *m, float3 in);
3210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
3240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME float4 __attribute__((overloadable))
3260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixMultiply(const rs_matrix4x4 *m, float2 in);
3270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
3300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME float3 __attribute__((overloadable))
3320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixMultiply(const rs_matrix3x3 *m, float3 in);
3330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
3360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME float3 __attribute__((overloadable))
3380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixMultiply(const rs_matrix3x3 *m, float2 in);
3390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
3420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines_RS_RUNTIME float2 __attribute__((overloadable))
3440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsMatrixMultiply(const rs_matrix2x2 *m, float2 in);
3450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif
3460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Returns true if the matrix was successfully inversed
3500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
3510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m
3520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern bool __attribute__((overloadable)) rsMatrixInverse(rs_matrix4x4 *m);
3540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Returns true if the matrix was successfully inversed and transposed.
3570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
3580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m
3590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern bool __attribute__((overloadable)) rsMatrixInverseTranspose(rs_matrix4x4 *m);
3610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Transpose the matrix m.
3640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
3650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param m
3660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix4x4 *m);
3680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
3700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix3x3 *m);
3720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
3740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix2x2 *m);
3760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif
379