• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright 2016 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 // imageformats.cpp: Defines image format types with functions for mip generation
8 // and copying.
9 
10 #include "image_util/imageformats.h"
11 
12 #include "common/mathutil.h"
13 
14 namespace angle
15 {
16 
readColor(gl::ColorF * dst,const L8 * src)17 void L8::readColor(gl::ColorF *dst, const L8 *src)
18 {
19     const float lum = gl::normalizedToFloat(src->L);
20     dst->red        = lum;
21     dst->green      = lum;
22     dst->blue       = lum;
23     dst->alpha      = 1.0f;
24 }
25 
writeColor(L8 * dst,const gl::ColorF * src)26 void L8::writeColor(L8 *dst, const gl::ColorF *src)
27 {
28     dst->L = gl::floatToNormalized<uint8_t>(src->red);
29 }
30 
average(L8 * dst,const L8 * src1,const L8 * src2)31 void L8::average(L8 *dst, const L8 *src1, const L8 *src2)
32 {
33     dst->L = gl::average(src1->L, src2->L);
34 }
35 
readColor(gl::ColorUI * dst,const R8 * src)36 void R8::readColor(gl::ColorUI *dst, const R8 *src)
37 {
38     dst->red   = src->R;
39     dst->green = 0;
40     dst->blue  = 0;
41     dst->alpha = 1;
42 }
43 
readColor(gl::ColorF * dst,const R8 * src)44 void R8::readColor(gl::ColorF *dst, const R8 *src)
45 {
46     dst->red   = gl::normalizedToFloat(src->R);
47     dst->green = 0.0f;
48     dst->blue  = 0.0f;
49     dst->alpha = 1.0f;
50 }
51 
writeColor(R8 * dst,const gl::ColorUI * src)52 void R8::writeColor(R8 *dst, const gl::ColorUI *src)
53 {
54     dst->R = static_cast<uint8_t>(src->red);
55 }
56 
writeColor(R8 * dst,const gl::ColorF * src)57 void R8::writeColor(R8 *dst, const gl::ColorF *src)
58 {
59     dst->R = gl::floatToNormalized<uint8_t>(src->red);
60 }
61 
average(R8 * dst,const R8 * src1,const R8 * src2)62 void R8::average(R8 *dst, const R8 *src1, const R8 *src2)
63 {
64     dst->R = gl::average(src1->R, src2->R);
65 }
66 
readColor(gl::ColorF * dst,const A8 * src)67 void A8::readColor(gl::ColorF *dst, const A8 *src)
68 {
69     dst->red   = 0.0f;
70     dst->green = 0.0f;
71     dst->blue  = 0.0f;
72     dst->alpha = gl::normalizedToFloat(src->A);
73 }
74 
writeColor(A8 * dst,const gl::ColorF * src)75 void A8::writeColor(A8 *dst, const gl::ColorF *src)
76 {
77     dst->A = gl::floatToNormalized<uint8_t>(src->alpha);
78 }
79 
average(A8 * dst,const A8 * src1,const A8 * src2)80 void A8::average(A8 *dst, const A8 *src1, const A8 *src2)
81 {
82     dst->A = gl::average(src1->A, src2->A);
83 }
84 
readColor(gl::ColorF * dst,const L8A8 * src)85 void L8A8::readColor(gl::ColorF *dst, const L8A8 *src)
86 {
87     const float lum = gl::normalizedToFloat(src->L);
88     dst->red        = lum;
89     dst->green      = lum;
90     dst->blue       = lum;
91     dst->alpha      = gl::normalizedToFloat(src->A);
92 }
93 
writeColor(L8A8 * dst,const gl::ColorF * src)94 void L8A8::writeColor(L8A8 *dst, const gl::ColorF *src)
95 {
96     dst->L = gl::floatToNormalized<uint8_t>(src->red);
97     dst->A = gl::floatToNormalized<uint8_t>(src->alpha);
98 }
99 
average(L8A8 * dst,const L8A8 * src1,const L8A8 * src2)100 void L8A8::average(L8A8 *dst, const L8A8 *src1, const L8A8 *src2)
101 {
102     *(uint16_t *)dst = (((*(uint16_t *)src1 ^ *(uint16_t *)src2) & 0xFEFE) >> 1) +
103                        (*(uint16_t *)src1 & *(uint16_t *)src2);
104 }
105 
readColor(gl::ColorF * dst,const A8L8 * src)106 void A8L8::readColor(gl::ColorF *dst, const A8L8 *src)
107 {
108     const float lum = gl::normalizedToFloat(src->L);
109     dst->red        = lum;
110     dst->green      = lum;
111     dst->blue       = lum;
112     dst->alpha      = gl::normalizedToFloat(src->A);
113 }
114 
writeColor(A8L8 * dst,const gl::ColorF * src)115 void A8L8::writeColor(A8L8 *dst, const gl::ColorF *src)
116 {
117     dst->L = gl::floatToNormalized<uint8_t>(src->red);
118     dst->A = gl::floatToNormalized<uint8_t>(src->alpha);
119 }
120 
average(A8L8 * dst,const A8L8 * src1,const A8L8 * src2)121 void A8L8::average(A8L8 *dst, const A8L8 *src1, const A8L8 *src2)
122 {
123     *(uint16_t *)dst = (((*(uint16_t *)src1 ^ *(uint16_t *)src2) & 0xFEFE) >> 1) +
124                        (*(uint16_t *)src1 & *(uint16_t *)src2);
125 }
126 
readColor(gl::ColorUI * dst,const R8G8 * src)127 void R8G8::readColor(gl::ColorUI *dst, const R8G8 *src)
128 {
129     dst->red   = src->R;
130     dst->green = src->G;
131     dst->blue  = 0;
132     dst->alpha = 1;
133 }
134 
readColor(gl::ColorF * dst,const R8G8 * src)135 void R8G8::readColor(gl::ColorF *dst, const R8G8 *src)
136 {
137     dst->red   = gl::normalizedToFloat(src->R);
138     dst->green = gl::normalizedToFloat(src->G);
139     dst->blue  = 0.0f;
140     dst->alpha = 1.0f;
141 }
142 
writeColor(R8G8 * dst,const gl::ColorUI * src)143 void R8G8::writeColor(R8G8 *dst, const gl::ColorUI *src)
144 {
145     dst->R = static_cast<uint8_t>(src->red);
146     dst->G = static_cast<uint8_t>(src->green);
147 }
148 
writeColor(R8G8 * dst,const gl::ColorF * src)149 void R8G8::writeColor(R8G8 *dst, const gl::ColorF *src)
150 {
151     dst->R = gl::floatToNormalized<uint8_t>(src->red);
152     dst->G = gl::floatToNormalized<uint8_t>(src->green);
153 }
154 
average(R8G8 * dst,const R8G8 * src1,const R8G8 * src2)155 void R8G8::average(R8G8 *dst, const R8G8 *src1, const R8G8 *src2)
156 {
157     *(uint16_t *)dst = (((*(uint16_t *)src1 ^ *(uint16_t *)src2) & 0xFEFE) >> 1) +
158                        (*(uint16_t *)src1 & *(uint16_t *)src2);
159 }
160 
readColor(gl::ColorUI * dst,const R8G8B8 * src)161 void R8G8B8::readColor(gl::ColorUI *dst, const R8G8B8 *src)
162 {
163     dst->red   = src->R;
164     dst->green = src->G;
165     dst->blue  = src->G;
166     dst->alpha = 1;
167 }
168 
readColor(gl::ColorF * dst,const R8G8B8 * src)169 void R8G8B8::readColor(gl::ColorF *dst, const R8G8B8 *src)
170 {
171     dst->red   = gl::normalizedToFloat(src->R);
172     dst->green = gl::normalizedToFloat(src->G);
173     dst->blue  = gl::normalizedToFloat(src->B);
174     dst->alpha = 1.0f;
175 }
176 
writeColor(R8G8B8 * dst,const gl::ColorUI * src)177 void R8G8B8::writeColor(R8G8B8 *dst, const gl::ColorUI *src)
178 {
179     dst->R = static_cast<uint8_t>(src->red);
180     dst->G = static_cast<uint8_t>(src->green);
181     dst->B = static_cast<uint8_t>(src->blue);
182 }
183 
writeColor(R8G8B8 * dst,const gl::ColorF * src)184 void R8G8B8::writeColor(R8G8B8 *dst, const gl::ColorF *src)
185 {
186     dst->R = gl::floatToNormalized<uint8_t>(src->red);
187     dst->G = gl::floatToNormalized<uint8_t>(src->green);
188     dst->B = gl::floatToNormalized<uint8_t>(src->blue);
189 }
190 
average(R8G8B8 * dst,const R8G8B8 * src1,const R8G8B8 * src2)191 void R8G8B8::average(R8G8B8 *dst, const R8G8B8 *src1, const R8G8B8 *src2)
192 {
193     dst->R = gl::average(src1->R, src2->R);
194     dst->G = gl::average(src1->G, src2->G);
195     dst->B = gl::average(src1->B, src2->B);
196 }
197 
readColor(gl::ColorUI * dst,const B8G8R8 * src)198 void B8G8R8::readColor(gl::ColorUI *dst, const B8G8R8 *src)
199 {
200     dst->red   = src->R;
201     dst->green = src->G;
202     dst->blue  = src->G;
203     dst->alpha = 1;
204 }
205 
readColor(gl::ColorF * dst,const B8G8R8 * src)206 void B8G8R8::readColor(gl::ColorF *dst, const B8G8R8 *src)
207 {
208     dst->red   = gl::normalizedToFloat(src->R);
209     dst->green = gl::normalizedToFloat(src->G);
210     dst->blue  = gl::normalizedToFloat(src->B);
211     dst->alpha = 1.0f;
212 }
213 
writeColor(B8G8R8 * dst,const gl::ColorUI * src)214 void B8G8R8::writeColor(B8G8R8 *dst, const gl::ColorUI *src)
215 {
216     dst->R = static_cast<uint8_t>(src->red);
217     dst->G = static_cast<uint8_t>(src->green);
218     dst->B = static_cast<uint8_t>(src->blue);
219 }
220 
writeColor(B8G8R8 * dst,const gl::ColorF * src)221 void B8G8R8::writeColor(B8G8R8 *dst, const gl::ColorF *src)
222 {
223     dst->R = gl::floatToNormalized<uint8_t>(src->red);
224     dst->G = gl::floatToNormalized<uint8_t>(src->green);
225     dst->B = gl::floatToNormalized<uint8_t>(src->blue);
226 }
227 
average(B8G8R8 * dst,const B8G8R8 * src1,const B8G8R8 * src2)228 void B8G8R8::average(B8G8R8 *dst, const B8G8R8 *src1, const B8G8R8 *src2)
229 {
230     dst->R = gl::average(src1->R, src2->R);
231     dst->G = gl::average(src1->G, src2->G);
232     dst->B = gl::average(src1->B, src2->B);
233 }
234 
readColor(gl::ColorF * dst,const R5G6B5 * src)235 void R5G6B5::readColor(gl::ColorF *dst, const R5G6B5 *src)
236 {
237     dst->red   = gl::normalizedToFloat<5>(gl::getShiftedData<5, 11>(src->RGB));
238     dst->green = gl::normalizedToFloat<6>(gl::getShiftedData<6, 5>(src->RGB));
239     dst->blue  = gl::normalizedToFloat<5>(gl::getShiftedData<5, 0>(src->RGB));
240     dst->alpha = 1.0f;
241 }
242 
writeColor(R5G6B5 * dst,const gl::ColorF * src)243 void R5G6B5::writeColor(R5G6B5 *dst, const gl::ColorF *src)
244 {
245     dst->RGB = gl::shiftData<5, 11>(gl::floatToNormalized<5, uint16_t>(src->red)) |
246                gl::shiftData<6, 5>(gl::floatToNormalized<6, uint16_t>(src->green)) |
247                gl::shiftData<5, 0>(gl::floatToNormalized<5, uint16_t>(src->blue));
248 }
249 
average(R5G6B5 * dst,const R5G6B5 * src1,const R5G6B5 * src2)250 void R5G6B5::average(R5G6B5 *dst, const R5G6B5 *src1, const R5G6B5 *src2)
251 {
252     dst->RGB = gl::shiftData<5, 11>(gl::average(gl::getShiftedData<5, 11>(src1->RGB),
253                                                 gl::getShiftedData<5, 11>(src2->RGB))) |
254                gl::shiftData<6, 5>(gl::average(gl::getShiftedData<6, 5>(src1->RGB),
255                                                gl::getShiftedData<6, 5>(src2->RGB))) |
256                gl::shiftData<5, 0>(gl::average(gl::getShiftedData<5, 0>(src1->RGB),
257                                                gl::getShiftedData<5, 0>(src2->RGB)));
258 }
259 
readColor(gl::ColorF * dst,const B5G6R5 * src)260 void B5G6R5::readColor(gl::ColorF *dst, const B5G6R5 *src)
261 {
262     dst->red   = gl::normalizedToFloat<5>(gl::getShiftedData<5, 11>(src->BGR));
263     dst->green = gl::normalizedToFloat<6>(gl::getShiftedData<6, 5>(src->BGR));
264     dst->blue  = gl::normalizedToFloat<5>(gl::getShiftedData<5, 0>(src->BGR));
265     dst->alpha = 1.0f;
266 }
267 
writeColor(B5G6R5 * dst,const gl::ColorF * src)268 void B5G6R5::writeColor(B5G6R5 *dst, const gl::ColorF *src)
269 {
270     dst->BGR = gl::shiftData<5, 0>(gl::floatToNormalized<5, unsigned short>(src->blue)) |
271                gl::shiftData<6, 5>(gl::floatToNormalized<6, unsigned short>(src->green)) |
272                gl::shiftData<5, 11>(gl::floatToNormalized<5, unsigned short>(src->red));
273 }
274 
average(B5G6R5 * dst,const B5G6R5 * src1,const B5G6R5 * src2)275 void B5G6R5::average(B5G6R5 *dst, const B5G6R5 *src1, const B5G6R5 *src2)
276 {
277     dst->BGR = gl::shiftData<5, 11>(gl::average(gl::getShiftedData<5, 11>(src1->BGR),
278                                                 gl::getShiftedData<5, 11>(src2->BGR))) |
279                gl::shiftData<6, 5>(gl::average(gl::getShiftedData<6, 5>(src1->BGR),
280                                                gl::getShiftedData<6, 5>(src2->BGR))) |
281                gl::shiftData<5, 0>(gl::average(gl::getShiftedData<5, 0>(src1->BGR),
282                                                gl::getShiftedData<5, 0>(src2->BGR)));
283 }
284 
readColor(gl::ColorUI * dst,const A8R8G8B8 * src)285 void A8R8G8B8::readColor(gl::ColorUI *dst, const A8R8G8B8 *src)
286 {
287     dst->red   = src->R;
288     dst->green = src->G;
289     dst->blue  = src->B;
290     dst->alpha = src->A;
291 }
292 
readColor(gl::ColorF * dst,const A8R8G8B8 * src)293 void A8R8G8B8::readColor(gl::ColorF *dst, const A8R8G8B8 *src)
294 {
295     dst->red   = gl::normalizedToFloat(src->R);
296     dst->green = gl::normalizedToFloat(src->G);
297     dst->blue  = gl::normalizedToFloat(src->B);
298     dst->alpha = gl::normalizedToFloat(src->A);
299 }
300 
writeColor(A8R8G8B8 * dst,const gl::ColorUI * src)301 void A8R8G8B8::writeColor(A8R8G8B8 *dst, const gl::ColorUI *src)
302 {
303     dst->R = static_cast<uint8_t>(src->red);
304     dst->G = static_cast<uint8_t>(src->green);
305     dst->B = static_cast<uint8_t>(src->blue);
306     dst->A = static_cast<uint8_t>(src->alpha);
307 }
308 
writeColor(A8R8G8B8 * dst,const gl::ColorF * src)309 void A8R8G8B8::writeColor(A8R8G8B8 *dst, const gl::ColorF *src)
310 {
311     dst->R = gl::floatToNormalized<uint8_t>(src->red);
312     dst->G = gl::floatToNormalized<uint8_t>(src->green);
313     dst->B = gl::floatToNormalized<uint8_t>(src->blue);
314     dst->A = gl::floatToNormalized<uint8_t>(src->alpha);
315 }
316 
average(A8R8G8B8 * dst,const A8R8G8B8 * src1,const A8R8G8B8 * src2)317 void A8R8G8B8::average(A8R8G8B8 *dst, const A8R8G8B8 *src1, const A8R8G8B8 *src2)
318 {
319     *(uint32_t *)dst = (((*(uint32_t *)src1 ^ *(uint32_t *)src2) & 0xFEFEFEFE) >> 1) +
320                        (*(uint32_t *)src1 & *(uint32_t *)src2);
321 }
322 
readColor(gl::ColorUI * dst,const R8G8B8A8 * src)323 void R8G8B8A8::readColor(gl::ColorUI *dst, const R8G8B8A8 *src)
324 {
325     dst->red   = src->R;
326     dst->green = src->G;
327     dst->blue  = src->B;
328     dst->alpha = src->A;
329 }
330 
readColor(gl::ColorF * dst,const R8G8B8A8 * src)331 void R8G8B8A8::readColor(gl::ColorF *dst, const R8G8B8A8 *src)
332 {
333     dst->red   = gl::normalizedToFloat(src->R);
334     dst->green = gl::normalizedToFloat(src->G);
335     dst->blue  = gl::normalizedToFloat(src->B);
336     dst->alpha = gl::normalizedToFloat(src->A);
337 }
338 
writeColor(R8G8B8A8 * dst,const gl::ColorUI * src)339 void R8G8B8A8::writeColor(R8G8B8A8 *dst, const gl::ColorUI *src)
340 {
341     dst->R = static_cast<uint8_t>(src->red);
342     dst->G = static_cast<uint8_t>(src->green);
343     dst->B = static_cast<uint8_t>(src->blue);
344     dst->A = static_cast<uint8_t>(src->alpha);
345 }
346 
writeColor(R8G8B8A8 * dst,const gl::ColorF * src)347 void R8G8B8A8::writeColor(R8G8B8A8 *dst, const gl::ColorF *src)
348 {
349     dst->R = gl::floatToNormalized<uint8_t>(src->red);
350     dst->G = gl::floatToNormalized<uint8_t>(src->green);
351     dst->B = gl::floatToNormalized<uint8_t>(src->blue);
352     dst->A = gl::floatToNormalized<uint8_t>(src->alpha);
353 }
354 
average(R8G8B8A8 * dst,const R8G8B8A8 * src1,const R8G8B8A8 * src2)355 void R8G8B8A8::average(R8G8B8A8 *dst, const R8G8B8A8 *src1, const R8G8B8A8 *src2)
356 {
357     *(uint32_t *)dst = (((*(uint32_t *)src1 ^ *(uint32_t *)src2) & 0xFEFEFEFE) >> 1) +
358                        (*(uint32_t *)src1 & *(uint32_t *)src2);
359 }
360 
readColor(gl::ColorF * dst,const R8G8B8A8SRGB * src)361 void R8G8B8A8SRGB::readColor(gl::ColorF *dst, const R8G8B8A8SRGB *src)
362 {
363     dst->red   = gl::normalizedToFloat(src->R);
364     dst->green = gl::normalizedToFloat(src->G);
365     dst->blue  = gl::normalizedToFloat(src->B);
366     dst->alpha = gl::normalizedToFloat(src->A);
367 }
368 
writeColor(R8G8B8A8SRGB * dst,const gl::ColorF * src)369 void R8G8B8A8SRGB::writeColor(R8G8B8A8SRGB *dst, const gl::ColorF *src)
370 {
371     dst->R = gl::floatToNormalized<uint8_t>(src->red);
372     dst->G = gl::floatToNormalized<uint8_t>(src->green);
373     dst->B = gl::floatToNormalized<uint8_t>(src->blue);
374     dst->A = gl::floatToNormalized<uint8_t>(src->alpha);
375 }
376 
average(R8G8B8A8SRGB * dst,const R8G8B8A8SRGB * src1,const R8G8B8A8SRGB * src2)377 void R8G8B8A8SRGB::average(R8G8B8A8SRGB *dst, const R8G8B8A8SRGB *src1, const R8G8B8A8SRGB *src2)
378 {
379     dst->R = gl::linearToSRGB((gl::sRGBToLinear(src1->R) + gl::sRGBToLinear(src2->R)) * 0.5f);
380     dst->G = gl::linearToSRGB((gl::sRGBToLinear(src1->G) + gl::sRGBToLinear(src2->G)) * 0.5f);
381     dst->B = gl::linearToSRGB((gl::sRGBToLinear(src1->B) + gl::sRGBToLinear(src2->B)) * 0.5f);
382     dst->A = static_cast<uint8_t>(
383         (static_cast<uint16_t>(src1->A) + static_cast<uint16_t>(src2->A)) >> 1);
384 }
385 
readColor(gl::ColorUI * dst,const B8G8R8A8 * src)386 void B8G8R8A8::readColor(gl::ColorUI *dst, const B8G8R8A8 *src)
387 {
388     dst->red   = src->R;
389     dst->green = src->G;
390     dst->blue  = src->B;
391     dst->alpha = src->A;
392 }
393 
readColor(gl::ColorF * dst,const B8G8R8A8 * src)394 void B8G8R8A8::readColor(gl::ColorF *dst, const B8G8R8A8 *src)
395 {
396     dst->red   = gl::normalizedToFloat(src->R);
397     dst->green = gl::normalizedToFloat(src->G);
398     dst->blue  = gl::normalizedToFloat(src->B);
399     dst->alpha = gl::normalizedToFloat(src->A);
400 }
401 
writeColor(B8G8R8A8 * dst,const gl::ColorUI * src)402 void B8G8R8A8::writeColor(B8G8R8A8 *dst, const gl::ColorUI *src)
403 {
404     dst->R = static_cast<uint8_t>(src->red);
405     dst->G = static_cast<uint8_t>(src->green);
406     dst->B = static_cast<uint8_t>(src->blue);
407     dst->A = static_cast<uint8_t>(src->alpha);
408 }
409 
writeColor(B8G8R8A8 * dst,const gl::ColorF * src)410 void B8G8R8A8::writeColor(B8G8R8A8 *dst, const gl::ColorF *src)
411 {
412     dst->R = gl::floatToNormalized<uint8_t>(src->red);
413     dst->G = gl::floatToNormalized<uint8_t>(src->green);
414     dst->B = gl::floatToNormalized<uint8_t>(src->blue);
415     dst->A = gl::floatToNormalized<uint8_t>(src->alpha);
416 }
417 
average(B8G8R8A8 * dst,const B8G8R8A8 * src1,const B8G8R8A8 * src2)418 void B8G8R8A8::average(B8G8R8A8 *dst, const B8G8R8A8 *src1, const B8G8R8A8 *src2)
419 {
420     *(uint32_t *)dst = (((*(uint32_t *)src1 ^ *(uint32_t *)src2) & 0xFEFEFEFE) >> 1) +
421                        (*(uint32_t *)src1 & *(uint32_t *)src2);
422 }
423 
readColor(gl::ColorUI * dst,const B8G8R8X8 * src)424 void B8G8R8X8::readColor(gl::ColorUI *dst, const B8G8R8X8 *src)
425 {
426     dst->red   = src->R;
427     dst->green = src->G;
428     dst->blue  = src->B;
429     dst->alpha = 1;
430 }
431 
readColor(gl::ColorF * dst,const B8G8R8X8 * src)432 void B8G8R8X8::readColor(gl::ColorF *dst, const B8G8R8X8 *src)
433 {
434     dst->red   = gl::normalizedToFloat(src->R);
435     dst->green = gl::normalizedToFloat(src->G);
436     dst->blue  = gl::normalizedToFloat(src->B);
437     dst->alpha = 1.0f;
438 }
439 
writeColor(B8G8R8X8 * dst,const gl::ColorUI * src)440 void B8G8R8X8::writeColor(B8G8R8X8 *dst, const gl::ColorUI *src)
441 {
442     dst->R = static_cast<uint8_t>(src->red);
443     dst->G = static_cast<uint8_t>(src->green);
444     dst->B = static_cast<uint8_t>(src->blue);
445     dst->X = 255;
446 }
447 
writeColor(B8G8R8X8 * dst,const gl::ColorF * src)448 void B8G8R8X8::writeColor(B8G8R8X8 *dst, const gl::ColorF *src)
449 {
450     dst->R = gl::floatToNormalized<uint8_t>(src->red);
451     dst->G = gl::floatToNormalized<uint8_t>(src->green);
452     dst->B = gl::floatToNormalized<uint8_t>(src->blue);
453     dst->X = 255;
454 }
455 
average(B8G8R8X8 * dst,const B8G8R8X8 * src1,const B8G8R8X8 * src2)456 void B8G8R8X8::average(B8G8R8X8 *dst, const B8G8R8X8 *src1, const B8G8R8X8 *src2)
457 {
458     *(uint32_t *)dst = (((*(uint32_t *)src1 ^ *(uint32_t *)src2) & 0xFEFEFEFE) >> 1) +
459                        (*(uint32_t *)src1 & *(uint32_t *)src2);
460     dst->X = 255;
461 }
462 
readColor(gl::ColorUI * dst,const R8G8B8X8 * src)463 void R8G8B8X8::readColor(gl::ColorUI *dst, const R8G8B8X8 *src)
464 {
465     dst->red   = src->R;
466     dst->green = src->G;
467     dst->blue  = src->B;
468     dst->alpha = 1;
469 }
470 
readColor(gl::ColorF * dst,const R8G8B8X8 * src)471 void R8G8B8X8::readColor(gl::ColorF *dst, const R8G8B8X8 *src)
472 {
473     dst->red   = gl::normalizedToFloat(src->R);
474     dst->green = gl::normalizedToFloat(src->G);
475     dst->blue  = gl::normalizedToFloat(src->B);
476     dst->alpha = 1.0f;
477 }
478 
writeColor(R8G8B8X8 * dst,const gl::ColorUI * src)479 void R8G8B8X8::writeColor(R8G8B8X8 *dst, const gl::ColorUI *src)
480 {
481     dst->R = static_cast<uint8_t>(src->red);
482     dst->G = static_cast<uint8_t>(src->green);
483     dst->B = static_cast<uint8_t>(src->blue);
484     dst->X = 255;
485 }
486 
writeColor(R8G8B8X8 * dst,const gl::ColorF * src)487 void R8G8B8X8::writeColor(R8G8B8X8 *dst, const gl::ColorF *src)
488 {
489     dst->R = gl::floatToNormalized<uint8_t>(src->red);
490     dst->G = gl::floatToNormalized<uint8_t>(src->green);
491     dst->B = gl::floatToNormalized<uint8_t>(src->blue);
492     dst->X = 255;
493 }
494 
average(R8G8B8X8 * dst,const R8G8B8X8 * src1,const R8G8B8X8 * src2)495 void R8G8B8X8::average(R8G8B8X8 *dst, const R8G8B8X8 *src1, const R8G8B8X8 *src2)
496 {
497     *(uint32_t *)dst = (((*(uint32_t *)src1 ^ *(uint32_t *)src2) & 0xFEFEFEFE) >> 1) +
498                        (*(uint32_t *)src1 & *(uint32_t *)src2);
499     dst->X = 255;
500 }
501 
readColor(gl::ColorF * dst,const A1R5G5B5 * src)502 void A1R5G5B5::readColor(gl::ColorF *dst, const A1R5G5B5 *src)
503 {
504     dst->alpha = gl::normalizedToFloat<1>(gl::getShiftedData<1, 15>(src->ARGB));
505     dst->red   = gl::normalizedToFloat<5>(gl::getShiftedData<5, 10>(src->ARGB));
506     dst->green = gl::normalizedToFloat<5>(gl::getShiftedData<5, 5>(src->ARGB));
507     dst->blue  = gl::normalizedToFloat<5>(gl::getShiftedData<5, 0>(src->ARGB));
508 }
509 
writeColor(A1R5G5B5 * dst,const gl::ColorF * src)510 void A1R5G5B5::writeColor(A1R5G5B5 *dst, const gl::ColorF *src)
511 {
512     dst->ARGB = gl::shiftData<1, 15>(gl::floatToNormalized<1, uint16_t>(src->alpha)) |
513                 gl::shiftData<5, 10>(gl::floatToNormalized<5, uint16_t>(src->red)) |
514                 gl::shiftData<5, 5>(gl::floatToNormalized<5, uint16_t>(src->green)) |
515                 gl::shiftData<5, 0>(gl::floatToNormalized<5, uint16_t>(src->blue));
516 }
517 
average(A1R5G5B5 * dst,const A1R5G5B5 * src1,const A1R5G5B5 * src2)518 void A1R5G5B5::average(A1R5G5B5 *dst, const A1R5G5B5 *src1, const A1R5G5B5 *src2)
519 {
520     dst->ARGB = gl::shiftData<1, 15>(gl::average(gl::getShiftedData<1, 15>(src1->ARGB),
521                                                  gl::getShiftedData<1, 15>(src2->ARGB))) |
522                 gl::shiftData<5, 10>(gl::average(gl::getShiftedData<5, 10>(src1->ARGB),
523                                                  gl::getShiftedData<5, 10>(src2->ARGB))) |
524                 gl::shiftData<5, 5>(gl::average(gl::getShiftedData<5, 5>(src1->ARGB),
525                                                 gl::getShiftedData<5, 5>(src2->ARGB))) |
526                 gl::shiftData<5, 0>(gl::average(gl::getShiftedData<5, 0>(src1->ARGB),
527                                                 gl::getShiftedData<5, 0>(src2->ARGB)));
528 }
529 
readColor(gl::ColorF * dst,const R5G5B5A1 * src)530 void R5G5B5A1::readColor(gl::ColorF *dst, const R5G5B5A1 *src)
531 {
532     dst->red   = gl::normalizedToFloat<5>(gl::getShiftedData<5, 11>(src->RGBA));
533     dst->green = gl::normalizedToFloat<5>(gl::getShiftedData<5, 6>(src->RGBA));
534     dst->blue  = gl::normalizedToFloat<5>(gl::getShiftedData<5, 1>(src->RGBA));
535     dst->alpha = gl::normalizedToFloat<1>(gl::getShiftedData<1, 0>(src->RGBA));
536 }
537 
writeColor(R5G5B5A1 * dst,const gl::ColorF * src)538 void R5G5B5A1::writeColor(R5G5B5A1 *dst, const gl::ColorF *src)
539 {
540     dst->RGBA = gl::shiftData<5, 11>(gl::floatToNormalized<5, uint16_t>(src->red)) |
541                 gl::shiftData<5, 6>(gl::floatToNormalized<5, uint16_t>(src->green)) |
542                 gl::shiftData<5, 1>(gl::floatToNormalized<5, uint16_t>(src->blue)) |
543                 gl::shiftData<1, 0>(gl::floatToNormalized<1, uint16_t>(src->alpha));
544 }
545 
average(R5G5B5A1 * dst,const R5G5B5A1 * src1,const R5G5B5A1 * src2)546 void R5G5B5A1::average(R5G5B5A1 *dst, const R5G5B5A1 *src1, const R5G5B5A1 *src2)
547 {
548     dst->RGBA = gl::shiftData<5, 11>(gl::average(gl::getShiftedData<5, 11>(src1->RGBA),
549                                                  gl::getShiftedData<5, 11>(src2->RGBA))) |
550                 gl::shiftData<5, 6>(gl::average(gl::getShiftedData<5, 6>(src1->RGBA),
551                                                 gl::getShiftedData<5, 6>(src2->RGBA))) |
552                 gl::shiftData<5, 1>(gl::average(gl::getShiftedData<5, 1>(src1->RGBA),
553                                                 gl::getShiftedData<5, 1>(src2->RGBA))) |
554                 gl::shiftData<1, 0>(gl::average(gl::getShiftedData<1, 0>(src1->RGBA),
555                                                 gl::getShiftedData<1, 0>(src2->RGBA)));
556 }
557 
readColor(gl::ColorF * dst,const R4G4B4A4 * src)558 void R4G4B4A4::readColor(gl::ColorF *dst, const R4G4B4A4 *src)
559 {
560     dst->red   = gl::normalizedToFloat<4>(gl::getShiftedData<4, 12>(src->RGBA));
561     dst->green = gl::normalizedToFloat<4>(gl::getShiftedData<4, 8>(src->RGBA));
562     dst->blue  = gl::normalizedToFloat<4>(gl::getShiftedData<4, 4>(src->RGBA));
563     dst->alpha = gl::normalizedToFloat<4>(gl::getShiftedData<4, 0>(src->RGBA));
564 }
565 
writeColor(R4G4B4A4 * dst,const gl::ColorF * src)566 void R4G4B4A4::writeColor(R4G4B4A4 *dst, const gl::ColorF *src)
567 {
568     dst->RGBA = gl::shiftData<4, 12>(gl::floatToNormalized<4, uint16_t>(src->red)) |
569                 gl::shiftData<4, 8>(gl::floatToNormalized<4, uint16_t>(src->green)) |
570                 gl::shiftData<4, 4>(gl::floatToNormalized<4, uint16_t>(src->blue)) |
571                 gl::shiftData<4, 0>(gl::floatToNormalized<4, uint16_t>(src->alpha));
572 }
573 
average(R4G4B4A4 * dst,const R4G4B4A4 * src1,const R4G4B4A4 * src2)574 void R4G4B4A4::average(R4G4B4A4 *dst, const R4G4B4A4 *src1, const R4G4B4A4 *src2)
575 {
576     dst->RGBA = gl::shiftData<4, 12>(gl::average(gl::getShiftedData<4, 12>(src1->RGBA),
577                                                  gl::getShiftedData<4, 12>(src2->RGBA))) |
578                 gl::shiftData<4, 8>(gl::average(gl::getShiftedData<4, 8>(src1->RGBA),
579                                                 gl::getShiftedData<4, 8>(src2->RGBA))) |
580                 gl::shiftData<4, 4>(gl::average(gl::getShiftedData<4, 4>(src1->RGBA),
581                                                 gl::getShiftedData<4, 4>(src2->RGBA))) |
582                 gl::shiftData<4, 0>(gl::average(gl::getShiftedData<4, 0>(src1->RGBA),
583                                                 gl::getShiftedData<4, 0>(src2->RGBA)));
584 }
585 
readColor(gl::ColorF * dst,const A4R4G4B4 * src)586 void A4R4G4B4::readColor(gl::ColorF *dst, const A4R4G4B4 *src)
587 {
588     dst->alpha = gl::normalizedToFloat<4>(gl::getShiftedData<4, 12>(src->ARGB));
589     dst->red   = gl::normalizedToFloat<4>(gl::getShiftedData<4, 8>(src->ARGB));
590     dst->green = gl::normalizedToFloat<4>(gl::getShiftedData<4, 4>(src->ARGB));
591     dst->blue  = gl::normalizedToFloat<4>(gl::getShiftedData<4, 0>(src->ARGB));
592 }
593 
writeColor(A4R4G4B4 * dst,const gl::ColorF * src)594 void A4R4G4B4::writeColor(A4R4G4B4 *dst, const gl::ColorF *src)
595 {
596     dst->ARGB = gl::shiftData<4, 12>(gl::floatToNormalized<4, uint16_t>(src->alpha)) |
597                 gl::shiftData<4, 8>(gl::floatToNormalized<4, uint16_t>(src->red)) |
598                 gl::shiftData<4, 4>(gl::floatToNormalized<4, uint16_t>(src->green)) |
599                 gl::shiftData<4, 0>(gl::floatToNormalized<4, uint16_t>(src->blue));
600 }
601 
average(A4R4G4B4 * dst,const A4R4G4B4 * src1,const A4R4G4B4 * src2)602 void A4R4G4B4::average(A4R4G4B4 *dst, const A4R4G4B4 *src1, const A4R4G4B4 *src2)
603 {
604     dst->ARGB = gl::shiftData<4, 12>(gl::average(gl::getShiftedData<4, 12>(src1->ARGB),
605                                                  gl::getShiftedData<4, 12>(src2->ARGB))) |
606                 gl::shiftData<4, 8>(gl::average(gl::getShiftedData<4, 8>(src1->ARGB),
607                                                 gl::getShiftedData<4, 8>(src2->ARGB))) |
608                 gl::shiftData<4, 4>(gl::average(gl::getShiftedData<4, 4>(src1->ARGB),
609                                                 gl::getShiftedData<4, 4>(src2->ARGB))) |
610                 gl::shiftData<4, 0>(gl::average(gl::getShiftedData<4, 0>(src1->ARGB),
611                                                 gl::getShiftedData<4, 0>(src2->ARGB)));
612 }
613 
readColor(gl::ColorUI * dst,const R16 * src)614 void R16::readColor(gl::ColorUI *dst, const R16 *src)
615 {
616     dst->red   = src->R;
617     dst->green = 0;
618     dst->blue  = 0;
619     dst->alpha = 1;
620 }
621 
readColor(gl::ColorF * dst,const R16 * src)622 void R16::readColor(gl::ColorF *dst, const R16 *src)
623 {
624     dst->red   = gl::normalizedToFloat(src->R);
625     dst->green = 0.0f;
626     dst->blue  = 0.0f;
627     dst->alpha = 1.0f;
628 }
629 
writeColor(R16 * dst,const gl::ColorUI * src)630 void R16::writeColor(R16 *dst, const gl::ColorUI *src)
631 {
632     dst->R = static_cast<uint16_t>(src->red);
633 }
634 
writeColor(R16 * dst,const gl::ColorF * src)635 void R16::writeColor(R16 *dst, const gl::ColorF *src)
636 {
637     dst->R = gl::floatToNormalized<uint16_t>(src->red);
638 }
639 
average(R16 * dst,const R16 * src1,const R16 * src2)640 void R16::average(R16 *dst, const R16 *src1, const R16 *src2)
641 {
642     dst->R = gl::average(src1->R, src2->R);
643 }
644 
readColor(gl::ColorUI * dst,const R16G16 * src)645 void R16G16::readColor(gl::ColorUI *dst, const R16G16 *src)
646 {
647     dst->red   = src->R;
648     dst->green = src->G;
649     dst->blue  = 0;
650     dst->alpha = 1;
651 }
652 
readColor(gl::ColorF * dst,const R16G16 * src)653 void R16G16::readColor(gl::ColorF *dst, const R16G16 *src)
654 {
655     dst->red   = gl::normalizedToFloat(src->R);
656     dst->green = gl::normalizedToFloat(src->G);
657     dst->blue  = 0.0f;
658     dst->alpha = 1.0f;
659 }
660 
writeColor(R16G16 * dst,const gl::ColorUI * src)661 void R16G16::writeColor(R16G16 *dst, const gl::ColorUI *src)
662 {
663     dst->R = static_cast<uint16_t>(src->red);
664     dst->G = static_cast<uint16_t>(src->green);
665 }
666 
writeColor(R16G16 * dst,const gl::ColorF * src)667 void R16G16::writeColor(R16G16 *dst, const gl::ColorF *src)
668 {
669     dst->R = gl::floatToNormalized<uint16_t>(src->red);
670     dst->G = gl::floatToNormalized<uint16_t>(src->green);
671 }
672 
average(R16G16 * dst,const R16G16 * src1,const R16G16 * src2)673 void R16G16::average(R16G16 *dst, const R16G16 *src1, const R16G16 *src2)
674 {
675     dst->R = gl::average(src1->R, src2->R);
676     dst->G = gl::average(src1->G, src2->G);
677 }
678 
readColor(gl::ColorUI * dst,const R16G16B16 * src)679 void R16G16B16::readColor(gl::ColorUI *dst, const R16G16B16 *src)
680 {
681     dst->red   = src->R;
682     dst->green = src->G;
683     dst->blue  = src->B;
684     dst->alpha = 1;
685 }
686 
readColor(gl::ColorF * dst,const R16G16B16 * src)687 void R16G16B16::readColor(gl::ColorF *dst, const R16G16B16 *src)
688 {
689     dst->red   = gl::normalizedToFloat(src->R);
690     dst->green = gl::normalizedToFloat(src->G);
691     dst->blue  = gl::normalizedToFloat(src->B);
692     dst->alpha = 1.0f;
693 }
694 
writeColor(R16G16B16 * dst,const gl::ColorUI * src)695 void R16G16B16::writeColor(R16G16B16 *dst, const gl::ColorUI *src)
696 {
697     dst->R = static_cast<uint16_t>(src->red);
698     dst->G = static_cast<uint16_t>(src->green);
699     dst->B = static_cast<uint16_t>(src->blue);
700 }
701 
writeColor(R16G16B16 * dst,const gl::ColorF * src)702 void R16G16B16::writeColor(R16G16B16 *dst, const gl::ColorF *src)
703 {
704     dst->R = gl::floatToNormalized<uint16_t>(src->red);
705     dst->G = gl::floatToNormalized<uint16_t>(src->green);
706     dst->B = gl::floatToNormalized<uint16_t>(src->blue);
707 }
708 
average(R16G16B16 * dst,const R16G16B16 * src1,const R16G16B16 * src2)709 void R16G16B16::average(R16G16B16 *dst, const R16G16B16 *src1, const R16G16B16 *src2)
710 {
711     dst->R = gl::average(src1->R, src2->R);
712     dst->G = gl::average(src1->G, src2->G);
713     dst->B = gl::average(src1->B, src2->B);
714 }
715 
readColor(gl::ColorUI * dst,const R16G16B16A16 * src)716 void R16G16B16A16::readColor(gl::ColorUI *dst, const R16G16B16A16 *src)
717 {
718     dst->red   = src->R;
719     dst->green = src->G;
720     dst->blue  = src->B;
721     dst->alpha = src->A;
722 }
723 
readColor(gl::ColorF * dst,const R16G16B16A16 * src)724 void R16G16B16A16::readColor(gl::ColorF *dst, const R16G16B16A16 *src)
725 {
726     dst->red   = gl::normalizedToFloat(src->R);
727     dst->green = gl::normalizedToFloat(src->G);
728     dst->blue  = gl::normalizedToFloat(src->B);
729     dst->alpha = gl::normalizedToFloat(src->A);
730 }
731 
writeColor(R16G16B16A16 * dst,const gl::ColorUI * src)732 void R16G16B16A16::writeColor(R16G16B16A16 *dst, const gl::ColorUI *src)
733 {
734     dst->R = static_cast<uint16_t>(src->red);
735     dst->G = static_cast<uint16_t>(src->green);
736     dst->B = static_cast<uint16_t>(src->blue);
737     dst->A = static_cast<uint16_t>(src->alpha);
738 }
739 
writeColor(R16G16B16A16 * dst,const gl::ColorF * src)740 void R16G16B16A16::writeColor(R16G16B16A16 *dst, const gl::ColorF *src)
741 {
742     dst->R = gl::floatToNormalized<uint16_t>(src->red);
743     dst->G = gl::floatToNormalized<uint16_t>(src->green);
744     dst->B = gl::floatToNormalized<uint16_t>(src->blue);
745     dst->A = gl::floatToNormalized<uint16_t>(src->alpha);
746 }
747 
average(R16G16B16A16 * dst,const R16G16B16A16 * src1,const R16G16B16A16 * src2)748 void R16G16B16A16::average(R16G16B16A16 *dst, const R16G16B16A16 *src1, const R16G16B16A16 *src2)
749 {
750     dst->R = gl::average(src1->R, src2->R);
751     dst->G = gl::average(src1->G, src2->G);
752     dst->B = gl::average(src1->B, src2->B);
753     dst->A = gl::average(src1->A, src2->A);
754 }
755 
readColor(gl::ColorUI * dst,const R32 * src)756 void R32::readColor(gl::ColorUI *dst, const R32 *src)
757 {
758     dst->red   = src->R;
759     dst->green = 0;
760     dst->blue  = 0;
761     dst->alpha = 1;
762 }
763 
readColor(gl::ColorF * dst,const R32 * src)764 void R32::readColor(gl::ColorF *dst, const R32 *src)
765 {
766     dst->red   = gl::normalizedToFloat(src->R);
767     dst->green = 0.0f;
768     dst->blue  = 0.0f;
769     dst->alpha = 1.0f;
770 }
771 
writeColor(R32 * dst,const gl::ColorUI * src)772 void R32::writeColor(R32 *dst, const gl::ColorUI *src)
773 {
774     dst->R = static_cast<uint32_t>(src->red);
775 }
776 
writeColor(R32 * dst,const gl::ColorF * src)777 void R32::writeColor(R32 *dst, const gl::ColorF *src)
778 {
779     dst->R = gl::floatToNormalized<uint32_t>(src->red);
780 }
781 
average(R32 * dst,const R32 * src1,const R32 * src2)782 void R32::average(R32 *dst, const R32 *src1, const R32 *src2)
783 {
784     dst->R = gl::average(src1->R, src2->R);
785 }
786 
readColor(gl::ColorUI * dst,const R32G32 * src)787 void R32G32::readColor(gl::ColorUI *dst, const R32G32 *src)
788 {
789     dst->red   = src->R;
790     dst->green = src->G;
791     dst->blue  = 0;
792     dst->alpha = 1;
793 }
794 
readColor(gl::ColorF * dst,const R32G32 * src)795 void R32G32::readColor(gl::ColorF *dst, const R32G32 *src)
796 {
797     dst->red   = gl::normalizedToFloat(src->R);
798     dst->green = gl::normalizedToFloat(src->G);
799     dst->blue  = 0.0f;
800     dst->alpha = 1.0f;
801 }
802 
writeColor(R32G32 * dst,const gl::ColorUI * src)803 void R32G32::writeColor(R32G32 *dst, const gl::ColorUI *src)
804 {
805     dst->R = static_cast<uint32_t>(src->red);
806     dst->G = static_cast<uint32_t>(src->green);
807 }
808 
writeColor(R32G32 * dst,const gl::ColorF * src)809 void R32G32::writeColor(R32G32 *dst, const gl::ColorF *src)
810 {
811     dst->R = gl::floatToNormalized<uint32_t>(src->red);
812     dst->G = gl::floatToNormalized<uint32_t>(src->green);
813 }
814 
average(R32G32 * dst,const R32G32 * src1,const R32G32 * src2)815 void R32G32::average(R32G32 *dst, const R32G32 *src1, const R32G32 *src2)
816 {
817     dst->R = gl::average(src1->R, src2->R);
818     dst->G = gl::average(src1->G, src2->G);
819 }
820 
readColor(gl::ColorUI * dst,const R32G32B32 * src)821 void R32G32B32::readColor(gl::ColorUI *dst, const R32G32B32 *src)
822 {
823     dst->red   = src->R;
824     dst->green = src->G;
825     dst->blue  = src->B;
826     dst->alpha = 1;
827 }
828 
readColor(gl::ColorF * dst,const R32G32B32 * src)829 void R32G32B32::readColor(gl::ColorF *dst, const R32G32B32 *src)
830 {
831     dst->red   = gl::normalizedToFloat(src->R);
832     dst->green = gl::normalizedToFloat(src->G);
833     dst->blue  = gl::normalizedToFloat(src->B);
834     dst->alpha = 1.0f;
835 }
836 
writeColor(R32G32B32 * dst,const gl::ColorUI * src)837 void R32G32B32::writeColor(R32G32B32 *dst, const gl::ColorUI *src)
838 {
839     dst->R = static_cast<uint32_t>(src->red);
840     dst->G = static_cast<uint32_t>(src->green);
841     dst->B = static_cast<uint32_t>(src->blue);
842 }
843 
writeColor(R32G32B32 * dst,const gl::ColorF * src)844 void R32G32B32::writeColor(R32G32B32 *dst, const gl::ColorF *src)
845 {
846     dst->R = gl::floatToNormalized<uint32_t>(src->red);
847     dst->G = gl::floatToNormalized<uint32_t>(src->green);
848     dst->B = gl::floatToNormalized<uint32_t>(src->blue);
849 }
850 
average(R32G32B32 * dst,const R32G32B32 * src1,const R32G32B32 * src2)851 void R32G32B32::average(R32G32B32 *dst, const R32G32B32 *src1, const R32G32B32 *src2)
852 {
853     dst->R = gl::average(src1->R, src2->R);
854     dst->G = gl::average(src1->G, src2->G);
855     dst->B = gl::average(src1->B, src2->B);
856 }
857 
readColor(gl::ColorUI * dst,const R32G32B32A32 * src)858 void R32G32B32A32::readColor(gl::ColorUI *dst, const R32G32B32A32 *src)
859 {
860     dst->red   = src->R;
861     dst->green = src->G;
862     dst->blue  = src->B;
863     dst->alpha = src->A;
864 }
865 
readColor(gl::ColorF * dst,const R32G32B32A32 * src)866 void R32G32B32A32::readColor(gl::ColorF *dst, const R32G32B32A32 *src)
867 {
868     dst->red   = gl::normalizedToFloat(src->R);
869     dst->green = gl::normalizedToFloat(src->G);
870     dst->blue  = gl::normalizedToFloat(src->B);
871     dst->alpha = gl::normalizedToFloat(src->A);
872 }
873 
writeColor(R32G32B32A32 * dst,const gl::ColorUI * src)874 void R32G32B32A32::writeColor(R32G32B32A32 *dst, const gl::ColorUI *src)
875 {
876     dst->R = static_cast<uint32_t>(src->red);
877     dst->G = static_cast<uint32_t>(src->green);
878     dst->B = static_cast<uint32_t>(src->blue);
879     dst->A = static_cast<uint32_t>(src->alpha);
880 }
881 
writeColor(R32G32B32A32 * dst,const gl::ColorF * src)882 void R32G32B32A32::writeColor(R32G32B32A32 *dst, const gl::ColorF *src)
883 {
884     dst->R = gl::floatToNormalized<uint32_t>(src->red);
885     dst->G = gl::floatToNormalized<uint32_t>(src->green);
886     dst->B = gl::floatToNormalized<uint32_t>(src->blue);
887     dst->A = gl::floatToNormalized<uint32_t>(src->alpha);
888 }
889 
average(R32G32B32A32 * dst,const R32G32B32A32 * src1,const R32G32B32A32 * src2)890 void R32G32B32A32::average(R32G32B32A32 *dst, const R32G32B32A32 *src1, const R32G32B32A32 *src2)
891 {
892     dst->R = gl::average(src1->R, src2->R);
893     dst->G = gl::average(src1->G, src2->G);
894     dst->B = gl::average(src1->B, src2->B);
895     dst->A = gl::average(src1->A, src2->A);
896 }
897 
readColor(gl::ColorI * dst,const R8S * src)898 void R8S::readColor(gl::ColorI *dst, const R8S *src)
899 {
900     dst->red   = src->R;
901     dst->green = 0;
902     dst->blue  = 0;
903     dst->alpha = 1;
904 }
905 
readColor(gl::ColorF * dst,const R8S * src)906 void R8S::readColor(gl::ColorF *dst, const R8S *src)
907 {
908     dst->red   = gl::normalizedToFloat(src->R);
909     dst->green = 0.0f;
910     dst->blue  = 0.0f;
911     dst->alpha = 1.0f;
912 }
913 
writeColor(R8S * dst,const gl::ColorI * src)914 void R8S::writeColor(R8S *dst, const gl::ColorI *src)
915 {
916     dst->R = static_cast<int8_t>(src->red);
917 }
918 
writeColor(R8S * dst,const gl::ColorF * src)919 void R8S::writeColor(R8S *dst, const gl::ColorF *src)
920 {
921     dst->R = gl::floatToNormalized<int8_t>(src->red);
922 }
923 
average(R8S * dst,const R8S * src1,const R8S * src2)924 void R8S::average(R8S *dst, const R8S *src1, const R8S *src2)
925 {
926     dst->R = static_cast<int8_t>(gl::average(src1->R, src2->R));
927 }
928 
readColor(gl::ColorI * dst,const R8G8S * src)929 void R8G8S::readColor(gl::ColorI *dst, const R8G8S *src)
930 {
931     dst->red   = src->R;
932     dst->green = src->G;
933     dst->blue  = 0;
934     dst->alpha = 1;
935 }
936 
readColor(gl::ColorF * dst,const R8G8S * src)937 void R8G8S::readColor(gl::ColorF *dst, const R8G8S *src)
938 {
939     dst->red   = gl::normalizedToFloat(src->R);
940     dst->green = gl::normalizedToFloat(src->G);
941     dst->blue  = 0.0f;
942     dst->alpha = 1.0f;
943 }
944 
writeColor(R8G8S * dst,const gl::ColorI * src)945 void R8G8S::writeColor(R8G8S *dst, const gl::ColorI *src)
946 {
947     dst->R = static_cast<int8_t>(src->red);
948     dst->G = static_cast<int8_t>(src->green);
949 }
950 
writeColor(R8G8S * dst,const gl::ColorF * src)951 void R8G8S::writeColor(R8G8S *dst, const gl::ColorF *src)
952 {
953     dst->R = gl::floatToNormalized<int8_t>(src->red);
954     dst->G = gl::floatToNormalized<int8_t>(src->green);
955 }
956 
average(R8G8S * dst,const R8G8S * src1,const R8G8S * src2)957 void R8G8S::average(R8G8S *dst, const R8G8S *src1, const R8G8S *src2)
958 {
959     dst->R = static_cast<int8_t>(gl::average(src1->R, src2->R));
960     dst->G = static_cast<int8_t>(gl::average(src1->G, src2->G));
961 }
962 
readColor(gl::ColorI * dst,const R8G8B8S * src)963 void R8G8B8S::readColor(gl::ColorI *dst, const R8G8B8S *src)
964 {
965     dst->red   = src->R;
966     dst->green = src->G;
967     dst->blue  = src->B;
968     dst->alpha = 1;
969 }
970 
readColor(gl::ColorF * dst,const R8G8B8S * src)971 void R8G8B8S::readColor(gl::ColorF *dst, const R8G8B8S *src)
972 {
973     dst->red   = gl::normalizedToFloat(src->R);
974     dst->green = gl::normalizedToFloat(src->G);
975     dst->blue  = gl::normalizedToFloat(src->B);
976     dst->alpha = 1.0f;
977 }
978 
writeColor(R8G8B8S * dst,const gl::ColorI * src)979 void R8G8B8S::writeColor(R8G8B8S *dst, const gl::ColorI *src)
980 {
981     dst->R = static_cast<int8_t>(src->red);
982     dst->G = static_cast<int8_t>(src->green);
983     dst->B = static_cast<int8_t>(src->blue);
984 }
985 
writeColor(R8G8B8S * dst,const gl::ColorF * src)986 void R8G8B8S::writeColor(R8G8B8S *dst, const gl::ColorF *src)
987 {
988     dst->R = gl::floatToNormalized<int8_t>(src->red);
989     dst->G = gl::floatToNormalized<int8_t>(src->green);
990     dst->B = gl::floatToNormalized<int8_t>(src->blue);
991 }
992 
average(R8G8B8S * dst,const R8G8B8S * src1,const R8G8B8S * src2)993 void R8G8B8S::average(R8G8B8S *dst, const R8G8B8S *src1, const R8G8B8S *src2)
994 {
995     dst->R = static_cast<int8_t>(gl::average(src1->R, src2->R));
996     dst->G = static_cast<int8_t>(gl::average(src1->G, src2->G));
997     dst->B = static_cast<int8_t>(gl::average(src1->B, src2->B));
998 }
999 
readColor(gl::ColorI * dst,const R8G8B8A8S * src)1000 void R8G8B8A8S::readColor(gl::ColorI *dst, const R8G8B8A8S *src)
1001 {
1002     dst->red   = src->R;
1003     dst->green = src->G;
1004     dst->blue  = src->B;
1005     dst->alpha = src->A;
1006 }
1007 
readColor(gl::ColorF * dst,const R8G8B8A8S * src)1008 void R8G8B8A8S::readColor(gl::ColorF *dst, const R8G8B8A8S *src)
1009 {
1010     dst->red   = gl::normalizedToFloat(src->R);
1011     dst->green = gl::normalizedToFloat(src->G);
1012     dst->blue  = gl::normalizedToFloat(src->B);
1013     dst->alpha = gl::normalizedToFloat(src->A);
1014 }
1015 
writeColor(R8G8B8A8S * dst,const gl::ColorI * src)1016 void R8G8B8A8S::writeColor(R8G8B8A8S *dst, const gl::ColorI *src)
1017 {
1018     dst->R = static_cast<int8_t>(src->red);
1019     dst->G = static_cast<int8_t>(src->green);
1020     dst->B = static_cast<int8_t>(src->blue);
1021     dst->A = static_cast<int8_t>(src->alpha);
1022 }
1023 
writeColor(R8G8B8A8S * dst,const gl::ColorF * src)1024 void R8G8B8A8S::writeColor(R8G8B8A8S *dst, const gl::ColorF *src)
1025 {
1026     dst->R = gl::floatToNormalized<int8_t>(src->red);
1027     dst->G = gl::floatToNormalized<int8_t>(src->green);
1028     dst->B = gl::floatToNormalized<int8_t>(src->blue);
1029     dst->A = gl::floatToNormalized<int8_t>(src->alpha);
1030 }
1031 
average(R8G8B8A8S * dst,const R8G8B8A8S * src1,const R8G8B8A8S * src2)1032 void R8G8B8A8S::average(R8G8B8A8S *dst, const R8G8B8A8S *src1, const R8G8B8A8S *src2)
1033 {
1034     dst->R = static_cast<int8_t>(gl::average(src1->R, src2->R));
1035     dst->G = static_cast<int8_t>(gl::average(src1->G, src2->G));
1036     dst->B = static_cast<int8_t>(gl::average(src1->B, src2->B));
1037     dst->A = static_cast<int8_t>(gl::average(src1->A, src2->A));
1038 }
1039 
readColor(gl::ColorI * dst,const R16S * src)1040 void R16S::readColor(gl::ColorI *dst, const R16S *src)
1041 {
1042     dst->red   = src->R;
1043     dst->green = 0;
1044     dst->blue  = 0;
1045     dst->alpha = 1;
1046 }
1047 
readColor(gl::ColorF * dst,const R16S * src)1048 void R16S::readColor(gl::ColorF *dst, const R16S *src)
1049 {
1050     dst->red   = gl::normalizedToFloat(src->R);
1051     dst->green = 0.0f;
1052     dst->blue  = 0.0f;
1053     dst->alpha = 1.0f;
1054 }
1055 
writeColor(R16S * dst,const gl::ColorI * src)1056 void R16S::writeColor(R16S *dst, const gl::ColorI *src)
1057 {
1058     dst->R = static_cast<int16_t>(src->red);
1059 }
1060 
writeColor(R16S * dst,const gl::ColorF * src)1061 void R16S::writeColor(R16S *dst, const gl::ColorF *src)
1062 {
1063     dst->R = gl::floatToNormalized<int16_t>(src->red);
1064 }
1065 
average(R16S * dst,const R16S * src1,const R16S * src2)1066 void R16S::average(R16S *dst, const R16S *src1, const R16S *src2)
1067 {
1068     dst->R = gl::average(src1->R, src2->R);
1069 }
1070 
readColor(gl::ColorI * dst,const R16G16S * src)1071 void R16G16S::readColor(gl::ColorI *dst, const R16G16S *src)
1072 {
1073     dst->red   = src->R;
1074     dst->green = src->G;
1075     dst->blue  = 0;
1076     dst->alpha = 1;
1077 }
1078 
readColor(gl::ColorF * dst,const R16G16S * src)1079 void R16G16S::readColor(gl::ColorF *dst, const R16G16S *src)
1080 {
1081     dst->red   = gl::normalizedToFloat(src->R);
1082     dst->green = gl::normalizedToFloat(src->G);
1083     dst->blue  = 0.0f;
1084     dst->alpha = 1.0f;
1085 }
1086 
writeColor(R16G16S * dst,const gl::ColorI * src)1087 void R16G16S::writeColor(R16G16S *dst, const gl::ColorI *src)
1088 {
1089     dst->R = static_cast<int16_t>(src->red);
1090     dst->G = static_cast<int16_t>(src->green);
1091 }
1092 
writeColor(R16G16S * dst,const gl::ColorF * src)1093 void R16G16S::writeColor(R16G16S *dst, const gl::ColorF *src)
1094 {
1095     dst->R = gl::floatToNormalized<int16_t>(src->red);
1096     dst->G = gl::floatToNormalized<int16_t>(src->green);
1097 }
1098 
average(R16G16S * dst,const R16G16S * src1,const R16G16S * src2)1099 void R16G16S::average(R16G16S *dst, const R16G16S *src1, const R16G16S *src2)
1100 {
1101     dst->R = gl::average(src1->R, src2->R);
1102     dst->G = gl::average(src1->G, src2->G);
1103 }
1104 
readColor(gl::ColorI * dst,const R16G16B16S * src)1105 void R16G16B16S::readColor(gl::ColorI *dst, const R16G16B16S *src)
1106 {
1107     dst->red   = src->R;
1108     dst->green = src->G;
1109     dst->blue  = src->B;
1110     dst->alpha = 1;
1111 }
1112 
readColor(gl::ColorF * dst,const R16G16B16S * src)1113 void R16G16B16S::readColor(gl::ColorF *dst, const R16G16B16S *src)
1114 {
1115     dst->red   = gl::normalizedToFloat(src->R);
1116     dst->green = gl::normalizedToFloat(src->G);
1117     dst->blue  = gl::normalizedToFloat(src->B);
1118     dst->alpha = 1.0f;
1119 }
1120 
writeColor(R16G16B16S * dst,const gl::ColorI * src)1121 void R16G16B16S::writeColor(R16G16B16S *dst, const gl::ColorI *src)
1122 {
1123     dst->R = static_cast<int16_t>(src->red);
1124     dst->G = static_cast<int16_t>(src->green);
1125     dst->B = static_cast<int16_t>(src->blue);
1126 }
1127 
writeColor(R16G16B16S * dst,const gl::ColorF * src)1128 void R16G16B16S::writeColor(R16G16B16S *dst, const gl::ColorF *src)
1129 {
1130     dst->R = gl::floatToNormalized<int16_t>(src->red);
1131     dst->G = gl::floatToNormalized<int16_t>(src->green);
1132     dst->B = gl::floatToNormalized<int16_t>(src->blue);
1133 }
1134 
average(R16G16B16S * dst,const R16G16B16S * src1,const R16G16B16S * src2)1135 void R16G16B16S::average(R16G16B16S *dst, const R16G16B16S *src1, const R16G16B16S *src2)
1136 {
1137     dst->R = gl::average(src1->R, src2->R);
1138     dst->G = gl::average(src1->G, src2->G);
1139     dst->B = gl::average(src1->B, src2->B);
1140 }
1141 
readColor(gl::ColorI * dst,const R16G16B16A16S * src)1142 void R16G16B16A16S::readColor(gl::ColorI *dst, const R16G16B16A16S *src)
1143 {
1144     dst->red   = src->R;
1145     dst->green = src->G;
1146     dst->blue  = src->B;
1147     dst->alpha = src->A;
1148 }
1149 
readColor(gl::ColorF * dst,const R16G16B16A16S * src)1150 void R16G16B16A16S::readColor(gl::ColorF *dst, const R16G16B16A16S *src)
1151 {
1152     dst->red   = gl::normalizedToFloat(src->R);
1153     dst->green = gl::normalizedToFloat(src->G);
1154     dst->blue  = gl::normalizedToFloat(src->B);
1155     dst->alpha = gl::normalizedToFloat(src->A);
1156 }
1157 
writeColor(R16G16B16A16S * dst,const gl::ColorI * src)1158 void R16G16B16A16S::writeColor(R16G16B16A16S *dst, const gl::ColorI *src)
1159 {
1160     dst->R = static_cast<int16_t>(src->red);
1161     dst->G = static_cast<int16_t>(src->green);
1162     dst->B = static_cast<int16_t>(src->blue);
1163     dst->A = static_cast<int16_t>(src->alpha);
1164 }
1165 
writeColor(R16G16B16A16S * dst,const gl::ColorF * src)1166 void R16G16B16A16S::writeColor(R16G16B16A16S *dst, const gl::ColorF *src)
1167 {
1168     dst->R = gl::floatToNormalized<int16_t>(src->red);
1169     dst->G = gl::floatToNormalized<int16_t>(src->green);
1170     dst->B = gl::floatToNormalized<int16_t>(src->blue);
1171     dst->A = gl::floatToNormalized<int16_t>(src->alpha);
1172 }
1173 
average(R16G16B16A16S * dst,const R16G16B16A16S * src1,const R16G16B16A16S * src2)1174 void R16G16B16A16S::average(R16G16B16A16S *dst,
1175                             const R16G16B16A16S *src1,
1176                             const R16G16B16A16S *src2)
1177 {
1178     dst->R = gl::average(src1->R, src2->R);
1179     dst->G = gl::average(src1->G, src2->G);
1180     dst->B = gl::average(src1->B, src2->B);
1181     dst->A = gl::average(src1->A, src2->A);
1182 }
1183 
readColor(gl::ColorI * dst,const R32S * src)1184 void R32S::readColor(gl::ColorI *dst, const R32S *src)
1185 {
1186     dst->red   = src->R;
1187     dst->green = 0;
1188     dst->blue  = 0;
1189     dst->alpha = 1;
1190 }
1191 
readColor(gl::ColorF * dst,const R32S * src)1192 void R32S::readColor(gl::ColorF *dst, const R32S *src)
1193 {
1194     dst->red   = gl::normalizedToFloat(src->R);
1195     dst->green = 0.0f;
1196     dst->blue  = 0.0f;
1197     dst->alpha = 1.0f;
1198 }
1199 
writeColor(R32S * dst,const gl::ColorI * src)1200 void R32S::writeColor(R32S *dst, const gl::ColorI *src)
1201 {
1202     dst->R = static_cast<int32_t>(src->red);
1203 }
1204 
writeColor(R32S * dst,const gl::ColorF * src)1205 void R32S::writeColor(R32S *dst, const gl::ColorF *src)
1206 {
1207     dst->R = gl::floatToNormalized<int32_t>(src->red);
1208 }
1209 
average(R32S * dst,const R32S * src1,const R32S * src2)1210 void R32S::average(R32S *dst, const R32S *src1, const R32S *src2)
1211 {
1212     dst->R = gl::average(src1->R, src2->R);
1213 }
1214 
readColor(gl::ColorI * dst,const R32G32S * src)1215 void R32G32S::readColor(gl::ColorI *dst, const R32G32S *src)
1216 {
1217     dst->red   = src->R;
1218     dst->green = src->G;
1219     dst->blue  = 0;
1220     dst->alpha = 1;
1221 }
1222 
readColor(gl::ColorF * dst,const R32G32S * src)1223 void R32G32S::readColor(gl::ColorF *dst, const R32G32S *src)
1224 {
1225     dst->red   = gl::normalizedToFloat(src->R);
1226     dst->green = gl::normalizedToFloat(src->G);
1227     dst->blue  = 0.0f;
1228     dst->alpha = 1.0f;
1229 }
1230 
writeColor(R32G32S * dst,const gl::ColorI * src)1231 void R32G32S::writeColor(R32G32S *dst, const gl::ColorI *src)
1232 {
1233     dst->R = static_cast<int32_t>(src->red);
1234     dst->G = static_cast<int32_t>(src->green);
1235 }
1236 
writeColor(R32G32S * dst,const gl::ColorF * src)1237 void R32G32S::writeColor(R32G32S *dst, const gl::ColorF *src)
1238 {
1239     dst->R = gl::floatToNormalized<int32_t>(src->red);
1240     dst->G = gl::floatToNormalized<int32_t>(src->green);
1241 }
1242 
average(R32G32S * dst,const R32G32S * src1,const R32G32S * src2)1243 void R32G32S::average(R32G32S *dst, const R32G32S *src1, const R32G32S *src2)
1244 {
1245     dst->R = gl::average(src1->R, src2->R);
1246     dst->G = gl::average(src1->G, src2->G);
1247 }
1248 
readColor(gl::ColorI * dst,const R32G32B32S * src)1249 void R32G32B32S::readColor(gl::ColorI *dst, const R32G32B32S *src)
1250 {
1251     dst->red   = src->R;
1252     dst->green = src->G;
1253     dst->blue  = src->B;
1254     dst->alpha = 1;
1255 }
1256 
readColor(gl::ColorF * dst,const R32G32B32S * src)1257 void R32G32B32S::readColor(gl::ColorF *dst, const R32G32B32S *src)
1258 {
1259     dst->red   = gl::normalizedToFloat(src->R);
1260     dst->green = gl::normalizedToFloat(src->G);
1261     dst->blue  = gl::normalizedToFloat(src->B);
1262     dst->alpha = 1.0f;
1263 }
1264 
writeColor(R32G32B32S * dst,const gl::ColorI * src)1265 void R32G32B32S::writeColor(R32G32B32S *dst, const gl::ColorI *src)
1266 {
1267     dst->R = static_cast<int32_t>(src->red);
1268     dst->G = static_cast<int32_t>(src->green);
1269     dst->B = static_cast<int32_t>(src->blue);
1270 }
1271 
writeColor(R32G32B32S * dst,const gl::ColorF * src)1272 void R32G32B32S::writeColor(R32G32B32S *dst, const gl::ColorF *src)
1273 {
1274     dst->R = gl::floatToNormalized<int32_t>(src->red);
1275     dst->G = gl::floatToNormalized<int32_t>(src->green);
1276     dst->B = gl::floatToNormalized<int32_t>(src->blue);
1277 }
1278 
average(R32G32B32S * dst,const R32G32B32S * src1,const R32G32B32S * src2)1279 void R32G32B32S::average(R32G32B32S *dst, const R32G32B32S *src1, const R32G32B32S *src2)
1280 {
1281     dst->R = gl::average(src1->R, src2->R);
1282     dst->G = gl::average(src1->G, src2->G);
1283     dst->B = gl::average(src1->B, src2->B);
1284 }
1285 
readColor(gl::ColorI * dst,const R32G32B32A32S * src)1286 void R32G32B32A32S::readColor(gl::ColorI *dst, const R32G32B32A32S *src)
1287 {
1288     dst->red   = src->R;
1289     dst->green = src->G;
1290     dst->blue  = src->B;
1291     dst->alpha = src->A;
1292 }
1293 
readColor(gl::ColorF * dst,const R32G32B32A32S * src)1294 void R32G32B32A32S::readColor(gl::ColorF *dst, const R32G32B32A32S *src)
1295 {
1296     dst->red   = gl::normalizedToFloat(src->R);
1297     dst->green = gl::normalizedToFloat(src->G);
1298     dst->blue  = gl::normalizedToFloat(src->B);
1299     dst->alpha = gl::normalizedToFloat(src->A);
1300 }
1301 
writeColor(R32G32B32A32S * dst,const gl::ColorI * src)1302 void R32G32B32A32S::writeColor(R32G32B32A32S *dst, const gl::ColorI *src)
1303 {
1304     dst->R = static_cast<int32_t>(src->red);
1305     dst->G = static_cast<int32_t>(src->green);
1306     dst->B = static_cast<int32_t>(src->blue);
1307     dst->A = static_cast<int32_t>(src->alpha);
1308 }
1309 
writeColor(R32G32B32A32S * dst,const gl::ColorF * src)1310 void R32G32B32A32S::writeColor(R32G32B32A32S *dst, const gl::ColorF *src)
1311 {
1312     dst->R = gl::floatToNormalized<int32_t>(src->red);
1313     dst->G = gl::floatToNormalized<int32_t>(src->green);
1314     dst->B = gl::floatToNormalized<int32_t>(src->blue);
1315     dst->A = gl::floatToNormalized<int32_t>(src->alpha);
1316 }
1317 
average(R32G32B32A32S * dst,const R32G32B32A32S * src1,const R32G32B32A32S * src2)1318 void R32G32B32A32S::average(R32G32B32A32S *dst,
1319                             const R32G32B32A32S *src1,
1320                             const R32G32B32A32S *src2)
1321 {
1322     dst->R = gl::average(src1->R, src2->R);
1323     dst->G = gl::average(src1->G, src2->G);
1324     dst->B = gl::average(src1->B, src2->B);
1325     dst->A = gl::average(src1->A, src2->A);
1326 }
1327 
readColor(gl::ColorF * dst,const A16B16G16R16F * src)1328 void A16B16G16R16F::readColor(gl::ColorF *dst, const A16B16G16R16F *src)
1329 {
1330     dst->red   = gl::float16ToFloat32(src->R);
1331     dst->green = gl::float16ToFloat32(src->G);
1332     dst->blue  = gl::float16ToFloat32(src->B);
1333     dst->alpha = gl::float16ToFloat32(src->A);
1334 }
1335 
writeColor(A16B16G16R16F * dst,const gl::ColorF * src)1336 void A16B16G16R16F::writeColor(A16B16G16R16F *dst, const gl::ColorF *src)
1337 {
1338     dst->R = gl::float32ToFloat16(src->red);
1339     dst->G = gl::float32ToFloat16(src->green);
1340     dst->B = gl::float32ToFloat16(src->blue);
1341     dst->A = gl::float32ToFloat16(src->alpha);
1342 }
1343 
average(A16B16G16R16F * dst,const A16B16G16R16F * src1,const A16B16G16R16F * src2)1344 void A16B16G16R16F::average(A16B16G16R16F *dst,
1345                             const A16B16G16R16F *src1,
1346                             const A16B16G16R16F *src2)
1347 {
1348     dst->R = gl::averageHalfFloat(src1->R, src2->R);
1349     dst->G = gl::averageHalfFloat(src1->G, src2->G);
1350     dst->B = gl::averageHalfFloat(src1->B, src2->B);
1351     dst->A = gl::averageHalfFloat(src1->A, src2->A);
1352 }
1353 
readColor(gl::ColorF * dst,const R16G16B16A16F * src)1354 void R16G16B16A16F::readColor(gl::ColorF *dst, const R16G16B16A16F *src)
1355 {
1356     dst->red   = gl::float16ToFloat32(src->R);
1357     dst->green = gl::float16ToFloat32(src->G);
1358     dst->blue  = gl::float16ToFloat32(src->B);
1359     dst->alpha = gl::float16ToFloat32(src->A);
1360 }
1361 
writeColor(R16G16B16A16F * dst,const gl::ColorF * src)1362 void R16G16B16A16F::writeColor(R16G16B16A16F *dst, const gl::ColorF *src)
1363 {
1364     dst->R = gl::float32ToFloat16(src->red);
1365     dst->G = gl::float32ToFloat16(src->green);
1366     dst->B = gl::float32ToFloat16(src->blue);
1367     dst->A = gl::float32ToFloat16(src->alpha);
1368 }
1369 
average(R16G16B16A16F * dst,const R16G16B16A16F * src1,const R16G16B16A16F * src2)1370 void R16G16B16A16F::average(R16G16B16A16F *dst,
1371                             const R16G16B16A16F *src1,
1372                             const R16G16B16A16F *src2)
1373 {
1374     dst->R = gl::averageHalfFloat(src1->R, src2->R);
1375     dst->G = gl::averageHalfFloat(src1->G, src2->G);
1376     dst->B = gl::averageHalfFloat(src1->B, src2->B);
1377     dst->A = gl::averageHalfFloat(src1->A, src2->A);
1378 }
1379 
readColor(gl::ColorF * dst,const R16F * src)1380 void R16F::readColor(gl::ColorF *dst, const R16F *src)
1381 {
1382     dst->red   = gl::float16ToFloat32(src->R);
1383     dst->green = 0.0f;
1384     dst->blue  = 0.0f;
1385     dst->alpha = 1.0f;
1386 }
1387 
writeColor(R16F * dst,const gl::ColorF * src)1388 void R16F::writeColor(R16F *dst, const gl::ColorF *src)
1389 {
1390     dst->R = gl::float32ToFloat16(src->red);
1391 }
1392 
average(R16F * dst,const R16F * src1,const R16F * src2)1393 void R16F::average(R16F *dst, const R16F *src1, const R16F *src2)
1394 {
1395     dst->R = gl::averageHalfFloat(src1->R, src2->R);
1396 }
1397 
readColor(gl::ColorF * dst,const A16F * src)1398 void A16F::readColor(gl::ColorF *dst, const A16F *src)
1399 {
1400     dst->red   = 0.0f;
1401     dst->green = 0.0f;
1402     dst->blue  = 0.0f;
1403     dst->alpha = gl::float16ToFloat32(src->A);
1404 }
1405 
writeColor(A16F * dst,const gl::ColorF * src)1406 void A16F::writeColor(A16F *dst, const gl::ColorF *src)
1407 {
1408     dst->A = gl::float32ToFloat16(src->alpha);
1409 }
1410 
average(A16F * dst,const A16F * src1,const A16F * src2)1411 void A16F::average(A16F *dst, const A16F *src1, const A16F *src2)
1412 {
1413     dst->A = gl::averageHalfFloat(src1->A, src2->A);
1414 }
1415 
readColor(gl::ColorF * dst,const L16F * src)1416 void L16F::readColor(gl::ColorF *dst, const L16F *src)
1417 {
1418     float lum  = gl::float16ToFloat32(src->L);
1419     dst->red   = lum;
1420     dst->green = lum;
1421     dst->blue  = lum;
1422     dst->alpha = 1.0f;
1423 }
1424 
writeColor(L16F * dst,const gl::ColorF * src)1425 void L16F::writeColor(L16F *dst, const gl::ColorF *src)
1426 {
1427     dst->L = gl::float32ToFloat16(src->red);
1428 }
1429 
average(L16F * dst,const L16F * src1,const L16F * src2)1430 void L16F::average(L16F *dst, const L16F *src1, const L16F *src2)
1431 {
1432     dst->L = gl::averageHalfFloat(src1->L, src2->L);
1433 }
1434 
readColor(gl::ColorF * dst,const L16A16F * src)1435 void L16A16F::readColor(gl::ColorF *dst, const L16A16F *src)
1436 {
1437     float lum  = gl::float16ToFloat32(src->L);
1438     dst->red   = lum;
1439     dst->green = lum;
1440     dst->blue  = lum;
1441     dst->alpha = gl::float16ToFloat32(src->A);
1442 }
1443 
writeColor(L16A16F * dst,const gl::ColorF * src)1444 void L16A16F::writeColor(L16A16F *dst, const gl::ColorF *src)
1445 {
1446     dst->L = gl::float32ToFloat16(src->red);
1447     dst->A = gl::float32ToFloat16(src->alpha);
1448 }
1449 
average(L16A16F * dst,const L16A16F * src1,const L16A16F * src2)1450 void L16A16F::average(L16A16F *dst, const L16A16F *src1, const L16A16F *src2)
1451 {
1452     dst->L = gl::averageHalfFloat(src1->L, src2->L);
1453     dst->A = gl::averageHalfFloat(src1->A, src2->A);
1454 }
1455 
readColor(gl::ColorF * dst,const R16G16F * src)1456 void R16G16F::readColor(gl::ColorF *dst, const R16G16F *src)
1457 {
1458     dst->red   = gl::float16ToFloat32(src->R);
1459     dst->green = gl::float16ToFloat32(src->G);
1460     dst->blue  = 0.0f;
1461     dst->alpha = 1.0f;
1462 }
1463 
writeColor(R16G16F * dst,const gl::ColorF * src)1464 void R16G16F::writeColor(R16G16F *dst, const gl::ColorF *src)
1465 {
1466     dst->R = gl::float32ToFloat16(src->red);
1467     dst->G = gl::float32ToFloat16(src->green);
1468 }
1469 
average(R16G16F * dst,const R16G16F * src1,const R16G16F * src2)1470 void R16G16F::average(R16G16F *dst, const R16G16F *src1, const R16G16F *src2)
1471 {
1472     dst->R = gl::averageHalfFloat(src1->R, src2->R);
1473     dst->G = gl::averageHalfFloat(src1->G, src2->G);
1474 }
1475 
readColor(gl::ColorF * dst,const R16G16B16F * src)1476 void R16G16B16F::readColor(gl::ColorF *dst, const R16G16B16F *src)
1477 {
1478     dst->red   = gl::float16ToFloat32(src->R);
1479     dst->green = gl::float16ToFloat32(src->G);
1480     dst->blue  = gl::float16ToFloat32(src->B);
1481     dst->alpha = 1.0f;
1482 }
1483 
writeColor(R16G16B16F * dst,const gl::ColorF * src)1484 void R16G16B16F::writeColor(R16G16B16F *dst, const gl::ColorF *src)
1485 {
1486     dst->R = gl::float32ToFloat16(src->red);
1487     dst->G = gl::float32ToFloat16(src->green);
1488     dst->B = gl::float32ToFloat16(src->blue);
1489 }
1490 
average(R16G16B16F * dst,const R16G16B16F * src1,const R16G16B16F * src2)1491 void R16G16B16F::average(R16G16B16F *dst, const R16G16B16F *src1, const R16G16B16F *src2)
1492 {
1493     dst->R = gl::averageHalfFloat(src1->R, src2->R);
1494     dst->G = gl::averageHalfFloat(src1->G, src2->G);
1495     dst->B = gl::averageHalfFloat(src1->B, src2->B);
1496 }
1497 
readColor(gl::ColorF * dst,const A32B32G32R32F * src)1498 void A32B32G32R32F::readColor(gl::ColorF *dst, const A32B32G32R32F *src)
1499 {
1500     dst->red   = src->R;
1501     dst->green = src->G;
1502     dst->blue  = src->B;
1503     dst->alpha = src->A;
1504 }
1505 
writeColor(A32B32G32R32F * dst,const gl::ColorF * src)1506 void A32B32G32R32F::writeColor(A32B32G32R32F *dst, const gl::ColorF *src)
1507 {
1508     dst->R = src->red;
1509     dst->G = src->green;
1510     dst->B = src->blue;
1511     dst->A = src->alpha;
1512 }
1513 
average(A32B32G32R32F * dst,const A32B32G32R32F * src1,const A32B32G32R32F * src2)1514 void A32B32G32R32F::average(A32B32G32R32F *dst,
1515                             const A32B32G32R32F *src1,
1516                             const A32B32G32R32F *src2)
1517 {
1518     dst->R = gl::average(src1->R, src2->R);
1519     dst->G = gl::average(src1->G, src2->G);
1520     dst->B = gl::average(src1->B, src2->B);
1521     dst->A = gl::average(src1->A, src2->A);
1522 }
1523 
readColor(gl::ColorF * dst,const R32G32B32A32F * src)1524 void R32G32B32A32F::readColor(gl::ColorF *dst, const R32G32B32A32F *src)
1525 {
1526     dst->red   = src->R;
1527     dst->green = src->G;
1528     dst->blue  = src->B;
1529     dst->alpha = src->A;
1530 }
1531 
writeColor(R32G32B32A32F * dst,const gl::ColorF * src)1532 void R32G32B32A32F::writeColor(R32G32B32A32F *dst, const gl::ColorF *src)
1533 {
1534     dst->R = src->red;
1535     dst->G = src->green;
1536     dst->B = src->blue;
1537     dst->A = src->alpha;
1538 }
1539 
average(R32G32B32A32F * dst,const R32G32B32A32F * src1,const R32G32B32A32F * src2)1540 void R32G32B32A32F::average(R32G32B32A32F *dst,
1541                             const R32G32B32A32F *src1,
1542                             const R32G32B32A32F *src2)
1543 {
1544     dst->R = gl::average(src1->R, src2->R);
1545     dst->G = gl::average(src1->G, src2->G);
1546     dst->B = gl::average(src1->B, src2->B);
1547     dst->A = gl::average(src1->A, src2->A);
1548 }
1549 
readColor(gl::ColorF * dst,const R32F * src)1550 void R32F::readColor(gl::ColorF *dst, const R32F *src)
1551 {
1552     dst->red   = src->R;
1553     dst->green = 0.0f;
1554     dst->blue  = 0.0f;
1555     dst->alpha = 1.0f;
1556 }
1557 
writeColor(R32F * dst,const gl::ColorF * src)1558 void R32F::writeColor(R32F *dst, const gl::ColorF *src)
1559 {
1560     dst->R = src->red;
1561 }
1562 
average(R32F * dst,const R32F * src1,const R32F * src2)1563 void R32F::average(R32F *dst, const R32F *src1, const R32F *src2)
1564 {
1565     dst->R = gl::average(src1->R, src2->R);
1566 }
1567 
readColor(gl::ColorF * dst,const A32F * src)1568 void A32F::readColor(gl::ColorF *dst, const A32F *src)
1569 {
1570     dst->red   = 0.0f;
1571     dst->green = 0.0f;
1572     dst->blue  = 0.0f;
1573     dst->alpha = src->A;
1574 }
1575 
writeColor(A32F * dst,const gl::ColorF * src)1576 void A32F::writeColor(A32F *dst, const gl::ColorF *src)
1577 {
1578     dst->A = src->alpha;
1579 }
1580 
average(A32F * dst,const A32F * src1,const A32F * src2)1581 void A32F::average(A32F *dst, const A32F *src1, const A32F *src2)
1582 {
1583     dst->A = gl::average(src1->A, src2->A);
1584 }
1585 
readColor(gl::ColorF * dst,const L32F * src)1586 void L32F::readColor(gl::ColorF *dst, const L32F *src)
1587 {
1588     dst->red   = src->L;
1589     dst->green = src->L;
1590     dst->blue  = src->L;
1591     dst->alpha = 1.0f;
1592 }
1593 
writeColor(L32F * dst,const gl::ColorF * src)1594 void L32F::writeColor(L32F *dst, const gl::ColorF *src)
1595 {
1596     dst->L = src->red;
1597 }
1598 
average(L32F * dst,const L32F * src1,const L32F * src2)1599 void L32F::average(L32F *dst, const L32F *src1, const L32F *src2)
1600 {
1601     dst->L = gl::average(src1->L, src2->L);
1602 }
1603 
readColor(gl::ColorF * dst,const L32A32F * src)1604 void L32A32F::readColor(gl::ColorF *dst, const L32A32F *src)
1605 {
1606     dst->red   = src->L;
1607     dst->green = src->L;
1608     dst->blue  = src->L;
1609     dst->alpha = src->A;
1610 }
1611 
writeColor(L32A32F * dst,const gl::ColorF * src)1612 void L32A32F::writeColor(L32A32F *dst, const gl::ColorF *src)
1613 {
1614     dst->L = src->red;
1615     dst->A = src->alpha;
1616 }
1617 
average(L32A32F * dst,const L32A32F * src1,const L32A32F * src2)1618 void L32A32F::average(L32A32F *dst, const L32A32F *src1, const L32A32F *src2)
1619 {
1620     dst->L = gl::average(src1->L, src2->L);
1621     dst->A = gl::average(src1->A, src2->A);
1622 }
1623 
readColor(gl::ColorF * dst,const R32G32F * src)1624 void R32G32F::readColor(gl::ColorF *dst, const R32G32F *src)
1625 {
1626     dst->red   = src->R;
1627     dst->green = src->G;
1628     dst->blue  = 0.0f;
1629     dst->alpha = 1.0f;
1630 }
1631 
writeColor(R32G32F * dst,const gl::ColorF * src)1632 void R32G32F::writeColor(R32G32F *dst, const gl::ColorF *src)
1633 {
1634     dst->R = src->red;
1635     dst->G = src->green;
1636 }
1637 
average(R32G32F * dst,const R32G32F * src1,const R32G32F * src2)1638 void R32G32F::average(R32G32F *dst, const R32G32F *src1, const R32G32F *src2)
1639 {
1640     dst->R = gl::average(src1->R, src2->R);
1641     dst->G = gl::average(src1->G, src2->G);
1642 }
1643 
readColor(gl::ColorF * dst,const R32G32B32F * src)1644 void R32G32B32F::readColor(gl::ColorF *dst, const R32G32B32F *src)
1645 {
1646     dst->red   = src->R;
1647     dst->green = src->G;
1648     dst->blue  = src->B;
1649     dst->alpha = 1.0f;
1650 }
1651 
writeColor(R32G32B32F * dst,const gl::ColorF * src)1652 void R32G32B32F::writeColor(R32G32B32F *dst, const gl::ColorF *src)
1653 {
1654     dst->R = src->red;
1655     dst->G = src->green;
1656     dst->B = src->blue;
1657 }
1658 
average(R32G32B32F * dst,const R32G32B32F * src1,const R32G32B32F * src2)1659 void R32G32B32F::average(R32G32B32F *dst, const R32G32B32F *src1, const R32G32B32F *src2)
1660 {
1661     dst->R = gl::average(src1->R, src2->R);
1662     dst->G = gl::average(src1->G, src2->G);
1663     dst->B = gl::average(src1->B, src2->B);
1664 }
1665 
readColor(gl::ColorUI * dst,const R10G10B10A2 * src)1666 void R10G10B10A2::readColor(gl::ColorUI *dst, const R10G10B10A2 *src)
1667 {
1668     dst->red   = src->R;
1669     dst->green = src->G;
1670     dst->blue  = src->B;
1671     dst->alpha = src->A;
1672 }
1673 
readColor(gl::ColorF * dst,const R10G10B10A2 * src)1674 void R10G10B10A2::readColor(gl::ColorF *dst, const R10G10B10A2 *src)
1675 {
1676     dst->red   = gl::normalizedToFloat<10>(src->R);
1677     dst->green = gl::normalizedToFloat<10>(src->G);
1678     dst->blue  = gl::normalizedToFloat<10>(src->B);
1679     dst->alpha = gl::normalizedToFloat<2>(src->A);
1680 }
1681 
writeColor(R10G10B10A2 * dst,const gl::ColorUI * src)1682 void R10G10B10A2::writeColor(R10G10B10A2 *dst, const gl::ColorUI *src)
1683 {
1684     dst->R = static_cast<uint32_t>(src->red);
1685     dst->G = static_cast<uint32_t>(src->green);
1686     dst->B = static_cast<uint32_t>(src->blue);
1687     dst->A = static_cast<uint32_t>(src->alpha);
1688 }
1689 
writeColor(R10G10B10A2 * dst,const gl::ColorF * src)1690 void R10G10B10A2::writeColor(R10G10B10A2 *dst, const gl::ColorF *src)
1691 {
1692     dst->R = gl::floatToNormalized<10, uint32_t>(src->red);
1693     dst->G = gl::floatToNormalized<10, uint32_t>(src->green);
1694     dst->B = gl::floatToNormalized<10, uint32_t>(src->blue);
1695     dst->A = gl::floatToNormalized<2, uint32_t>(src->alpha);
1696 }
1697 
average(R10G10B10A2 * dst,const R10G10B10A2 * src1,const R10G10B10A2 * src2)1698 void R10G10B10A2::average(R10G10B10A2 *dst, const R10G10B10A2 *src1, const R10G10B10A2 *src2)
1699 {
1700     dst->R = gl::average(src1->R, src2->R);
1701     dst->G = gl::average(src1->G, src2->G);
1702     dst->B = gl::average(src1->B, src2->B);
1703     dst->A = gl::average(src1->A, src2->A);
1704 }
1705 
readColor(gl::ColorI * dst,const R10G10B10A2S * src)1706 void R10G10B10A2S::readColor(gl::ColorI *dst, const R10G10B10A2S *src)
1707 {
1708     dst->red   = src->R;
1709     dst->green = src->G;
1710     dst->blue  = src->B;
1711     dst->alpha = src->A;
1712 }
1713 
readColor(gl::ColorF * dst,const R10G10B10A2S * src)1714 void R10G10B10A2S::readColor(gl::ColorF *dst, const R10G10B10A2S *src)
1715 {
1716     dst->red   = gl::normalizedToFloat<10>(src->R);
1717     dst->green = gl::normalizedToFloat<10>(src->G);
1718     dst->blue  = gl::normalizedToFloat<10>(src->B);
1719     dst->alpha = gl::normalizedToFloat<2>(src->A);
1720 }
1721 
writeColor(R10G10B10A2S * dst,const gl::ColorI * src)1722 void R10G10B10A2S::writeColor(R10G10B10A2S *dst, const gl::ColorI *src)
1723 {
1724     dst->R = static_cast<int32_t>(src->red);
1725     dst->G = static_cast<int32_t>(src->green);
1726     dst->B = static_cast<int32_t>(src->blue);
1727     dst->A = static_cast<int32_t>(src->alpha);
1728 }
1729 
writeColor(R10G10B10A2S * dst,const gl::ColorF * src)1730 void R10G10B10A2S::writeColor(R10G10B10A2S *dst, const gl::ColorF *src)
1731 {
1732     dst->R = gl::floatToNormalized<10, int32_t>(src->red);
1733     dst->G = gl::floatToNormalized<10, int32_t>(src->green);
1734     dst->B = gl::floatToNormalized<10, int32_t>(src->blue);
1735     dst->A = gl::floatToNormalized<2, int32_t>(src->alpha);
1736 }
1737 
average(R10G10B10A2S * dst,const R10G10B10A2S * src1,const R10G10B10A2S * src2)1738 void R10G10B10A2S::average(R10G10B10A2S *dst, const R10G10B10A2S *src1, const R10G10B10A2S *src2)
1739 {
1740     dst->R = gl::average(src1->R, src2->R);
1741     dst->G = gl::average(src1->G, src2->G);
1742     dst->B = gl::average(src1->B, src2->B);
1743     dst->A = gl::average(src1->A, src2->A);
1744 }
1745 
readColor(gl::ColorUI * dst,const R10G10B10X2 * src)1746 void R10G10B10X2::readColor(gl::ColorUI *dst, const R10G10B10X2 *src)
1747 {
1748     dst->red   = src->R;
1749     dst->green = src->G;
1750     dst->blue  = src->B;
1751     dst->alpha = 0x3;
1752 }
1753 
readColor(gl::ColorF * dst,const R10G10B10X2 * src)1754 void R10G10B10X2::readColor(gl::ColorF *dst, const R10G10B10X2 *src)
1755 {
1756     dst->red   = gl::normalizedToFloat<10>(src->R);
1757     dst->green = gl::normalizedToFloat<10>(src->G);
1758     dst->blue  = gl::normalizedToFloat<10>(src->B);
1759     dst->alpha = 1.0f;
1760 }
1761 
writeColor(R10G10B10X2 * dst,const gl::ColorUI * src)1762 void R10G10B10X2::writeColor(R10G10B10X2 *dst, const gl::ColorUI *src)
1763 {
1764     dst->R = static_cast<uint32_t>(src->red);
1765     dst->G = static_cast<uint32_t>(src->green);
1766     dst->B = static_cast<uint32_t>(src->blue);
1767 }
1768 
writeColor(R10G10B10X2 * dst,const gl::ColorF * src)1769 void R10G10B10X2::writeColor(R10G10B10X2 *dst, const gl::ColorF *src)
1770 {
1771     dst->R = gl::floatToNormalized<10, uint32_t>(src->red);
1772     dst->G = gl::floatToNormalized<10, uint32_t>(src->green);
1773     dst->B = gl::floatToNormalized<10, uint32_t>(src->blue);
1774 }
1775 
average(R10G10B10X2 * dst,const R10G10B10X2 * src1,const R10G10B10X2 * src2)1776 void R10G10B10X2::average(R10G10B10X2 *dst, const R10G10B10X2 *src1, const R10G10B10X2 *src2)
1777 {
1778     dst->R = gl::average(src1->R, src2->R);
1779     dst->G = gl::average(src1->G, src2->G);
1780     dst->B = gl::average(src1->B, src2->B);
1781 }
1782 
readColor(gl::ColorUI * dst,const B10G10R10A2 * src)1783 void B10G10R10A2::readColor(gl::ColorUI *dst, const B10G10R10A2 *src)
1784 {
1785     dst->red   = src->R;
1786     dst->green = src->G;
1787     dst->blue  = src->B;
1788     dst->alpha = src->A;
1789 }
1790 
readColor(gl::ColorF * dst,const B10G10R10A2 * src)1791 void B10G10R10A2::readColor(gl::ColorF *dst, const B10G10R10A2 *src)
1792 {
1793     dst->red   = gl::normalizedToFloat<10>(src->R);
1794     dst->green = gl::normalizedToFloat<10>(src->G);
1795     dst->blue  = gl::normalizedToFloat<10>(src->B);
1796     dst->alpha = gl::normalizedToFloat<2>(src->A);
1797 }
1798 
writeColor(B10G10R10A2 * dst,const gl::ColorUI * src)1799 void B10G10R10A2::writeColor(B10G10R10A2 *dst, const gl::ColorUI *src)
1800 {
1801     dst->R = static_cast<uint32_t>(src->red);
1802     dst->G = static_cast<uint32_t>(src->green);
1803     dst->B = static_cast<uint32_t>(src->blue);
1804     dst->A = static_cast<uint32_t>(src->alpha);
1805 }
1806 
writeColor(B10G10R10A2 * dst,const gl::ColorF * src)1807 void B10G10R10A2::writeColor(B10G10R10A2 *dst, const gl::ColorF *src)
1808 {
1809     dst->R = gl::floatToNormalized<10, uint32_t>(src->red);
1810     dst->G = gl::floatToNormalized<10, uint32_t>(src->green);
1811     dst->B = gl::floatToNormalized<10, uint32_t>(src->blue);
1812     dst->A = gl::floatToNormalized<2, uint32_t>(src->alpha);
1813 }
1814 
average(B10G10R10A2 * dst,const B10G10R10A2 * src1,const B10G10R10A2 * src2)1815 void B10G10R10A2::average(B10G10R10A2 *dst, const B10G10R10A2 *src1, const B10G10R10A2 *src2)
1816 {
1817     dst->R = gl::average(src1->R, src2->R);
1818     dst->G = gl::average(src1->G, src2->G);
1819     dst->B = gl::average(src1->B, src2->B);
1820     dst->A = gl::average(src1->A, src2->A);
1821 }
1822 
readColor(gl::ColorF * dst,const R9G9B9E5 * src)1823 void R9G9B9E5::readColor(gl::ColorF *dst, const R9G9B9E5 *src)
1824 {
1825     gl::convert999E5toRGBFloats(gl::bitCast<uint32_t>(*src), &dst->red, &dst->green, &dst->blue);
1826     dst->alpha = 1.0f;
1827 }
1828 
writeColor(R9G9B9E5 * dst,const gl::ColorF * src)1829 void R9G9B9E5::writeColor(R9G9B9E5 *dst, const gl::ColorF *src)
1830 {
1831     *reinterpret_cast<uint32_t *>(dst) =
1832         gl::convertRGBFloatsTo999E5(src->red, src->green, src->blue);
1833 }
1834 
average(R9G9B9E5 * dst,const R9G9B9E5 * src1,const R9G9B9E5 * src2)1835 void R9G9B9E5::average(R9G9B9E5 *dst, const R9G9B9E5 *src1, const R9G9B9E5 *src2)
1836 {
1837     float r1, g1, b1;
1838     gl::convert999E5toRGBFloats(*reinterpret_cast<const uint32_t *>(src1), &r1, &g1, &b1);
1839 
1840     float r2, g2, b2;
1841     gl::convert999E5toRGBFloats(*reinterpret_cast<const uint32_t *>(src2), &r2, &g2, &b2);
1842 
1843     *reinterpret_cast<uint32_t *>(dst) =
1844         gl::convertRGBFloatsTo999E5(gl::average(r1, r2), gl::average(g1, g2), gl::average(b1, b2));
1845 }
1846 
readColor(gl::ColorF * dst,const R11G11B10F * src)1847 void R11G11B10F::readColor(gl::ColorF *dst, const R11G11B10F *src)
1848 {
1849     dst->red   = gl::float11ToFloat32(src->R);
1850     dst->green = gl::float11ToFloat32(src->G);
1851     dst->blue  = gl::float10ToFloat32(src->B);
1852     dst->alpha = 1.0f;
1853 }
1854 
writeColor(R11G11B10F * dst,const gl::ColorF * src)1855 void R11G11B10F::writeColor(R11G11B10F *dst, const gl::ColorF *src)
1856 {
1857     dst->R = gl::float32ToFloat11(src->red);
1858     dst->G = gl::float32ToFloat11(src->green);
1859     dst->B = gl::float32ToFloat10(src->blue);
1860 }
1861 
average(R11G11B10F * dst,const R11G11B10F * src1,const R11G11B10F * src2)1862 void R11G11B10F::average(R11G11B10F *dst, const R11G11B10F *src1, const R11G11B10F *src2)
1863 {
1864     dst->R = gl::averageFloat11(src1->R, src2->R);
1865     dst->G = gl::averageFloat11(src1->G, src2->G);
1866     dst->B = gl::averageFloat10(src1->B, src2->B);
1867 }
1868 
ReadDepthStencil(DepthStencil * dst,const D24S8 * src)1869 void D24S8::ReadDepthStencil(DepthStencil *dst, const D24S8 *src)
1870 {
1871     dst->depth   = gl::normalizedToFloat<24>(src->D);
1872     dst->stencil = src->S;
1873 }
1874 
WriteDepthStencil(D24S8 * dst,const DepthStencil * src)1875 void D24S8::WriteDepthStencil(D24S8 *dst, const DepthStencil *src)
1876 {
1877     dst->D = gl::floatToNormalized<24, uint32_t>(static_cast<float>(src->depth));
1878     dst->S = src->stencil & 0xFF;
1879 }
1880 
ReadDepthStencil(DepthStencil * dst,const S8 * src)1881 void S8::ReadDepthStencil(DepthStencil *dst, const S8 *src)
1882 {
1883     dst->depth   = 0;
1884     dst->stencil = src->S;
1885 }
1886 
WriteDepthStencil(S8 * dst,const DepthStencil * src)1887 void S8::WriteDepthStencil(S8 *dst, const DepthStencil *src)
1888 {
1889     dst->S = src->stencil & 0xFF;
1890 }
1891 
ReadDepthStencil(DepthStencil * dst,const D16 * src)1892 void D16::ReadDepthStencil(DepthStencil *dst, const D16 *src)
1893 {
1894     dst->depth   = gl::normalizedToFloat(src->D);
1895     dst->stencil = 0;
1896 }
1897 
WriteDepthStencil(D16 * dst,const DepthStencil * src)1898 void D16::WriteDepthStencil(D16 *dst, const DepthStencil *src)
1899 {
1900     dst->D = gl::floatToNormalized<uint16_t>(static_cast<float>(src->depth));
1901 }
1902 
ReadDepthStencil(DepthStencil * dst,const D24X8 * src)1903 void D24X8::ReadDepthStencil(DepthStencil *dst, const D24X8 *src)
1904 {
1905     dst->depth = gl::normalizedToFloat<24>(src->D & 0x00ffffff);
1906 }
1907 
WriteDepthStencil(D24X8 * dst,const DepthStencil * src)1908 void D24X8::WriteDepthStencil(D24X8 *dst, const DepthStencil *src)
1909 {
1910     dst->D = gl::floatToNormalized<24, uint32_t>(static_cast<float>(src->depth));
1911 }
1912 
ReadDepthStencil(DepthStencil * dst,const D32F * src)1913 void D32F::ReadDepthStencil(DepthStencil *dst, const D32F *src)
1914 {
1915     dst->depth = src->D;
1916 }
1917 
WriteDepthStencil(D32F * dst,const DepthStencil * src)1918 void D32F::WriteDepthStencil(D32F *dst, const DepthStencil *src)
1919 {
1920     dst->D = static_cast<float>(src->depth);
1921 }
1922 
ReadDepthStencil(DepthStencil * dst,const D32 * src)1923 void D32::ReadDepthStencil(DepthStencil *dst, const D32 *src)
1924 {
1925     dst->depth   = gl::normalizedToFloat(src->D);
1926     dst->stencil = 0;
1927 }
1928 
WriteDepthStencil(D32 * dst,const DepthStencil * src)1929 void D32::WriteDepthStencil(D32 *dst, const DepthStencil *src)
1930 {
1931     dst->D = gl::floatToNormalized<uint32_t>(static_cast<float>(src->depth));
1932 }
1933 
ReadDepthStencil(DepthStencil * dst,const D32FS8X24 * src)1934 void D32FS8X24::ReadDepthStencil(DepthStencil *dst, const D32FS8X24 *src)
1935 {
1936     dst->depth   = src->D;
1937     dst->stencil = src->S;
1938 }
1939 
WriteDepthStencil(D32FS8X24 * dst,const DepthStencil * src)1940 void D32FS8X24::WriteDepthStencil(D32FS8X24 *dst, const DepthStencil *src)
1941 {
1942     dst->D = static_cast<float>(src->depth);
1943     dst->S = src->stencil & 0xFF;
1944 }
1945 }  // namespace angle
1946