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