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