You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

165 lines
4.0 KiB

4 years ago
  1. ///////////////////////////////////////////////////////////////////////////////////////////////////
  2. // OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
  3. ///////////////////////////////////////////////////////////////////////////////////////////////////
  4. // Created : 2009-11-25
  5. // Updated : 2010-02-13
  6. // Licence : This source is under MIT License
  7. // File : glm/gtx/wrap.inl
  8. ///////////////////////////////////////////////////////////////////////////////////////////////////
  9. // Dependency:
  10. // - GLM core
  11. ///////////////////////////////////////////////////////////////////////////////////////////////////
  12. namespace glm
  13. {
  14. template <typename genType>
  15. GLM_FUNC_QUALIFIER genType clamp
  16. (
  17. genType const & Texcoord
  18. )
  19. {
  20. return glm::clamp(Texcoord, genType(0), genType(1));
  21. }
  22. template <typename T>
  23. GLM_FUNC_QUALIFIER detail::tvec2<T> clamp
  24. (
  25. detail::tvec2<T> const & Texcoord
  26. )
  27. {
  28. detail::tvec2<T> Result;
  29. for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
  30. Result[i] = clamp(Texcoord[i]);
  31. return Result;
  32. }
  33. template <typename T>
  34. GLM_FUNC_QUALIFIER detail::tvec3<T> clamp
  35. (
  36. detail::tvec3<T> const & Texcoord
  37. )
  38. {
  39. detail::tvec3<T> Result;
  40. for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
  41. Result[i] = clamp(Texcoord[i]);
  42. return Result;
  43. }
  44. template <typename T>
  45. GLM_FUNC_QUALIFIER detail::tvec4<T> clamp
  46. (
  47. detail::tvec4<T> const & Texcoord
  48. )
  49. {
  50. detail::tvec4<T> Result;
  51. for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
  52. Result[i] = clamp(Texcoord[i]);
  53. return Result;
  54. }
  55. ////////////////////////
  56. // repeat
  57. template <typename genType>
  58. GLM_FUNC_QUALIFIER genType repeat
  59. (
  60. genType const & Texcoord
  61. )
  62. {
  63. return glm::fract(Texcoord);
  64. }
  65. template <typename T>
  66. GLM_FUNC_QUALIFIER detail::tvec2<T> repeat
  67. (
  68. detail::tvec2<T> const & Texcoord
  69. )
  70. {
  71. detail::tvec2<T> Result;
  72. for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
  73. Result[i] = repeat(Texcoord[i]);
  74. return Result;
  75. }
  76. template <typename T>
  77. GLM_FUNC_QUALIFIER detail::tvec3<T> repeat
  78. (
  79. detail::tvec3<T> const & Texcoord
  80. )
  81. {
  82. detail::tvec3<T> Result;
  83. for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
  84. Result[i] = repeat(Texcoord[i]);
  85. return Result;
  86. }
  87. template <typename T>
  88. GLM_FUNC_QUALIFIER detail::tvec4<T> repeat
  89. (
  90. detail::tvec4<T> const & Texcoord
  91. )
  92. {
  93. detail::tvec4<T> Result;
  94. for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
  95. Result[i] = repeat(Texcoord[i]);
  96. return Result;
  97. }
  98. ////////////////////////
  99. // mirrorRepeat
  100. template <typename genType>
  101. GLM_FUNC_QUALIFIER genType mirrorRepeat
  102. (
  103. genType const & Texcoord
  104. )
  105. {
  106. genType const Clamp = genType(int(glm::floor(Texcoord)) % 2);
  107. genType const Floor = glm::floor(Texcoord);
  108. genType const Rest = Texcoord - Floor;
  109. genType const Mirror = Clamp + Rest;
  110. genType Out;
  111. if(Mirror >= genType(1))
  112. Out = genType(1) - Rest;
  113. else
  114. Out = Rest;
  115. return Out;
  116. }
  117. template <typename T>
  118. GLM_FUNC_QUALIFIER detail::tvec2<T> mirrorRepeat
  119. (
  120. detail::tvec2<T> const & Texcoord
  121. )
  122. {
  123. detail::tvec2<T> Result;
  124. for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
  125. Result[i] = mirrorRepeat(Texcoord[i]);
  126. return Result;
  127. }
  128. template <typename T>
  129. GLM_FUNC_QUALIFIER detail::tvec3<T> mirrorRepeat
  130. (
  131. detail::tvec3<T> const & Texcoord
  132. )
  133. {
  134. detail::tvec3<T> Result;
  135. for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
  136. Result[i] = mirrorRepeat(Texcoord[i]);
  137. return Result;
  138. }
  139. template <typename T>
  140. GLM_FUNC_QUALIFIER detail::tvec4<T> mirrorRepeat
  141. (
  142. detail::tvec4<T> const & Texcoord
  143. )
  144. {
  145. detail::tvec4<T> Result;
  146. for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
  147. Result[i] = mirrorRepeat(Texcoord[i]);
  148. return Result;
  149. }
  150. }//namespace glm