diff options
Diffstat (limited to 'libs/rs/scriptc/rs_matrix.rsh')
-rw-r--r-- | libs/rs/scriptc/rs_matrix.rsh | 378 |
1 files changed, 378 insertions, 0 deletions
diff --git a/libs/rs/scriptc/rs_matrix.rsh b/libs/rs/scriptc/rs_matrix.rsh new file mode 100644 index 0000000..ab3cd3b --- /dev/null +++ b/libs/rs/scriptc/rs_matrix.rsh @@ -0,0 +1,378 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** @file rs_matrix.rsh + * \brief Matrix routines + * + * + */ + +#ifndef __RS_MATRIX_RSH__ +#define __RS_MATRIX_RSH__ + +/** + * Set one element of a matrix. + * + * @param m The matrix to be set + * @param row + * @param col + * @param v + * + * @return void + */ +_RS_RUNTIME void __attribute__((overloadable)) +rsMatrixSet(rs_matrix4x4 *m, uint32_t row, uint32_t col, float v); +/** + * \overload + */ +_RS_RUNTIME void __attribute__((overloadable)) +rsMatrixSet(rs_matrix3x3 *m, uint32_t row, uint32_t col, float v); +/** + * \overload + */ +_RS_RUNTIME void __attribute__((overloadable)) +rsMatrixSet(rs_matrix2x2 *m, uint32_t row, uint32_t col, float v); + +/** + * Get one element of a matrix. + * + * @param m The matrix to read from + * @param row + * @param col + * + * @return float + */ +_RS_RUNTIME float __attribute__((overloadable)) +rsMatrixGet(const rs_matrix4x4 *m, uint32_t row, uint32_t col); +/** + * \overload + */ +_RS_RUNTIME float __attribute__((overloadable)) +rsMatrixGet(const rs_matrix3x3 *m, uint32_t row, uint32_t col); +/** + * \overload + */ +_RS_RUNTIME float __attribute__((overloadable)) +rsMatrixGet(const rs_matrix2x2 *m, uint32_t row, uint32_t col); + +/** + * Set the elements of a matrix to the identity matrix. + * + * @param m + */ +extern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix4x4 *m); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix3x3 *m); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix2x2 *m); + +/** + * Set the elements of a matrix from an array of floats. + * + * @param m + */ +extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const float *v); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix3x3 *m, const float *v); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix2x2 *m, const float *v); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix4x4 *v); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix3x3 *v); + +/** + * Set the elements of a matrix from another matrix. + * + * @param m + */ +extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix2x2 *v); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix3x3 *m, const rs_matrix3x3 *v); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix2x2 *m, const rs_matrix2x2 *v); + +/** + * Load a rotation matrix. + * + * @param m + * @param rot + * @param x + * @param y + * @param z + */ +extern void __attribute__((overloadable)) +rsMatrixLoadRotate(rs_matrix4x4 *m, float rot, float x, float y, float z); + +/** + * Load a scale matrix. + * + * @param m + * @param x + * @param y + * @param z + */ +extern void __attribute__((overloadable)) +rsMatrixLoadScale(rs_matrix4x4 *m, float x, float y, float z); + +/** + * Load a translation matrix. + * + * @param m + * @param x + * @param y + * @param z + */ +extern void __attribute__((overloadable)) +rsMatrixLoadTranslate(rs_matrix4x4 *m, float x, float y, float z); + +/** + * Multiply two matrix (lhs, rhs) and place the result in m. + * + * @param m + * @param lhs + * @param rhs + */ +extern void __attribute__((overloadable)) +rsMatrixLoadMultiply(rs_matrix4x4 *m, const rs_matrix4x4 *lhs, const rs_matrix4x4 *rhs); +/** + * \overload + */ +extern void __attribute__((overloadable)) +rsMatrixLoadMultiply(rs_matrix3x3 *m, const rs_matrix3x3 *lhs, const rs_matrix3x3 *rhs); +/** + * \overload + */ +extern void __attribute__((overloadable)) +rsMatrixLoadMultiply(rs_matrix2x2 *m, const rs_matrix2x2 *lhs, const rs_matrix2x2 *rhs); + +/** + * Multiply the matrix m by rhs and place the result back into m. + * + * @param m (lhs) + * @param rhs + */ +extern void __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix4x4 *m, const rs_matrix4x4 *rhs); +/** + * \overload + */ +extern void __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix3x3 *m, const rs_matrix3x3 *rhs); +/** + * \overload + */ +extern void __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix2x2 *m, const rs_matrix2x2 *rhs); + +/** + * Multiple matrix m with a rotation matrix + * + * @param m + * @param rot + * @param x + * @param y + * @param z + */ +extern void __attribute__((overloadable)) +rsMatrixRotate(rs_matrix4x4 *m, float rot, float x, float y, float z); + +/** + * Multiple matrix m with a scale matrix + * + * @param m + * @param x + * @param y + * @param z + */ +extern void __attribute__((overloadable)) +rsMatrixScale(rs_matrix4x4 *m, float x, float y, float z); + +/** + * Multiple matrix m with a translation matrix + * + * @param m + * @param x + * @param y + * @param z + */ +extern void __attribute__((overloadable)) +rsMatrixTranslate(rs_matrix4x4 *m, float x, float y, float z); + +/** + * Load an Ortho projection matrix constructed from the 6 planes + * + * @param m + * @param left + * @param right + * @param bottom + * @param top + * @param near + * @param far + */ +extern void __attribute__((overloadable)) +rsMatrixLoadOrtho(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far); + +/** + * Load an Frustum projection matrix constructed from the 6 planes + * + * @param m + * @param left + * @param right + * @param bottom + * @param top + * @param near + * @param far + */ +extern void __attribute__((overloadable)) +rsMatrixLoadFrustum(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far); + +/** + * Load an perspective projection matrix constructed from the 6 planes + * + * @param m + * @param fovy Field of view, in degrees along the Y axis. + * @param aspect Ratio of x / y. + * @param near + * @param far + */ +extern void __attribute__((overloadable)) +rsMatrixLoadPerspective(rs_matrix4x4* m, float fovy, float aspect, float near, float far); + +#if !defined(RS_VERSION) || (RS_VERSION < 14) +/** + * Multiply a vector by a matrix and return the result vector. + * API version 10-13 + */ +_RS_RUNTIME float4 __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix4x4 *m, float4 in); + +/** + * \overload + */ +_RS_RUNTIME float4 __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix4x4 *m, float3 in); + +/** + * \overload + */ +_RS_RUNTIME float4 __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix4x4 *m, float2 in); + +/** + * \overload + */ +_RS_RUNTIME float3 __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix3x3 *m, float3 in); + +/** + * \overload + */ +_RS_RUNTIME float3 __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix3x3 *m, float2 in); + +/** + * \overload + */ +_RS_RUNTIME float2 __attribute__((overloadable)) +rsMatrixMultiply(rs_matrix2x2 *m, float2 in); +#else +/** + * Multiply a vector by a matrix and return the result vector. + * API version 10-13 + */ +_RS_RUNTIME float4 __attribute__((overloadable)) +rsMatrixMultiply(const rs_matrix4x4 *m, float4 in); + +/** + * \overload + */ +_RS_RUNTIME float4 __attribute__((overloadable)) +rsMatrixMultiply(const rs_matrix4x4 *m, float3 in); + +/** + * \overload + */ +_RS_RUNTIME float4 __attribute__((overloadable)) +rsMatrixMultiply(const rs_matrix4x4 *m, float2 in); + +/** + * \overload + */ +_RS_RUNTIME float3 __attribute__((overloadable)) +rsMatrixMultiply(const rs_matrix3x3 *m, float3 in); + +/** + * \overload + */ +_RS_RUNTIME float3 __attribute__((overloadable)) +rsMatrixMultiply(const rs_matrix3x3 *m, float2 in); + +/** + * \overload + */ +_RS_RUNTIME float2 __attribute__((overloadable)) +rsMatrixMultiply(const rs_matrix2x2 *m, float2 in); +#endif + + +/** + * Returns true if the matrix was successfully inversed + * + * @param m + */ +extern bool __attribute__((overloadable)) rsMatrixInverse(rs_matrix4x4 *m); + +/** + * Returns true if the matrix was successfully inversed and transposed. + * + * @param m + */ +extern bool __attribute__((overloadable)) rsMatrixInverseTranspose(rs_matrix4x4 *m); + +/** + * Transpose the matrix m. + * + * @param m + */ +extern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix4x4 *m); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix3x3 *m); +/** + * \overload + */ +extern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix2x2 *m); + + +#endif |