1
0

ivec3.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725
  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. GLMS_IVEC3_ONE_INIT
  10. GLMS_IVEC3_ZERO_INIT
  11. GLMS_IVEC3_ONE
  12. GLMS_IVEC3_ZERO
  13. Functions:
  14. CGLM_INLINE ivec3s glms_ivec3(ivec4s v4)
  15. CGLM_INLINE void glms_ivec3_pack(ivec3s dst[], ivec3 src[], size_t len)
  16. CGLM_INLINE void glms_ivec3_unpack(ivec3 dst[], ivec3s src[], size_t len)
  17. CGLM_INLINE ivec3s glms_ivec3_zero(void)
  18. CGLM_INLINE ivec3s glms_ivec3_one(void)
  19. CGLM_INLINE int glms_ivec3_dot(ivec3s a, ivec3s b)
  20. CGLM_INLINE int glms_ivec3_norm2(ivec3s v)
  21. CGLM_INLINE int glms_ivec3_norm(ivec3s v)
  22. CGLM_INLINE ivec3s glms_ivec3_add(ivec3s a, ivec3s b)
  23. CGLM_INLINE ivec3s glms_ivec3_adds(ivec3s v, int s)
  24. CGLM_INLINE ivec3s glms_ivec3_sub(ivec3s a, ivec3s b)
  25. CGLM_INLINE ivec3s glms_ivec3_subs(ivec3s v, int s)
  26. CGLM_INLINE ivec3s glms_ivec3_mul(ivec3s a, ivec3s b)
  27. CGLM_INLINE ivec3s glms_ivec3_scale(ivec3s v, int s)
  28. CGLM_INLINE ivec3s glms_ivec3_div(ivec3s a, ivec3s b)
  29. CGLM_INLINE ivec3s glms_ivec3_divs(ivec3s v, int s)
  30. CGLM_INLINE ivec3s glms_ivec3_mod(ivec3s a, ivec3s b)
  31. CGLM_INLINE ivec3s glms_ivec3_addadd(ivec3s a, ivec3s b, ivec3s dest)
  32. CGLM_INLINE ivec3s glms_ivec3_addadds(ivec3s a, int s, ivec3s dest)
  33. CGLM_INLINE ivec3s glms_ivec3_subadd(ivec3s a, ivec3s b, ivec3s dest)
  34. CGLM_INLINE ivec3s glms_ivec3_subadds(ivec3s a, int s, ivec3s dest)
  35. CGLM_INLINE ivec3s glms_ivec3_muladd(ivec3s a, ivec3s b, ivec3s dest)
  36. CGLM_INLINE ivec3s glms_ivec3_muladds(ivec3s a, int s, ivec3s dest)
  37. CGLM_INLINE ivec3s glms_ivec3_minadd(ivec3s a, ivec3s b, ivec3s dest)
  38. CGLM_INLINE ivec3s glms_ivec3_subsub(ivec3s a, ivec3s b, ivec3s dest)
  39. CGLM_INLINE ivec3s glms_ivec3_subsubs(ivec3s a, int s, ivec3s dest)
  40. CGLM_INLINE ivec3s glms_ivec3_addsub(ivec3s a, ivec3s b, ivec3s dest)
  41. CGLM_INLINE ivec3s glms_ivec3_addsubs(ivec3s a, int s, ivec3s dest)
  42. CGLM_INLINE ivec3s glms_ivec3_mulsub(ivec3s a, ivec3s b, ivec3s dest)
  43. CGLM_INLINE ivec3s glms_ivec3_mulsubs(ivec3s a, int s, ivec3s dest)
  44. CGLM_INLINE ivec3s glms_ivec3_maxsub(ivec3s a, ivec3s b, ivec3s dest)
  45. CGLM_INLINE ivec3s glms_ivec3_minsub(ivec3s a, ivec3s b, ivec3s dest)
  46. CGLM_INLINE int glms_ivec3_distance2(ivec3s a, ivec3s b)
  47. CGLM_INLINE float glms_ivec3_distance(ivec3s a, ivec3s b)
  48. CGLM_INLINE ivec3s glms_ivec3_fill(int val)
  49. CGLM_INLINE bool glms_ivec3_eq(ivec3s v, int val)
  50. CGLM_INLINE bool glms_ivec3_eqv(ivec3s a, ivec3s b)
  51. CGLM_INLINE ivec3s glms_ivec3_maxv(ivec3s a, ivec3s b)
  52. CGLM_INLINE ivec3s glms_ivec3_minv(ivec3s a, ivec3s b)
  53. CGLM_INLINE ivec3s glms_ivec3_clamp(ivec3s v, int minVal, int maxVal)
  54. CGLM_INLINE ivec3s glms_ivec3_abs(ivec3s v)
  55. */
  56. #ifndef cglms_ivec3_h
  57. #define cglms_ivec3_h
  58. #include "../common.h"
  59. #include "../types-struct.h"
  60. #include "../ivec3.h"
  61. #define glms_ivec3_(NAME) CGLM_STRUCTAPI(ivec3, NAME)
  62. #define GLMS_IVEC3_ONE_INIT {GLM_IVEC3_ONE_INIT}
  63. #define GLMS_IVEC3_ZERO_INIT {GLM_IVEC3_ZERO_INIT}
  64. #define GLMS_IVEC3_ONE ((ivec3s)GLMS_IVEC3_ONE_INIT)
  65. #define GLMS_IVEC3_ZERO ((ivec3s)GLMS_IVEC3_ZERO_INIT)
  66. /*!
  67. * @brief init ivec3 using ivec4
  68. *
  69. * @param[in] v4 vector4
  70. * @returns destination
  71. */
  72. CGLM_INLINE
  73. ivec3s
  74. glms_ivec3(ivec4s v4) {
  75. ivec3s r;
  76. glm_ivec3(v4.raw, r.raw);
  77. return r;
  78. }
  79. /*!
  80. * @brief pack an array of ivec3 into an array of ivec3s
  81. *
  82. * @param[out] dst array of ivec3s
  83. * @param[in] src array of ivec3
  84. * @param[in] len number of elements
  85. */
  86. CGLM_INLINE
  87. void
  88. glms_ivec3_(pack)(ivec3s dst[], ivec3 src[], size_t len) {
  89. size_t i;
  90. for (i = 0; i < len; i++) {
  91. glm_ivec3_copy(src[i], dst[i].raw);
  92. }
  93. }
  94. /*!
  95. * @brief unpack an array of ivec3s into an array of ivec3
  96. *
  97. * @param[out] dst array of ivec3
  98. * @param[in] src array of ivec3s
  99. * @param[in] len number of elements
  100. */
  101. CGLM_INLINE
  102. void
  103. glms_ivec3_(unpack)(ivec3 dst[], ivec3s src[], size_t len) {
  104. size_t i;
  105. for (i = 0; i < len; i++) {
  106. glm_ivec3_copy(src[i].raw, dst[i]);
  107. }
  108. }
  109. /*!
  110. * @brief set all members of [v] to zero
  111. *
  112. * @returns vector
  113. */
  114. CGLM_INLINE
  115. ivec3s
  116. glms_ivec3_(zero)(void) {
  117. ivec3s r;
  118. glm_ivec3_zero(r.raw);
  119. return r;
  120. }
  121. /*!
  122. * @brief set all members of [v] to one
  123. *
  124. * @returns vector
  125. */
  126. CGLM_INLINE
  127. ivec3s
  128. glms_ivec3_(one)(void) {
  129. ivec3s r;
  130. glm_ivec3_one(r.raw);
  131. return r;
  132. }
  133. /*!
  134. * @brief ivec3 dot product
  135. *
  136. * @param[in] a vector1
  137. * @param[in] b vector2
  138. *
  139. * @return dot product
  140. */
  141. CGLM_INLINE
  142. int
  143. glms_ivec3_(dot)(ivec3s a, ivec3s b) {
  144. return glm_ivec3_dot(a.raw, b.raw);
  145. }
  146. /*!
  147. * @brief norm * norm (magnitude) of vec
  148. *
  149. * we can use this func instead of calling norm * norm, because it would call
  150. * sqrtf function twice but with this func we can avoid func call, maybe this is
  151. * not good name for this func
  152. *
  153. * @param[in] v vector
  154. *
  155. * @return norm * norm
  156. */
  157. CGLM_INLINE
  158. int
  159. glms_ivec3_(norm2)(ivec3s v) {
  160. return glm_ivec3_norm2(v.raw);
  161. }
  162. /*!
  163. * @brief euclidean norm (magnitude), also called L2 norm
  164. * this will give magnitude of vector in euclidean space
  165. *
  166. * @param[in] v vector
  167. *
  168. * @return norm
  169. */
  170. CGLM_INLINE
  171. int
  172. glms_ivec3_(norm)(ivec3s v) {
  173. return glm_ivec3_norm(v.raw);
  174. }
  175. /*!
  176. * @brief add vector [a] to vector [b] and store result in [dest]
  177. *
  178. * @param[in] a first vector
  179. * @param[in] b second vector
  180. * @returns destination
  181. */
  182. CGLM_INLINE
  183. ivec3s
  184. glms_ivec3_(add)(ivec3s a, ivec3s b) {
  185. ivec3s r;
  186. glm_ivec3_add(a.raw, b.raw, r.raw);
  187. return r;
  188. }
  189. /*!
  190. * @brief add scalar s to vector [v] and store result in [dest]
  191. *
  192. * @param[in] v vector
  193. * @param[in] s scalar
  194. * @returns destination
  195. */
  196. CGLM_INLINE
  197. ivec3s
  198. glms_ivec3_(adds)(ivec3s v, int s) {
  199. ivec3s r;
  200. glm_ivec3_adds(v.raw, s, r.raw);
  201. return r;
  202. }
  203. /*!
  204. * @brief subtract vector [b] from vector [a] and store result in [dest]
  205. *
  206. * @param[in] a first vector
  207. * @param[in] b second vector
  208. * @returns destination
  209. */
  210. CGLM_INLINE
  211. ivec3s
  212. glms_ivec3_(sub)(ivec3s a, ivec3s b) {
  213. ivec3s r;
  214. glm_ivec3_sub(a.raw, b.raw, r.raw);
  215. return r;
  216. }
  217. /*!
  218. * @brief subtract scalar s from vector [v] and store result in [dest]
  219. *
  220. * @param[in] v vector
  221. * @param[in] s scalar
  222. * @returns destination
  223. */
  224. CGLM_INLINE
  225. ivec3s
  226. glms_ivec3_(subs)(ivec3s v, int s) {
  227. ivec3s r;
  228. glm_ivec3_subs(v.raw, s, r.raw);
  229. return r;
  230. }
  231. /*!
  232. * @brief multiply vector [a] with vector [b] and store result in [dest]
  233. *
  234. * @param[in] a first vector
  235. * @param[in] b second vector
  236. * @returns destination
  237. */
  238. CGLM_INLINE
  239. ivec3s
  240. glms_ivec3_(mul)(ivec3s a, ivec3s b) {
  241. ivec3s r;
  242. glm_ivec3_mul(a.raw, b.raw, r.raw);
  243. return r;
  244. }
  245. /*!
  246. * @brief multiply vector [a] with scalar s and store result in [dest]
  247. *
  248. * @param[in] v vector
  249. * @param[in] s scalar
  250. * @returns destination
  251. */
  252. CGLM_INLINE
  253. ivec3s
  254. glms_ivec3_(scale)(ivec3s v, int s) {
  255. ivec3s r;
  256. glm_ivec3_scale(v.raw, s, r.raw);
  257. return r;
  258. }
  259. /*!
  260. * @brief div vector with another component-wise division: d = a / b
  261. *
  262. * @param[in] a vector 1
  263. * @param[in] b vector 2
  264. * @returns result = (a[0]/b[0], a[1]/b[1], a[2]/b[2])
  265. */
  266. CGLM_INLINE
  267. ivec3s
  268. glms_ivec3_(div)(ivec3s a, ivec3s b) {
  269. ivec3s r;
  270. glm_ivec3_div(a.raw, b.raw, r.raw);
  271. return r;
  272. }
  273. /*!
  274. * @brief div vector with scalar: d = v / s
  275. *
  276. * @param[in] v vector
  277. * @param[in] s scalar
  278. * @returns result = (a[0]/s, a[1]/s, a[2]/s)
  279. */
  280. CGLM_INLINE
  281. ivec3s
  282. glms_ivec3_(divs)(ivec3s v, int s) {
  283. ivec3s r;
  284. glm_ivec3_divs(v.raw, s, r.raw);
  285. return r;
  286. }
  287. /*!
  288. * @brief Element-wise modulo operation on ivec3 vectors: dest = a % b
  289. *
  290. * Performs element-wise modulo on each component of vectors `a` and `b`.
  291. *
  292. * @param[in] a vector 1
  293. * @param[in] b vector 2
  294. * @returns result = (a[0]%b[0], a[1]%b[1], a[2]%b[2])
  295. */
  296. CGLM_INLINE
  297. ivec3s
  298. glms_ivec3_(mod)(ivec3s a, ivec3s b) {
  299. ivec3s r;
  300. glm_ivec3_mod(a.raw, b.raw, r.raw);
  301. return r;
  302. }
  303. /*!
  304. * @brief add vector [a] with vector [b] and add result to vector [dest]
  305. *
  306. * applies += operator so dest must be initialized
  307. *
  308. * @param[in] a first vector
  309. * @param[in] b second vector
  310. * @param[in] dest dest += (a + b)
  311. * @returns dest
  312. */
  313. CGLM_INLINE
  314. ivec3s
  315. glms_ivec3_(addadd)(ivec3s a, ivec3s b, ivec3s dest) {
  316. glm_ivec3_addadd(a.raw, b.raw, dest.raw);
  317. return dest;
  318. }
  319. /*!
  320. * @brief add scalar [s] onto vector [a] and add result to vector [dest]
  321. *
  322. * applies += operator so dest must be initialized
  323. *
  324. * @param[in] a vector
  325. * @param[in] s scalar
  326. * @param[in] dest dest += (a + s)
  327. * @returns dest
  328. */
  329. CGLM_INLINE
  330. ivec3s
  331. glms_ivec3_(addadds)(ivec3s a, int s, ivec3s dest) {
  332. glm_ivec3_addadds(a.raw, s, dest.raw);
  333. return dest;
  334. }
  335. /*!
  336. * @brief subtract vector [a] from vector [b] and add result to [dest]
  337. *
  338. * applies += operator so dest must be initialized
  339. *
  340. * @param[in] a first vector
  341. * @param[in] b second vector
  342. * @param[in] dest dest += (a - b)
  343. * @returns dest
  344. */
  345. CGLM_INLINE
  346. ivec3s
  347. glms_ivec3_(subadd)(ivec3s a, ivec3s b, ivec3s dest) {
  348. glm_ivec3_subadd(a.raw, b.raw, dest.raw);
  349. return dest;
  350. }
  351. /*!
  352. * @brief subtract scalar [s] from vector [a] and add result to [dest]
  353. *
  354. * applies += operator so dest must be initialized
  355. *
  356. * @param[in] a first
  357. * @param[in] s scalar
  358. * @param[in] dest dest += (a - s)
  359. * @returns dest
  360. */
  361. CGLM_INLINE
  362. ivec3s
  363. glms_ivec3_(subadds)(ivec3s a, int s, ivec3s dest) {
  364. glm_ivec3_subadds(a.raw, s, dest.raw);
  365. return dest;
  366. }
  367. /*!
  368. * @brief multiply vector [a] with vector [b] and add result to [dest]
  369. *
  370. * applies += operator so dest must be initialized
  371. *
  372. * @param[in] a first vector
  373. * @param[in] b second vector
  374. * @param[in] dest dest += (a * b)
  375. * @returns dest
  376. */
  377. CGLM_INLINE
  378. ivec3s
  379. glms_ivec3_(muladd)(ivec3s a, ivec3s b, ivec3s dest) {
  380. glm_ivec3_muladd(a.raw, b.raw, dest.raw);
  381. return dest;
  382. }
  383. /*!
  384. * @brief multiply vector [a] with scalar [s] and add result to [dest]
  385. *
  386. * applies += operator so dest must be initialized
  387. *
  388. * @param[in] a vector
  389. * @param[in] s scalar
  390. * @param[in] dest dest += (a * s)
  391. * @returns dest
  392. */
  393. CGLM_INLINE
  394. ivec3s
  395. glms_ivec3_(muladds)(ivec3s a, int s, ivec3s dest) {
  396. glm_ivec3_muladds(a.raw, s, dest.raw);
  397. return dest;
  398. }
  399. /*!
  400. * @brief add maximum of vector [a] and vector [b] to vector [dest]
  401. *
  402. * applies += operator so dest must be initialized
  403. *
  404. * @param[in] a first vector
  405. * @param[in] b second vector
  406. * @param[in] dest dest += max(a, b)
  407. * @returns dest
  408. */
  409. CGLM_INLINE
  410. ivec3s
  411. glms_ivec3_(maxadd)(ivec3s a, ivec3s b, ivec3s dest) {
  412. glm_ivec3_maxadd(a.raw, b.raw, dest.raw);
  413. return dest;
  414. }
  415. /*!
  416. * @brief add minimum of vector [a] and vector [b] to vector [dest]
  417. *
  418. * applies += operator so dest must be initialized
  419. *
  420. * @param[in] a first vector
  421. * @param[in] b second vector
  422. * @param[in] dest dest += min(a, b)
  423. * @returns dest
  424. */
  425. CGLM_INLINE
  426. ivec3s
  427. glms_ivec3_(minadd)(ivec3s a, ivec3s b, ivec3s dest) {
  428. glm_ivec3_minadd(a.raw, b.raw, dest.raw);
  429. return dest;
  430. }
  431. /*!
  432. * @brief subtract vector [a] from vector [b] and subtract result from [dest]
  433. *
  434. * applies -= operator so dest must be initialized
  435. *
  436. * @param[in] a first vector
  437. * @param[in] b second vector
  438. * @param[in] dest dest -= (a - b)
  439. * @returns dest
  440. */
  441. CGLM_INLINE
  442. ivec3s
  443. glms_ivec3_(subsub)(ivec3s a, ivec3s b, ivec3s dest) {
  444. glm_ivec3_subsub(a.raw, b.raw, dest.raw);
  445. return dest;
  446. }
  447. /*!
  448. * @brief subtract scalar [s] from vector [a] and subtract 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[in] dest dest -= (a - s)
  455. * @returns dest
  456. */
  457. CGLM_INLINE
  458. ivec3s
  459. glms_ivec3_(subsubs)(ivec3s a, int s, ivec3s dest) {
  460. glm_ivec3_subsubs(a.raw, s, dest.raw);
  461. return dest;
  462. }
  463. /*!
  464. * @brief add vector [a] to vector [b] and subtract the result from [dest]
  465. *
  466. * applies -= operator so dest must be initialized
  467. *
  468. * @param[in] a vector
  469. * @param[in] b scalar
  470. * @param[in] dest dest -= (a + b)
  471. * @returns dest
  472. */
  473. CGLM_INLINE
  474. ivec3s
  475. glms_ivec3_(addsub)(ivec3s a, ivec3s b, ivec3s dest) {
  476. glm_ivec3_addsub(a.raw, b.raw, dest.raw);
  477. return dest;
  478. }
  479. /*!
  480. * @brief add scalar [s] to vector [a] and subtract the result from [dest]
  481. *
  482. * applies -= operator so dest must be initialized
  483. *
  484. * @param[in] a vector
  485. * @param[in] s scalar
  486. * @param[in] dest dest -= (a + b)
  487. * @returns dest
  488. */
  489. CGLM_INLINE
  490. ivec3s
  491. glms_ivec3_(addsubs)(ivec3s a, int s, ivec3s dest) {
  492. glm_ivec3_addsubs(a.raw, s, dest.raw);
  493. return dest;
  494. }
  495. /*!
  496. * @brief multiply vector [a] and vector [b] and subtract the result from [dest]
  497. *
  498. * applies -= operator so dest must be initialized
  499. *
  500. * @param[in] a vector
  501. * @param[in] b scalar
  502. * @param[in] dest dest -= (a * b)
  503. * @returns dest
  504. */
  505. CGLM_INLINE
  506. ivec3s
  507. glms_ivec3_(mulsub)(ivec3s a, ivec3s b, ivec3s dest) {
  508. glm_ivec3_mulsub(a.raw, b.raw, dest.raw);
  509. return dest;
  510. }
  511. /*!
  512. * @brief multiply vector [a] with scalar [s] and subtract the result from [dest]
  513. *
  514. * applies -= operator so dest must be initialized
  515. *
  516. * @param[in] a vector
  517. * @param[in] s scalar
  518. * @param[in] dest dest -= (a * s)
  519. * @returns dest
  520. */
  521. CGLM_INLINE
  522. ivec3s
  523. glms_ivec3_(mulsubs)(ivec3s a, int s, ivec3s dest) {
  524. glm_ivec3_mulsubs(a.raw, s, dest.raw);
  525. return dest;
  526. }
  527. /*!
  528. * @brief subtract maximum of vector [a] and vector [b] from vector [dest]
  529. *
  530. * applies += operator so dest must be initialized
  531. *
  532. * @param[in] a first vector
  533. * @param[in] b second vector
  534. * @param[in] dest dest -= max(a, b)
  535. * @returns dest
  536. */
  537. CGLM_INLINE
  538. ivec3s
  539. glms_ivec3_(maxsub)(ivec3s a, ivec3s b, ivec3s dest) {
  540. glm_ivec3_maxsub(a.raw, b.raw, dest.raw);
  541. return dest;
  542. }
  543. /*!
  544. * @brief subtract minimum of vector [a] and vector [b] from vector [dest]
  545. *
  546. * applies -= operator so dest must be initialized
  547. *
  548. * @param[in] a first vector
  549. * @param[in] b second vector
  550. * @param[in] dest dest -= min(a, b)
  551. * @returns dest
  552. */
  553. CGLM_INLINE
  554. ivec3s
  555. glms_ivec3_(minsub)(ivec3s a, ivec3s b, ivec3s dest) {
  556. glm_ivec3_minsub(a.raw, b.raw, dest.raw);
  557. return dest;
  558. }
  559. /*!
  560. * @brief squared distance between two vectors
  561. *
  562. * @param[in] a first vector
  563. * @param[in] b second vector
  564. * @return returns squared distance (distance * distance)
  565. */
  566. CGLM_INLINE
  567. int
  568. glms_ivec3_(distance2)(ivec3s a, ivec3s b) {
  569. return glm_ivec3_distance2(a.raw, b.raw);
  570. }
  571. /*!
  572. * @brief distance between two vectors
  573. *
  574. * @param[in] a first vector
  575. * @param[in] b second vector
  576. * @return returns distance
  577. */
  578. CGLM_INLINE
  579. float
  580. glms_ivec3_(distance)(ivec3s a, ivec3s b) {
  581. return glm_ivec3_distance(a.raw, b.raw);
  582. }
  583. /*!
  584. * @brief fill a vector with specified value
  585. *
  586. * @param[in] val value
  587. * @returns destination
  588. */
  589. CGLM_INLINE
  590. ivec3s
  591. glms_ivec3_(fill)(int val) {
  592. ivec3s r;
  593. glm_ivec3_fill(r.raw, val);
  594. return r;
  595. }
  596. /*!
  597. * @brief check if vector is equal to value
  598. *
  599. * @param[in] v vector
  600. * @param[in] val value
  601. */
  602. CGLM_INLINE
  603. bool
  604. glms_ivec3_(eq)(ivec3s v, int val) {
  605. return glm_ivec3_eq(v.raw, val);
  606. }
  607. /*!
  608. * @brief check if vector is equal to another
  609. *
  610. * @param[in] a vector
  611. * @param[in] b vector
  612. */
  613. CGLM_INLINE
  614. bool
  615. glms_ivec3_(eqv)(ivec3s a, ivec3s b) {
  616. return glm_ivec3_eqv(a.raw, b.raw);
  617. }
  618. /*!
  619. * @brief set each member of dest to greater of vector a and b
  620. *
  621. * @param[in] a first vector
  622. * @param[in] b second vector
  623. * @returns destination
  624. */
  625. CGLM_INLINE
  626. ivec3s
  627. glms_ivec3_(maxv)(ivec3s a, ivec3s b) {
  628. ivec3s r;
  629. glm_ivec3_maxv(a.raw, b.raw, r.raw);
  630. return r;
  631. }
  632. /*!
  633. * @brief set each member of dest to lesser of vector a and b
  634. *
  635. * @param[in] a first vector
  636. * @param[in] b second vector
  637. * @returns destination
  638. */
  639. CGLM_INLINE
  640. ivec3s
  641. glms_ivec3_(minv)(ivec3s a, ivec3s b) {
  642. ivec3s r;
  643. glm_ivec3_minv(a.raw, b.raw, r.raw);
  644. return r;
  645. }
  646. /*!
  647. * @brief clamp each member of [v] between minVal and maxVal (inclusive)
  648. *
  649. * @param[in] v vector
  650. * @param[in] minVal minimum value
  651. * @param[in] maxVal maximum value
  652. * @returns clamped vector
  653. */
  654. CGLM_INLINE
  655. ivec3s
  656. glms_ivec3_(clamp)(ivec3s v, int minVal, int maxVal) {
  657. glm_ivec3_clamp(v.raw, minVal, maxVal);
  658. return v;
  659. }
  660. /*!
  661. * @brief absolute value of v
  662. *
  663. * @param[in] v vector
  664. * @returns destination
  665. */
  666. CGLM_INLINE
  667. ivec3s
  668. glms_ivec3_(abs)(ivec3s v) {
  669. ivec3s r;
  670. glm_ivec3_abs(v.raw, r.raw);
  671. return r;
  672. }
  673. #endif /* cglms_ivec3_h */