#ifndef __RS_MATH_RSH__ #define __RS_MATH_RSH__ // Debugging, print to the LOG a description string and a value. extern void __attribute__((overloadable)) rsDebug(const char *, float); extern void __attribute__((overloadable)) rsDebug(const char *, float, float); extern void __attribute__((overloadable)) rsDebug(const char *, float, float, float); extern void __attribute__((overloadable)) rsDebug(const char *, float, float, float, float); extern void __attribute__((overloadable)) rsDebug(const char *, const rs_matrix4x4 *); extern void __attribute__((overloadable)) rsDebug(const char *, const rs_matrix3x3 *); extern void __attribute__((overloadable)) rsDebug(const char *, const rs_matrix2x2 *); extern void __attribute__((overloadable)) rsDebug(const char *, int); extern void __attribute__((overloadable)) rsDebug(const char *, uint); extern void __attribute__((overloadable)) rsDebug(const char *, const void *); #define RS_DEBUG(a) rsDebug(#a, a) #define RS_DEBUG_MARKER rsDebug(__FILE__, __LINE__) #include "rs_cl.rsh" #include "rs_core.rsh" extern void __attribute__((overloadable)) rsSetObject(rs_element *dst, rs_element src); extern void __attribute__((overloadable)) rsSetObject(rs_type *dst, rs_type src); extern void __attribute__((overloadable)) rsSetObject(rs_allocation *dst, rs_allocation src); extern void __attribute__((overloadable)) rsSetObject(rs_sampler *dst, rs_sampler src); extern void __attribute__((overloadable)) rsSetObject(rs_script *dst, rs_script src); extern void __attribute__((overloadable)) rsSetObject(rs_mesh *dst, rs_mesh src); extern void __attribute__((overloadable)) rsSetObject(rs_program_fragment *dst, rs_program_fragment src); extern void __attribute__((overloadable)) rsSetObject(rs_program_vertex *dst, rs_program_vertex src); extern void __attribute__((overloadable)) rsSetObject(rs_program_raster *dst, rs_program_raster src); extern void __attribute__((overloadable)) rsSetObject(rs_program_store *dst, rs_program_store src); extern void __attribute__((overloadable)) rsSetObject(rs_font *dst, rs_font src); extern void __attribute__((overloadable)) rsClearObject(rs_element *dst); extern void __attribute__((overloadable)) rsClearObject(rs_type *dst); extern void __attribute__((overloadable)) rsClearObject(rs_allocation *dst); extern void __attribute__((overloadable)) rsClearObject(rs_sampler *dst); extern void __attribute__((overloadable)) rsClearObject(rs_script *dst); extern void __attribute__((overloadable)) rsClearObject(rs_mesh *dst); extern void __attribute__((overloadable)) rsClearObject(rs_program_fragment *dst); extern void __attribute__((overloadable)) rsClearObject(rs_program_vertex *dst); extern void __attribute__((overloadable)) rsClearObject(rs_program_raster *dst); extern void __attribute__((overloadable)) rsClearObject(rs_program_store *dst); extern void __attribute__((overloadable)) rsClearObject(rs_font *dst); extern bool __attribute__((overloadable)) rsIsObject(rs_element); extern bool __attribute__((overloadable)) rsIsObject(rs_type); extern bool __attribute__((overloadable)) rsIsObject(rs_allocation); extern bool __attribute__((overloadable)) rsIsObject(rs_sampler); extern bool __attribute__((overloadable)) rsIsObject(rs_script); extern bool __attribute__((overloadable)) rsIsObject(rs_mesh); extern bool __attribute__((overloadable)) rsIsObject(rs_program_fragment); extern bool __attribute__((overloadable)) rsIsObject(rs_program_vertex); extern bool __attribute__((overloadable)) rsIsObject(rs_program_raster); extern bool __attribute__((overloadable)) rsIsObject(rs_program_store); extern bool __attribute__((overloadable)) rsIsObject(rs_font); // Allocations // Return the rs_allocation associated with a bound data // pointer. extern rs_allocation __attribute__((overloadable)) rsGetAllocation(const void *); // Return the dimensions associated with an allocation. extern uint32_t __attribute__((overloadable)) rsAllocationGetDimX(rs_allocation); extern uint32_t __attribute__((overloadable)) rsAllocationGetDimY(rs_allocation); extern uint32_t __attribute__((overloadable)) rsAllocationGetDimZ(rs_allocation); extern uint32_t __attribute__((overloadable)) rsAllocationGetDimLOD(rs_allocation); extern uint32_t __attribute__((overloadable)) rsAllocationGetDimFaces(rs_allocation); // Extract a single element from an allocation. extern const void * __attribute__((overloadable)) rsGetElementAt(rs_allocation, uint32_t x); extern const void * __attribute__((overloadable)) rsGetElementAt(rs_allocation, uint32_t x, uint32_t y); extern const void * __attribute__((overloadable)) rsGetElementAt(rs_allocation, uint32_t x, uint32_t y, uint32_t z); // Return a random value between 0 (or min_value) and max_malue. extern int __attribute__((overloadable)) rsRand(int max_value); extern int __attribute__((overloadable)) rsRand(int min_value, int max_value); extern float __attribute__((overloadable)) rsRand(float max_value); extern float __attribute__((overloadable)) rsRand(float min_value, float max_value); // return the fractional part of a float // min(v - ((int)floor(v)), 0x1.fffffep-1f); extern float __attribute__((overloadable)) rsFrac(float); // time extern int32_t __attribute__((overloadable)) rsSecond(void); extern int32_t __attribute__((overloadable)) rsMinute(void); extern int32_t __attribute__((overloadable)) rsHour(void); extern int32_t __attribute__((overloadable)) rsDay(void); extern int32_t __attribute__((overloadable)) rsMonth(void); extern int32_t __attribute__((overloadable)) rsYear(void); // Return the current system clock in milliseconds extern int64_t __attribute__((overloadable)) rsUptimeMillis(void); // Return the current system clock in nanoseconds extern int64_t __attribute__((overloadable)) rsUptimeNanos(void); // Return the time in seconds since function was last called in this script. extern float __attribute__((overloadable)) rsGetDt(void); // Send a message back to the client. Will not block and returns true // if the message was sendable and false if the fifo was full. // A message ID is required. Data payload is optional. extern bool __attribute__((overloadable)) rsSendToClient(int cmdID); extern bool __attribute__((overloadable)) rsSendToClient(int cmdID, const void *data, uint len); // Send a message back to the client, blocking until the message is queued. // A message ID is required. Data payload is optional. extern void __attribute__((overloadable)) rsSendToClientBlocking(int cmdID); extern void __attribute__((overloadable)) rsSendToClientBlocking(int cmdID, const void *data, uint len); // Script to Script enum rs_for_each_strategy { RS_FOR_EACH_STRATEGY_SERIAL, RS_FOR_EACH_STRATEGY_DONT_CARE, RS_FOR_EACH_STRATEGY_DST_LINEAR, RS_FOR_EACH_STRATEGY_TILE_SMALL, RS_FOR_EACH_STRATEGY_TILE_MEDIUM, RS_FOR_EACH_STRATEGY_TILE_LARGE }; typedef struct rs_script_call { enum rs_for_each_strategy strategy; uint32_t xStart; uint32_t xEnd; uint32_t yStart; uint32_t yEnd; uint32_t zStart; uint32_t zEnd; uint32_t arrayStart; uint32_t arrayEnd; } rs_script_call_t; extern void __attribute__((overloadable)) rsForEach(rs_script script, rs_allocation input, rs_allocation output, const void * usrData); extern void __attribute__((overloadable)) rsForEach(rs_script script, rs_allocation input, rs_allocation output, const void * usrData, const rs_script_call_t *); #endif