ivec2.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659
  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. /*
  8. Macros:
  9. GLM_IVEC2_ONE_INIT
  10. GLM_IVEC2_ZERO_INIT
  11. GLM_IVEC2_ONE
  12. GLM_IVEC2_ZERO
  13. Functions:
  14. CGLM_INLINE void glm_ivec2(int * __restrict v, ivec2 dest)
  15. CGLM_INLINE void glm_ivec2_copy(ivec2 a, ivec2 dest)
  16. CGLM_INLINE void glm_ivec2_zero(ivec2 v)
  17. CGLM_INLINE void glm_ivec2_one(ivec2 v)
  18. CGLM_INLINE int glm_ivec2_dot(ivec2 a, ivec2 b)
  19. CGLM_INLINE int glm_ivec2_cross(ivec2 a, ivec2 b)
  20. CGLM_INLINE void glm_ivec2_add(ivec2 a, ivec2 b, ivec2 dest)
  21. CGLM_INLINE void glm_ivec2_adds(ivec2 v, int s, ivec2 dest)
  22. CGLM_INLINE void glm_ivec2_sub(ivec2 a, ivec2 b, ivec2 dest)
  23. CGLM_INLINE void glm_ivec2_subs(ivec2 v, int s, ivec2 dest)
  24. CGLM_INLINE void glm_ivec2_mul(ivec2 a, ivec2 b, ivec2 dest)
  25. CGLM_INLINE void glm_ivec2_scale(ivec2 v, int s, ivec2 dest)
  26. CGLM_INLINE void glm_ivec2_div(ivec2 a, ivec2 b, ivec2 dest)
  27. CGLM_INLINE void glm_ivec2_divs(ivec2 v, int s, ivec2 dest)
  28. CGLM_INLINE void glm_ivec2_mod(ivec2 a, ivec2 b, ivec2 dest)
  29. CGLM_INLINE void glm_ivec2_addadd(ivec2 a, ivec2 b, ivec2 dest)
  30. CGLM_INLINE void glm_ivec2_addadds(ivec2 a, int s, ivec2 dest)
  31. CGLM_INLINE void glm_ivec2_subadd(ivec2 a, ivec2 b, ivec2 dest)
  32. CGLM_INLINE void glm_ivec2_subadds(ivec2 a, int s, ivec2 dest)
  33. CGLM_INLINE void glm_ivec2_muladd(ivec2 a, ivec2 b, ivec2 dest)
  34. CGLM_INLINE void glm_ivec2_muladds(ivec2 a, int s, ivec2 dest)
  35. CGLM_INLINE void glm_ivec2_maxadd(ivec2 a, ivec2 b, ivec2 dest)
  36. CGLM_INLINE void glm_ivec2_minadd(ivec2 a, ivec2 b, ivec2 dest)
  37. CGLM_INLINE void glm_ivec2_subsub(ivec2 a, ivec2 b, ivec2 dest)
  38. CGLM_INLINE void glm_ivec2_subsubs(ivec2 a, int s, ivec2 dest)
  39. CGLM_INLINE void glm_ivec2_addsub(ivec2 a, ivec2 b, ivec2 dest)
  40. CGLM_INLINE void glm_ivec2_addsubs(ivec2 a, int s, ivec2 dest)
  41. CGLM_INLINE void glm_ivec2_mulsub(ivec2 a, ivec2 b, ivec2 dest)
  42. CGLM_INLINE void glm_ivec2_mulsubs(ivec2 a, int s, ivec2 dest)
  43. CGLM_INLINE void glm_ivec2_maxsub(ivec2 a, ivec2 b, ivec2 dest)
  44. CGLM_INLINE void glm_ivec2_minsub(ivec2 a, ivec2 b, ivec2 dest)
  45. CGLM_INLINE int glm_ivec2_distance2(ivec2 a, ivec2 b)
  46. CGLM_INLINE float glm_ivec2_distance(ivec2 a, ivec2 b)
  47. CGLM_INLINE void glm_ivec2_fill(ivec2 v, int val);
  48. CGLM_INLINE bool glm_ivec2_eq(ivec2 v, int val);
  49. CGLM_INLINE bool glm_ivec2_eqv(ivec2 a, ivec2 b);
  50. CGLM_INLINE void glm_ivec2_maxv(ivec2 a, ivec2 b, ivec2 dest)
  51. CGLM_INLINE void glm_ivec2_minv(ivec2 a, ivec2 b, ivec2 dest)
  52. CGLM_INLINE void glm_ivec2_clamp(ivec2 v, int minVal, int maxVal)
  53. CGLM_INLINE void glm_ivec2_abs(ivec2 v, ivec2 dest)
  54. */
  55. #ifndef cglm_ivec2_h
  56. #define cglm_ivec2_h
  57. #include "common.h"
  58. #include "util.h"
  59. #define GLM_IVEC2_ONE_INIT {1, 1}
  60. #define GLM_IVEC2_ZERO_INIT {0, 0}
  61. #define GLM_IVEC2_ONE ((ivec2)GLM_IVEC2_ONE_INIT)
  62. #define GLM_IVEC2_ZERO ((ivec2)GLM_IVEC2_ZERO_INIT)
  63. /*!
  64. * @brief init ivec2 using vec3 or vec4
  65. *
  66. * @param[in] v vector
  67. * @param[out] dest destination
  68. */
  69. CGLM_INLINE
  70. void
  71. glm_ivec2(int * __restrict v, ivec2 dest) {
  72. dest[0] = v[0];
  73. dest[1] = v[1];
  74. }
  75. /*!
  76. * @brief copy all members of [a] to [dest]
  77. *
  78. * @param[in] a source vector
  79. * @param[out] dest destination
  80. */
  81. CGLM_INLINE
  82. void
  83. glm_ivec2_copy(ivec2 a, ivec2 dest) {
  84. dest[0] = a[0];
  85. dest[1] = a[1];
  86. }
  87. /*!
  88. * @brief set all members of [v] to zero
  89. *
  90. * @param[out] v vector
  91. */
  92. CGLM_INLINE
  93. void
  94. glm_ivec2_zero(ivec2 v) {
  95. v[0] = v[1] = 0;
  96. }
  97. /*!
  98. * @brief set all members of [v] to one
  99. *
  100. * @param[out] v vector
  101. */
  102. CGLM_INLINE
  103. void
  104. glm_ivec2_one(ivec2 v) {
  105. v[0] = v[1] = 1;
  106. }
  107. /*!
  108. * @brief ivec2 dot product
  109. *
  110. * @param[in] a vector1
  111. * @param[in] b vector2
  112. *
  113. * @return dot product
  114. */
  115. CGLM_INLINE
  116. int
  117. glm_ivec2_dot(ivec2 a, ivec2 b) {
  118. return a[0] * b[0] + a[1] * b[1];
  119. }
  120. /*!
  121. * @brief ivec2 cross product
  122. *
  123. * REF: http://allenchou.net/2013/07/cross-product-of-2d-vectors/
  124. *
  125. * @param[in] a vector1
  126. * @param[in] b vector2
  127. *
  128. * @return Z component of cross product
  129. */
  130. CGLM_INLINE
  131. int
  132. glm_ivec2_cross(ivec2 a, ivec2 b) {
  133. return a[0] * b[1] - a[1] * b[0];
  134. }
  135. /*!
  136. * @brief add vector [a] to vector [b] and store result in [dest]
  137. *
  138. * @param[in] a first vector
  139. * @param[in] b second vector
  140. * @param[out] dest destination
  141. */
  142. CGLM_INLINE
  143. void
  144. glm_ivec2_add(ivec2 a, ivec2 b, ivec2 dest) {
  145. dest[0] = a[0] + b[0];
  146. dest[1] = a[1] + b[1];
  147. }
  148. /*!
  149. * @brief add scalar s to vector [v] and store result in [dest]
  150. *
  151. * @param[in] v vector
  152. * @param[in] s scalar
  153. * @param[out] dest destination
  154. */
  155. CGLM_INLINE
  156. void
  157. glm_ivec2_adds(ivec2 v, int s, ivec2 dest) {
  158. dest[0] = v[0] + s;
  159. dest[1] = v[1] + s;
  160. }
  161. /*!
  162. * @brief subtract vector [b] from vector [a] and store result in [dest]
  163. *
  164. * @param[in] a first vector
  165. * @param[in] b second vector
  166. * @param[out] dest destination
  167. */
  168. CGLM_INLINE
  169. void
  170. glm_ivec2_sub(ivec2 a, ivec2 b, ivec2 dest) {
  171. dest[0] = a[0] - b[0];
  172. dest[1] = a[1] - b[1];
  173. }
  174. /*!
  175. * @brief subtract scalar s from vector [v] and store result in [dest]
  176. *
  177. * @param[in] v vector
  178. * @param[in] s scalar
  179. * @param[out] dest destination
  180. */
  181. CGLM_INLINE
  182. void
  183. glm_ivec2_subs(ivec2 v, int s, ivec2 dest) {
  184. dest[0] = v[0] - s;
  185. dest[1] = v[1] - s;
  186. }
  187. /*!
  188. * @brief multiply vector [a] with vector [b] and store result in [dest]
  189. *
  190. * @param[in] a first vector
  191. * @param[in] b second vector
  192. * @param[out] dest destination
  193. */
  194. CGLM_INLINE
  195. void
  196. glm_ivec2_mul(ivec2 a, ivec2 b, ivec2 dest) {
  197. dest[0] = a[0] * b[0];
  198. dest[1] = a[1] * b[1];
  199. }
  200. /*!
  201. * @brief multiply vector [a] with scalar s and store result in [dest]
  202. *
  203. * @param[in] v vector
  204. * @param[in] s scalar
  205. * @param[out] dest destination
  206. */
  207. CGLM_INLINE
  208. void
  209. glm_ivec2_scale(ivec2 v, int s, ivec2 dest) {
  210. dest[0] = v[0] * s;
  211. dest[1] = v[1] * s;
  212. }
  213. /*!
  214. * @brief div vector with another component-wise division: d = a / b
  215. *
  216. * @param[in] a vector 1
  217. * @param[in] b vector 2
  218. * @param[out] dest result = (a[0]/b[0], a[1]/b[1])
  219. */
  220. CGLM_INLINE
  221. void
  222. glm_ivec2_div(ivec2 a, ivec2 b, ivec2 dest) {
  223. dest[0] = a[0] / b[0];
  224. dest[1] = a[1] / b[1];
  225. }
  226. /*!
  227. * @brief div vector with scalar: d = v / s
  228. *
  229. * @param[in] v vector
  230. * @param[in] s scalar
  231. * @param[out] dest result = (a[0]/s, a[1]/s)
  232. */
  233. CGLM_INLINE
  234. void
  235. glm_ivec2_divs(ivec2 v, int s, ivec2 dest) {
  236. dest[0] = v[0] / s;
  237. dest[1] = v[1] / s;
  238. }
  239. /*!
  240. * @brief mod vector with another component-wise modulo: d = a % b
  241. *
  242. * @param[in] a vector 1
  243. * @param[in] b vector 2
  244. * @param[out] dest result = (a[0]%b[0], a[1]%b[1])
  245. */
  246. CGLM_INLINE
  247. void
  248. glm_ivec2_mod(ivec2 a, ivec2 b, ivec2 dest) {
  249. dest[0] = a[0] % b[0];
  250. dest[1] = a[1] % b[1];
  251. }
  252. /*!
  253. * @brief add vector [a] with vector [b] and add result to vector [dest]
  254. *
  255. * applies += operator so dest must be initialized
  256. *
  257. * @param[in] a first vector
  258. * @param[in] b second vector
  259. * @param[out] dest dest += (a + b)
  260. */
  261. CGLM_INLINE
  262. void
  263. glm_ivec2_addadd(ivec2 a, ivec2 b, ivec2 dest) {
  264. dest[0] += a[0] + b[0];
  265. dest[1] += a[1] + b[1];
  266. }
  267. /*!
  268. * @brief add scalar [s] onto vector [a] and add result to vector [dest]
  269. *
  270. * applies += operator so dest must be initialized
  271. *
  272. * @param[in] a vector
  273. * @param[in] s scalar
  274. * @param[out] dest dest += (a + s)
  275. */
  276. CGLM_INLINE
  277. void
  278. glm_ivec2_addadds(ivec2 a, int s, ivec2 dest) {
  279. dest[0] += a[0] + s;
  280. dest[1] += a[1] + s;
  281. }
  282. /*!
  283. * @brief subtract vector [a] from vector [b] and add result to [dest]
  284. *
  285. * applies += operator so dest must be initialized
  286. *
  287. * @param[in] a first vector
  288. * @param[in] b second vector
  289. * @param[out] dest dest += (a - b)
  290. */
  291. CGLM_INLINE
  292. void
  293. glm_ivec2_subadd(ivec2 a, ivec2 b, ivec2 dest) {
  294. dest[0] += a[0] - b[0];
  295. dest[1] += a[1] - b[1];
  296. }
  297. /*!
  298. * @brief subtract scalar [s] from vector [a] and add result to [dest]
  299. *
  300. * applies += operator so dest must be initialized
  301. *
  302. * @param[in] a first
  303. * @param[in] s scalar
  304. * @param[out] dest dest += (a - s)
  305. */
  306. CGLM_INLINE
  307. void
  308. glm_ivec2_subadds(ivec2 a, int s, ivec2 dest) {
  309. dest[0] += a[0] - s;
  310. dest[1] += a[1] - s;
  311. }
  312. /*!
  313. * @brief multiply vector [a] with vector [b] and add result to [dest]
  314. *
  315. * applies += operator so dest must be initialized
  316. *
  317. * @param[in] a first vector
  318. * @param[in] b second vector
  319. * @param[out] dest dest += (a * b)
  320. */
  321. CGLM_INLINE
  322. void
  323. glm_ivec2_muladd(ivec2 a, ivec2 b, ivec2 dest) {
  324. dest[0] += a[0] * b[0];
  325. dest[1] += a[1] * b[1];
  326. }
  327. /*!
  328. * @brief multiply vector [a] with scalar [s] and add result to [dest]
  329. *
  330. * applies += operator so dest must be initialized
  331. *
  332. * @param[in] a vector
  333. * @param[in] s scalar
  334. * @param[out] dest dest += (a * s)
  335. */
  336. CGLM_INLINE
  337. void
  338. glm_ivec2_muladds(ivec2 a, int s, ivec2 dest) {
  339. dest[0] += a[0] * s;
  340. dest[1] += a[1] * s;
  341. }
  342. /*!
  343. * @brief add maximum of vector [a] and vector [b] to vector [dest]
  344. *
  345. * applies += operator so dest must be initialized
  346. *
  347. * @param[in] a first vector
  348. * @param[in] b second vector
  349. * @param[out] dest dest += max(a, b)
  350. */
  351. CGLM_INLINE
  352. void
  353. glm_ivec2_maxadd(ivec2 a, ivec2 b, ivec2 dest) {
  354. dest[0] += glm_imax(a[0], b[0]);
  355. dest[1] += glm_imax(a[1], b[1]);
  356. }
  357. /*!
  358. * @brief add minimum of vector [a] and vector [b] to vector [dest]
  359. *
  360. * applies += operator so dest must be initialized
  361. *
  362. * @param[in] a first vector
  363. * @param[in] b second vector
  364. * @param[out] dest dest += min(a, b)
  365. */
  366. CGLM_INLINE
  367. void
  368. glm_ivec2_minadd(ivec2 a, ivec2 b, ivec2 dest) {
  369. dest[0] += glm_imin(a[0], b[0]);
  370. dest[1] += glm_imin(a[1], b[1]);
  371. }
  372. /*!
  373. * @brief subtract vector [a] from vector [b] and subtract result from [dest]
  374. *
  375. * applies -= operator so dest must be initialized
  376. *
  377. * @param[in] a first vector
  378. * @param[in] b second vector
  379. * @param[out] dest dest -= (a - b)
  380. */
  381. CGLM_INLINE
  382. void
  383. glm_ivec2_subsub(ivec2 a, ivec2 b, ivec2 dest) {
  384. dest[0] -= a[0] - b[0];
  385. dest[1] -= a[1] - b[1];
  386. }
  387. /*!
  388. * @brief subtract scalar [s] from vector [a] and subtract result from [dest]
  389. *
  390. * applies -= operator so dest must be initialized
  391. *
  392. * @param[in] a vector
  393. * @param[in] s scalar
  394. * @param[out] dest dest -= (a - s)
  395. */
  396. CGLM_INLINE
  397. void
  398. glm_ivec2_subsubs(ivec2 a, int s, ivec2 dest) {
  399. dest[0] -= a[0] - s;
  400. dest[1] -= a[1] - s;
  401. }
  402. /*!
  403. * @brief add vector [a] to vector [b] and subtract the result from [dest]
  404. *
  405. * applies -= operator so dest must be initialized
  406. *
  407. * @param[in] a vector
  408. * @param[in] b scalar
  409. * @param[out] dest dest -= (a + b)
  410. */
  411. CGLM_INLINE
  412. void
  413. glm_ivec2_addsub(ivec2 a, ivec2 b, ivec2 dest) {
  414. dest[0] -= a[0] + b[0];
  415. dest[1] -= a[1] + b[1];
  416. }
  417. /*!
  418. * @brief add scalar [s] to vector [a] and subtract the result from [dest]
  419. *
  420. * applies -= operator so dest must be initialized
  421. *
  422. * @param[in] a vector
  423. * @param[in] s scalar
  424. * @param[out] dest dest -= (a + b)
  425. */
  426. CGLM_INLINE
  427. void
  428. glm_ivec2_addsubs(ivec2 a, int s, ivec2 dest) {
  429. dest[0] -= a[0] + s;
  430. dest[1] -= a[1] + s;
  431. }
  432. /*!
  433. * @brief multiply vector [a] and vector [b] and subtract the result from [dest]
  434. *
  435. * applies -= operator so dest must be initialized
  436. *
  437. * @param[in] a vector
  438. * @param[in] b scalar
  439. * @param[out] dest dest -= (a * b)
  440. */
  441. CGLM_INLINE
  442. void
  443. glm_ivec2_mulsub(ivec2 a, ivec2 b, ivec2 dest) {
  444. dest[0] -= a[0] * b[0];
  445. dest[1] -= a[1] * b[1];
  446. }
  447. /*!
  448. * @brief multiply vector [a] with scalar [s] and subtract the result from [dest]
  449. *
  450. * applies -= operator so dest must be initialized
  451. *
  452. * @param[in] a vector
  453. * @param[in] s scalar
  454. * @param[out] dest dest -= (a * s)
  455. */
  456. CGLM_INLINE
  457. void
  458. glm_ivec2_mulsubs(ivec2 a, int s, ivec2 dest) {
  459. dest[0] -= a[0] * s;
  460. dest[1] -= a[1] * s;
  461. }
  462. /*!
  463. * @brief subtract maximum of vector [a] and vector [b] from vector [dest]
  464. *
  465. * applies += operator so dest must be initialized
  466. *
  467. * @param[in] a first vector
  468. * @param[in] b second vector
  469. * @param[out] dest dest -= max(a, b)
  470. */
  471. CGLM_INLINE
  472. void
  473. glm_ivec2_maxsub(ivec2 a, ivec2 b, ivec2 dest) {
  474. dest[0] -= glm_imax(a[0], b[0]);
  475. dest[1] -= glm_imax(a[1], b[1]);
  476. }
  477. /*!
  478. * @brief subtract minimum of vector [a] and vector [b] from vector [dest]
  479. *
  480. * applies -= operator so dest must be initialized
  481. *
  482. * @param[in] a first vector
  483. * @param[in] b second vector
  484. * @param[out] dest dest -= min(a, b)
  485. */
  486. CGLM_INLINE
  487. void
  488. glm_ivec2_minsub(ivec2 a, ivec2 b, ivec2 dest) {
  489. dest[0] -= glm_imin(a[0], b[0]);
  490. dest[1] -= glm_imin(a[1], b[1]);
  491. }
  492. /*!
  493. * @brief squared distance between two vectors
  494. *
  495. * @param[in] a first vector
  496. * @param[in] b second vector
  497. * @return returns squared distance (distance * distance)
  498. */
  499. CGLM_INLINE
  500. int
  501. glm_ivec2_distance2(ivec2 a, ivec2 b) {
  502. int xd, yd;
  503. xd = a[0] - b[0];
  504. yd = a[1] - b[1];
  505. return xd * xd + yd * yd;
  506. }
  507. /*!
  508. * @brief distance between two vectors
  509. *
  510. * @param[in] a first vector
  511. * @param[in] b second vector
  512. * @return returns distance
  513. */
  514. CGLM_INLINE
  515. float
  516. glm_ivec2_distance(ivec2 a, ivec2 b) {
  517. return sqrtf((float)glm_ivec2_distance2(a, b));
  518. }
  519. /*!
  520. * @brief fill a vector with specified value
  521. *
  522. * @param[out] v dest
  523. * @param[in] val value
  524. */
  525. CGLM_INLINE
  526. void
  527. glm_ivec2_fill(ivec2 v, int val) {
  528. v[0] = v[1] = val;
  529. }
  530. /*!
  531. * @brief check if vector is equal to value
  532. *
  533. * @param[in] v vector
  534. * @param[in] val value
  535. */
  536. CGLM_INLINE
  537. bool
  538. glm_ivec2_eq(ivec2 v, int val) {
  539. return v[0] == val && v[0] == v[1];
  540. }
  541. /*!
  542. * @brief check if vector is equal to another
  543. *
  544. * @param[in] a vector
  545. * @param[in] b vector
  546. */
  547. CGLM_INLINE
  548. bool
  549. glm_ivec2_eqv(ivec2 a, ivec2 b) {
  550. return a[0] == b[0]
  551. && a[1] == b[1];
  552. }
  553. /*!
  554. * @brief set each member of dest to greater of vector a and b
  555. *
  556. * @param[in] a first vector
  557. * @param[in] b second vector
  558. * @param[out] dest destination
  559. */
  560. CGLM_INLINE
  561. void
  562. glm_ivec2_maxv(ivec2 a, ivec2 b, ivec2 dest) {
  563. dest[0] = a[0] > b[0] ? a[0] : b[0];
  564. dest[1] = a[1] > b[1] ? a[1] : b[1];
  565. }
  566. /*!
  567. * @brief set each member of dest to lesser of vector a and b
  568. *
  569. * @param[in] a first vector
  570. * @param[in] b second vector
  571. * @param[out] dest destination
  572. */
  573. CGLM_INLINE
  574. void
  575. glm_ivec2_minv(ivec2 a, ivec2 b, ivec2 dest) {
  576. dest[0] = a[0] < b[0] ? a[0] : b[0];
  577. dest[1] = a[1] < b[1] ? a[1] : b[1];
  578. }
  579. /*!
  580. * @brief clamp each member of [v] between minVal and maxVal (inclusive)
  581. *
  582. * @param[in, out] v vector
  583. * @param[in] minVal minimum value
  584. * @param[in] maxVal maximum value
  585. */
  586. CGLM_INLINE
  587. void
  588. glm_ivec2_clamp(ivec2 v, int minVal, int maxVal) {
  589. if (v[0] < minVal)
  590. v[0] = minVal;
  591. else if(v[0] > maxVal)
  592. v[0] = maxVal;
  593. if (v[1] < minVal)
  594. v[1] = minVal;
  595. else if(v[1] > maxVal)
  596. v[1] = maxVal;
  597. }
  598. /*!
  599. * @brief absolute value of v
  600. *
  601. * @param[in] v vector
  602. * @param[out] dest destination
  603. */
  604. CGLM_INLINE
  605. void
  606. glm_ivec2_abs(ivec2 v, ivec2 dest) {
  607. dest[0] = abs(v[0]);
  608. dest[1] = abs(v[1]);
  609. }
  610. #endif /* cglm_ivec2_h */