_matrix_vectorize.hpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #pragma once
  2. namespace glm {
  3. namespace detail {
  4. template<template<length_t C, length_t R, typename T, qualifier Q> class mat, length_t C, length_t R, typename Ret, typename T, qualifier Q>
  5. struct matrix_functor_1 {
  6. };
  7. template<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>
  8. struct matrix_functor_1<mat, 2, 2, Ret, T, Q> {
  9. GLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<2, 2, T, Q> call(Ret (*Func)(T x), mat<2, 2, T, Q> const &x) {
  10. return mat<2, 2, Ret, Q>(
  11. Func(x[0][0]), Func(x[0][1]),
  12. Func(x[1][0]), Func(x[1][1])
  13. );
  14. }
  15. };
  16. template<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>
  17. struct matrix_functor_1<mat, 2, 3, Ret, T, Q> {
  18. GLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<2, 3, T, Q> call(Ret (*Func)(T x), mat<2, 3, T, Q> const &x) {
  19. return mat<2, 3, Ret, Q>(
  20. Func(x[0][0]), Func(x[0][1]), Func(x[0][2]),
  21. Func(x[1][0]), Func(x[1][1]), Func(x[1][2])
  22. );
  23. }
  24. };
  25. template<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>
  26. struct matrix_functor_1<mat, 2, 4, Ret, T, Q> {
  27. GLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<2, 4, T, Q> call(Ret (*Func)(T x), mat<2, 4, T, Q> const &x) {
  28. return mat<2, 4, Ret, Q>(
  29. Func(x[0][0]), Func(x[0][1]), Func(x[0][2]), Func(x[0][3]),
  30. Func(x[1][0]), Func(x[1][1]), Func(x[1][2]), Func(x[1][3])
  31. );
  32. }
  33. };
  34. template<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>
  35. struct matrix_functor_1<mat, 3, 2, Ret, T, Q> {
  36. GLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<3, 2, T, Q> call(Ret (*Func)(T x), mat<3, 2, T, Q> const &x) {
  37. return mat<3, 2, Ret, Q>(
  38. Func(x[0][0]), Func(x[0][1]),
  39. Func(x[1][0]), Func(x[1][1]),
  40. Func(x[2][0]), Func(x[2][1])
  41. );
  42. }
  43. };
  44. template<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>
  45. struct matrix_functor_1<mat, 3, 3, Ret, T, Q> {
  46. GLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<3, 3, T, Q> call(Ret (*Func)(T x), mat<3, 3, T, Q> const &x) {
  47. return mat<3, 3, Ret, Q>(
  48. Func(x[0][0]), Func(x[0][1]), Func(x[0][2]),
  49. Func(x[1][0]), Func(x[1][1]), Func(x[1][2]),
  50. Func(x[2][0]), Func(x[2][1]), Func(x[2][2])
  51. );
  52. }
  53. };
  54. template<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>
  55. struct matrix_functor_1<mat, 3, 4, Ret, T, Q> {
  56. GLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<3, 4, T, Q> call(Ret (*Func)(T x), mat<3, 4, T, Q> const &x) {
  57. return mat<3, 4, Ret, Q>(
  58. Func(x[0][0]), Func(x[0][1]), Func(x[0][2]), Func(x[0][3]),
  59. Func(x[1][0]), Func(x[1][1]), Func(x[1][2]), Func(x[1][3]),
  60. Func(x[2][0]), Func(x[2][1]), Func(x[2][2]), Func(x[2][3])
  61. );
  62. }
  63. };
  64. template<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>
  65. struct matrix_functor_1<mat, 4, 2, Ret, T, Q> {
  66. GLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<4, 2, T, Q> call(Ret (*Func)(T x), mat<4, 2, T, Q> const &x) {
  67. return mat<4, 2, Ret, Q>(
  68. Func(x[0][0]), Func(x[0][1]),
  69. Func(x[1][0]), Func(x[1][1]),
  70. Func(x[2][0]), Func(x[2][1]),
  71. Func(x[3][0]), Func(x[3][1])
  72. );
  73. }
  74. };
  75. template<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>
  76. struct matrix_functor_1<mat, 4, 3, Ret, T, Q> {
  77. GLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<4, 3, T, Q> call(Ret (*Func)(T x), mat<4, 3, T, Q> const &x) {
  78. return mat<4, 3, Ret, Q>(
  79. Func(x[0][0]), Func(x[0][1]), Func(x[0][2]),
  80. Func(x[1][0]), Func(x[1][1]), Func(x[1][2]),
  81. Func(x[2][0]), Func(x[2][1]), Func(x[2][2]),
  82. Func(x[3][0]), Func(x[3][1]), Func(x[3][2])
  83. );
  84. }
  85. };
  86. template<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>
  87. struct matrix_functor_1<mat, 4, 4, Ret, T, Q> {
  88. GLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<4, 4, T, Q> call(Ret (*Func)(T x), mat<4, 4, T, Q> const &x) {
  89. return mat<4, 4, Ret, Q>(
  90. Func(x[0][0]), Func(x[0][1]), Func(x[0][2]), Func(x[0][3]),
  91. Func(x[1][0]), Func(x[1][1]), Func(x[1][2]), Func(x[1][3]),
  92. Func(x[2][0]), Func(x[2][1]), Func(x[2][2]), Func(x[2][3]),
  93. Func(x[3][0]), Func(x[3][1]), Func(x[3][2]), Func(x[3][3])
  94. );
  95. }
  96. };
  97. }
  98. }// namespace glm