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