vec4.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. /*
  2. * Copyright (c), Recep Aslantas.
  3. *
  4. * MIT License (MIT), http://opensource.org/licenses/MIT
  5. * Full license can be found in the LICENSE file
  6. */
  7. #ifndef cglmc_vec4_h
  8. #define cglmc_vec4_h
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. #include "../cglm.h"
  13. /* DEPRECATED! use _copy, _ucopy versions */
  14. #define glmc_vec4_dup3(v, dest) glmc_vec4_copy3(v, dest)
  15. #define glmc_vec4_dup(v, dest) glmc_vec4_copy(v, dest)
  16. #define glmc_vec4_flipsign(v) glmc_vec4_negate(v)
  17. #define glmc_vec4_flipsign_to(v, dest) glmc_vec4_negate_to(v, dest)
  18. #define glmc_vec4_inv(v) glmc_vec4_negate(v)
  19. #define glmc_vec4_inv_to(v, dest) glmc_vec4_negate_to(v, dest)
  20. #define glmc_vec4_step_uni(edge, x, dest) glmc_vec4_steps(edge, x, dest)
  21. CGLM_EXPORT
  22. void
  23. glmc_vec4(vec3 v3, float last, vec4 dest);
  24. CGLM_EXPORT
  25. void
  26. glmc_vec4_zero(vec4 v);
  27. CGLM_EXPORT
  28. void
  29. glmc_vec4_one(vec4 v);
  30. CGLM_EXPORT
  31. void
  32. glmc_vec4_copy3(vec4 v, vec3 dest);
  33. CGLM_EXPORT
  34. void
  35. glmc_vec4_copy(vec4 v, vec4 dest);
  36. CGLM_EXPORT
  37. void
  38. glmc_vec4_ucopy(vec4 v, vec4 dest);
  39. CGLM_EXPORT
  40. float
  41. glmc_vec4_dot(vec4 a, vec4 b);
  42. CGLM_EXPORT
  43. float
  44. glmc_vec4_norm(vec4 v);
  45. CGLM_EXPORT
  46. float
  47. glmc_vec4_norm2(vec4 v);
  48. CGLM_EXPORT
  49. float
  50. glmc_vec4_norm_one(vec4 v);
  51. CGLM_EXPORT
  52. float
  53. glmc_vec4_norm_inf(vec4 v);
  54. CGLM_EXPORT
  55. void
  56. glmc_vec4_normalize_to(vec4 v, vec4 dest);
  57. CGLM_EXPORT
  58. void
  59. glmc_vec4_normalize(vec4 v);
  60. CGLM_EXPORT
  61. void
  62. glmc_vec4_add(vec4 a, vec4 b, vec4 dest);
  63. CGLM_EXPORT
  64. void
  65. glmc_vec4_adds(vec4 v, float s, vec4 dest);
  66. CGLM_EXPORT
  67. void
  68. glmc_vec4_sub(vec4 a, vec4 b, vec4 dest);
  69. CGLM_EXPORT
  70. void
  71. glmc_vec4_subs(vec4 v, float s, vec4 dest);
  72. CGLM_EXPORT
  73. void
  74. glmc_vec4_mul(vec4 a, vec4 b, vec4 d);
  75. CGLM_EXPORT
  76. void
  77. glmc_vec4_scale(vec4 v, float s, vec4 dest);
  78. CGLM_EXPORT
  79. void
  80. glmc_vec4_scale_as(vec4 v, float s, vec4 dest);
  81. CGLM_EXPORT
  82. void
  83. glmc_vec4_div(vec4 a, vec4 b, vec4 dest);
  84. CGLM_EXPORT
  85. void
  86. glmc_vec4_divs(vec4 v, float s, vec4 dest);
  87. CGLM_EXPORT
  88. void
  89. glmc_vec4_addadd(vec4 a, vec4 b, vec4 dest);
  90. CGLM_EXPORT
  91. void
  92. glmc_vec4_subadd(vec4 a, vec4 b, vec4 dest);
  93. CGLM_EXPORT
  94. void
  95. glmc_vec4_muladd(vec4 a, vec4 b, vec4 dest);
  96. CGLM_EXPORT
  97. void
  98. glmc_vec4_muladds(vec4 a, float s, vec4 dest);
  99. CGLM_EXPORT
  100. void
  101. glmc_vec4_maxadd(vec4 a, vec4 b, vec4 dest);
  102. CGLM_EXPORT
  103. void
  104. glmc_vec4_minadd(vec4 a, vec4 b, vec4 dest);
  105. CGLM_EXPORT
  106. void
  107. glmc_vec4_subsub(vec4 a, vec4 b, vec4 dest);
  108. CGLM_EXPORT
  109. void
  110. glmc_vec4_addsub(vec4 a, vec4 b, vec4 dest);
  111. CGLM_EXPORT
  112. void
  113. glmc_vec4_mulsub(vec4 a, vec4 b, vec4 dest);
  114. CGLM_EXPORT
  115. void
  116. glmc_vec4_mulsubs(vec4 a, float s, vec4 dest);
  117. CGLM_EXPORT
  118. void
  119. glmc_vec4_maxsub(vec4 a, vec4 b, vec4 dest);
  120. CGLM_EXPORT
  121. void
  122. glmc_vec4_minsub(vec4 a, vec4 b, vec4 dest);
  123. CGLM_EXPORT
  124. void
  125. glmc_vec4_negate(vec4 v);
  126. CGLM_EXPORT
  127. void
  128. glmc_vec4_negate_to(vec4 v, vec4 dest);
  129. CGLM_EXPORT
  130. float
  131. glmc_vec4_distance(vec4 a, vec4 b);
  132. CGLM_EXPORT
  133. float
  134. glmc_vec4_distance2(vec4 a, vec4 b);
  135. CGLM_EXPORT
  136. void
  137. glmc_vec4_maxv(vec4 a, vec4 b, vec4 dest);
  138. CGLM_EXPORT
  139. void
  140. glmc_vec4_minv(vec4 a, vec4 b, vec4 dest);
  141. CGLM_EXPORT
  142. void
  143. glmc_vec4_clamp(vec4 v, float minVal, float maxVal);
  144. CGLM_EXPORT
  145. void
  146. glmc_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest);
  147. CGLM_EXPORT
  148. void
  149. glmc_vec4_lerpc(vec4 from, vec4 to, float t, vec4 dest);
  150. CGLM_INLINE
  151. void
  152. glmc_vec4_mix(vec4 from, vec4 to, float t, vec4 dest) {
  153. glmc_vec4_lerp(from, to, t, dest);
  154. }
  155. CGLM_INLINE
  156. void
  157. glmc_vec4_mixc(vec4 from, vec4 to, float t, vec4 dest) {
  158. glmc_vec4_lerpc(from, to, t, dest);
  159. }
  160. CGLM_EXPORT
  161. void
  162. glmc_vec4_step(vec4 edge, vec4 x, vec4 dest);
  163. CGLM_EXPORT
  164. void
  165. glmc_vec4_smoothstep_uni(float edge0, float edge1, vec4 x, vec4 dest);
  166. CGLM_EXPORT
  167. void
  168. glmc_vec4_smoothstep(vec4 edge0, vec4 edge1, vec4 x, vec4 dest);
  169. CGLM_EXPORT
  170. void
  171. glmc_vec4_smoothinterp(vec4 from, vec4 to, float t, vec4 dest);
  172. CGLM_EXPORT
  173. void
  174. glmc_vec4_smoothinterpc(vec4 from, vec4 to, float t, vec4 dest);
  175. CGLM_EXPORT
  176. void
  177. glmc_vec4_cubic(float s, vec4 dest);
  178. CGLM_EXPORT
  179. void
  180. glmc_vec4_swizzle(vec4 v, int mask, vec4 dest);
  181. /* ext */
  182. CGLM_EXPORT
  183. void
  184. glmc_vec4_mulv(vec4 a, vec4 b, vec4 d);
  185. CGLM_EXPORT
  186. void
  187. glmc_vec4_broadcast(float val, vec4 d);
  188. CGLM_EXPORT
  189. void
  190. glmc_vec4_fill(vec4 v, float val);
  191. CGLM_EXPORT
  192. bool
  193. glmc_vec4_eq(vec4 v, float val);
  194. CGLM_EXPORT
  195. bool
  196. glmc_vec4_eq_eps(vec4 v, float val);
  197. CGLM_EXPORT
  198. bool
  199. glmc_vec4_eq_all(vec4 v);
  200. CGLM_EXPORT
  201. bool
  202. glmc_vec4_eqv(vec4 a, vec4 b);
  203. CGLM_EXPORT
  204. bool
  205. glmc_vec4_eqv_eps(vec4 a, vec4 b);
  206. CGLM_EXPORT
  207. float
  208. glmc_vec4_max(vec4 v);
  209. CGLM_EXPORT
  210. float
  211. glmc_vec4_min(vec4 v);
  212. CGLM_EXPORT
  213. bool
  214. glmc_vec4_isnan(vec4 v);
  215. CGLM_EXPORT
  216. bool
  217. glmc_vec4_isinf(vec4 v);
  218. CGLM_EXPORT
  219. bool
  220. glmc_vec4_isvalid(vec4 v);
  221. CGLM_EXPORT
  222. void
  223. glmc_vec4_sign(vec4 v, vec4 dest);
  224. CGLM_EXPORT
  225. void
  226. glmc_vec4_abs(vec4 v, vec4 dest);
  227. CGLM_EXPORT
  228. void
  229. glmc_vec4_fract(vec4 v, vec4 dest);
  230. CGLM_EXPORT
  231. void
  232. glmc_vec4_floor(vec4 v, vec4 dest);
  233. CGLM_EXPORT
  234. void
  235. glmc_vec4_mods(vec4 v, float s, vec4 dest);
  236. CGLM_EXPORT
  237. void
  238. glmc_vec4_steps(float edge, vec4 x, vec4 dest);
  239. CGLM_EXPORT
  240. void
  241. glmc_vec4_stepr(vec4 edge, float x, vec4 dest);
  242. CGLM_EXPORT
  243. float
  244. glmc_vec4_hadd(vec4 v);
  245. CGLM_EXPORT
  246. void
  247. glmc_vec4_sqrt(vec4 v, vec4 dest);
  248. CGLM_EXPORT
  249. void
  250. glmc_vec4_make(const float * __restrict src, vec4 dest);
  251. CGLM_EXPORT
  252. void
  253. glmc_vec4_reflect(vec4 v, vec4 n, vec4 dest);
  254. CGLM_EXPORT
  255. bool
  256. glmc_vec4_refract(vec4 v, vec4 n, float eta, vec4 dest);
  257. #ifdef __cplusplus
  258. }
  259. #endif
  260. #endif /* cglmc_vec4_h */