• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1///////////////////////////////////////////////////////////////////////////////////////////////////
2// OpenGL Mathematics Copyright (c) 2005 - 2014 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
13namespace glm
14{
15	template <typename genType>
16	GLM_FUNC_QUALIFIER genType clamp
17	(
18		genType const & Texcoord
19	)
20	{
21		return glm::clamp(Texcoord, genType(0), genType(1));
22	}
23
24	template <typename T, precision P>
25	GLM_FUNC_QUALIFIER detail::tvec2<T, P> clamp
26	(
27		detail::tvec2<T, P> const & Texcoord
28	)
29	{
30		detail::tvec2<T, P> Result;
31		for(typename detail::tvec2<T, P>::size_type i = 0; i < detail::tvec2<T, P>::value_size(); ++i)
32			Result[i] = clamp(Texcoord[i]);
33		return Result;
34	}
35
36	template <typename T, precision P>
37	GLM_FUNC_QUALIFIER detail::tvec3<T, P> clamp
38	(
39		detail::tvec3<T, P> const & Texcoord
40	)
41	{
42		detail::tvec3<T, P> Result;
43		for(typename detail::tvec3<T, P>::size_type i = 0; i < detail::tvec3<T, P>::value_size(); ++i)
44			Result[i] = clamp(Texcoord[i]);
45		return Result;
46	}
47
48	template <typename T, precision P>
49	GLM_FUNC_QUALIFIER detail::tvec4<T, P> clamp
50	(
51		detail::tvec4<T, P> const & Texcoord
52	)
53	{
54		detail::tvec4<T, P> Result;
55		for(typename detail::tvec4<T, P>::size_type i = 0; i < detail::tvec4<T, P>::value_size(); ++i)
56			Result[i] = clamp(Texcoord[i]);
57		return Result;
58	}
59
60	////////////////////////
61	// repeat
62
63	template <typename genType>
64	GLM_FUNC_QUALIFIER genType repeat
65	(
66		genType const & Texcoord
67	)
68	{
69		return glm::fract(Texcoord);
70	}
71
72	template <typename T, precision P>
73	GLM_FUNC_QUALIFIER detail::tvec2<T, P> repeat
74	(
75		detail::tvec2<T, P> const & Texcoord
76	)
77	{
78		detail::tvec2<T, P> Result;
79		for(typename detail::tvec2<T, P>::size_type i = 0; i < detail::tvec2<T, P>::value_size(); ++i)
80			Result[i] = repeat(Texcoord[i]);
81		return Result;
82	}
83
84	template <typename T, precision P>
85	GLM_FUNC_QUALIFIER detail::tvec3<T, P> repeat
86	(
87		detail::tvec3<T, P> const & Texcoord
88	)
89	{
90		detail::tvec3<T, P> Result;
91		for(typename detail::tvec3<T, P>::size_type i = 0; i < detail::tvec3<T, P>::value_size(); ++i)
92			Result[i] = repeat(Texcoord[i]);
93		return Result;
94	}
95
96	template <typename T, precision P>
97	GLM_FUNC_QUALIFIER detail::tvec4<T, P> repeat
98	(
99		detail::tvec4<T, P> const & Texcoord
100	)
101	{
102		detail::tvec4<T, P> Result;
103		for(typename detail::tvec4<T, P>::size_type i = 0; i < detail::tvec4<T, P>::value_size(); ++i)
104			Result[i] = repeat(Texcoord[i]);
105		return Result;
106	}
107
108	////////////////////////
109	// mirrorRepeat
110
111	template <typename genType, precision P>
112	GLM_FUNC_QUALIFIER genType mirrorRepeat
113	(
114		genType const & Texcoord
115	)
116	{
117		genType const Clamp = genType(int(glm::floor(Texcoord)) % 2);
118		genType const Floor = glm::floor(Texcoord);
119		genType const Rest = Texcoord - Floor;
120		genType const Mirror = Clamp + Rest;
121
122		genType Out;
123		if(Mirror >= genType(1))
124			Out = genType(1) - Rest;
125		else
126			Out = Rest;
127		return Out;
128	}
129
130	template <typename T, precision P>
131	GLM_FUNC_QUALIFIER detail::tvec2<T, P> mirrorRepeat
132	(
133		detail::tvec2<T, P> const & Texcoord
134	)
135	{
136		detail::tvec2<T, P> Result;
137		for(typename detail::tvec2<T, P>::size_type i = 0; i < detail::tvec2<T, P>::value_size(); ++i)
138			Result[i] = mirrorRepeat(Texcoord[i]);
139		return Result;
140	}
141
142	template <typename T, precision P>
143	GLM_FUNC_QUALIFIER detail::tvec3<T, P> mirrorRepeat
144	(
145		detail::tvec3<T, P> const & Texcoord
146	)
147	{
148		detail::tvec3<T, P> Result;
149		for(typename detail::tvec3<T, P>::size_type i = 0; i < detail::tvec3<T, P>::value_size(); ++i)
150			Result[i] = mirrorRepeat(Texcoord[i]);
151		return Result;
152	}
153
154	template <typename T, precision P>
155	GLM_FUNC_QUALIFIER detail::tvec4<T, P> mirrorRepeat
156	(
157		detail::tvec4<T, P> const & Texcoord
158	)
159	{
160		detail::tvec4<T, P> Result;
161		for(typename detail::tvec4<T, P>::size_type i = 0; i < detail::tvec4<T, P>::value_size(); ++i)
162			Result[i] = mirrorRepeat(Texcoord[i]);
163		return Result;
164	}
165}//namespace glm
166