1044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams/* 2291330fbaf7486a1cea33de7dd26c18e57c71391Stephen Hines * Copyright (C) 2016 The Android Open Source Project 3044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 4044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * you may not use this file except in compliance with the License. 6044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * You may obtain a copy of the License at 7044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 8044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 10044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Unless required by applicable law or agreed to in writing, software 11044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * See the License for the specific language governing permissions and 14044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * limitations under the License. 15044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 16044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 174a73004df5231d188c41267fee17c566ae7c3631Jean-Luc Brouillet// Don't edit this file! It is auto-generated by frameworks/rs/api/generate.sh. 18c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 19c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 2020b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * rs_matrix.rsh: Matrix Functions 21044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 221bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * These functions let you manipulate square matrices of rank 2x2, 3x3, and 4x4. 236386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * They are particularly useful for graphical transformations and are compatible 246386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * with OpenGL. 251bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 266386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * We use a zero-based index for rows and columns. E.g. the last element of a 276386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * rs_matrix4x4 is found at (3, 3). 281bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 296386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * RenderScript uses column-major matrices and column-based vectors. Transforming 306386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * a vector is done by postmultiplying the vector, e.g. (matrix * vector), 316386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * as provided by rsMatrixMultiply(). 321bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 336386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * To create a transformation matrix that performs two transformations at once, 346386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * multiply the two source matrices, with the first transformation as the right 356386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * argument. E.g. to create a transformation matrix that applies the 36c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * transformation s1 followed by s2, call rsMatrixLoadMultiply(&combined, &s2, &s1). 37c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * This derives from s2 * (s1 * v), which is (s2 * s1) * v. 381bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 39c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * We have two style of functions to create transformation matrices: 406386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * rsMatrixLoadTransformation and rsMatrixTransformation. The former 416386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * style simply stores the transformation matrix in the first argument. The latter 426386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * modifies a pre-existing transformation matrix so that the new transformation 436386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * happens first. E.g. if you call rsMatrixTranslate() on a matrix that already 446386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * does a scaling, the resulting matrix when applied to a vector will first do the 456386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * translation then the scaling. 46044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 474a73004df5231d188c41267fee17c566ae7c3631Jean-Luc Brouillet 48c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#ifndef RENDERSCRIPT_RS_MATRIX_RSH 49c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#define RENDERSCRIPT_RS_MATRIX_RSH 50044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 51be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#include "rs_vector_math.rsh" 52be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 53be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 5420b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * rsExtractFrustumPlanes: Compute frustum planes 5520b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * 56be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Computes 6 frustum planes from the view projection matrix 57be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 58be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Parameters: 596386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * viewProj: Matrix to extract planes from. 606386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * left: Left plane. 616386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * right: Right plane. 626386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * top: Top plane. 636386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * bottom: Bottom plane. 646386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * near: Near plane. 656386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * far: Far plane. 66be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 676e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham#if !defined(RS_VERSION) || (RS_VERSION <= 23) 68a4d25bc511c86bb402890ce480ef581654319d75Verena Beckhamstatic inline void __attribute__((overloadable)) 69be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet rsExtractFrustumPlanes(const rs_matrix4x4* viewProj, float4* left, float4* right, float4* top, 70be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet float4* bottom, float4* near, float4* far) { 71be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet // x y z w = a b c d in the plane equation 72be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet left->x = viewProj->m[3] + viewProj->m[0]; 73be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet left->y = viewProj->m[7] + viewProj->m[4]; 74be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet left->z = viewProj->m[11] + viewProj->m[8]; 75be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet left->w = viewProj->m[15] + viewProj->m[12]; 76be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 77be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet right->x = viewProj->m[3] - viewProj->m[0]; 78be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet right->y = viewProj->m[7] - viewProj->m[4]; 79be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet right->z = viewProj->m[11] - viewProj->m[8]; 80be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet right->w = viewProj->m[15] - viewProj->m[12]; 81be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 82be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet top->x = viewProj->m[3] - viewProj->m[1]; 83be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet top->y = viewProj->m[7] - viewProj->m[5]; 84be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet top->z = viewProj->m[11] - viewProj->m[9]; 85be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet top->w = viewProj->m[15] - viewProj->m[13]; 86be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 87be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet bottom->x = viewProj->m[3] + viewProj->m[1]; 88be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet bottom->y = viewProj->m[7] + viewProj->m[5]; 89be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet bottom->z = viewProj->m[11] + viewProj->m[9]; 90be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet bottom->w = viewProj->m[15] + viewProj->m[13]; 91be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 92be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet near->x = viewProj->m[3] + viewProj->m[2]; 93be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet near->y = viewProj->m[7] + viewProj->m[6]; 94be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet near->z = viewProj->m[11] + viewProj->m[10]; 95be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet near->w = viewProj->m[15] + viewProj->m[14]; 96be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 97be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet far->x = viewProj->m[3] - viewProj->m[2]; 98be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet far->y = viewProj->m[7] - viewProj->m[6]; 99be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet far->z = viewProj->m[11] - viewProj->m[10]; 100be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet far->w = viewProj->m[15] - viewProj->m[14]; 101be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 102be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet float len = length(left->xyz); 103be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *left /= len; 104be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet len = length(right->xyz); 105be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *right /= len; 106be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet len = length(top->xyz); 107be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *top /= len; 108be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet len = length(bottom->xyz); 109be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *bottom /= len; 110be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet len = length(near->xyz); 111be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *near /= len; 112be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet len = length(far->xyz); 113be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *far /= len; 114be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet} 1156e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham#endif 1166e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham 1176e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1186e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamextern void __attribute__((overloadable)) 1196e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham rsExtractFrustumPlanes(const rs_matrix4x4* viewProj, float4* left, float4* righ, float4* top, 1206e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham float4* bottom, float4* near, float4* far); 1216e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham#endif 122be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 123be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 12420b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * rsIsSphereInFrustum: Checks if a sphere is within the frustum planes 12520b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * 12620b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * Returns true if the sphere is within the 6 frustum planes. 127be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 128be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Parameters: 1296386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * sphere: float4 representing the sphere. 1306386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * left: Left plane. 1316386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * right: Right plane. 1326386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * top: Top plane. 1336386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * bottom: Bottom plane. 1346386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * near: Near plane. 1356386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * far: Far plane. 136be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 1376e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham#if !defined(RS_VERSION) || (RS_VERSION <= 23) 1386e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamstatic inline bool __attribute__((always_inline, overloadable)) 139be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet rsIsSphereInFrustum(float4* sphere, float4* left, float4* right, float4* top, float4* bottom, 140be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet float4* near, float4* far) { 141be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet float distToCenter = dot(left->xyz, sphere->xyz) + left->w; 142be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) { 143be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet return false; 144be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet } 145be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distToCenter = dot(right->xyz, sphere->xyz) + right->w; 146be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) { 147be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet return false; 148be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet } 149be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distToCenter = dot(top->xyz, sphere->xyz) + top->w; 150be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) { 151be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet return false; 152be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet } 153be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distToCenter = dot(bottom->xyz, sphere->xyz) + bottom->w; 154be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) { 155be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet return false; 156be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet } 157be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distToCenter = dot(near->xyz, sphere->xyz) + near->w; 158be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) { 159be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet return false; 160be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet } 161be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distToCenter = dot(far->xyz, sphere->xyz) + far->w; 162be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet if (distToCenter < -sphere->w) { 163be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet return false; 164be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet } 165be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet return true; 166be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet} 1676e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham#endif 1686e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham 1696e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1706e13ee21796fd86802f2688c6220544c99b68c40Verena Beckhamextern bool __attribute__((overloadable)) 1716e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham rsIsSphereInFrustum(float4* sphere, float4* left, float4* right, float4* top, float4* bottom, 1726e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham float4* near, float4* far); 1736e13ee21796fd86802f2688c6220544c99b68c40Verena Beckham#endif 174be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 175c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 176c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixGet: Get one element 177044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 1781bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * Returns one element of a matrix. 1791bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 180c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Warning: The order of the column and row parameters may be unexpected. 181044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 182c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 1836386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * m: Matrix to extract the element from. 1846386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * col: Zero-based column of the element to be extracted. 1856386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * row: Zero-based row of the element to extracted. 186044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 187129c14734e6f9fc1f4937026182cd35ee4dbe911Jean-Luc Brouilletextern float __attribute__((overloadable)) 188c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixGet(const rs_matrix4x4* m, uint32_t col, uint32_t row); 189c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 190129c14734e6f9fc1f4937026182cd35ee4dbe911Jean-Luc Brouilletextern float __attribute__((overloadable)) 191c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixGet(const rs_matrix3x3* m, uint32_t col, uint32_t row); 192c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 193129c14734e6f9fc1f4937026182cd35ee4dbe911Jean-Luc Brouilletextern float __attribute__((overloadable)) 194c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixGet(const rs_matrix2x2* m, uint32_t col, uint32_t row); 195044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 196c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 197c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixInverse: Inverts a matrix in place 198044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 199c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Returns true if the matrix was successfully inverted. 200c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 201c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 2026386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * m: Matrix to invert. 203044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 204c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern bool __attribute__((overloadable)) 205c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixInverse(rs_matrix4x4* m); 206044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 207c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 208c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixInverseTranspose: Inverts and transpose a matrix in place 209044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 2106386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * The matrix is first inverted then transposed. Returns true if the matrix was 2116386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * successfully inverted. 2121bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 213c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 2146386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * m: Matrix to modify. 215044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 216c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern bool __attribute__((overloadable)) 217c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixInverseTranspose(rs_matrix4x4* m); 218c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 219c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 220c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixLoad: Load or copy a matrix 2211bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 222c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Set the elements of a matrix from an array of floats or from another matrix. 2231bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 224c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * If loading from an array, the floats should be in row-major order, i.e. the element a 225c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * row 0, column 0 should be first, followed by the element at 226c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * row 0, column 1, etc. 227044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 2286386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * If loading from a matrix and the source is smaller than the destination, the rest 2296386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * of the destination is filled with elements of the identity matrix. E.g. 230c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * loading a rs_matrix2x2 into a rs_matrix4x4 will give: 2311bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 232c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * m00 m01 0.0 0.0 233c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * m10 m11 0.0 0.0 234c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 0.0 0.0 1.0 0.0 235c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 0.0 0.0 0.0 1.0 2361bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 2371bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 238c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 2396386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * destination: Matrix to set. 2406386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * array: Array of values to set the matrix to. These arrays should be 4, 9, or 16 floats long, depending on the matrix size. 2416386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * source: Source matrix. 242044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 243044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern void __attribute__((overloadable)) 244c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoad(rs_matrix4x4* destination, const float* array); 245c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 246c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 247c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoad(rs_matrix3x3* destination, const float* array); 248c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 249c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 250c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoad(rs_matrix2x2* destination, const float* array); 251c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 252c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 253c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoad(rs_matrix4x4* destination, const rs_matrix4x4* source); 254c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 255c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 256c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoad(rs_matrix3x3* destination, const rs_matrix3x3* source); 257044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 258c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 259c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoad(rs_matrix2x2* destination, const rs_matrix2x2* source); 260c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 261c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 262c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoad(rs_matrix4x4* destination, const rs_matrix3x3* source); 263c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 264c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 265c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoad(rs_matrix4x4* destination, const rs_matrix2x2* source); 266c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 267c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 268c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixLoadFrustum: Load a frustum projection matrix 269044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 2706386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * Constructs a frustum projection matrix, transforming the box identified by 2716386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * the six clipping planes left, right, bottom, top, near, far. 2721bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 2736386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * To apply this projection to a vector, multiply the vector by the created 2746386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * matrix using rsMatrixMultiply(). 2751bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 276c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 2776386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * m: Matrix to set. 278044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 279044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern void __attribute__((overloadable)) 280c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoadFrustum(rs_matrix4x4* m, float left, float right, float bottom, float top, 281c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet float near, float far); 282044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 283c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 284c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixLoadIdentity: Load identity matrix 2851bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 286c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Set the elements of a matrix to the identity matrix. 2871bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 288c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 2896386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * m: Matrix to set. 290044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 291044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern void __attribute__((overloadable)) 292c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoadIdentity(rs_matrix4x4* m); 293c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 294c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 295c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoadIdentity(rs_matrix3x3* m); 296c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 297c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 298c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoadIdentity(rs_matrix2x2* m); 299044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 300c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 301c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixLoadMultiply: Multiply two matrices 3021bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 303c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Sets m to the matrix product of lhs * rhs. 304044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 3051bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * To combine two 4x4 transformaton matrices, multiply the second transformation matrix 3061bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * by the first transformation matrix. E.g. to create a transformation matrix that applies 3076386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * the transformation s1 followed by s2, call rsMatrixLoadMultiply(&combined, &s2, &s1). 3081bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 309c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Warning: Prior to version 21, storing the result back into right matrix is not supported and 3101bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * will result in undefined behavior. Use rsMatrixMulitply instead. E.g. instead of doing 3111bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * rsMatrixLoadMultiply (&m2r, &m2r, &m2l), use rsMatrixMultiply (&m2r, &m2l). 3121bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * rsMatrixLoadMultiply (&m2l, &m2r, &m2l) works as expected. 3131bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 314c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 3156386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * m: Matrix to set. 3166386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * lhs: Left matrix of the product. 3176386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * rhs: Right matrix of the product. 318044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 319044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern void __attribute__((overloadable)) 320c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoadMultiply(rs_matrix4x4* m, const rs_matrix4x4* lhs, const rs_matrix4x4* rhs); 321044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 322044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern void __attribute__((overloadable)) 323c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoadMultiply(rs_matrix3x3* m, const rs_matrix3x3* lhs, const rs_matrix3x3* rhs); 324c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 325044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern void __attribute__((overloadable)) 326c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoadMultiply(rs_matrix2x2* m, const rs_matrix2x2* lhs, const rs_matrix2x2* rhs); 327044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 328c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 329c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixLoadOrtho: Load an orthographic projection matrix 3301bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 3316386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * Constructs an orthographic projection matrix, transforming the box identified by the 3326386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * six clipping planes left, right, bottom, top, near, far into a unit cube 3336386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * with a corner at (-1, -1, -1) and the opposite at (1, 1, 1). 334044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 3356386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * To apply this projection to a vector, multiply the vector by the created matrix 3366386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * using rsMatrixMultiply(). 3371bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 338c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * See https://en.wikipedia.org/wiki/Orthographic_projection . 339c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 340c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 3416386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * m: Matrix to set. 342044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 343044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern void __attribute__((overloadable)) 344c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoadOrtho(rs_matrix4x4* m, float left, float right, float bottom, float top, float near, 345c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet float far); 346044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 347c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 348c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixLoadPerspective: Load a perspective projection matrix 3491bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 350c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Constructs a perspective projection matrix, assuming a symmetrical field of view. 351044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 3526386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * To apply this projection to a vector, multiply the vector by the created matrix 3536386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * using rsMatrixMultiply(). 3541bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 355c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 3566386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * m: Matrix to set. 3574a73004df5231d188c41267fee17c566ae7c3631Jean-Luc Brouillet * fovy: Field of view, in degrees along the Y axis. 3584a73004df5231d188c41267fee17c566ae7c3631Jean-Luc Brouillet * aspect: Ratio of x / y. 3596386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * near: Near clipping plane. 3606386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * far: Far clipping plane. 361044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 362044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern void __attribute__((overloadable)) 363c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoadPerspective(rs_matrix4x4* m, float fovy, float aspect, float near, float far); 364044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 365c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 366c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixLoadRotate: Load a rotation matrix 3671bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 3686386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * This function creates a rotation matrix. The axis of rotation is the (x, y, z) vector. 3691bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 3706386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * To rotate a vector, multiply the vector by the created matrix using rsMatrixMultiply(). 371c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 372c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * See http://en.wikipedia.org/wiki/Rotation_matrix . 373044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 374c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 3756386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * m: Matrix to set. 3764a73004df5231d188c41267fee17c566ae7c3631Jean-Luc Brouillet * rot: How much rotation to do, in degrees. 3776386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * x: X component of the vector that is the axis of rotation. 3786386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * y: Y component of the vector that is the axis of rotation. 3796386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * z: Z component of the vector that is the axis of rotation. 380044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 381044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern void __attribute__((overloadable)) 382c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoadRotate(rs_matrix4x4* m, float rot, float x, float y, float z); 383044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 384c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 385c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixLoadScale: Load a scaling matrix 3861bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 3876386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * This function creates a scaling matrix, where each component of a vector is multiplied 3886386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * by a number. This number can be negative. 3891bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 3906386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * To scale a vector, multiply the vector by the created matrix using rsMatrixMultiply(). 3911bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 392c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 3936386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * m: Matrix to set. 3946386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * x: Multiple to scale the x components by. 3956386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * y: Multiple to scale the y components by. 3966386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * z: Multiple to scale the z components by. 397044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 398044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern void __attribute__((overloadable)) 399c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoadScale(rs_matrix4x4* m, float x, float y, float z); 400044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 401c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 402c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixLoadTranslate: Load a translation matrix 4031bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 4046386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * This function creates a translation matrix, where a number is added to each element of 4056386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * a vector. 406044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 4076386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * To translate a vector, multiply the vector by the created matrix using 4086386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * rsMatrixMultiply(). 409c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 410c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 4116386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * m: Matrix to set. 4126386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * x: Number to add to each x component. 4136386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * y: Number to add to each y component. 4146386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * z: Number to add to each z component. 415044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 416044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern void __attribute__((overloadable)) 417c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixLoadTranslate(rs_matrix4x4* m, float x, float y, float z); 418044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 419c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 420c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixMultiply: Multiply a matrix by a vector or another matrix 4211bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 422c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * For the matrix by matrix variant, sets m to the matrix product m * rhs. 4231bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 424c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * When combining two 4x4 transformation matrices using this function, the resulting 425c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * matrix will correspond to performing the rhs transformation first followed by 426c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * the original m transformation. 427044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 428c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * For the matrix by vector variant, returns the post-multiplication of the vector 429c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * by the matrix, ie. m * in. 4301bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 431c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * When multiplying a float3 to a rs_matrix4x4, the vector is expanded with (1). 4321bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 433c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * When multiplying a float2 to a rs_matrix4x4, the vector is expanded with (0, 1). 4341bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 435c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * When multiplying a float2 to a rs_matrix3x3, the vector is expanded with (0). 4361bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 437c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Starting with API 14, this function takes a const matrix as the first argument. 4381bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 439c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 4406386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * m: Left matrix of the product and the matrix to be set. 4416386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * rhs: Right matrix of the product. 442044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 443c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 444c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixMultiply(rs_matrix4x4* m, const rs_matrix4x4* rhs); 445c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 446c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 447c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixMultiply(rs_matrix3x3* m, const rs_matrix3x3* rhs); 448c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 449c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 450c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixMultiply(rs_matrix2x2* m, const rs_matrix2x2* rhs); 451c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 452c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#if !defined(RS_VERSION) || (RS_VERSION <= 13) 453129c14734e6f9fc1f4937026182cd35ee4dbe911Jean-Luc Brouilletextern float4 __attribute__((overloadable)) 454c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixMultiply(rs_matrix4x4* m, float4 in); 455c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#endif 456044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 457c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#if !defined(RS_VERSION) || (RS_VERSION <= 13) 458129c14734e6f9fc1f4937026182cd35ee4dbe911Jean-Luc Brouilletextern float4 __attribute__((overloadable)) 459c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixMultiply(rs_matrix4x4* m, float3 in); 460c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#endif 461044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 462c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#if !defined(RS_VERSION) || (RS_VERSION <= 13) 463129c14734e6f9fc1f4937026182cd35ee4dbe911Jean-Luc Brouilletextern float4 __attribute__((overloadable)) 464c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixMultiply(rs_matrix4x4* m, float2 in); 465c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#endif 466044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 467c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#if !defined(RS_VERSION) || (RS_VERSION <= 13) 468129c14734e6f9fc1f4937026182cd35ee4dbe911Jean-Luc Brouilletextern float3 __attribute__((overloadable)) 469c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixMultiply(rs_matrix3x3* m, float3 in); 470c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#endif 471044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 472c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#if !defined(RS_VERSION) || (RS_VERSION <= 13) 473129c14734e6f9fc1f4937026182cd35ee4dbe911Jean-Luc Brouilletextern float3 __attribute__((overloadable)) 474c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixMultiply(rs_matrix3x3* m, float2 in); 475c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#endif 476044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 477c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#if !defined(RS_VERSION) || (RS_VERSION <= 13) 478129c14734e6f9fc1f4937026182cd35ee4dbe911Jean-Luc Brouilletextern float2 __attribute__((overloadable)) 479c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixMultiply(rs_matrix2x2* m, float2 in); 480c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#endif 481c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 482c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 14)) 483129c14734e6f9fc1f4937026182cd35ee4dbe911Jean-Luc Brouilletextern float4 __attribute__((overloadable)) 484c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixMultiply(const rs_matrix4x4* m, float4 in); 485c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#endif 486044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 487c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 14)) 488129c14734e6f9fc1f4937026182cd35ee4dbe911Jean-Luc Brouilletextern float4 __attribute__((overloadable)) 489c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixMultiply(const rs_matrix4x4* m, float3 in); 490c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#endif 491044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 492c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 14)) 493129c14734e6f9fc1f4937026182cd35ee4dbe911Jean-Luc Brouilletextern float4 __attribute__((overloadable)) 494c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixMultiply(const rs_matrix4x4* m, float2 in); 495c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#endif 496044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 497c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 14)) 498129c14734e6f9fc1f4937026182cd35ee4dbe911Jean-Luc Brouilletextern float3 __attribute__((overloadable)) 499c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixMultiply(const rs_matrix3x3* m, float3 in); 500c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#endif 501044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 502c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 14)) 503129c14734e6f9fc1f4937026182cd35ee4dbe911Jean-Luc Brouilletextern float3 __attribute__((overloadable)) 504c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixMultiply(const rs_matrix3x3* m, float2 in); 505c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#endif 506044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 507c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 14)) 508129c14734e6f9fc1f4937026182cd35ee4dbe911Jean-Luc Brouilletextern float2 __attribute__((overloadable)) 509c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixMultiply(const rs_matrix2x2* m, float2 in); 510044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#endif 511044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 512c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 513c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixRotate: Apply a rotation to a transformation matrix 5141bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 515c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Multiply the matrix m with a rotation matrix. 516c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 5176386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * This function modifies a transformation matrix to first do a rotation. The axis of 5186386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * rotation is the (x, y, z) vector. 519044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 5206386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * To apply this combined transformation to a vector, multiply the vector by the created 5216386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * matrix using rsMatrixMultiply(). 522c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 523c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 5246386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * m: Matrix to modify. 5254a73004df5231d188c41267fee17c566ae7c3631Jean-Luc Brouillet * rot: How much rotation to do, in degrees. 5266386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * x: X component of the vector that is the axis of rotation. 5276386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * y: Y component of the vector that is the axis of rotation. 5286386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * z: Z component of the vector that is the axis of rotation. 529044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 530c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 531c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixRotate(rs_matrix4x4* m, float rot, float x, float y, float z); 532044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 533c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 534c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixScale: Apply a scaling to a transformation matrix 5351bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet * 536c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Multiply the matrix m with a scaling matrix. 537044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 5386386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * This function modifies a transformation matrix to first do a scaling. When scaling, 5396386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * each component of a vector is multiplied by a number. This number can be negative. 540c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 5416386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * To apply this combined transformation to a vector, multiply the vector by the created 5426386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * matrix using rsMatrixMultiply(). 543c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 544c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 5456386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * m: Matrix to modify. 5466386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * x: Multiple to scale the x components by. 5476386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * y: Multiple to scale the y components by. 5486386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * z: Multiple to scale the z components by. 549044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 550c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 551c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixScale(rs_matrix4x4* m, float x, float y, float z); 552044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 553c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 554c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixSet: Set one element 555c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 556c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Set an element of a matrix. 557044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 558c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Warning: The order of the column and row parameters may be unexpected. 559c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 560c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 5616386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * m: Matrix that will be modified. 5626386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * col: Zero-based column of the element to be set. 5636386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * row: Zero-based row of the element to be set. 5646386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * v: Value to set. 565044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 566c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 567c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixSet(rs_matrix4x4* m, uint32_t col, uint32_t row, float v); 568c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 569c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 570c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixSet(rs_matrix3x3* m, uint32_t col, uint32_t row, float v); 571c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 572c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 573c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixSet(rs_matrix2x2* m, uint32_t col, uint32_t row, float v); 574c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 575c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 576c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixTranslate: Apply a translation to a transformation matrix 577c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 578c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Multiply the matrix m with a translation matrix. 579c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 5806386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * This function modifies a transformation matrix to first do a translation. When 5816386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * translating, a number is added to each component of a vector. 582c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 5836386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * To apply this combined transformation to a vector, multiply the vector by the 5846386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * created matrix using rsMatrixMultiply(). 585c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 586c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 5876386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * m: Matrix to modify. 5886386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * x: Number to add to each x component. 5896386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * y: Number to add to each y component. 5906386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * z: Number to add to each z component. 591044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 592c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 593c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixTranslate(rs_matrix4x4* m, float x, float y, float z); 594c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 595c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet/* 596c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * rsMatrixTranspose: Transpose a matrix place 597c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 598c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Transpose the matrix m in place. 599c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * 600c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet * Parameters: 6016386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * m: Matrix to transpose. 602044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */ 603c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 604c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixTranspose(rs_matrix4x4* m); 605c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet 606c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 607c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixTranspose(rs_matrix3x3* m); 608044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 609c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouilletextern void __attribute__((overloadable)) 610c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet rsMatrixTranspose(rs_matrix2x2* m); 611044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 612c5184e202ced435258adb2cfe2013570e7190954Jean-Luc Brouillet#endif // RENDERSCRIPT_RS_MATRIX_RSH 613