fwd.hpp 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818
  1. #pragma once
  2. #include "detail/qualifier.hpp"
  3. namespace glm
  4. {
  5. #if GLM_HAS_EXTENDED_INTEGER_TYPE
  6. typedef std::int8_t int8;
  7. typedef std::int16_t int16;
  8. typedef std::int32_t int32;
  9. typedef std::int64_t int64;
  10. typedef std::uint8_t uint8;
  11. typedef std::uint16_t uint16;
  12. typedef std::uint32_t uint32;
  13. typedef std::uint64_t uint64;
  14. #else
  15. typedef signed char int8;
  16. typedef signed short int16;
  17. typedef signed int int32;
  18. typedef detail::int64 int64;
  19. typedef unsigned char uint8;
  20. typedef unsigned short uint16;
  21. typedef unsigned int uint32;
  22. typedef detail::uint64 uint64;
  23. #endif
  24. // Scalar int
  25. typedef int8 lowp_i8;
  26. typedef int8 mediump_i8;
  27. typedef int8 highp_i8;
  28. typedef int8 i8;
  29. typedef int8 lowp_int8;
  30. typedef int8 mediump_int8;
  31. typedef int8 highp_int8;
  32. typedef int8 lowp_int8_t;
  33. typedef int8 mediump_int8_t;
  34. typedef int8 highp_int8_t;
  35. typedef int8 int8_t;
  36. typedef int16 lowp_i16;
  37. typedef int16 mediump_i16;
  38. typedef int16 highp_i16;
  39. typedef int16 i16;
  40. typedef int16 lowp_int16;
  41. typedef int16 mediump_int16;
  42. typedef int16 highp_int16;
  43. typedef int16 lowp_int16_t;
  44. typedef int16 mediump_int16_t;
  45. typedef int16 highp_int16_t;
  46. typedef int16 int16_t;
  47. typedef int32 lowp_i32;
  48. typedef int32 mediump_i32;
  49. typedef int32 highp_i32;
  50. typedef int32 i32;
  51. typedef int32 lowp_int32;
  52. typedef int32 mediump_int32;
  53. typedef int32 highp_int32;
  54. typedef int32 lowp_int32_t;
  55. typedef int32 mediump_int32_t;
  56. typedef int32 highp_int32_t;
  57. typedef int32 int32_t;
  58. typedef int64 lowp_i64;
  59. typedef int64 mediump_i64;
  60. typedef int64 highp_i64;
  61. typedef int64 i64;
  62. typedef int64 lowp_int64;
  63. typedef int64 mediump_int64;
  64. typedef int64 highp_int64;
  65. typedef int64 lowp_int64_t;
  66. typedef int64 mediump_int64_t;
  67. typedef int64 highp_int64_t;
  68. typedef int64 int64_t;
  69. // Scalar uint
  70. typedef uint8 lowp_u8;
  71. typedef uint8 mediump_u8;
  72. typedef uint8 highp_u8;
  73. typedef uint8 u8;
  74. typedef uint8 lowp_uint8;
  75. typedef uint8 mediump_uint8;
  76. typedef uint8 highp_uint8;
  77. typedef uint8 lowp_uint8_t;
  78. typedef uint8 mediump_uint8_t;
  79. typedef uint8 highp_uint8_t;
  80. typedef uint8 uint8_t;
  81. typedef uint16 lowp_u16;
  82. typedef uint16 mediump_u16;
  83. typedef uint16 highp_u16;
  84. typedef uint16 u16;
  85. typedef uint16 lowp_uint16;
  86. typedef uint16 mediump_uint16;
  87. typedef uint16 highp_uint16;
  88. typedef uint16 lowp_uint16_t;
  89. typedef uint16 mediump_uint16_t;
  90. typedef uint16 highp_uint16_t;
  91. typedef uint16 uint16_t;
  92. typedef uint32 lowp_u32;
  93. typedef uint32 mediump_u32;
  94. typedef uint32 highp_u32;
  95. typedef uint32 u32;
  96. typedef uint32 lowp_uint32;
  97. typedef uint32 mediump_uint32;
  98. typedef uint32 highp_uint32;
  99. typedef uint32 lowp_uint32_t;
  100. typedef uint32 mediump_uint32_t;
  101. typedef uint32 highp_uint32_t;
  102. typedef uint32 uint32_t;
  103. typedef uint64 lowp_u64;
  104. typedef uint64 mediump_u64;
  105. typedef uint64 highp_u64;
  106. typedef uint64 u64;
  107. typedef uint64 lowp_uint64;
  108. typedef uint64 mediump_uint64;
  109. typedef uint64 highp_uint64;
  110. typedef uint64 lowp_uint64_t;
  111. typedef uint64 mediump_uint64_t;
  112. typedef uint64 highp_uint64_t;
  113. typedef uint64 uint64_t;
  114. // Scalar float
  115. typedef float lowp_f32;
  116. typedef float mediump_f32;
  117. typedef float highp_f32;
  118. typedef float f32;
  119. typedef float lowp_float32;
  120. typedef float mediump_float32;
  121. typedef float highp_float32;
  122. typedef float float32;
  123. typedef float lowp_float32_t;
  124. typedef float mediump_float32_t;
  125. typedef float highp_float32_t;
  126. typedef float float32_t;
  127. typedef double lowp_f64;
  128. typedef double mediump_f64;
  129. typedef double highp_f64;
  130. typedef double f64;
  131. typedef double lowp_float64;
  132. typedef double mediump_float64;
  133. typedef double highp_float64;
  134. typedef double float64;
  135. typedef double lowp_float64_t;
  136. typedef double mediump_float64_t;
  137. typedef double highp_float64_t;
  138. typedef double float64_t;
  139. // Vector bool
  140. typedef vec<1, bool, lowp> lowp_bvec1;
  141. typedef vec<2, bool, lowp> lowp_bvec2;
  142. typedef vec<3, bool, lowp> lowp_bvec3;
  143. typedef vec<4, bool, lowp> lowp_bvec4;
  144. typedef vec<1, bool, mediump> mediump_bvec1;
  145. typedef vec<2, bool, mediump> mediump_bvec2;
  146. typedef vec<3, bool, mediump> mediump_bvec3;
  147. typedef vec<4, bool, mediump> mediump_bvec4;
  148. typedef vec<1, bool, highp> highp_bvec1;
  149. typedef vec<2, bool, highp> highp_bvec2;
  150. typedef vec<3, bool, highp> highp_bvec3;
  151. typedef vec<4, bool, highp> highp_bvec4;
  152. typedef vec<1, bool, defaultp> bvec1;
  153. typedef vec<2, bool, defaultp> bvec2;
  154. typedef vec<3, bool, defaultp> bvec3;
  155. typedef vec<4, bool, defaultp> bvec4;
  156. // Vector int
  157. typedef vec<1, i32, lowp> lowp_ivec1;
  158. typedef vec<2, i32, lowp> lowp_ivec2;
  159. typedef vec<3, i32, lowp> lowp_ivec3;
  160. typedef vec<4, i32, lowp> lowp_ivec4;
  161. typedef vec<1, i32, mediump> mediump_ivec1;
  162. typedef vec<2, i32, mediump> mediump_ivec2;
  163. typedef vec<3, i32, mediump> mediump_ivec3;
  164. typedef vec<4, i32, mediump> mediump_ivec4;
  165. typedef vec<1, i32, highp> highp_ivec1;
  166. typedef vec<2, i32, highp> highp_ivec2;
  167. typedef vec<3, i32, highp> highp_ivec3;
  168. typedef vec<4, i32, highp> highp_ivec4;
  169. typedef vec<1, i32, defaultp> ivec1;
  170. typedef vec<2, i32, defaultp> ivec2;
  171. typedef vec<3, i32, defaultp> ivec3;
  172. typedef vec<4, i32, defaultp> ivec4;
  173. typedef vec<1, i8, lowp> lowp_i8vec1;
  174. typedef vec<2, i8, lowp> lowp_i8vec2;
  175. typedef vec<3, i8, lowp> lowp_i8vec3;
  176. typedef vec<4, i8, lowp> lowp_i8vec4;
  177. typedef vec<1, i8, mediump> mediump_i8vec1;
  178. typedef vec<2, i8, mediump> mediump_i8vec2;
  179. typedef vec<3, i8, mediump> mediump_i8vec3;
  180. typedef vec<4, i8, mediump> mediump_i8vec4;
  181. typedef vec<1, i8, highp> highp_i8vec1;
  182. typedef vec<2, i8, highp> highp_i8vec2;
  183. typedef vec<3, i8, highp> highp_i8vec3;
  184. typedef vec<4, i8, highp> highp_i8vec4;
  185. typedef vec<1, i8, defaultp> i8vec1;
  186. typedef vec<2, i8, defaultp> i8vec2;
  187. typedef vec<3, i8, defaultp> i8vec3;
  188. typedef vec<4, i8, defaultp> i8vec4;
  189. typedef vec<1, i16, lowp> lowp_i16vec1;
  190. typedef vec<2, i16, lowp> lowp_i16vec2;
  191. typedef vec<3, i16, lowp> lowp_i16vec3;
  192. typedef vec<4, i16, lowp> lowp_i16vec4;
  193. typedef vec<1, i16, mediump> mediump_i16vec1;
  194. typedef vec<2, i16, mediump> mediump_i16vec2;
  195. typedef vec<3, i16, mediump> mediump_i16vec3;
  196. typedef vec<4, i16, mediump> mediump_i16vec4;
  197. typedef vec<1, i16, highp> highp_i16vec1;
  198. typedef vec<2, i16, highp> highp_i16vec2;
  199. typedef vec<3, i16, highp> highp_i16vec3;
  200. typedef vec<4, i16, highp> highp_i16vec4;
  201. typedef vec<1, i16, defaultp> i16vec1;
  202. typedef vec<2, i16, defaultp> i16vec2;
  203. typedef vec<3, i16, defaultp> i16vec3;
  204. typedef vec<4, i16, defaultp> i16vec4;
  205. typedef vec<1, i32, lowp> lowp_i32vec1;
  206. typedef vec<2, i32, lowp> lowp_i32vec2;
  207. typedef vec<3, i32, lowp> lowp_i32vec3;
  208. typedef vec<4, i32, lowp> lowp_i32vec4;
  209. typedef vec<1, i32, mediump> mediump_i32vec1;
  210. typedef vec<2, i32, mediump> mediump_i32vec2;
  211. typedef vec<3, i32, mediump> mediump_i32vec3;
  212. typedef vec<4, i32, mediump> mediump_i32vec4;
  213. typedef vec<1, i32, highp> highp_i32vec1;
  214. typedef vec<2, i32, highp> highp_i32vec2;
  215. typedef vec<3, i32, highp> highp_i32vec3;
  216. typedef vec<4, i32, highp> highp_i32vec4;
  217. typedef vec<1, i32, defaultp> i32vec1;
  218. typedef vec<2, i32, defaultp> i32vec2;
  219. typedef vec<3, i32, defaultp> i32vec3;
  220. typedef vec<4, i32, defaultp> i32vec4;
  221. typedef vec<1, i64, lowp> lowp_i64vec1;
  222. typedef vec<2, i64, lowp> lowp_i64vec2;
  223. typedef vec<3, i64, lowp> lowp_i64vec3;
  224. typedef vec<4, i64, lowp> lowp_i64vec4;
  225. typedef vec<1, i64, mediump> mediump_i64vec1;
  226. typedef vec<2, i64, mediump> mediump_i64vec2;
  227. typedef vec<3, i64, mediump> mediump_i64vec3;
  228. typedef vec<4, i64, mediump> mediump_i64vec4;
  229. typedef vec<1, i64, highp> highp_i64vec1;
  230. typedef vec<2, i64, highp> highp_i64vec2;
  231. typedef vec<3, i64, highp> highp_i64vec3;
  232. typedef vec<4, i64, highp> highp_i64vec4;
  233. typedef vec<1, i64, defaultp> i64vec1;
  234. typedef vec<2, i64, defaultp> i64vec2;
  235. typedef vec<3, i64, defaultp> i64vec3;
  236. typedef vec<4, i64, defaultp> i64vec4;
  237. // Vector uint
  238. typedef vec<1, u32, lowp> lowp_uvec1;
  239. typedef vec<2, u32, lowp> lowp_uvec2;
  240. typedef vec<3, u32, lowp> lowp_uvec3;
  241. typedef vec<4, u32, lowp> lowp_uvec4;
  242. typedef vec<1, u32, mediump> mediump_uvec1;
  243. typedef vec<2, u32, mediump> mediump_uvec2;
  244. typedef vec<3, u32, mediump> mediump_uvec3;
  245. typedef vec<4, u32, mediump> mediump_uvec4;
  246. typedef vec<1, u32, highp> highp_uvec1;
  247. typedef vec<2, u32, highp> highp_uvec2;
  248. typedef vec<3, u32, highp> highp_uvec3;
  249. typedef vec<4, u32, highp> highp_uvec4;
  250. typedef vec<1, u32, defaultp> uvec1;
  251. typedef vec<2, u32, defaultp> uvec2;
  252. typedef vec<3, u32, defaultp> uvec3;
  253. typedef vec<4, u32, defaultp> uvec4;
  254. typedef vec<1, u8, lowp> lowp_u8vec1;
  255. typedef vec<2, u8, lowp> lowp_u8vec2;
  256. typedef vec<3, u8, lowp> lowp_u8vec3;
  257. typedef vec<4, u8, lowp> lowp_u8vec4;
  258. typedef vec<1, u8, mediump> mediump_u8vec1;
  259. typedef vec<2, u8, mediump> mediump_u8vec2;
  260. typedef vec<3, u8, mediump> mediump_u8vec3;
  261. typedef vec<4, u8, mediump> mediump_u8vec4;
  262. typedef vec<1, u8, highp> highp_u8vec1;
  263. typedef vec<2, u8, highp> highp_u8vec2;
  264. typedef vec<3, u8, highp> highp_u8vec3;
  265. typedef vec<4, u8, highp> highp_u8vec4;
  266. typedef vec<1, u8, defaultp> u8vec1;
  267. typedef vec<2, u8, defaultp> u8vec2;
  268. typedef vec<3, u8, defaultp> u8vec3;
  269. typedef vec<4, u8, defaultp> u8vec4;
  270. typedef vec<1, u16, lowp> lowp_u16vec1;
  271. typedef vec<2, u16, lowp> lowp_u16vec2;
  272. typedef vec<3, u16, lowp> lowp_u16vec3;
  273. typedef vec<4, u16, lowp> lowp_u16vec4;
  274. typedef vec<1, u16, mediump> mediump_u16vec1;
  275. typedef vec<2, u16, mediump> mediump_u16vec2;
  276. typedef vec<3, u16, mediump> mediump_u16vec3;
  277. typedef vec<4, u16, mediump> mediump_u16vec4;
  278. typedef vec<1, u16, highp> highp_u16vec1;
  279. typedef vec<2, u16, highp> highp_u16vec2;
  280. typedef vec<3, u16, highp> highp_u16vec3;
  281. typedef vec<4, u16, highp> highp_u16vec4;
  282. typedef vec<1, u16, defaultp> u16vec1;
  283. typedef vec<2, u16, defaultp> u16vec2;
  284. typedef vec<3, u16, defaultp> u16vec3;
  285. typedef vec<4, u16, defaultp> u16vec4;
  286. typedef vec<1, u32, lowp> lowp_u32vec1;
  287. typedef vec<2, u32, lowp> lowp_u32vec2;
  288. typedef vec<3, u32, lowp> lowp_u32vec3;
  289. typedef vec<4, u32, lowp> lowp_u32vec4;
  290. typedef vec<1, u32, mediump> mediump_u32vec1;
  291. typedef vec<2, u32, mediump> mediump_u32vec2;
  292. typedef vec<3, u32, mediump> mediump_u32vec3;
  293. typedef vec<4, u32, mediump> mediump_u32vec4;
  294. typedef vec<1, u32, highp> highp_u32vec1;
  295. typedef vec<2, u32, highp> highp_u32vec2;
  296. typedef vec<3, u32, highp> highp_u32vec3;
  297. typedef vec<4, u32, highp> highp_u32vec4;
  298. typedef vec<1, u32, defaultp> u32vec1;
  299. typedef vec<2, u32, defaultp> u32vec2;
  300. typedef vec<3, u32, defaultp> u32vec3;
  301. typedef vec<4, u32, defaultp> u32vec4;
  302. typedef vec<1, u64, lowp> lowp_u64vec1;
  303. typedef vec<2, u64, lowp> lowp_u64vec2;
  304. typedef vec<3, u64, lowp> lowp_u64vec3;
  305. typedef vec<4, u64, lowp> lowp_u64vec4;
  306. typedef vec<1, u64, mediump> mediump_u64vec1;
  307. typedef vec<2, u64, mediump> mediump_u64vec2;
  308. typedef vec<3, u64, mediump> mediump_u64vec3;
  309. typedef vec<4, u64, mediump> mediump_u64vec4;
  310. typedef vec<1, u64, highp> highp_u64vec1;
  311. typedef vec<2, u64, highp> highp_u64vec2;
  312. typedef vec<3, u64, highp> highp_u64vec3;
  313. typedef vec<4, u64, highp> highp_u64vec4;
  314. typedef vec<1, u64, defaultp> u64vec1;
  315. typedef vec<2, u64, defaultp> u64vec2;
  316. typedef vec<3, u64, defaultp> u64vec3;
  317. typedef vec<4, u64, defaultp> u64vec4;
  318. // Vector float
  319. typedef vec<1, float, lowp> lowp_vec1;
  320. typedef vec<2, float, lowp> lowp_vec2;
  321. typedef vec<3, float, lowp> lowp_vec3;
  322. typedef vec<4, float, lowp> lowp_vec4;
  323. typedef vec<1, float, mediump> mediump_vec1;
  324. typedef vec<2, float, mediump> mediump_vec2;
  325. typedef vec<3, float, mediump> mediump_vec3;
  326. typedef vec<4, float, mediump> mediump_vec4;
  327. typedef vec<1, float, highp> highp_vec1;
  328. typedef vec<2, float, highp> highp_vec2;
  329. typedef vec<3, float, highp> highp_vec3;
  330. typedef vec<4, float, highp> highp_vec4;
  331. typedef vec<1, float, defaultp> vec1;
  332. typedef vec<2, float, defaultp> vec2;
  333. typedef vec<3, float, defaultp> vec3;
  334. typedef vec<4, float, defaultp> vec4;
  335. typedef vec<1, float, lowp> lowp_fvec1;
  336. typedef vec<2, float, lowp> lowp_fvec2;
  337. typedef vec<3, float, lowp> lowp_fvec3;
  338. typedef vec<4, float, lowp> lowp_fvec4;
  339. typedef vec<1, float, mediump> mediump_fvec1;
  340. typedef vec<2, float, mediump> mediump_fvec2;
  341. typedef vec<3, float, mediump> mediump_fvec3;
  342. typedef vec<4, float, mediump> mediump_fvec4;
  343. typedef vec<1, float, highp> highp_fvec1;
  344. typedef vec<2, float, highp> highp_fvec2;
  345. typedef vec<3, float, highp> highp_fvec3;
  346. typedef vec<4, float, highp> highp_fvec4;
  347. typedef vec<1, f32, defaultp> fvec1;
  348. typedef vec<2, f32, defaultp> fvec2;
  349. typedef vec<3, f32, defaultp> fvec3;
  350. typedef vec<4, f32, defaultp> fvec4;
  351. typedef vec<1, f32, lowp> lowp_f32vec1;
  352. typedef vec<2, f32, lowp> lowp_f32vec2;
  353. typedef vec<3, f32, lowp> lowp_f32vec3;
  354. typedef vec<4, f32, lowp> lowp_f32vec4;
  355. typedef vec<1, f32, mediump> mediump_f32vec1;
  356. typedef vec<2, f32, mediump> mediump_f32vec2;
  357. typedef vec<3, f32, mediump> mediump_f32vec3;
  358. typedef vec<4, f32, mediump> mediump_f32vec4;
  359. typedef vec<1, f32, highp> highp_f32vec1;
  360. typedef vec<2, f32, highp> highp_f32vec2;
  361. typedef vec<3, f32, highp> highp_f32vec3;
  362. typedef vec<4, f32, highp> highp_f32vec4;
  363. typedef vec<1, f32, defaultp> f32vec1;
  364. typedef vec<2, f32, defaultp> f32vec2;
  365. typedef vec<3, f32, defaultp> f32vec3;
  366. typedef vec<4, f32, defaultp> f32vec4;
  367. typedef vec<1, f64, lowp> lowp_dvec1;
  368. typedef vec<2, f64, lowp> lowp_dvec2;
  369. typedef vec<3, f64, lowp> lowp_dvec3;
  370. typedef vec<4, f64, lowp> lowp_dvec4;
  371. typedef vec<1, f64, mediump> mediump_dvec1;
  372. typedef vec<2, f64, mediump> mediump_dvec2;
  373. typedef vec<3, f64, mediump> mediump_dvec3;
  374. typedef vec<4, f64, mediump> mediump_dvec4;
  375. typedef vec<1, f64, highp> highp_dvec1;
  376. typedef vec<2, f64, highp> highp_dvec2;
  377. typedef vec<3, f64, highp> highp_dvec3;
  378. typedef vec<4, f64, highp> highp_dvec4;
  379. typedef vec<1, f64, defaultp> dvec1;
  380. typedef vec<2, f64, defaultp> dvec2;
  381. typedef vec<3, f64, defaultp> dvec3;
  382. typedef vec<4, f64, defaultp> dvec4;
  383. typedef vec<1, f64, lowp> lowp_f64vec1;
  384. typedef vec<2, f64, lowp> lowp_f64vec2;
  385. typedef vec<3, f64, lowp> lowp_f64vec3;
  386. typedef vec<4, f64, lowp> lowp_f64vec4;
  387. typedef vec<1, f64, mediump> mediump_f64vec1;
  388. typedef vec<2, f64, mediump> mediump_f64vec2;
  389. typedef vec<3, f64, mediump> mediump_f64vec3;
  390. typedef vec<4, f64, mediump> mediump_f64vec4;
  391. typedef vec<1, f64, highp> highp_f64vec1;
  392. typedef vec<2, f64, highp> highp_f64vec2;
  393. typedef vec<3, f64, highp> highp_f64vec3;
  394. typedef vec<4, f64, highp> highp_f64vec4;
  395. typedef vec<1, f64, defaultp> f64vec1;
  396. typedef vec<2, f64, defaultp> f64vec2;
  397. typedef vec<3, f64, defaultp> f64vec3;
  398. typedef vec<4, f64, defaultp> f64vec4;
  399. // Matrix NxN
  400. typedef mat<2, 2, f32, lowp> lowp_mat2;
  401. typedef mat<3, 3, f32, lowp> lowp_mat3;
  402. typedef mat<4, 4, f32, lowp> lowp_mat4;
  403. typedef mat<2, 2, f32, mediump> mediump_mat2;
  404. typedef mat<3, 3, f32, mediump> mediump_mat3;
  405. typedef mat<4, 4, f32, mediump> mediump_mat4;
  406. typedef mat<2, 2, f32, highp> highp_mat2;
  407. typedef mat<3, 3, f32, highp> highp_mat3;
  408. typedef mat<4, 4, f32, highp> highp_mat4;
  409. typedef mat<2, 2, f32, defaultp> mat2;
  410. typedef mat<3, 3, f32, defaultp> mat3;
  411. typedef mat<4, 4, f32, defaultp> mat4;
  412. typedef mat<2, 2, f32, lowp> lowp_fmat2;
  413. typedef mat<3, 3, f32, lowp> lowp_fmat3;
  414. typedef mat<4, 4, f32, lowp> lowp_fmat4;
  415. typedef mat<2, 2, f32, mediump> mediump_fmat2;
  416. typedef mat<3, 3, f32, mediump> mediump_fmat3;
  417. typedef mat<4, 4, f32, mediump> mediump_fmat4;
  418. typedef mat<2, 2, f32, highp> highp_fmat2;
  419. typedef mat<3, 3, f32, highp> highp_fmat3;
  420. typedef mat<4, 4, f32, highp> highp_fmat4;
  421. typedef mat<2, 2, f32, defaultp> fmat2;
  422. typedef mat<3, 3, f32, defaultp> fmat3;
  423. typedef mat<4, 4, f32, defaultp> fmat4;
  424. typedef mat<2, 2, f32, lowp> lowp_f32mat2;
  425. typedef mat<3, 3, f32, lowp> lowp_f32mat3;
  426. typedef mat<4, 4, f32, lowp> lowp_f32mat4;
  427. typedef mat<2, 2, f32, mediump> mediump_f32mat2;
  428. typedef mat<3, 3, f32, mediump> mediump_f32mat3;
  429. typedef mat<4, 4, f32, mediump> mediump_f32mat4;
  430. typedef mat<2, 2, f32, highp> highp_f32mat2;
  431. typedef mat<3, 3, f32, highp> highp_f32mat3;
  432. typedef mat<4, 4, f32, highp> highp_f32mat4;
  433. typedef mat<2, 2, f32, defaultp> f32mat2;
  434. typedef mat<3, 3, f32, defaultp> f32mat3;
  435. typedef mat<4, 4, f32, defaultp> f32mat4;
  436. typedef mat<2, 2, f64, lowp> lowp_dmat2;
  437. typedef mat<3, 3, f64, lowp> lowp_dmat3;
  438. typedef mat<4, 4, f64, lowp> lowp_dmat4;
  439. typedef mat<2, 2, f64, mediump> mediump_dmat2;
  440. typedef mat<3, 3, f64, mediump> mediump_dmat3;
  441. typedef mat<4, 4, f64, mediump> mediump_dmat4;
  442. typedef mat<2, 2, f64, highp> highp_dmat2;
  443. typedef mat<3, 3, f64, highp> highp_dmat3;
  444. typedef mat<4, 4, f64, highp> highp_dmat4;
  445. typedef mat<2, 2, f64, defaultp> dmat2;
  446. typedef mat<3, 3, f64, defaultp> dmat3;
  447. typedef mat<4, 4, f64, defaultp> dmat4;
  448. typedef mat<2, 2, f64, lowp> lowp_f64mat2;
  449. typedef mat<3, 3, f64, lowp> lowp_f64mat3;
  450. typedef mat<4, 4, f64, lowp> lowp_f64mat4;
  451. typedef mat<2, 2, f64, mediump> mediump_f64mat2;
  452. typedef mat<3, 3, f64, mediump> mediump_f64mat3;
  453. typedef mat<4, 4, f64, mediump> mediump_f64mat4;
  454. typedef mat<2, 2, f64, highp> highp_f64mat2;
  455. typedef mat<3, 3, f64, highp> highp_f64mat3;
  456. typedef mat<4, 4, f64, highp> highp_f64mat4;
  457. typedef mat<2, 2, f64, defaultp> f64mat2;
  458. typedef mat<3, 3, f64, defaultp> f64mat3;
  459. typedef mat<4, 4, f64, defaultp> f64mat4;
  460. // Matrix MxN
  461. typedef mat<2, 2, f32, lowp> lowp_mat2x2;
  462. typedef mat<2, 3, f32, lowp> lowp_mat2x3;
  463. typedef mat<2, 4, f32, lowp> lowp_mat2x4;
  464. typedef mat<3, 2, f32, lowp> lowp_mat3x2;
  465. typedef mat<3, 3, f32, lowp> lowp_mat3x3;
  466. typedef mat<3, 4, f32, lowp> lowp_mat3x4;
  467. typedef mat<4, 2, f32, lowp> lowp_mat4x2;
  468. typedef mat<4, 3, f32, lowp> lowp_mat4x3;
  469. typedef mat<4, 4, f32, lowp> lowp_mat4x4;
  470. typedef mat<2, 2, f32, mediump> mediump_mat2x2;
  471. typedef mat<2, 3, f32, mediump> mediump_mat2x3;
  472. typedef mat<2, 4, f32, mediump> mediump_mat2x4;
  473. typedef mat<3, 2, f32, mediump> mediump_mat3x2;
  474. typedef mat<3, 3, f32, mediump> mediump_mat3x3;
  475. typedef mat<3, 4, f32, mediump> mediump_mat3x4;
  476. typedef mat<4, 2, f32, mediump> mediump_mat4x2;
  477. typedef mat<4, 3, f32, mediump> mediump_mat4x3;
  478. typedef mat<4, 4, f32, mediump> mediump_mat4x4;
  479. typedef mat<2, 2, f32, highp> highp_mat2x2;
  480. typedef mat<2, 3, f32, highp> highp_mat2x3;
  481. typedef mat<2, 4, f32, highp> highp_mat2x4;
  482. typedef mat<3, 2, f32, highp> highp_mat3x2;
  483. typedef mat<3, 3, f32, highp> highp_mat3x3;
  484. typedef mat<3, 4, f32, highp> highp_mat3x4;
  485. typedef mat<4, 2, f32, highp> highp_mat4x2;
  486. typedef mat<4, 3, f32, highp> highp_mat4x3;
  487. typedef mat<4, 4, f32, highp> highp_mat4x4;
  488. typedef mat<2, 2, f32, defaultp> mat2x2;
  489. typedef mat<3, 2, f32, defaultp> mat3x2;
  490. typedef mat<4, 2, f32, defaultp> mat4x2;
  491. typedef mat<2, 3, f32, defaultp> mat2x3;
  492. typedef mat<3, 3, f32, defaultp> mat3x3;
  493. typedef mat<4, 3, f32, defaultp> mat4x3;
  494. typedef mat<2, 4, f32, defaultp> mat2x4;
  495. typedef mat<3, 4, f32, defaultp> mat3x4;
  496. typedef mat<4, 4, f32, defaultp> mat4x4;
  497. typedef mat<2, 2, f32, lowp> lowp_fmat2x2;
  498. typedef mat<2, 3, f32, lowp> lowp_fmat2x3;
  499. typedef mat<2, 4, f32, lowp> lowp_fmat2x4;
  500. typedef mat<3, 2, f32, lowp> lowp_fmat3x2;
  501. typedef mat<3, 3, f32, lowp> lowp_fmat3x3;
  502. typedef mat<3, 4, f32, lowp> lowp_fmat3x4;
  503. typedef mat<4, 2, f32, lowp> lowp_fmat4x2;
  504. typedef mat<4, 3, f32, lowp> lowp_fmat4x3;
  505. typedef mat<4, 4, f32, lowp> lowp_fmat4x4;
  506. typedef mat<2, 2, f32, mediump> mediump_fmat2x2;
  507. typedef mat<2, 3, f32, mediump> mediump_fmat2x3;
  508. typedef mat<2, 4, f32, mediump> mediump_fmat2x4;
  509. typedef mat<3, 2, f32, mediump> mediump_fmat3x2;
  510. typedef mat<3, 3, f32, mediump> mediump_fmat3x3;
  511. typedef mat<3, 4, f32, mediump> mediump_fmat3x4;
  512. typedef mat<4, 2, f32, mediump> mediump_fmat4x2;
  513. typedef mat<4, 3, f32, mediump> mediump_fmat4x3;
  514. typedef mat<4, 4, f32, mediump> mediump_fmat4x4;
  515. typedef mat<2, 2, f32, highp> highp_fmat2x2;
  516. typedef mat<2, 3, f32, highp> highp_fmat2x3;
  517. typedef mat<2, 4, f32, highp> highp_fmat2x4;
  518. typedef mat<3, 2, f32, highp> highp_fmat3x2;
  519. typedef mat<3, 3, f32, highp> highp_fmat3x3;
  520. typedef mat<3, 4, f32, highp> highp_fmat3x4;
  521. typedef mat<4, 2, f32, highp> highp_fmat4x2;
  522. typedef mat<4, 3, f32, highp> highp_fmat4x3;
  523. typedef mat<4, 4, f32, highp> highp_fmat4x4;
  524. typedef mat<2, 2, f32, defaultp> fmat2x2;
  525. typedef mat<3, 2, f32, defaultp> fmat3x2;
  526. typedef mat<4, 2, f32, defaultp> fmat4x2;
  527. typedef mat<2, 3, f32, defaultp> fmat2x3;
  528. typedef mat<3, 3, f32, defaultp> fmat3x3;
  529. typedef mat<4, 3, f32, defaultp> fmat4x3;
  530. typedef mat<2, 4, f32, defaultp> fmat2x4;
  531. typedef mat<3, 4, f32, defaultp> fmat3x4;
  532. typedef mat<4, 4, f32, defaultp> fmat4x4;
  533. typedef mat<2, 2, f32, lowp> lowp_f32mat2x2;
  534. typedef mat<2, 3, f32, lowp> lowp_f32mat2x3;
  535. typedef mat<2, 4, f32, lowp> lowp_f32mat2x4;
  536. typedef mat<3, 2, f32, lowp> lowp_f32mat3x2;
  537. typedef mat<3, 3, f32, lowp> lowp_f32mat3x3;
  538. typedef mat<3, 4, f32, lowp> lowp_f32mat3x4;
  539. typedef mat<4, 2, f32, lowp> lowp_f32mat4x2;
  540. typedef mat<4, 3, f32, lowp> lowp_f32mat4x3;
  541. typedef mat<4, 4, f32, lowp> lowp_f32mat4x4;
  542. typedef mat<2, 2, f32, mediump> mediump_f32mat2x2;
  543. typedef mat<2, 3, f32, mediump> mediump_f32mat2x3;
  544. typedef mat<2, 4, f32, mediump> mediump_f32mat2x4;
  545. typedef mat<3, 2, f32, mediump> mediump_f32mat3x2;
  546. typedef mat<3, 3, f32, mediump> mediump_f32mat3x3;
  547. typedef mat<3, 4, f32, mediump> mediump_f32mat3x4;
  548. typedef mat<4, 2, f32, mediump> mediump_f32mat4x2;
  549. typedef mat<4, 3, f32, mediump> mediump_f32mat4x3;
  550. typedef mat<4, 4, f32, mediump> mediump_f32mat4x4;
  551. typedef mat<2, 2, f32, highp> highp_f32mat2x2;
  552. typedef mat<2, 3, f32, highp> highp_f32mat2x3;
  553. typedef mat<2, 4, f32, highp> highp_f32mat2x4;
  554. typedef mat<3, 2, f32, highp> highp_f32mat3x2;
  555. typedef mat<3, 3, f32, highp> highp_f32mat3x3;
  556. typedef mat<3, 4, f32, highp> highp_f32mat3x4;
  557. typedef mat<4, 2, f32, highp> highp_f32mat4x2;
  558. typedef mat<4, 3, f32, highp> highp_f32mat4x3;
  559. typedef mat<4, 4, f32, highp> highp_f32mat4x4;
  560. typedef mat<2, 2, f32, defaultp> f32mat2x2;
  561. typedef mat<3, 2, f32, defaultp> f32mat3x2;
  562. typedef mat<4, 2, f32, defaultp> f32mat4x2;
  563. typedef mat<2, 3, f32, defaultp> f32mat2x3;
  564. typedef mat<3, 3, f32, defaultp> f32mat3x3;
  565. typedef mat<4, 3, f32, defaultp> f32mat4x3;
  566. typedef mat<2, 4, f32, defaultp> f32mat2x4;
  567. typedef mat<3, 4, f32, defaultp> f32mat3x4;
  568. typedef mat<4, 4, f32, defaultp> f32mat4x4;
  569. typedef mat<2, 2, double, lowp> lowp_dmat2x2;
  570. typedef mat<2, 3, double, lowp> lowp_dmat2x3;
  571. typedef mat<2, 4, double, lowp> lowp_dmat2x4;
  572. typedef mat<3, 2, double, lowp> lowp_dmat3x2;
  573. typedef mat<3, 3, double, lowp> lowp_dmat3x3;
  574. typedef mat<3, 4, double, lowp> lowp_dmat3x4;
  575. typedef mat<4, 2, double, lowp> lowp_dmat4x2;
  576. typedef mat<4, 3, double, lowp> lowp_dmat4x3;
  577. typedef mat<4, 4, double, lowp> lowp_dmat4x4;
  578. typedef mat<2, 2, double, mediump> mediump_dmat2x2;
  579. typedef mat<2, 3, double, mediump> mediump_dmat2x3;
  580. typedef mat<2, 4, double, mediump> mediump_dmat2x4;
  581. typedef mat<3, 2, double, mediump> mediump_dmat3x2;
  582. typedef mat<3, 3, double, mediump> mediump_dmat3x3;
  583. typedef mat<3, 4, double, mediump> mediump_dmat3x4;
  584. typedef mat<4, 2, double, mediump> mediump_dmat4x2;
  585. typedef mat<4, 3, double, mediump> mediump_dmat4x3;
  586. typedef mat<4, 4, double, mediump> mediump_dmat4x4;
  587. typedef mat<2, 2, double, highp> highp_dmat2x2;
  588. typedef mat<2, 3, double, highp> highp_dmat2x3;
  589. typedef mat<2, 4, double, highp> highp_dmat2x4;
  590. typedef mat<3, 2, double, highp> highp_dmat3x2;
  591. typedef mat<3, 3, double, highp> highp_dmat3x3;
  592. typedef mat<3, 4, double, highp> highp_dmat3x4;
  593. typedef mat<4, 2, double, highp> highp_dmat4x2;
  594. typedef mat<4, 3, double, highp> highp_dmat4x3;
  595. typedef mat<4, 4, double, highp> highp_dmat4x4;
  596. typedef mat<2, 2, double, defaultp> dmat2x2;
  597. typedef mat<3, 2, double, defaultp> dmat3x2;
  598. typedef mat<4, 2, double, defaultp> dmat4x2;
  599. typedef mat<2, 3, double, defaultp> dmat2x3;
  600. typedef mat<3, 3, double, defaultp> dmat3x3;
  601. typedef mat<4, 3, double, defaultp> dmat4x3;
  602. typedef mat<2, 4, double, defaultp> dmat2x4;
  603. typedef mat<3, 4, double, defaultp> dmat3x4;
  604. typedef mat<4, 4, double, defaultp> dmat4x4;
  605. typedef mat<2, 2, f64, lowp> lowp_f64mat2x2;
  606. typedef mat<2, 3, f64, lowp> lowp_f64mat2x3;
  607. typedef mat<2, 4, f64, lowp> lowp_f64mat2x4;
  608. typedef mat<3, 2, f64, lowp> lowp_f64mat3x2;
  609. typedef mat<3, 3, f64, lowp> lowp_f64mat3x3;
  610. typedef mat<3, 4, f64, lowp> lowp_f64mat3x4;
  611. typedef mat<4, 2, f64, lowp> lowp_f64mat4x2;
  612. typedef mat<4, 3, f64, lowp> lowp_f64mat4x3;
  613. typedef mat<4, 4, f64, lowp> lowp_f64mat4x4;
  614. typedef mat<2, 2, f64, mediump> mediump_f64mat2x2;
  615. typedef mat<2, 3, f64, mediump> mediump_f64mat2x3;
  616. typedef mat<2, 4, f64, mediump> mediump_f64mat2x4;
  617. typedef mat<3, 2, f64, mediump> mediump_f64mat3x2;
  618. typedef mat<3, 3, f64, mediump> mediump_f64mat3x3;
  619. typedef mat<3, 4, f64, mediump> mediump_f64mat3x4;
  620. typedef mat<4, 2, f64, mediump> mediump_f64mat4x2;
  621. typedef mat<4, 3, f64, mediump> mediump_f64mat4x3;
  622. typedef mat<4, 4, f64, mediump> mediump_f64mat4x4;
  623. typedef mat<2, 2, f64, highp> highp_f64mat2x2;
  624. typedef mat<2, 3, f64, highp> highp_f64mat2x3;
  625. typedef mat<2, 4, f64, highp> highp_f64mat2x4;
  626. typedef mat<3, 2, f64, highp> highp_f64mat3x2;
  627. typedef mat<3, 3, f64, highp> highp_f64mat3x3;
  628. typedef mat<3, 4, f64, highp> highp_f64mat3x4;
  629. typedef mat<4, 2, f64, highp> highp_f64mat4x2;
  630. typedef mat<4, 3, f64, highp> highp_f64mat4x3;
  631. typedef mat<4, 4, f64, highp> highp_f64mat4x4;
  632. typedef mat<2, 2, f64, defaultp> f64mat2x2;
  633. typedef mat<3, 2, f64, defaultp> f64mat3x2;
  634. typedef mat<4, 2, f64, defaultp> f64mat4x2;
  635. typedef mat<2, 3, f64, defaultp> f64mat2x3;
  636. typedef mat<3, 3, f64, defaultp> f64mat3x3;
  637. typedef mat<4, 3, f64, defaultp> f64mat4x3;
  638. typedef mat<2, 4, f64, defaultp> f64mat2x4;
  639. typedef mat<3, 4, f64, defaultp> f64mat3x4;
  640. typedef mat<4, 4, f64, defaultp> f64mat4x4;
  641. // Quaternion
  642. typedef qua<float, lowp> lowp_quat;
  643. typedef qua<float, mediump> mediump_quat;
  644. typedef qua<float, highp> highp_quat;
  645. typedef qua<float, defaultp> quat;
  646. typedef qua<float, lowp> lowp_fquat;
  647. typedef qua<float, mediump> mediump_fquat;
  648. typedef qua<float, highp> highp_fquat;
  649. typedef qua<float, defaultp> fquat;
  650. typedef qua<f32, lowp> lowp_f32quat;
  651. typedef qua<f32, mediump> mediump_f32quat;
  652. typedef qua<f32, highp> highp_f32quat;
  653. typedef qua<f32, defaultp> f32quat;
  654. typedef qua<double, lowp> lowp_dquat;
  655. typedef qua<double, mediump> mediump_dquat;
  656. typedef qua<double, highp> highp_dquat;
  657. typedef qua<double, defaultp> dquat;
  658. typedef qua<f64, lowp> lowp_f64quat;
  659. typedef qua<f64, mediump> mediump_f64quat;
  660. typedef qua<f64, highp> highp_f64quat;
  661. typedef qua<f64, defaultp> f64quat;
  662. }//namespace glm