rs_core.rsh revision 09aeb8ac1b0b976c2de40dd00da0c6841e4e882a
1275b1e98bb949643d35546f10f8b1af009349526Jason Sams#ifndef __RS_CORE_RSH__ 2275b1e98bb949643d35546f10f8b1af009349526Jason Sams#define __RS_CORE_RSH__ 3275b1e98bb949643d35546f10f8b1af009349526Jason Sams 47a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao#define _RS_RUNTIME extern 5f6a28c6a71d8929fb90ca83634a617d69531d87dStephen Hines 609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 99bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 109bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, float); 1109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 1209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 1309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 149bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 159bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, float, float); 1609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 1709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 1809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 199bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 209bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, float, float, float); 2109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 2209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 2309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 249bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 259bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, float, float, float, float); 2609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 2709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 2809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 299bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 30df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hines rsDebug(const char *, double); 3109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 3209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 3309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 34df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hinesextern void __attribute__((overloadable)) 359bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, const rs_matrix4x4 *); 3609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 3709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 3809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 399bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 409bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, const rs_matrix3x3 *); 4109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 4209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 4309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 449bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 459bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, const rs_matrix2x2 *); 4609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 4709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 4809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 499bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 509bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, int); 5109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 5209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 5309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 549bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 559bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, uint); 5609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 5709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 5809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 599bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 60df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hines rsDebug(const char *, long); 6109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 6209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 6309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 64df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hinesextern void __attribute__((overloadable)) 65df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hines rsDebug(const char *, unsigned long); 6609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 6709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 6809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 69df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hinesextern void __attribute__((overloadable)) 70df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hines rsDebug(const char *, long long); 7109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 7209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 7309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 74df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hinesextern void __attribute__((overloadable)) 75df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hines rsDebug(const char *, unsigned long long); 7609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 7709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 7809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 79df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hinesextern void __attribute__((overloadable)) 809bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, const void *); 819bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao#define RS_DEBUG(a) rsDebug(#a, a) 829bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao#define RS_DEBUG_MARKER rsDebug(__FILE__, __LINE__) 839bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao 8409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 8509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 8609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 8709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 887a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME void __attribute__((overloadable)) rsDebug(const char *s, float2 v); 8909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 9009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 9109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 927a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME void __attribute__((overloadable)) rsDebug(const char *s, float3 v); 9309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 9409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Debug function. Prints a string and value to the log. 9509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 967a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME void __attribute__((overloadable)) rsDebug(const char *s, float4 v); 977a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 9809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 9909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 10009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Pack floating point (0-1) RGB values into a uchar4. The alpha component is 10109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * set to 255 (1.0). 10209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 10309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param r 10409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param g 10509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param b 10609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 10709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return uchar4 10809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1097a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float r, float g, float b); 1107a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 11109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 11209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Pack floating point (0-1) RGBA values into a uchar4. 11309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 11409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param r 11509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param g 11609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param b 11709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param a 11809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 11909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return uchar4 12009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1217a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float r, float g, float b, float a); 1227a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 12309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 12409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Pack floating point (0-1) RGB values into a uchar4. The alpha component is 12509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * set to 255 (1.0). 12609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 12709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param color 12809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 12909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return uchar4 13009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1317a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float3 color); 1327a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 13309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 13409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Pack floating point (0-1) RGBA values into a uchar4. 13509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 13609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param color 13709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 13809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return uchar4 13909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1407a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float4 color); 1417a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 14209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 14309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Unpack a uchar4 color to float4. The resulting float range will be (0-1). 14409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 14509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param c 14609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 14709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return float4 14809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1497a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float4 rsUnpackColor8888(uchar4 c); 150275b1e98bb949643d35546f10f8b1af009349526Jason Sams 1512a63bf6c293d89c8e3725cfb7ee2add3dd3f0246Jason Sams 1527fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams///////////////////////////////////////////////////// 1537fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams// Matrix ops 1547fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams///////////////////////////////////////////////////// 1557fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 15609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 15709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Set one element of a matrix. 15809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 15909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param m The matrix to be set 16009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param row 16109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param col 16209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param v 16309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 16409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return void 16509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1667a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME void __attribute__((overloadable)) 1677a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixSet(rs_matrix4x4 *m, uint32_t row, uint32_t col, float v); 1687a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME void __attribute__((overloadable)) 1697a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixSet(rs_matrix3x3 *m, uint32_t row, uint32_t col, float v); 1707a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME void __attribute__((overloadable)) 1717a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixSet(rs_matrix2x2 *m, uint32_t row, uint32_t col, float v); 1727fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 17309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 17409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Get one element of a matrix. 17509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 17609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param m The matrix to read from 17709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param row 17809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param col 17909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 18009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return float 18109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 18209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams_RS_RUNTIME float __attribute__((overloadable)) 18309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason SamsrsMatrixGet(const rs_matrix4x4 *m, uint32_t row, uint32_t col); 18409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams_RS_RUNTIME float __attribute__((overloadable)) 18509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason SamsrsMatrixGet(const rs_matrix3x3 *m, uint32_t row, uint32_t col); 1867a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) 1877a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixGet(const rs_matrix2x2 *m, uint32_t row, uint32_t col); 1887fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 18909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 19009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Set the elements of a matrix to the identity matrix. 19109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 19209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param m 19309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 194693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix4x4 *m); 195693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix3x3 *m); 196693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix2x2 *m); 19709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 19809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 19909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Set the elements of a matrix from an array of floats. 20009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 20109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param m 20209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 203693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const float *v); 204693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix3x3 *m, const float *v); 205693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix2x2 *m, const float *v); 20609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 20709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 20809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Set the elements of a matrix from another matrix. 20909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 21009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param m 21109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 212693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix4x4 *v); 213693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix3x3 *v); 214693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix2x2 *v); 215693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix3x3 *m, const rs_matrix3x3 *v); 216693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix2x2 *m, const rs_matrix2x2 *v); 2177fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 21809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 21909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Load a rotation matrix. 22009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 22109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param m 22209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param rot 22309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x 22409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y 22509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z 22609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 227693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 228693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadRotate(rs_matrix4x4 *m, float rot, float x, float y, float z); 2297fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 230693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 231693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadScale(rs_matrix4x4 *m, float x, float y, float z); 2327fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 233693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 234693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadTranslate(rs_matrix4x4 *m, float x, float y, float z); 2357fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 236693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 237693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadMultiply(rs_matrix4x4 *m, const rs_matrix4x4 *lhs, const rs_matrix4x4 *rhs); 2387fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 239693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 240693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixMultiply(rs_matrix4x4 *m, const rs_matrix4x4 *rhs); 2417fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 242693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 243693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadMultiply(rs_matrix3x3 *m, const rs_matrix3x3 *lhs, const rs_matrix3x3 *rhs); 2447fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 245693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 246693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixMultiply(rs_matrix3x3 *m, const rs_matrix3x3 *rhs); 2477fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 248693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 249693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadMultiply(rs_matrix2x2 *m, const rs_matrix2x2 *lhs, const rs_matrix2x2 *rhs); 2507fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 251693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 252693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixMultiply(rs_matrix2x2 *m, const rs_matrix2x2 *rhs); 2537fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 254693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 255693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixRotate(rs_matrix4x4 *m, float rot, float x, float y, float z); 2567fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 257693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 258693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixScale(rs_matrix4x4 *m, float x, float y, float z); 2597fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 260693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 261693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixTranslate(rs_matrix4x4 *m, float x, float y, float z); 2627fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 263693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 264693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadOrtho(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far); 2657fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 266693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 267693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadFrustum(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far); 2687fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 269693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 270693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadPerspective(rs_matrix4x4* m, float fovy, float aspect, float near, float far); 271c8dc45cc95cd144038c153f3a4657527d5a7c0b6Alex Sakhartchouk 2727a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) 2737a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixMultiply(rs_matrix4x4 *m, float4 in); 2747a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 2757a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) 2767a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixMultiply(rs_matrix4x4 *m, float3 in); 2777a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 2787a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) 2797a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixMultiply(rs_matrix4x4 *m, float2 in); 2807a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 2817a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) 2827a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixMultiply(rs_matrix3x3 *m, float3 in); 2837a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 2847a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) 2857a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixMultiply(rs_matrix3x3 *m, float2 in); 2867a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 2877a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) 2887a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixMultiply(rs_matrix2x2 *m, float2 in); 2897fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 29020c6c1febce7cdf398c58287bf506b3a4a210285Alex Sakhartchouk// Returns true if the matrix was successfully inversed 291693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern bool __attribute__((overloadable)) rsMatrixInverse(rs_matrix4x4 *m); 292693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern bool __attribute__((overloadable)) rsMatrixInverseTranspose(rs_matrix4x4 *m); 293693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix4x4 *m); 294693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix3x3 *m); 295693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix2x2 *m); 29620c6c1febce7cdf398c58287bf506b3a4a210285Alex Sakhartchouk 29729858059ffff967607f7583ae9146dc4c720f92eAlex Sakhartchouk///////////////////////////////////////////////////// 2987fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams// int ops 2997fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams///////////////////////////////////////////////////// 3007fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 3017a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME uint __attribute__((overloadable, always_inline)) rsClamp(uint amount, uint low, uint high); 3027a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME int __attribute__((overloadable, always_inline)) rsClamp(int amount, int low, int high); 3037a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME ushort __attribute__((overloadable, always_inline)) rsClamp(ushort amount, ushort low, ushort high); 3047a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME short __attribute__((overloadable, always_inline)) rsClamp(short amount, short low, short high); 3057a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME uchar __attribute__((overloadable, always_inline)) rsClamp(uchar amount, uchar low, uchar high); 3067a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME char __attribute__((overloadable, always_inline)) rsClamp(char amount, char low, char high); 307275b1e98bb949643d35546f10f8b1af009349526Jason Sams 3087a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao#undef _RS_RUNTIME 309275b1e98bb949643d35546f10f8b1af009349526Jason Sams 3107a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao#endif 311