blob: b7fb5648271dc8f5e033de9881a8489da7fe89d0 [file] [log] [blame]
Tony-LunarGb0b195d2015-05-13 15:01:06 -06001///////////////////////////////////////////////////////////////////////////////////
2/// OpenGL Mathematics (glm.g-truc.net)
3///
4/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
5/// Permission is hereby granted, free of charge, to any person obtaining a copy
6/// of this software and associated documentation files (the "Software"), to deal
7/// in the Software without restriction, including without limitation the rights
8/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9/// copies of the Software, and to permit persons to whom the Software is
10/// furnished to do so, subject to the following conditions:
11///
12/// The above copyright notice and this permission notice shall be included in
13/// all copies or substantial portions of the Software.
14///
15/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21/// THE SOFTWARE.
22///
23/// @ref gtc_packing
24/// @file glm/gtc/packing.hpp
25/// @date 2013-08-08 / 2013-08-08
26/// @author Christophe Riccio
27///
28/// @see core (dependence)
29///
30/// @defgroup gtc_packing GLM_GTC_packing
31/// @ingroup gtc
32///
33/// @brief This extension provides a set of function to convert vertors to packed
34/// formats.
35///
36/// <glm/gtc/packing.hpp> need to be included to use these features.
37///////////////////////////////////////////////////////////////////////////////////
38
39#ifndef GLM_GTC_packing
40#define GLM_GTC_packing
41
42// Dependency:
43#include "type_precision.hpp"
44
45#if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
46# pragma message("GLM: GLM_GTC_packing extension included")
47#endif
48
49namespace glm
50{
51 /// @addtogroup gtc_packing
52 /// @{
53
54 /// First, converts the normalized floating-point value v into a 8-bit integer value.
55 /// Then, the results are packed into the returned 8-bit unsigned integer.
56 ///
57 /// The conversion for component c of v to fixed point is done as follows:
58 /// packUnorm1x8: round(clamp(c, 0, +1) * 255.0)
59 ///
60 /// @see gtc_packing
61 /// @see uint16 packUnorm2x8(vec2 const & v)
62 /// @see uint32 packUnorm4x8(vec4 const & v)
63 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a>
64 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
65 GLM_FUNC_DECL uint8 packUnorm1x8(float const & v);
66
67 /// Convert a single 8-bit integer to a normalized floating-point value.
68 ///
69 /// The conversion for unpacked fixed-point value f to floating point is done as follows:
70 /// unpackUnorm4x8: f / 255.0
71 ///
72 /// @see gtc_packing
73 /// @see vec2 unpackUnorm2x8(uint16 p)
74 /// @see vec4 unpackUnorm4x8(uint32 p)
75 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml">GLSL unpackUnorm4x8 man page</a>
76 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
77 GLM_FUNC_DECL float unpackUnorm1x8(uint8 const & p);
78
79 /// First, converts each component of the normalized floating-point value v into 8-bit integer values.
80 /// Then, the results are packed into the returned 16-bit unsigned integer.
81 ///
82 /// The conversion for component c of v to fixed point is done as follows:
83 /// packUnorm2x8: round(clamp(c, 0, +1) * 255.0)
84 ///
85 /// The first component of the vector will be written to the least significant bits of the output;
86 /// the last component will be written to the most significant bits.
87 ///
88 /// @see gtc_packing
89 /// @see uint8 packUnorm1x8(float const & v)
90 /// @see uint32 packUnorm4x8(vec4 const & v)
91 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a>
92 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
93 GLM_FUNC_DECL uint16 packUnorm2x8(vec2 const & v);
94
95 /// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers.
96 /// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.
97 ///
98 /// The conversion for unpacked fixed-point value f to floating point is done as follows:
99 /// unpackUnorm4x8: f / 255.0
100 ///
101 /// The first component of the returned vector will be extracted from the least significant bits of the input;
102 /// the last component will be extracted from the most significant bits.
103 ///
104 /// @see gtc_packing
105 /// @see float unpackUnorm1x8(uint8 v)
106 /// @see vec4 unpackUnorm4x8(uint32 p)
107 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml">GLSL unpackUnorm4x8 man page</a>
108 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
109 GLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 const & p);
110
111 /// First, converts the normalized floating-point value v into 8-bit integer value.
112 /// Then, the results are packed into the returned 8-bit unsigned integer.
113 ///
114 /// The conversion to fixed point is done as follows:
115 /// packSnorm1x8: round(clamp(s, -1, +1) * 127.0)
116 ///
117 /// @see gtc_packing
118 /// @see uint16 packSnorm2x8(vec2 const & v)
119 /// @see uint32 packSnorm4x8(vec4 const & v)
120 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a>
121 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
122 GLM_FUNC_DECL uint8 packSnorm1x8(float const & s);
123
124 /// First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers.
125 /// Then, the value is converted to a normalized floating-point value to generate the returned scalar.
126 ///
127 /// The conversion for unpacked fixed-point value f to floating point is done as follows:
128 /// unpackSnorm1x8: clamp(f / 127.0, -1, +1)
129 ///
130 /// @see gtc_packing
131 /// @see vec2 unpackSnorm2x8(uint16 p)
132 /// @see vec4 unpackSnorm4x8(uint32 p)
133 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml">GLSL unpackSnorm4x8 man page</a>
134 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
135 GLM_FUNC_DECL float unpackSnorm1x8(uint8 const & p);
136
137 /// First, converts each component of the normalized floating-point value v into 8-bit integer values.
138 /// Then, the results are packed into the returned 16-bit unsigned integer.
139 ///
140 /// The conversion for component c of v to fixed point is done as follows:
141 /// packSnorm2x8: round(clamp(c, -1, +1) * 127.0)
142 ///
143 /// The first component of the vector will be written to the least significant bits of the output;
144 /// the last component will be written to the most significant bits.
145 ///
146 /// @see gtc_packing
147 /// @see uint8 packSnorm1x8(float const & v)
148 /// @see uint32 packSnorm4x8(vec4 const & v)
149 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a>
150 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
151 GLM_FUNC_DECL uint16 packSnorm2x8(vec2 const & v);
152
153 /// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers.
154 /// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.
155 ///
156 /// The conversion for unpacked fixed-point value f to floating point is done as follows:
157 /// unpackSnorm2x8: clamp(f / 127.0, -1, +1)
158 ///
159 /// The first component of the returned vector will be extracted from the least significant bits of the input;
160 /// the last component will be extracted from the most significant bits.
161 ///
162 /// @see gtc_packing
163 /// @see float unpackSnorm1x8(uint8 p)
164 /// @see vec4 unpackSnorm4x8(uint32 p)
165 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml">GLSL unpackSnorm4x8 man page</a>
166 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
167 GLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 const & p);
168
169 /// First, converts the normalized floating-point value v into a 16-bit integer value.
170 /// Then, the results are packed into the returned 16-bit unsigned integer.
171 ///
172 /// The conversion for component c of v to fixed point is done as follows:
173 /// packUnorm1x16: round(clamp(c, 0, +1) * 65535.0)
174 ///
175 /// @see gtc_packing
176 /// @see uint16 packSnorm1x16(float const & v)
177 /// @see uint64 packSnorm4x16(vec4 const & v)
178 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a>
179 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
180 GLM_FUNC_DECL uint16 packUnorm1x16(float const & v);
181
182 /// First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers.
183 /// Then, the value is converted to a normalized floating-point value to generate the returned scalar.
184 ///
185 /// The conversion for unpacked fixed-point value f to floating point is done as follows:
186 /// unpackUnorm1x16: f / 65535.0
187 ///
188 /// @see gtc_packing
189 /// @see vec2 unpackUnorm2x16(uint32 p)
190 /// @see vec4 unpackUnorm4x16(uint64 p)
191 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml">GLSL unpackUnorm2x16 man page</a>
192 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
193 GLM_FUNC_DECL float unpackUnorm1x16(uint16 const & p);
194
195 /// First, converts each component of the normalized floating-point value v into 16-bit integer values.
196 /// Then, the results are packed into the returned 64-bit unsigned integer.
197 ///
198 /// The conversion for component c of v to fixed point is done as follows:
199 /// packUnorm4x16: round(clamp(c, 0, +1) * 65535.0)
200 ///
201 /// The first component of the vector will be written to the least significant bits of the output;
202 /// the last component will be written to the most significant bits.
203 ///
204 /// @see gtc_packing
205 /// @see uint16 packUnorm1x16(float const & v)
206 /// @see uint32 packUnorm2x16(vec2 const & v)
207 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a>
208 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
209 GLM_FUNC_DECL uint64 packUnorm4x16(vec4 const & v);
210
211 /// First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers.
212 /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.
213 ///
214 /// The conversion for unpacked fixed-point value f to floating point is done as follows:
215 /// unpackUnormx4x16: f / 65535.0
216 ///
217 /// The first component of the returned vector will be extracted from the least significant bits of the input;
218 /// the last component will be extracted from the most significant bits.
219 ///
220 /// @see gtc_packing
221 /// @see float unpackUnorm1x16(uint16 p)
222 /// @see vec2 unpackUnorm2x16(uint32 p)
223 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml">GLSL unpackUnorm2x16 man page</a>
224 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
225 GLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 const & p);
226
227 /// First, converts the normalized floating-point value v into 16-bit integer value.
228 /// Then, the results are packed into the returned 16-bit unsigned integer.
229 ///
230 /// The conversion to fixed point is done as follows:
231 /// packSnorm1x8: round(clamp(s, -1, +1) * 32767.0)
232 ///
233 /// @see gtc_packing
234 /// @see uint32 packSnorm2x16(vec2 const & v)
235 /// @see uint64 packSnorm4x16(vec4 const & v)
236 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a>
237 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
238 GLM_FUNC_DECL uint16 packSnorm1x16(float const & v);
239
240 /// First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers.
241 /// Then, each component is converted to a normalized floating-point value to generate the returned scalar.
242 ///
243 /// The conversion for unpacked fixed-point value f to floating point is done as follows:
244 /// unpackSnorm1x16: clamp(f / 32767.0, -1, +1)
245 ///
246 /// @see gtc_packing
247 /// @see vec2 unpackSnorm2x16(uint32 p)
248 /// @see vec4 unpackSnorm4x16(uint64 p)
249 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm1x16.xml">GLSL unpackSnorm4x8 man page</a>
250 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
251 GLM_FUNC_DECL float unpackSnorm1x16(uint16 const & p);
252
253 /// First, converts each component of the normalized floating-point value v into 16-bit integer values.
254 /// Then, the results are packed into the returned 64-bit unsigned integer.
255 ///
256 /// The conversion for component c of v to fixed point is done as follows:
257 /// packSnorm2x8: round(clamp(c, -1, +1) * 32767.0)
258 ///
259 /// The first component of the vector will be written to the least significant bits of the output;
260 /// the last component will be written to the most significant bits.
261 ///
262 /// @see gtc_packing
263 /// @see uint16 packSnorm1x16(float const & v)
264 /// @see uint32 packSnorm2x16(vec2 const & v)
265 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a>
266 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
267 GLM_FUNC_DECL uint64 packSnorm4x16(vec4 const & v);
268
269 /// First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers.
270 /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.
271 ///
272 /// The conversion for unpacked fixed-point value f to floating point is done as follows:
273 /// unpackSnorm4x16: clamp(f / 32767.0, -1, +1)
274 ///
275 /// The first component of the returned vector will be extracted from the least significant bits of the input;
276 /// the last component will be extracted from the most significant bits.
277 ///
278 /// @see gtc_packing
279 /// @see float unpackSnorm1x16(uint16 p)
280 /// @see vec2 unpackSnorm2x16(uint32 p)
281 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm2x16.xml">GLSL unpackSnorm4x8 man page</a>
282 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
283 GLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 const & p);
284
285 /// Returns an unsigned integer obtained by converting the components of a floating-point scalar
286 /// to the 16-bit floating-point representation found in the OpenGL Specification,
287 /// and then packing this 16-bit value into a 16-bit unsigned integer.
288 ///
289 /// @see gtc_packing
290 /// @see uint32 packHalf2x16(vec2 const & v)
291 /// @see uint64 packHalf4x16(vec4 const & v)
292 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml">GLSL packHalf2x16 man page</a>
293 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
294 GLM_FUNC_DECL uint16 packHalf1x16(float const & v);
295
296 /// Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value,
297 /// interpreted as a 16-bit floating-point number according to the OpenGL Specification,
298 /// and converting it to 32-bit floating-point values.
299 ///
300 /// @see gtc_packing
301 /// @see vec2 unpackHalf2x16(uint32 const & v)
302 /// @see vec4 unpackHalf4x16(uint64 const & v)
303 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml">GLSL unpackHalf2x16 man page</a>
304 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
305 GLM_FUNC_DECL float unpackHalf1x16(uint16 const & v);
306
307 /// Returns an unsigned integer obtained by converting the components of a four-component floating-point vector
308 /// to the 16-bit floating-point representation found in the OpenGL Specification,
309 /// and then packing these four 16-bit values into a 64-bit unsigned integer.
310 /// The first vector component specifies the 16 least-significant bits of the result;
311 /// the forth component specifies the 16 most-significant bits.
312 ///
313 /// @see gtc_packing
314 /// @see uint16 packHalf1x16(float const & v)
315 /// @see uint32 packHalf2x16(vec2 const & v)
316 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml">GLSL packHalf2x16 man page</a>
317 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
318 GLM_FUNC_DECL uint64 packHalf4x16(vec4 const & v);
319
320 /// Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values,
321 /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification,
322 /// and converting them to 32-bit floating-point values.
323 /// The first component of the vector is obtained from the 16 least-significant bits of v;
324 /// the forth component is obtained from the 16 most-significant bits of v.
325 ///
326 /// @see gtc_packing
327 /// @see float unpackHalf1x16(uint16 const & v)
328 /// @see vec2 unpackHalf2x16(uint32 const & v)
329 /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml">GLSL unpackHalf2x16 man page</a>
330 /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
331 GLM_FUNC_DECL vec4 unpackHalf4x16(uint64 const & p);
332
333 /// Returns an unsigned integer obtained by converting the components of a four-component signed integer vector
334 /// to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification,
335 /// and then packing these four values into a 32-bit unsigned integer.
336 /// The first vector component specifies the 10 least-significant bits of the result;
337 /// the forth component specifies the 2 most-significant bits.
338 ///
339 /// @see gtc_packing
340 /// @see uint32 packI3x10_1x2(uvec4 const & v)
341 /// @see uint32 packSnorm3x10_1x2(vec4 const & v)
342 /// @see uint32 packUnorm3x10_1x2(vec4 const & v)
343 /// @see ivec4 unpackI3x10_1x2(uint32 const & p)
344 GLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const & v);
345
346 /// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers.
347 ///
348 /// The first component of the returned vector will be extracted from the least significant bits of the input;
349 /// the last component will be extracted from the most significant bits.
350 ///
351 /// @see gtc_packing
352 /// @see uint32 packU3x10_1x2(uvec4 const & v)
353 /// @see vec4 unpackSnorm3x10_1x2(uint32 const & p);
354 /// @see uvec4 unpackI3x10_1x2(uint32 const & p);
355 GLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 const & p);
356
357 /// Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector
358 /// to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification,
359 /// and then packing these four values into a 32-bit unsigned integer.
360 /// The first vector component specifies the 10 least-significant bits of the result;
361 /// the forth component specifies the 2 most-significant bits.
362 ///
363 /// @see gtc_packing
364 /// @see uint32 packI3x10_1x2(ivec4 const & v)
365 /// @see uint32 packSnorm3x10_1x2(vec4 const & v)
366 /// @see uint32 packUnorm3x10_1x2(vec4 const & v)
367 /// @see ivec4 unpackU3x10_1x2(uint32 const & p)
368 GLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const & v);
369
370 /// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers.
371 ///
372 /// The first component of the returned vector will be extracted from the least significant bits of the input;
373 /// the last component will be extracted from the most significant bits.
374 ///
375 /// @see gtc_packing
376 /// @see uint32 packU3x10_1x2(uvec4 const & v)
377 /// @see vec4 unpackSnorm3x10_1x2(uint32 const & p);
378 /// @see uvec4 unpackI3x10_1x2(uint32 const & p);
379 GLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 const & p);
380
381 /// First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values.
382 /// Then, converts the forth component of the normalized floating-point value v into 2-bit signed integer values.
383 /// Then, the results are packed into the returned 32-bit unsigned integer.
384 ///
385 /// The conversion for component c of v to fixed point is done as follows:
386 /// packSnorm3x10_1x2(xyz): round(clamp(c, -1, +1) * 511.0)
387 /// packSnorm3x10_1x2(w): round(clamp(c, -1, +1) * 1.0)
388 ///
389 /// The first vector component specifies the 10 least-significant bits of the result;
390 /// the forth component specifies the 2 most-significant bits.
391 ///
392 /// @see gtc_packing
393 /// @see vec4 unpackSnorm3x10_1x2(uint32 const & p)
394 /// @see uint32 packUnorm3x10_1x2(vec4 const & v)
395 /// @see uint32 packU3x10_1x2(uvec4 const & v)
396 /// @see uint32 packI3x10_1x2(ivec4 const & v)
397 GLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const & v);
398
399 /// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.
400 /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.
401 ///
402 /// The conversion for unpacked fixed-point value f to floating point is done as follows:
403 /// unpackSnorm3x10_1x2(xyz): clamp(f / 511.0, -1, +1)
404 /// unpackSnorm3x10_1x2(w): clamp(f / 511.0, -1, +1)
405 ///
406 /// The first component of the returned vector will be extracted from the least significant bits of the input;
407 /// the last component will be extracted from the most significant bits.
408 ///
409 /// @see gtc_packing
410 /// @see uint32 packSnorm3x10_1x2(vec4 const & v)
411 /// @see vec4 unpackUnorm3x10_1x2(uint32 const & p))
412 /// @see uvec4 unpackI3x10_1x2(uint32 const & p)
413 /// @see uvec4 unpackU3x10_1x2(uint32 const & p)
414 GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 const & p);
415
416 /// First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values.
417 /// Then, converts the forth component of the normalized floating-point value v into 2-bit signed uninteger values.
418 /// Then, the results are packed into the returned 32-bit unsigned integer.
419 ///
420 /// The conversion for component c of v to fixed point is done as follows:
421 /// packUnorm3x10_1x2(xyz): round(clamp(c, 0, +1) * 1023.0)
422 /// packUnorm3x10_1x2(w): round(clamp(c, 0, +1) * 3.0)
423 ///
424 /// The first vector component specifies the 10 least-significant bits of the result;
425 /// the forth component specifies the 2 most-significant bits.
426 ///
427 /// @see gtc_packing
428 /// @see vec4 unpackUnorm3x10_1x2(uint32 const & p)
429 /// @see uint32 packUnorm3x10_1x2(vec4 const & v)
430 /// @see uint32 packU3x10_1x2(uvec4 const & v)
431 /// @see uint32 packI3x10_1x2(ivec4 const & v)
432 GLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const & v);
433
434 /// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.
435 /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.
436 ///
437 /// The conversion for unpacked fixed-point value f to floating point is done as follows:
438 /// unpackSnorm3x10_1x2(xyz): clamp(f / 1023.0, 0, +1)
439 /// unpackSnorm3x10_1x2(w): clamp(f / 3.0, 0, +1)
440 ///
441 /// The first component of the returned vector will be extracted from the least significant bits of the input;
442 /// the last component will be extracted from the most significant bits.
443 ///
444 /// @see gtc_packing
445 /// @see uint32 packSnorm3x10_1x2(vec4 const & v)
446 /// @see vec4 unpackInorm3x10_1x2(uint32 const & p))
447 /// @see uvec4 unpackI3x10_1x2(uint32 const & p)
448 /// @see uvec4 unpackU3x10_1x2(uint32 const & p)
449 GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 const & p);
450
451 /// First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.
452 /// Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value.
453 /// Then, the results are packed into the returned 32-bit unsigned integer.
454 ///
455 /// The first vector component specifies the 11 least-significant bits of the result;
456 /// the last component specifies the 10 most-significant bits.
457 ///
458 /// @see gtc_packing
459 /// @see vec3 unpackF2x11_1x10(uint32 const & p)
460 GLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const & v);
461
462 /// First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .
463 /// Then, each component is converted to a normalized floating-point value to generate the returned three-component vector.
464 ///
465 /// The first component of the returned vector will be extracted from the least significant bits of the input;
466 /// the last component will be extracted from the most significant bits.
467 ///
468 /// @see gtc_packing
469 /// @see uint32 packF2x11_1x10(vec3 const & v)
470 GLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 const & p);
471
472 /// @}
473}// namespace glm
474
475#include "packing.inl"
476
477#endif//GLM_GTC_packing
478