00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00023 #ifndef __RS_MATRIX_RSH__
00024 #define __RS_MATRIX_RSH__
00025
00036 _RS_RUNTIME void __attribute__((overloadable))
00037 rsMatrixSet(rs_matrix4x4 *m, uint32_t row, uint32_t col, float v);
00041 _RS_RUNTIME void __attribute__((overloadable))
00042 rsMatrixSet(rs_matrix3x3 *m, uint32_t row, uint32_t col, float v);
00046 _RS_RUNTIME void __attribute__((overloadable))
00047 rsMatrixSet(rs_matrix2x2 *m, uint32_t row, uint32_t col, float v);
00048
00058 _RS_RUNTIME float __attribute__((overloadable))
00059 rsMatrixGet(const rs_matrix4x4 *m, uint32_t row, uint32_t col);
00063 _RS_RUNTIME float __attribute__((overloadable))
00064 rsMatrixGet(const rs_matrix3x3 *m, uint32_t row, uint32_t col);
00068 _RS_RUNTIME float __attribute__((overloadable))
00069 rsMatrixGet(const rs_matrix2x2 *m, uint32_t row, uint32_t col);
00070
00076 extern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix4x4 *m);
00080 extern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix3x3 *m);
00084 extern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix2x2 *m);
00085
00091 extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const float *v);
00095 extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix3x3 *m, const float *v);
00099 extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix2x2 *m, const float *v);
00103 extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix4x4 *v);
00107 extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix3x3 *v);
00108
00114 extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix2x2 *v);
00118 extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix3x3 *m, const rs_matrix3x3 *v);
00122 extern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix2x2 *m, const rs_matrix2x2 *v);
00123
00133 extern void __attribute__((overloadable))
00134 rsMatrixLoadRotate(rs_matrix4x4 *m, float rot, float x, float y, float z);
00135
00144 extern void __attribute__((overloadable))
00145 rsMatrixLoadScale(rs_matrix4x4 *m, float x, float y, float z);
00146
00155 extern void __attribute__((overloadable))
00156 rsMatrixLoadTranslate(rs_matrix4x4 *m, float x, float y, float z);
00157
00165 extern void __attribute__((overloadable))
00166 rsMatrixLoadMultiply(rs_matrix4x4 *m, const rs_matrix4x4 *lhs, const rs_matrix4x4 *rhs);
00170 extern void __attribute__((overloadable))
00171 rsMatrixLoadMultiply(rs_matrix3x3 *m, const rs_matrix3x3 *lhs, const rs_matrix3x3 *rhs);
00175 extern void __attribute__((overloadable))
00176 rsMatrixLoadMultiply(rs_matrix2x2 *m, const rs_matrix2x2 *lhs, const rs_matrix2x2 *rhs);
00177
00184 extern void __attribute__((overloadable))
00185 rsMatrixMultiply(rs_matrix4x4 *m, const rs_matrix4x4 *rhs);
00189 extern void __attribute__((overloadable))
00190 rsMatrixMultiply(rs_matrix3x3 *m, const rs_matrix3x3 *rhs);
00194 extern void __attribute__((overloadable))
00195 rsMatrixMultiply(rs_matrix2x2 *m, const rs_matrix2x2 *rhs);
00196
00206 extern void __attribute__((overloadable))
00207 rsMatrixRotate(rs_matrix4x4 *m, float rot, float x, float y, float z);
00208
00217 extern void __attribute__((overloadable))
00218 rsMatrixScale(rs_matrix4x4 *m, float x, float y, float z);
00219
00228 extern void __attribute__((overloadable))
00229 rsMatrixTranslate(rs_matrix4x4 *m, float x, float y, float z);
00230
00242 extern void __attribute__((overloadable))
00243 rsMatrixLoadOrtho(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far);
00244
00256 extern void __attribute__((overloadable))
00257 rsMatrixLoadFrustum(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far);
00258
00268 extern void __attribute__((overloadable))
00269 rsMatrixLoadPerspective(rs_matrix4x4* m, float fovy, float aspect, float near, float far);
00270
00271 #if !defined(RS_VERSION) || (RS_VERSION < 14)
00272
00276 _RS_RUNTIME float4 __attribute__((overloadable))
00277 rsMatrixMultiply(rs_matrix4x4 *m, float4 in);
00278
00282 _RS_RUNTIME float4 __attribute__((overloadable))
00283 rsMatrixMultiply(rs_matrix4x4 *m, float3 in);
00284
00288 _RS_RUNTIME float4 __attribute__((overloadable))
00289 rsMatrixMultiply(rs_matrix4x4 *m, float2 in);
00290
00294 _RS_RUNTIME float3 __attribute__((overloadable))
00295 rsMatrixMultiply(rs_matrix3x3 *m, float3 in);
00296
00300 _RS_RUNTIME float3 __attribute__((overloadable))
00301 rsMatrixMultiply(rs_matrix3x3 *m, float2 in);
00302
00306 _RS_RUNTIME float2 __attribute__((overloadable))
00307 rsMatrixMultiply(rs_matrix2x2 *m, float2 in);
00308 #else
00309
00313 _RS_RUNTIME float4 __attribute__((overloadable))
00314 rsMatrixMultiply(const rs_matrix4x4 *m, float4 in);
00315
00319 _RS_RUNTIME float4 __attribute__((overloadable))
00320 rsMatrixMultiply(const rs_matrix4x4 *m, float3 in);
00321
00325 _RS_RUNTIME float4 __attribute__((overloadable))
00326 rsMatrixMultiply(const rs_matrix4x4 *m, float2 in);
00327
00331 _RS_RUNTIME float3 __attribute__((overloadable))
00332 rsMatrixMultiply(const rs_matrix3x3 *m, float3 in);
00333
00337 _RS_RUNTIME float3 __attribute__((overloadable))
00338 rsMatrixMultiply(const rs_matrix3x3 *m, float2 in);
00339
00343 _RS_RUNTIME float2 __attribute__((overloadable))
00344 rsMatrixMultiply(const rs_matrix2x2 *m, float2 in);
00345 #endif
00346
00347
00353 extern bool __attribute__((overloadable)) rsMatrixInverse(rs_matrix4x4 *m);
00354
00360 extern bool __attribute__((overloadable)) rsMatrixInverseTranspose(rs_matrix4x4 *m);
00361
00367 extern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix4x4 *m);
00371 extern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix3x3 *m);
00375 extern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix2x2 *m);
00376
00377
00378 #endif