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