type_ptr.inl 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. /// @ref gtc_type_ptr
  2. #include <cstring>
  3. namespace glm
  4. {
  5. /// @addtogroup gtc_type_ptr
  6. /// @{
  7. template<typename T, qualifier Q>
  8. GLM_FUNC_QUALIFIER T const* value_ptr(vec<2, T, Q> const& v)
  9. {
  10. return &(v.x);
  11. }
  12. template<typename T, qualifier Q>
  13. GLM_FUNC_QUALIFIER T* value_ptr(vec<2, T, Q>& v)
  14. {
  15. return &(v.x);
  16. }
  17. template<typename T, qualifier Q>
  18. GLM_FUNC_QUALIFIER T const * value_ptr(vec<3, T, Q> const& v)
  19. {
  20. return &(v.x);
  21. }
  22. template<typename T, qualifier Q>
  23. GLM_FUNC_QUALIFIER T* value_ptr(vec<3, T, Q>& v)
  24. {
  25. return &(v.x);
  26. }
  27. template<typename T, qualifier Q>
  28. GLM_FUNC_QUALIFIER T const* value_ptr(vec<4, T, Q> const& v)
  29. {
  30. return &(v.x);
  31. }
  32. template<typename T, qualifier Q>
  33. GLM_FUNC_QUALIFIER T* value_ptr(vec<4, T, Q>& v)
  34. {
  35. return &(v.x);
  36. }
  37. template<typename T, qualifier Q>
  38. GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 2, T, Q> const& m)
  39. {
  40. return &(m[0].x);
  41. }
  42. template<typename T, qualifier Q>
  43. GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 2, T, Q>& m)
  44. {
  45. return &(m[0].x);
  46. }
  47. template<typename T, qualifier Q>
  48. GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 3, T, Q> const& m)
  49. {
  50. return &(m[0].x);
  51. }
  52. template<typename T, qualifier Q>
  53. GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 3, T, Q>& m)
  54. {
  55. return &(m[0].x);
  56. }
  57. template<typename T, qualifier Q>
  58. GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 4, T, Q> const& m)
  59. {
  60. return &(m[0].x);
  61. }
  62. template<typename T, qualifier Q>
  63. GLM_FUNC_QUALIFIER T* value_ptr(mat<4, 4, T, Q>& m)
  64. {
  65. return &(m[0].x);
  66. }
  67. template<typename T, qualifier Q>
  68. GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 3, T, Q> const& m)
  69. {
  70. return &(m[0].x);
  71. }
  72. template<typename T, qualifier Q>
  73. GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 3, T, Q>& m)
  74. {
  75. return &(m[0].x);
  76. }
  77. template<typename T, qualifier Q>
  78. GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 2, T, Q> const& m)
  79. {
  80. return &(m[0].x);
  81. }
  82. template<typename T, qualifier Q>
  83. GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 2, T, Q>& m)
  84. {
  85. return &(m[0].x);
  86. }
  87. template<typename T, qualifier Q>
  88. GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 4, T, Q> const& m)
  89. {
  90. return &(m[0].x);
  91. }
  92. template<typename T, qualifier Q>
  93. GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 4, T, Q>& m)
  94. {
  95. return &(m[0].x);
  96. }
  97. template<typename T, qualifier Q>
  98. GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 2, T, Q> const& m)
  99. {
  100. return &(m[0].x);
  101. }
  102. template<typename T, qualifier Q>
  103. GLM_FUNC_QUALIFIER T* value_ptr(mat<4, 2, T, Q>& m)
  104. {
  105. return &(m[0].x);
  106. }
  107. template<typename T, qualifier Q>
  108. GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 4, T, Q> const& m)
  109. {
  110. return &(m[0].x);
  111. }
  112. template<typename T, qualifier Q>
  113. GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 4, T, Q>& m)
  114. {
  115. return &(m[0].x);
  116. }
  117. template<typename T, qualifier Q>
  118. GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 3, T, Q> const& m)
  119. {
  120. return &(m[0].x);
  121. }
  122. template<typename T, qualifier Q>
  123. GLM_FUNC_QUALIFIER T * value_ptr(mat<4, 3, T, Q>& m)
  124. {
  125. return &(m[0].x);
  126. }
  127. template<typename T, qualifier Q>
  128. GLM_FUNC_QUALIFIER T const * value_ptr(qua<T, Q> const& q)
  129. {
  130. return &(q[0]);
  131. }
  132. template<typename T, qualifier Q>
  133. GLM_FUNC_QUALIFIER T* value_ptr(qua<T, Q>& q)
  134. {
  135. return &(q[0]);
  136. }
  137. template <typename T, qualifier Q>
  138. inline vec<1, T, Q> make_vec1(vec<1, T, Q> const& v)
  139. {
  140. return v;
  141. }
  142. template <typename T, qualifier Q>
  143. inline vec<1, T, Q> make_vec1(vec<2, T, Q> const& v)
  144. {
  145. return vec<1, T, Q>(v);
  146. }
  147. template <typename T, qualifier Q>
  148. inline vec<1, T, Q> make_vec1(vec<3, T, Q> const& v)
  149. {
  150. return vec<1, T, Q>(v);
  151. }
  152. template <typename T, qualifier Q>
  153. inline vec<1, T, Q> make_vec1(vec<4, T, Q> const& v)
  154. {
  155. return vec<1, T, Q>(v);
  156. }
  157. template <typename T, qualifier Q>
  158. inline vec<2, T, Q> make_vec2(vec<1, T, Q> const& v)
  159. {
  160. return vec<2, T, Q>(v.x, static_cast<T>(0));
  161. }
  162. template <typename T, qualifier Q>
  163. inline vec<2, T, Q> make_vec2(vec<2, T, Q> const& v)
  164. {
  165. return v;
  166. }
  167. template <typename T, qualifier Q>
  168. inline vec<2, T, Q> make_vec2(vec<3, T, Q> const& v)
  169. {
  170. return vec<2, T, Q>(v);
  171. }
  172. template <typename T, qualifier Q>
  173. inline vec<2, T, Q> make_vec2(vec<4, T, Q> const& v)
  174. {
  175. return vec<2, T, Q>(v);
  176. }
  177. template <typename T, qualifier Q>
  178. inline vec<3, T, Q> make_vec3(vec<1, T, Q> const& v)
  179. {
  180. return vec<3, T, Q>(v.x, static_cast<T>(0), static_cast<T>(0));
  181. }
  182. template <typename T, qualifier Q>
  183. inline vec<3, T, Q> make_vec3(vec<2, T, Q> const& v)
  184. {
  185. return vec<3, T, Q>(v.x, v.y, static_cast<T>(0));
  186. }
  187. template <typename T, qualifier Q>
  188. inline vec<3, T, Q> make_vec3(vec<3, T, Q> const& v)
  189. {
  190. return v;
  191. }
  192. template <typename T, qualifier Q>
  193. inline vec<3, T, Q> make_vec3(vec<4, T, Q> const& v)
  194. {
  195. return vec<3, T, Q>(v);
  196. }
  197. template <typename T, qualifier Q>
  198. inline vec<4, T, Q> make_vec4(vec<1, T, Q> const& v)
  199. {
  200. return vec<4, T, Q>(v.x, static_cast<T>(0), static_cast<T>(0), static_cast<T>(1));
  201. }
  202. template <typename T, qualifier Q>
  203. inline vec<4, T, Q> make_vec4(vec<2, T, Q> const& v)
  204. {
  205. return vec<4, T, Q>(v.x, v.y, static_cast<T>(0), static_cast<T>(1));
  206. }
  207. template <typename T, qualifier Q>
  208. inline vec<4, T, Q> make_vec4(vec<3, T, Q> const& v)
  209. {
  210. return vec<4, T, Q>(v.x, v.y, v.z, static_cast<T>(1));
  211. }
  212. template <typename T, qualifier Q>
  213. inline vec<4, T, Q> make_vec4(vec<4, T, Q> const& v)
  214. {
  215. return v;
  216. }
  217. template<typename T>
  218. GLM_FUNC_QUALIFIER vec<2, T, defaultp> make_vec2(T const *const ptr)
  219. {
  220. vec<2, T, defaultp> Result;
  221. memcpy(value_ptr(Result), ptr, sizeof(vec<2, T, defaultp>));
  222. return Result;
  223. }
  224. template<typename T>
  225. GLM_FUNC_QUALIFIER vec<3, T, defaultp> make_vec3(T const *const ptr)
  226. {
  227. vec<3, T, defaultp> Result;
  228. memcpy(value_ptr(Result), ptr, sizeof(vec<3, T, defaultp>));
  229. return Result;
  230. }
  231. template<typename T>
  232. GLM_FUNC_QUALIFIER vec<4, T, defaultp> make_vec4(T const *const ptr)
  233. {
  234. vec<4, T, defaultp> Result;
  235. memcpy(value_ptr(Result), ptr, sizeof(vec<4, T, defaultp>));
  236. return Result;
  237. }
  238. template<typename T>
  239. GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2x2(T const *const ptr)
  240. {
  241. mat<2, 2, T, defaultp> Result;
  242. memcpy(value_ptr(Result), ptr, sizeof(mat<2, 2, T, defaultp>));
  243. return Result;
  244. }
  245. template<typename T>
  246. GLM_FUNC_QUALIFIER mat<2, 3, T, defaultp> make_mat2x3(T const *const ptr)
  247. {
  248. mat<2, 3, T, defaultp> Result;
  249. memcpy(value_ptr(Result), ptr, sizeof(mat<2, 3, T, defaultp>));
  250. return Result;
  251. }
  252. template<typename T>
  253. GLM_FUNC_QUALIFIER mat<2, 4, T, defaultp> make_mat2x4(T const *const ptr)
  254. {
  255. mat<2, 4, T, defaultp> Result;
  256. memcpy(value_ptr(Result), ptr, sizeof(mat<2, 4, T, defaultp>));
  257. return Result;
  258. }
  259. template<typename T>
  260. GLM_FUNC_QUALIFIER mat<3, 2, T, defaultp> make_mat3x2(T const *const ptr)
  261. {
  262. mat<3, 2, T, defaultp> Result;
  263. memcpy(value_ptr(Result), ptr, sizeof(mat<3, 2, T, defaultp>));
  264. return Result;
  265. }
  266. template<typename T>
  267. GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3x3(T const *const ptr)
  268. {
  269. mat<3, 3, T, defaultp> Result;
  270. memcpy(value_ptr(Result), ptr, sizeof(mat<3, 3, T, defaultp>));
  271. return Result;
  272. }
  273. template<typename T>
  274. GLM_FUNC_QUALIFIER mat<3, 4, T, defaultp> make_mat3x4(T const *const ptr)
  275. {
  276. mat<3, 4, T, defaultp> Result;
  277. memcpy(value_ptr(Result), ptr, sizeof(mat<3, 4, T, defaultp>));
  278. return Result;
  279. }
  280. template<typename T>
  281. GLM_FUNC_QUALIFIER mat<4, 2, T, defaultp> make_mat4x2(T const *const ptr)
  282. {
  283. mat<4, 2, T, defaultp> Result;
  284. memcpy(value_ptr(Result), ptr, sizeof(mat<4, 2, T, defaultp>));
  285. return Result;
  286. }
  287. template<typename T>
  288. GLM_FUNC_QUALIFIER mat<4, 3, T, defaultp> make_mat4x3(T const *const ptr)
  289. {
  290. mat<4, 3, T, defaultp> Result;
  291. memcpy(value_ptr(Result), ptr, sizeof(mat<4, 3, T, defaultp>));
  292. return Result;
  293. }
  294. template<typename T>
  295. GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4x4(T const *const ptr)
  296. {
  297. mat<4, 4, T, defaultp> Result;
  298. memcpy(value_ptr(Result), ptr, sizeof(mat<4, 4, T, defaultp>));
  299. return Result;
  300. }
  301. template<typename T>
  302. GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2(T const *const ptr)
  303. {
  304. return make_mat2x2(ptr);
  305. }
  306. template<typename T>
  307. GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3(T const *const ptr)
  308. {
  309. return make_mat3x3(ptr);
  310. }
  311. template<typename T>
  312. GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4(T const *const ptr)
  313. {
  314. return make_mat4x4(ptr);
  315. }
  316. template<typename T>
  317. GLM_FUNC_QUALIFIER qua<T, defaultp> make_quat(T const *const ptr)
  318. {
  319. qua<T, defaultp> Result;
  320. memcpy(value_ptr(Result), ptr, sizeof(qua<T, defaultp>));
  321. return Result;
  322. }
  323. /// @}
  324. }//namespace glm