Clutter Engine 0.0.1
Loading...
Searching...
No Matches
func_packing.inl
Go to the documentation of this file.
1
3
4#include "../common.hpp"
5#include "type_half.hpp"
6
7namespace glm
8{
9 GLM_FUNC_QUALIFIER uint packUnorm2x16(vec2 const& v)
10 {
11 union
12 {
13 unsigned short in[2];
14 uint out;
15 } u;
16
17 vec<2, unsigned short, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 65535.0f));
18
19 u.in[0] = result[0];
20 u.in[1] = result[1];
21
22 return u.out;
23 }
24
25 GLM_FUNC_QUALIFIER vec2 unpackUnorm2x16(uint p)
26 {
27 union
28 {
29 uint in;
30 unsigned short out[2];
31 } u;
32
33 u.in = p;
34
35 return vec2(u.out[0], u.out[1]) * 1.5259021896696421759365224689097e-5f;
36 }
37
38 GLM_FUNC_QUALIFIER uint packSnorm2x16(vec2 const& v)
39 {
40 union
41 {
42 signed short in[2];
43 uint out;
44 } u;
45
46 vec<2, short, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 32767.0f));
47
48 u.in[0] = result[0];
49 u.in[1] = result[1];
50
51 return u.out;
52 }
53
54 GLM_FUNC_QUALIFIER vec2 unpackSnorm2x16(uint p)
55 {
56 union
57 {
58 uint in;
59 signed short out[2];
60 } u;
61
62 u.in = p;
63
64 return clamp(vec2(u.out[0], u.out[1]) * 3.0518509475997192297128208258309e-5f, -1.0f, 1.0f);
65 }
66
67 GLM_FUNC_QUALIFIER uint packUnorm4x8(vec4 const& v)
68 {
69 union
70 {
71 unsigned char in[4];
72 uint out;
73 } u;
74
75 vec<4, unsigned char, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 255.0f));
76
77 u.in[0] = result[0];
78 u.in[1] = result[1];
79 u.in[2] = result[2];
80 u.in[3] = result[3];
81
82 return u.out;
83 }
84
85 GLM_FUNC_QUALIFIER vec4 unpackUnorm4x8(uint p)
86 {
87 union
88 {
89 uint in;
90 unsigned char out[4];
91 } u;
92
93 u.in = p;
94
95 return vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0039215686274509803921568627451f;
96 }
97
98 GLM_FUNC_QUALIFIER uint packSnorm4x8(vec4 const& v)
99 {
100 union
101 {
102 signed char in[4];
103 uint out;
104 } u;
105
106 vec<4, signed char, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 127.0f));
107
108 u.in[0] = result[0];
109 u.in[1] = result[1];
110 u.in[2] = result[2];
111 u.in[3] = result[3];
112
113 return u.out;
114 }
115
116 GLM_FUNC_QUALIFIER glm::vec4 unpackSnorm4x8(uint p)
117 {
118 union
119 {
120 uint in;
121 signed char out[4];
122 } u;
123
124 u.in = p;
125
126 return clamp(vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0078740157480315f, -1.0f, 1.0f);
127 }
128
129 GLM_FUNC_QUALIFIER double packDouble2x32(uvec2 const& v)
130 {
131 union
132 {
133 uint in[2];
134 double out;
135 } u;
136
137 u.in[0] = v[0];
138 u.in[1] = v[1];
139
140 return u.out;
141 }
142
143 GLM_FUNC_QUALIFIER uvec2 unpackDouble2x32(double v)
144 {
145 union
146 {
147 double in;
148 uint out[2];
149 } u;
150
151 u.in = v;
152
153 return uvec2(u.out[0], u.out[1]);
154 }
155
156 GLM_FUNC_QUALIFIER uint packHalf2x16(vec2 const& v)
157 {
158 union
159 {
160 signed short in[2];
161 uint out;
162 } u;
163
164 u.in[0] = detail::toFloat16(v.x);
165 u.in[1] = detail::toFloat16(v.y);
166
167 return u.out;
168 }
169
170 GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint v)
171 {
172 union
173 {
174 uint in;
175 signed short out[2];
176 } u;
177
178 u.in = v;
179
180 return vec2(
181 detail::toFloat32(u.out[0]),
182 detail::toFloat32(u.out[1]));
183 }
184}//namespace glm
185
186#if GLM_CONFIG_SIMD == GLM_ENABLE
187# include "func_packing_simd.inl"
188#endif
189
GLM_FUNC_DECL vec< L, T, Q > round(vec< L, T, Q > const &x)
Definition func_common.inl:321
GLM_FUNC_QUALIFIER uint packUnorm2x16(vec2 const &v)
Definition func_packing.inl:9
GLM_FUNC_QUALIFIER vec2 unpackUnorm2x16(uint p)
Definition func_packing.inl:25
GLM_FUNC_QUALIFIER uint packHalf2x16(vec2 const &v)
Definition func_packing.inl:156
GLM_FUNC_QUALIFIER glm::vec4 unpackSnorm4x8(uint p)
Definition func_packing.inl:116
GLM_FUNC_QUALIFIER uvec2 unpackDouble2x32(double v)
Definition func_packing.inl:143
GLM_FUNC_QUALIFIER vec4 unpackUnorm4x8(uint p)
Definition func_packing.inl:85
GLM_FUNC_QUALIFIER uint packSnorm4x8(vec4 const &v)
Definition func_packing.inl:98
GLM_FUNC_QUALIFIER uint packSnorm2x16(vec2 const &v)
Definition func_packing.inl:38
GLM_FUNC_QUALIFIER double packDouble2x32(uvec2 const &v)
Definition func_packing.inl:129
GLM_FUNC_QUALIFIER vec2 unpackSnorm2x16(uint p)
Definition func_packing.inl:54
GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint v)
Definition func_packing.inl:170
GLM_FUNC_QUALIFIER uint packUnorm4x8(vec4 const &v)
Definition func_packing.inl:67
vec< 2, unsigned int, defaultp > uvec2
Definition vector_uint2.hpp:15
vec< 4, float, defaultp > vec4
Definition vector_float4.hpp:15
vec< 2, float, defaultp > vec2
Definition vector_float2.hpp:15
Core features
Definition common.hpp:21
Definition qualifier.hpp:35