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