Path: blob/main_old/src/image_util/imageformats.cpp
1693 views
//1// Copyright 2016 The ANGLE Project Authors. All rights reserved.2// Use of this source code is governed by a BSD-style license that can be3// found in the LICENSE file.4//56// imageformats.cpp: Defines image format types with functions for mip generation7// and copying.89#include "image_util/imageformats.h"1011#include "common/mathutil.h"1213namespace angle14{1516void L8::readColor(gl::ColorF *dst, const L8 *src)17{18const float lum = gl::normalizedToFloat(src->L);19dst->red = lum;20dst->green = lum;21dst->blue = lum;22dst->alpha = 1.0f;23}2425void L8::writeColor(L8 *dst, const gl::ColorF *src)26{27dst->L = gl::floatToNormalized<uint8_t>(src->red);28}2930void L8::average(L8 *dst, const L8 *src1, const L8 *src2)31{32dst->L = gl::average(src1->L, src2->L);33}3435void R8::readColor(gl::ColorUI *dst, const R8 *src)36{37dst->red = src->R;38dst->green = 0;39dst->blue = 0;40dst->alpha = 1;41}4243void R8::readColor(gl::ColorF *dst, const R8 *src)44{45dst->red = gl::normalizedToFloat(src->R);46dst->green = 0.0f;47dst->blue = 0.0f;48dst->alpha = 1.0f;49}5051void R8::writeColor(R8 *dst, const gl::ColorUI *src)52{53dst->R = static_cast<uint8_t>(src->red);54}5556void R8::writeColor(R8 *dst, const gl::ColorF *src)57{58dst->R = gl::floatToNormalized<uint8_t>(src->red);59}6061void R8::average(R8 *dst, const R8 *src1, const R8 *src2)62{63dst->R = gl::average(src1->R, src2->R);64}6566void A8::readColor(gl::ColorF *dst, const A8 *src)67{68dst->red = 0.0f;69dst->green = 0.0f;70dst->blue = 0.0f;71dst->alpha = gl::normalizedToFloat(src->A);72}7374void A8::writeColor(A8 *dst, const gl::ColorF *src)75{76dst->A = gl::floatToNormalized<uint8_t>(src->alpha);77}7879void A8::average(A8 *dst, const A8 *src1, const A8 *src2)80{81dst->A = gl::average(src1->A, src2->A);82}8384void L8A8::readColor(gl::ColorF *dst, const L8A8 *src)85{86const float lum = gl::normalizedToFloat(src->L);87dst->red = lum;88dst->green = lum;89dst->blue = lum;90dst->alpha = gl::normalizedToFloat(src->A);91}9293void L8A8::writeColor(L8A8 *dst, const gl::ColorF *src)94{95dst->L = gl::floatToNormalized<uint8_t>(src->red);96dst->A = gl::floatToNormalized<uint8_t>(src->alpha);97}9899void L8A8::average(L8A8 *dst, const L8A8 *src1, const L8A8 *src2)100{101*(uint16_t *)dst = (((*(uint16_t *)src1 ^ *(uint16_t *)src2) & 0xFEFE) >> 1) +102(*(uint16_t *)src1 & *(uint16_t *)src2);103}104105void A8L8::readColor(gl::ColorF *dst, const A8L8 *src)106{107const float lum = gl::normalizedToFloat(src->L);108dst->red = lum;109dst->green = lum;110dst->blue = lum;111dst->alpha = gl::normalizedToFloat(src->A);112}113114void A8L8::writeColor(A8L8 *dst, const gl::ColorF *src)115{116dst->L = gl::floatToNormalized<uint8_t>(src->red);117dst->A = gl::floatToNormalized<uint8_t>(src->alpha);118}119120void A8L8::average(A8L8 *dst, const A8L8 *src1, const A8L8 *src2)121{122*(uint16_t *)dst = (((*(uint16_t *)src1 ^ *(uint16_t *)src2) & 0xFEFE) >> 1) +123(*(uint16_t *)src1 & *(uint16_t *)src2);124}125126void R8G8::readColor(gl::ColorUI *dst, const R8G8 *src)127{128dst->red = src->R;129dst->green = src->G;130dst->blue = 0;131dst->alpha = 1;132}133134void R8G8::readColor(gl::ColorF *dst, const R8G8 *src)135{136dst->red = gl::normalizedToFloat(src->R);137dst->green = gl::normalizedToFloat(src->G);138dst->blue = 0.0f;139dst->alpha = 1.0f;140}141142void R8G8::writeColor(R8G8 *dst, const gl::ColorUI *src)143{144dst->R = static_cast<uint8_t>(src->red);145dst->G = static_cast<uint8_t>(src->green);146}147148void R8G8::writeColor(R8G8 *dst, const gl::ColorF *src)149{150dst->R = gl::floatToNormalized<uint8_t>(src->red);151dst->G = gl::floatToNormalized<uint8_t>(src->green);152}153154void R8G8::average(R8G8 *dst, const R8G8 *src1, const R8G8 *src2)155{156*(uint16_t *)dst = (((*(uint16_t *)src1 ^ *(uint16_t *)src2) & 0xFEFE) >> 1) +157(*(uint16_t *)src1 & *(uint16_t *)src2);158}159160void R8G8B8::readColor(gl::ColorUI *dst, const R8G8B8 *src)161{162dst->red = src->R;163dst->green = src->G;164dst->blue = src->G;165dst->alpha = 1;166}167168void R8G8B8::readColor(gl::ColorF *dst, const R8G8B8 *src)169{170dst->red = gl::normalizedToFloat(src->R);171dst->green = gl::normalizedToFloat(src->G);172dst->blue = gl::normalizedToFloat(src->B);173dst->alpha = 1.0f;174}175176void R8G8B8::writeColor(R8G8B8 *dst, const gl::ColorUI *src)177{178dst->R = static_cast<uint8_t>(src->red);179dst->G = static_cast<uint8_t>(src->green);180dst->B = static_cast<uint8_t>(src->blue);181}182183void R8G8B8::writeColor(R8G8B8 *dst, const gl::ColorF *src)184{185dst->R = gl::floatToNormalized<uint8_t>(src->red);186dst->G = gl::floatToNormalized<uint8_t>(src->green);187dst->B = gl::floatToNormalized<uint8_t>(src->blue);188}189190void R8G8B8::average(R8G8B8 *dst, const R8G8B8 *src1, const R8G8B8 *src2)191{192dst->R = gl::average(src1->R, src2->R);193dst->G = gl::average(src1->G, src2->G);194dst->B = gl::average(src1->B, src2->B);195}196197void B8G8R8::readColor(gl::ColorUI *dst, const B8G8R8 *src)198{199dst->red = src->R;200dst->green = src->G;201dst->blue = src->G;202dst->alpha = 1;203}204205void B8G8R8::readColor(gl::ColorF *dst, const B8G8R8 *src)206{207dst->red = gl::normalizedToFloat(src->R);208dst->green = gl::normalizedToFloat(src->G);209dst->blue = gl::normalizedToFloat(src->B);210dst->alpha = 1.0f;211}212213void B8G8R8::writeColor(B8G8R8 *dst, const gl::ColorUI *src)214{215dst->R = static_cast<uint8_t>(src->red);216dst->G = static_cast<uint8_t>(src->green);217dst->B = static_cast<uint8_t>(src->blue);218}219220void B8G8R8::writeColor(B8G8R8 *dst, const gl::ColorF *src)221{222dst->R = gl::floatToNormalized<uint8_t>(src->red);223dst->G = gl::floatToNormalized<uint8_t>(src->green);224dst->B = gl::floatToNormalized<uint8_t>(src->blue);225}226227void B8G8R8::average(B8G8R8 *dst, const B8G8R8 *src1, const B8G8R8 *src2)228{229dst->R = gl::average(src1->R, src2->R);230dst->G = gl::average(src1->G, src2->G);231dst->B = gl::average(src1->B, src2->B);232}233234void R5G6B5::readColor(gl::ColorF *dst, const R5G6B5 *src)235{236dst->red = gl::normalizedToFloat<5>(gl::getShiftedData<5, 11>(src->RGB));237dst->green = gl::normalizedToFloat<6>(gl::getShiftedData<6, 5>(src->RGB));238dst->blue = gl::normalizedToFloat<5>(gl::getShiftedData<5, 0>(src->RGB));239dst->alpha = 1.0f;240}241242void R5G6B5::writeColor(R5G6B5 *dst, const gl::ColorF *src)243{244dst->RGB = gl::shiftData<5, 11>(gl::floatToNormalized<5, uint16_t>(src->red)) |245gl::shiftData<6, 5>(gl::floatToNormalized<6, uint16_t>(src->green)) |246gl::shiftData<5, 0>(gl::floatToNormalized<5, uint16_t>(src->blue));247}248249void R5G6B5::average(R5G6B5 *dst, const R5G6B5 *src1, const R5G6B5 *src2)250{251dst->RGB = gl::shiftData<5, 11>(gl::average(gl::getShiftedData<5, 11>(src1->RGB),252gl::getShiftedData<5, 11>(src2->RGB))) |253gl::shiftData<6, 5>(gl::average(gl::getShiftedData<6, 5>(src1->RGB),254gl::getShiftedData<6, 5>(src2->RGB))) |255gl::shiftData<5, 0>(gl::average(gl::getShiftedData<5, 0>(src1->RGB),256gl::getShiftedData<5, 0>(src2->RGB)));257}258259void B5G6R5::readColor(gl::ColorF *dst, const B5G6R5 *src)260{261dst->red = gl::normalizedToFloat<5>(gl::getShiftedData<5, 11>(src->BGR));262dst->green = gl::normalizedToFloat<6>(gl::getShiftedData<6, 5>(src->BGR));263dst->blue = gl::normalizedToFloat<5>(gl::getShiftedData<5, 0>(src->BGR));264dst->alpha = 1.0f;265}266267void B5G6R5::writeColor(B5G6R5 *dst, const gl::ColorF *src)268{269dst->BGR = gl::shiftData<5, 0>(gl::floatToNormalized<5, unsigned short>(src->blue)) |270gl::shiftData<6, 5>(gl::floatToNormalized<6, unsigned short>(src->green)) |271gl::shiftData<5, 11>(gl::floatToNormalized<5, unsigned short>(src->red));272}273274void B5G6R5::average(B5G6R5 *dst, const B5G6R5 *src1, const B5G6R5 *src2)275{276dst->BGR = gl::shiftData<5, 11>(gl::average(gl::getShiftedData<5, 11>(src1->BGR),277gl::getShiftedData<5, 11>(src2->BGR))) |278gl::shiftData<6, 5>(gl::average(gl::getShiftedData<6, 5>(src1->BGR),279gl::getShiftedData<6, 5>(src2->BGR))) |280gl::shiftData<5, 0>(gl::average(gl::getShiftedData<5, 0>(src1->BGR),281gl::getShiftedData<5, 0>(src2->BGR)));282}283284void A8R8G8B8::readColor(gl::ColorUI *dst, const A8R8G8B8 *src)285{286dst->red = src->R;287dst->green = src->G;288dst->blue = src->B;289dst->alpha = src->A;290}291292void A8R8G8B8::readColor(gl::ColorF *dst, const A8R8G8B8 *src)293{294dst->red = gl::normalizedToFloat(src->R);295dst->green = gl::normalizedToFloat(src->G);296dst->blue = gl::normalizedToFloat(src->B);297dst->alpha = gl::normalizedToFloat(src->A);298}299300void A8R8G8B8::writeColor(A8R8G8B8 *dst, const gl::ColorUI *src)301{302dst->R = static_cast<uint8_t>(src->red);303dst->G = static_cast<uint8_t>(src->green);304dst->B = static_cast<uint8_t>(src->blue);305dst->A = static_cast<uint8_t>(src->alpha);306}307308void A8R8G8B8::writeColor(A8R8G8B8 *dst, const gl::ColorF *src)309{310dst->R = gl::floatToNormalized<uint8_t>(src->red);311dst->G = gl::floatToNormalized<uint8_t>(src->green);312dst->B = gl::floatToNormalized<uint8_t>(src->blue);313dst->A = gl::floatToNormalized<uint8_t>(src->alpha);314}315316void A8R8G8B8::average(A8R8G8B8 *dst, const A8R8G8B8 *src1, const A8R8G8B8 *src2)317{318*(uint32_t *)dst = (((*(uint32_t *)src1 ^ *(uint32_t *)src2) & 0xFEFEFEFE) >> 1) +319(*(uint32_t *)src1 & *(uint32_t *)src2);320}321322void R8G8B8A8::readColor(gl::ColorUI *dst, const R8G8B8A8 *src)323{324dst->red = src->R;325dst->green = src->G;326dst->blue = src->B;327dst->alpha = src->A;328}329330void R8G8B8A8::readColor(gl::ColorF *dst, const R8G8B8A8 *src)331{332dst->red = gl::normalizedToFloat(src->R);333dst->green = gl::normalizedToFloat(src->G);334dst->blue = gl::normalizedToFloat(src->B);335dst->alpha = gl::normalizedToFloat(src->A);336}337338void R8G8B8A8::writeColor(R8G8B8A8 *dst, const gl::ColorUI *src)339{340dst->R = static_cast<uint8_t>(src->red);341dst->G = static_cast<uint8_t>(src->green);342dst->B = static_cast<uint8_t>(src->blue);343dst->A = static_cast<uint8_t>(src->alpha);344}345346void R8G8B8A8::writeColor(R8G8B8A8 *dst, const gl::ColorF *src)347{348dst->R = gl::floatToNormalized<uint8_t>(src->red);349dst->G = gl::floatToNormalized<uint8_t>(src->green);350dst->B = gl::floatToNormalized<uint8_t>(src->blue);351dst->A = gl::floatToNormalized<uint8_t>(src->alpha);352}353354void R8G8B8A8::average(R8G8B8A8 *dst, const R8G8B8A8 *src1, const R8G8B8A8 *src2)355{356*(uint32_t *)dst = (((*(uint32_t *)src1 ^ *(uint32_t *)src2) & 0xFEFEFEFE) >> 1) +357(*(uint32_t *)src1 & *(uint32_t *)src2);358}359360void R8G8B8A8SRGB::readColor(gl::ColorF *dst, const R8G8B8A8SRGB *src)361{362dst->red = gl::normalizedToFloat(src->R);363dst->green = gl::normalizedToFloat(src->G);364dst->blue = gl::normalizedToFloat(src->B);365dst->alpha = gl::normalizedToFloat(src->A);366}367368void R8G8B8A8SRGB::writeColor(R8G8B8A8SRGB *dst, const gl::ColorF *src)369{370dst->R = gl::floatToNormalized<uint8_t>(src->red);371dst->G = gl::floatToNormalized<uint8_t>(src->green);372dst->B = gl::floatToNormalized<uint8_t>(src->blue);373dst->A = gl::floatToNormalized<uint8_t>(src->alpha);374}375376void R8G8B8A8SRGB::average(R8G8B8A8SRGB *dst, const R8G8B8A8SRGB *src1, const R8G8B8A8SRGB *src2)377{378dst->R =379gl::linearToSRGB(static_cast<uint8_t>((static_cast<uint16_t>(gl::sRGBToLinear(src1->R)) +380static_cast<uint16_t>(gl::sRGBToLinear(src2->R))) >>3811));382dst->G =383gl::linearToSRGB(static_cast<uint8_t>((static_cast<uint16_t>(gl::sRGBToLinear(src1->G)) +384static_cast<uint16_t>(gl::sRGBToLinear(src2->G))) >>3851));386dst->B =387gl::linearToSRGB(static_cast<uint8_t>((static_cast<uint16_t>(gl::sRGBToLinear(src1->B)) +388static_cast<uint16_t>(gl::sRGBToLinear(src2->B))) >>3891));390dst->A = static_cast<uint8_t>(391(static_cast<uint16_t>(src1->A) + static_cast<uint16_t>(src2->A)) >> 1);392}393394void B8G8R8A8::readColor(gl::ColorUI *dst, const B8G8R8A8 *src)395{396dst->red = src->R;397dst->green = src->G;398dst->blue = src->B;399dst->alpha = src->A;400}401402void B8G8R8A8::readColor(gl::ColorF *dst, const B8G8R8A8 *src)403{404dst->red = gl::normalizedToFloat(src->R);405dst->green = gl::normalizedToFloat(src->G);406dst->blue = gl::normalizedToFloat(src->B);407dst->alpha = gl::normalizedToFloat(src->A);408}409410void B8G8R8A8::writeColor(B8G8R8A8 *dst, const gl::ColorUI *src)411{412dst->R = static_cast<uint8_t>(src->red);413dst->G = static_cast<uint8_t>(src->green);414dst->B = static_cast<uint8_t>(src->blue);415dst->A = static_cast<uint8_t>(src->alpha);416}417418void B8G8R8A8::writeColor(B8G8R8A8 *dst, const gl::ColorF *src)419{420dst->R = gl::floatToNormalized<uint8_t>(src->red);421dst->G = gl::floatToNormalized<uint8_t>(src->green);422dst->B = gl::floatToNormalized<uint8_t>(src->blue);423dst->A = gl::floatToNormalized<uint8_t>(src->alpha);424}425426void B8G8R8A8::average(B8G8R8A8 *dst, const B8G8R8A8 *src1, const B8G8R8A8 *src2)427{428*(uint32_t *)dst = (((*(uint32_t *)src1 ^ *(uint32_t *)src2) & 0xFEFEFEFE) >> 1) +429(*(uint32_t *)src1 & *(uint32_t *)src2);430}431432void B8G8R8X8::readColor(gl::ColorUI *dst, const B8G8R8X8 *src)433{434dst->red = src->R;435dst->green = src->G;436dst->blue = src->B;437dst->alpha = 1;438}439440void B8G8R8X8::readColor(gl::ColorF *dst, const B8G8R8X8 *src)441{442dst->red = gl::normalizedToFloat(src->R);443dst->green = gl::normalizedToFloat(src->G);444dst->blue = gl::normalizedToFloat(src->B);445dst->alpha = 1.0f;446}447448void B8G8R8X8::writeColor(B8G8R8X8 *dst, const gl::ColorUI *src)449{450dst->R = static_cast<uint8_t>(src->red);451dst->G = static_cast<uint8_t>(src->green);452dst->B = static_cast<uint8_t>(src->blue);453dst->X = 255;454}455456void B8G8R8X8::writeColor(B8G8R8X8 *dst, const gl::ColorF *src)457{458dst->R = gl::floatToNormalized<uint8_t>(src->red);459dst->G = gl::floatToNormalized<uint8_t>(src->green);460dst->B = gl::floatToNormalized<uint8_t>(src->blue);461dst->X = 255;462}463464void B8G8R8X8::average(B8G8R8X8 *dst, const B8G8R8X8 *src1, const B8G8R8X8 *src2)465{466*(uint32_t *)dst = (((*(uint32_t *)src1 ^ *(uint32_t *)src2) & 0xFEFEFEFE) >> 1) +467(*(uint32_t *)src1 & *(uint32_t *)src2);468dst->X = 255;469}470471void A1R5G5B5::readColor(gl::ColorF *dst, const A1R5G5B5 *src)472{473dst->alpha = gl::normalizedToFloat<1>(gl::getShiftedData<1, 15>(src->ARGB));474dst->red = gl::normalizedToFloat<5>(gl::getShiftedData<5, 10>(src->ARGB));475dst->green = gl::normalizedToFloat<5>(gl::getShiftedData<5, 5>(src->ARGB));476dst->blue = gl::normalizedToFloat<5>(gl::getShiftedData<5, 0>(src->ARGB));477}478479void A1R5G5B5::writeColor(A1R5G5B5 *dst, const gl::ColorF *src)480{481dst->ARGB = gl::shiftData<1, 15>(gl::floatToNormalized<1, uint16_t>(src->alpha)) |482gl::shiftData<5, 10>(gl::floatToNormalized<5, uint16_t>(src->red)) |483gl::shiftData<5, 5>(gl::floatToNormalized<5, uint16_t>(src->green)) |484gl::shiftData<5, 0>(gl::floatToNormalized<5, uint16_t>(src->blue));485}486487void A1R5G5B5::average(A1R5G5B5 *dst, const A1R5G5B5 *src1, const A1R5G5B5 *src2)488{489dst->ARGB = gl::shiftData<1, 15>(gl::average(gl::getShiftedData<1, 15>(src1->ARGB),490gl::getShiftedData<1, 15>(src2->ARGB))) |491gl::shiftData<5, 10>(gl::average(gl::getShiftedData<5, 10>(src1->ARGB),492gl::getShiftedData<5, 10>(src2->ARGB))) |493gl::shiftData<5, 5>(gl::average(gl::getShiftedData<5, 5>(src1->ARGB),494gl::getShiftedData<5, 5>(src2->ARGB))) |495gl::shiftData<5, 0>(gl::average(gl::getShiftedData<5, 0>(src1->ARGB),496gl::getShiftedData<5, 0>(src2->ARGB)));497}498499void R5G5B5A1::readColor(gl::ColorF *dst, const R5G5B5A1 *src)500{501dst->red = gl::normalizedToFloat<5>(gl::getShiftedData<5, 11>(src->RGBA));502dst->green = gl::normalizedToFloat<5>(gl::getShiftedData<5, 6>(src->RGBA));503dst->blue = gl::normalizedToFloat<5>(gl::getShiftedData<5, 1>(src->RGBA));504dst->alpha = gl::normalizedToFloat<1>(gl::getShiftedData<1, 0>(src->RGBA));505}506507void R5G5B5A1::writeColor(R5G5B5A1 *dst, const gl::ColorF *src)508{509dst->RGBA = gl::shiftData<5, 11>(gl::floatToNormalized<5, uint16_t>(src->red)) |510gl::shiftData<5, 6>(gl::floatToNormalized<5, uint16_t>(src->green)) |511gl::shiftData<5, 1>(gl::floatToNormalized<5, uint16_t>(src->blue)) |512gl::shiftData<1, 0>(gl::floatToNormalized<1, uint16_t>(src->alpha));513}514515void R5G5B5A1::average(R5G5B5A1 *dst, const R5G5B5A1 *src1, const R5G5B5A1 *src2)516{517dst->RGBA = gl::shiftData<5, 11>(gl::average(gl::getShiftedData<5, 11>(src1->RGBA),518gl::getShiftedData<5, 11>(src2->RGBA))) |519gl::shiftData<5, 6>(gl::average(gl::getShiftedData<5, 6>(src1->RGBA),520gl::getShiftedData<5, 6>(src2->RGBA))) |521gl::shiftData<5, 1>(gl::average(gl::getShiftedData<5, 1>(src1->RGBA),522gl::getShiftedData<5, 1>(src2->RGBA))) |523gl::shiftData<1, 0>(gl::average(gl::getShiftedData<1, 0>(src1->RGBA),524gl::getShiftedData<1, 0>(src2->RGBA)));525}526527void R4G4B4A4::readColor(gl::ColorF *dst, const R4G4B4A4 *src)528{529dst->red = gl::normalizedToFloat<4>(gl::getShiftedData<4, 12>(src->RGBA));530dst->green = gl::normalizedToFloat<4>(gl::getShiftedData<4, 8>(src->RGBA));531dst->blue = gl::normalizedToFloat<4>(gl::getShiftedData<4, 4>(src->RGBA));532dst->alpha = gl::normalizedToFloat<4>(gl::getShiftedData<4, 0>(src->RGBA));533}534535void R4G4B4A4::writeColor(R4G4B4A4 *dst, const gl::ColorF *src)536{537dst->RGBA = gl::shiftData<4, 12>(gl::floatToNormalized<4, uint16_t>(src->red)) |538gl::shiftData<4, 8>(gl::floatToNormalized<4, uint16_t>(src->green)) |539gl::shiftData<4, 4>(gl::floatToNormalized<4, uint16_t>(src->blue)) |540gl::shiftData<4, 0>(gl::floatToNormalized<4, uint16_t>(src->alpha));541}542543void R4G4B4A4::average(R4G4B4A4 *dst, const R4G4B4A4 *src1, const R4G4B4A4 *src2)544{545dst->RGBA = gl::shiftData<4, 12>(gl::average(gl::getShiftedData<4, 12>(src1->RGBA),546gl::getShiftedData<4, 12>(src2->RGBA))) |547gl::shiftData<4, 8>(gl::average(gl::getShiftedData<4, 8>(src1->RGBA),548gl::getShiftedData<4, 8>(src2->RGBA))) |549gl::shiftData<4, 4>(gl::average(gl::getShiftedData<4, 4>(src1->RGBA),550gl::getShiftedData<4, 4>(src2->RGBA))) |551gl::shiftData<4, 0>(gl::average(gl::getShiftedData<4, 0>(src1->RGBA),552gl::getShiftedData<4, 0>(src2->RGBA)));553}554555void A4R4G4B4::readColor(gl::ColorF *dst, const A4R4G4B4 *src)556{557dst->alpha = gl::normalizedToFloat<4>(gl::getShiftedData<4, 12>(src->ARGB));558dst->red = gl::normalizedToFloat<4>(gl::getShiftedData<4, 8>(src->ARGB));559dst->green = gl::normalizedToFloat<4>(gl::getShiftedData<4, 4>(src->ARGB));560dst->blue = gl::normalizedToFloat<4>(gl::getShiftedData<4, 0>(src->ARGB));561}562563void A4R4G4B4::writeColor(A4R4G4B4 *dst, const gl::ColorF *src)564{565dst->ARGB = gl::shiftData<4, 12>(gl::floatToNormalized<4, uint16_t>(src->alpha)) |566gl::shiftData<4, 8>(gl::floatToNormalized<4, uint16_t>(src->red)) |567gl::shiftData<4, 4>(gl::floatToNormalized<4, uint16_t>(src->green)) |568gl::shiftData<4, 0>(gl::floatToNormalized<4, uint16_t>(src->blue));569}570571void A4R4G4B4::average(A4R4G4B4 *dst, const A4R4G4B4 *src1, const A4R4G4B4 *src2)572{573dst->ARGB = gl::shiftData<4, 12>(gl::average(gl::getShiftedData<4, 12>(src1->ARGB),574gl::getShiftedData<4, 12>(src2->ARGB))) |575gl::shiftData<4, 8>(gl::average(gl::getShiftedData<4, 8>(src1->ARGB),576gl::getShiftedData<4, 8>(src2->ARGB))) |577gl::shiftData<4, 4>(gl::average(gl::getShiftedData<4, 4>(src1->ARGB),578gl::getShiftedData<4, 4>(src2->ARGB))) |579gl::shiftData<4, 0>(gl::average(gl::getShiftedData<4, 0>(src1->ARGB),580gl::getShiftedData<4, 0>(src2->ARGB)));581}582583void R16::readColor(gl::ColorUI *dst, const R16 *src)584{585dst->red = src->R;586dst->green = 0;587dst->blue = 0;588dst->alpha = 1;589}590591void R16::readColor(gl::ColorF *dst, const R16 *src)592{593dst->red = gl::normalizedToFloat(src->R);594dst->green = 0.0f;595dst->blue = 0.0f;596dst->alpha = 1.0f;597}598599void R16::writeColor(R16 *dst, const gl::ColorUI *src)600{601dst->R = static_cast<uint16_t>(src->red);602}603604void R16::writeColor(R16 *dst, const gl::ColorF *src)605{606dst->R = gl::floatToNormalized<uint16_t>(src->red);607}608609void R16::average(R16 *dst, const R16 *src1, const R16 *src2)610{611dst->R = gl::average(src1->R, src2->R);612}613614void R16G16::readColor(gl::ColorUI *dst, const R16G16 *src)615{616dst->red = src->R;617dst->green = src->G;618dst->blue = 0;619dst->alpha = 1;620}621622void R16G16::readColor(gl::ColorF *dst, const R16G16 *src)623{624dst->red = gl::normalizedToFloat(src->R);625dst->green = gl::normalizedToFloat(src->G);626dst->blue = 0.0f;627dst->alpha = 1.0f;628}629630void R16G16::writeColor(R16G16 *dst, const gl::ColorUI *src)631{632dst->R = static_cast<uint16_t>(src->red);633dst->G = static_cast<uint16_t>(src->green);634}635636void R16G16::writeColor(R16G16 *dst, const gl::ColorF *src)637{638dst->R = gl::floatToNormalized<uint16_t>(src->red);639dst->G = gl::floatToNormalized<uint16_t>(src->green);640}641642void R16G16::average(R16G16 *dst, const R16G16 *src1, const R16G16 *src2)643{644dst->R = gl::average(src1->R, src2->R);645dst->G = gl::average(src1->G, src2->G);646}647648void R16G16B16::readColor(gl::ColorUI *dst, const R16G16B16 *src)649{650dst->red = src->R;651dst->green = src->G;652dst->blue = src->B;653dst->alpha = 1;654}655656void R16G16B16::readColor(gl::ColorF *dst, const R16G16B16 *src)657{658dst->red = gl::normalizedToFloat(src->R);659dst->green = gl::normalizedToFloat(src->G);660dst->blue = gl::normalizedToFloat(src->B);661dst->alpha = 1.0f;662}663664void R16G16B16::writeColor(R16G16B16 *dst, const gl::ColorUI *src)665{666dst->R = static_cast<uint16_t>(src->red);667dst->G = static_cast<uint16_t>(src->green);668dst->B = static_cast<uint16_t>(src->blue);669}670671void R16G16B16::writeColor(R16G16B16 *dst, const gl::ColorF *src)672{673dst->R = gl::floatToNormalized<uint16_t>(src->red);674dst->G = gl::floatToNormalized<uint16_t>(src->green);675dst->B = gl::floatToNormalized<uint16_t>(src->blue);676}677678void R16G16B16::average(R16G16B16 *dst, const R16G16B16 *src1, const R16G16B16 *src2)679{680dst->R = gl::average(src1->R, src2->R);681dst->G = gl::average(src1->G, src2->G);682dst->B = gl::average(src1->B, src2->B);683}684685void R16G16B16A16::readColor(gl::ColorUI *dst, const R16G16B16A16 *src)686{687dst->red = src->R;688dst->green = src->G;689dst->blue = src->B;690dst->alpha = src->A;691}692693void R16G16B16A16::readColor(gl::ColorF *dst, const R16G16B16A16 *src)694{695dst->red = gl::normalizedToFloat(src->R);696dst->green = gl::normalizedToFloat(src->G);697dst->blue = gl::normalizedToFloat(src->B);698dst->alpha = gl::normalizedToFloat(src->A);699}700701void R16G16B16A16::writeColor(R16G16B16A16 *dst, const gl::ColorUI *src)702{703dst->R = static_cast<uint16_t>(src->red);704dst->G = static_cast<uint16_t>(src->green);705dst->B = static_cast<uint16_t>(src->blue);706dst->A = static_cast<uint16_t>(src->alpha);707}708709void R16G16B16A16::writeColor(R16G16B16A16 *dst, const gl::ColorF *src)710{711dst->R = gl::floatToNormalized<uint16_t>(src->red);712dst->G = gl::floatToNormalized<uint16_t>(src->green);713dst->B = gl::floatToNormalized<uint16_t>(src->blue);714dst->A = gl::floatToNormalized<uint16_t>(src->alpha);715}716717void R16G16B16A16::average(R16G16B16A16 *dst, const R16G16B16A16 *src1, const R16G16B16A16 *src2)718{719dst->R = gl::average(src1->R, src2->R);720dst->G = gl::average(src1->G, src2->G);721dst->B = gl::average(src1->B, src2->B);722dst->A = gl::average(src1->A, src2->A);723}724725void R32::readColor(gl::ColorUI *dst, const R32 *src)726{727dst->red = src->R;728dst->green = 0;729dst->blue = 0;730dst->alpha = 1;731}732733void R32::readColor(gl::ColorF *dst, const R32 *src)734{735dst->red = gl::normalizedToFloat(src->R);736dst->green = 0.0f;737dst->blue = 0.0f;738dst->alpha = 1.0f;739}740741void R32::writeColor(R32 *dst, const gl::ColorUI *src)742{743dst->R = static_cast<uint32_t>(src->red);744}745746void R32::writeColor(R32 *dst, const gl::ColorF *src)747{748dst->R = gl::floatToNormalized<uint32_t>(src->red);749}750751void R32::average(R32 *dst, const R32 *src1, const R32 *src2)752{753dst->R = gl::average(src1->R, src2->R);754}755756void R32G32::readColor(gl::ColorUI *dst, const R32G32 *src)757{758dst->red = src->R;759dst->green = src->G;760dst->blue = 0;761dst->alpha = 1;762}763764void R32G32::readColor(gl::ColorF *dst, const R32G32 *src)765{766dst->red = gl::normalizedToFloat(src->R);767dst->green = gl::normalizedToFloat(src->G);768dst->blue = 0.0f;769dst->alpha = 1.0f;770}771772void R32G32::writeColor(R32G32 *dst, const gl::ColorUI *src)773{774dst->R = static_cast<uint32_t>(src->red);775dst->G = static_cast<uint32_t>(src->green);776}777778void R32G32::writeColor(R32G32 *dst, const gl::ColorF *src)779{780dst->R = gl::floatToNormalized<uint32_t>(src->red);781dst->G = gl::floatToNormalized<uint32_t>(src->green);782}783784void R32G32::average(R32G32 *dst, const R32G32 *src1, const R32G32 *src2)785{786dst->R = gl::average(src1->R, src2->R);787dst->G = gl::average(src1->G, src2->G);788}789790void R32G32B32::readColor(gl::ColorUI *dst, const R32G32B32 *src)791{792dst->red = src->R;793dst->green = src->G;794dst->blue = src->B;795dst->alpha = 1;796}797798void R32G32B32::readColor(gl::ColorF *dst, const R32G32B32 *src)799{800dst->red = gl::normalizedToFloat(src->R);801dst->green = gl::normalizedToFloat(src->G);802dst->blue = gl::normalizedToFloat(src->B);803dst->alpha = 1.0f;804}805806void R32G32B32::writeColor(R32G32B32 *dst, const gl::ColorUI *src)807{808dst->R = static_cast<uint32_t>(src->red);809dst->G = static_cast<uint32_t>(src->green);810dst->B = static_cast<uint32_t>(src->blue);811}812813void R32G32B32::writeColor(R32G32B32 *dst, const gl::ColorF *src)814{815dst->R = gl::floatToNormalized<uint32_t>(src->red);816dst->G = gl::floatToNormalized<uint32_t>(src->green);817dst->B = gl::floatToNormalized<uint32_t>(src->blue);818}819820void R32G32B32::average(R32G32B32 *dst, const R32G32B32 *src1, const R32G32B32 *src2)821{822dst->R = gl::average(src1->R, src2->R);823dst->G = gl::average(src1->G, src2->G);824dst->B = gl::average(src1->B, src2->B);825}826827void R32G32B32A32::readColor(gl::ColorUI *dst, const R32G32B32A32 *src)828{829dst->red = src->R;830dst->green = src->G;831dst->blue = src->B;832dst->alpha = src->A;833}834835void R32G32B32A32::readColor(gl::ColorF *dst, const R32G32B32A32 *src)836{837dst->red = gl::normalizedToFloat(src->R);838dst->green = gl::normalizedToFloat(src->G);839dst->blue = gl::normalizedToFloat(src->B);840dst->alpha = gl::normalizedToFloat(src->A);841}842843void R32G32B32A32::writeColor(R32G32B32A32 *dst, const gl::ColorUI *src)844{845dst->R = static_cast<uint32_t>(src->red);846dst->G = static_cast<uint32_t>(src->green);847dst->B = static_cast<uint32_t>(src->blue);848dst->A = static_cast<uint32_t>(src->alpha);849}850851void R32G32B32A32::writeColor(R32G32B32A32 *dst, const gl::ColorF *src)852{853dst->R = gl::floatToNormalized<uint32_t>(src->red);854dst->G = gl::floatToNormalized<uint32_t>(src->green);855dst->B = gl::floatToNormalized<uint32_t>(src->blue);856dst->A = gl::floatToNormalized<uint32_t>(src->alpha);857}858859void R32G32B32A32::average(R32G32B32A32 *dst, const R32G32B32A32 *src1, const R32G32B32A32 *src2)860{861dst->R = gl::average(src1->R, src2->R);862dst->G = gl::average(src1->G, src2->G);863dst->B = gl::average(src1->B, src2->B);864dst->A = gl::average(src1->A, src2->A);865}866867void R8S::readColor(gl::ColorI *dst, const R8S *src)868{869dst->red = src->R;870dst->green = 0;871dst->blue = 0;872dst->alpha = 1;873}874875void R8S::readColor(gl::ColorF *dst, const R8S *src)876{877dst->red = gl::normalizedToFloat(src->R);878dst->green = 0.0f;879dst->blue = 0.0f;880dst->alpha = 1.0f;881}882883void R8S::writeColor(R8S *dst, const gl::ColorI *src)884{885dst->R = static_cast<int8_t>(src->red);886}887888void R8S::writeColor(R8S *dst, const gl::ColorF *src)889{890dst->R = gl::floatToNormalized<int8_t>(src->red);891}892893void R8S::average(R8S *dst, const R8S *src1, const R8S *src2)894{895dst->R = static_cast<int8_t>(gl::average(src1->R, src2->R));896}897898void R8G8S::readColor(gl::ColorI *dst, const R8G8S *src)899{900dst->red = src->R;901dst->green = src->G;902dst->blue = 0;903dst->alpha = 1;904}905906void R8G8S::readColor(gl::ColorF *dst, const R8G8S *src)907{908dst->red = gl::normalizedToFloat(src->R);909dst->green = gl::normalizedToFloat(src->G);910dst->blue = 0.0f;911dst->alpha = 1.0f;912}913914void R8G8S::writeColor(R8G8S *dst, const gl::ColorI *src)915{916dst->R = static_cast<int8_t>(src->red);917dst->G = static_cast<int8_t>(src->green);918}919920void R8G8S::writeColor(R8G8S *dst, const gl::ColorF *src)921{922dst->R = gl::floatToNormalized<int8_t>(src->red);923dst->G = gl::floatToNormalized<int8_t>(src->green);924}925926void R8G8S::average(R8G8S *dst, const R8G8S *src1, const R8G8S *src2)927{928dst->R = static_cast<int8_t>(gl::average(src1->R, src2->R));929dst->G = static_cast<int8_t>(gl::average(src1->G, src2->G));930}931932void R8G8B8S::readColor(gl::ColorI *dst, const R8G8B8S *src)933{934dst->red = src->R;935dst->green = src->G;936dst->blue = src->B;937dst->alpha = 1;938}939940void R8G8B8S::readColor(gl::ColorF *dst, const R8G8B8S *src)941{942dst->red = gl::normalizedToFloat(src->R);943dst->green = gl::normalizedToFloat(src->G);944dst->blue = gl::normalizedToFloat(src->B);945dst->alpha = 1.0f;946}947948void R8G8B8S::writeColor(R8G8B8S *dst, const gl::ColorI *src)949{950dst->R = static_cast<int8_t>(src->red);951dst->G = static_cast<int8_t>(src->green);952dst->B = static_cast<int8_t>(src->blue);953}954955void R8G8B8S::writeColor(R8G8B8S *dst, const gl::ColorF *src)956{957dst->R = gl::floatToNormalized<int8_t>(src->red);958dst->G = gl::floatToNormalized<int8_t>(src->green);959dst->B = gl::floatToNormalized<int8_t>(src->blue);960}961962void R8G8B8S::average(R8G8B8S *dst, const R8G8B8S *src1, const R8G8B8S *src2)963{964dst->R = static_cast<int8_t>(gl::average(src1->R, src2->R));965dst->G = static_cast<int8_t>(gl::average(src1->G, src2->G));966dst->B = static_cast<int8_t>(gl::average(src1->B, src2->B));967}968969void R8G8B8A8S::readColor(gl::ColorI *dst, const R8G8B8A8S *src)970{971dst->red = src->R;972dst->green = src->G;973dst->blue = src->B;974dst->alpha = src->A;975}976977void R8G8B8A8S::readColor(gl::ColorF *dst, const R8G8B8A8S *src)978{979dst->red = gl::normalizedToFloat(src->R);980dst->green = gl::normalizedToFloat(src->G);981dst->blue = gl::normalizedToFloat(src->B);982dst->alpha = gl::normalizedToFloat(src->A);983}984985void R8G8B8A8S::writeColor(R8G8B8A8S *dst, const gl::ColorI *src)986{987dst->R = static_cast<int8_t>(src->red);988dst->G = static_cast<int8_t>(src->green);989dst->B = static_cast<int8_t>(src->blue);990dst->A = static_cast<int8_t>(src->alpha);991}992993void R8G8B8A8S::writeColor(R8G8B8A8S *dst, const gl::ColorF *src)994{995dst->R = gl::floatToNormalized<int8_t>(src->red);996dst->G = gl::floatToNormalized<int8_t>(src->green);997dst->B = gl::floatToNormalized<int8_t>(src->blue);998dst->A = gl::floatToNormalized<int8_t>(src->alpha);999}10001001void R8G8B8A8S::average(R8G8B8A8S *dst, const R8G8B8A8S *src1, const R8G8B8A8S *src2)1002{1003dst->R = static_cast<int8_t>(gl::average(src1->R, src2->R));1004dst->G = static_cast<int8_t>(gl::average(src1->G, src2->G));1005dst->B = static_cast<int8_t>(gl::average(src1->B, src2->B));1006dst->A = static_cast<int8_t>(gl::average(src1->A, src2->A));1007}10081009void R16S::readColor(gl::ColorI *dst, const R16S *src)1010{1011dst->red = src->R;1012dst->green = 0;1013dst->blue = 0;1014dst->alpha = 1;1015}10161017void R16S::readColor(gl::ColorF *dst, const R16S *src)1018{1019dst->red = gl::normalizedToFloat(src->R);1020dst->green = 0.0f;1021dst->blue = 0.0f;1022dst->alpha = 1.0f;1023}10241025void R16S::writeColor(R16S *dst, const gl::ColorI *src)1026{1027dst->R = static_cast<int16_t>(src->red);1028}10291030void R16S::writeColor(R16S *dst, const gl::ColorF *src)1031{1032dst->R = gl::floatToNormalized<int16_t>(src->red);1033}10341035void R16S::average(R16S *dst, const R16S *src1, const R16S *src2)1036{1037dst->R = gl::average(src1->R, src2->R);1038}10391040void R16G16S::readColor(gl::ColorI *dst, const R16G16S *src)1041{1042dst->red = src->R;1043dst->green = src->G;1044dst->blue = 0;1045dst->alpha = 1;1046}10471048void R16G16S::readColor(gl::ColorF *dst, const R16G16S *src)1049{1050dst->red = gl::normalizedToFloat(src->R);1051dst->green = gl::normalizedToFloat(src->G);1052dst->blue = 0.0f;1053dst->alpha = 1.0f;1054}10551056void R16G16S::writeColor(R16G16S *dst, const gl::ColorI *src)1057{1058dst->R = static_cast<int16_t>(src->red);1059dst->G = static_cast<int16_t>(src->green);1060}10611062void R16G16S::writeColor(R16G16S *dst, const gl::ColorF *src)1063{1064dst->R = gl::floatToNormalized<int16_t>(src->red);1065dst->G = gl::floatToNormalized<int16_t>(src->green);1066}10671068void R16G16S::average(R16G16S *dst, const R16G16S *src1, const R16G16S *src2)1069{1070dst->R = gl::average(src1->R, src2->R);1071dst->G = gl::average(src1->G, src2->G);1072}10731074void R16G16B16S::readColor(gl::ColorI *dst, const R16G16B16S *src)1075{1076dst->red = src->R;1077dst->green = src->G;1078dst->blue = src->B;1079dst->alpha = 1;1080}10811082void R16G16B16S::readColor(gl::ColorF *dst, const R16G16B16S *src)1083{1084dst->red = gl::normalizedToFloat(src->R);1085dst->green = gl::normalizedToFloat(src->G);1086dst->blue = gl::normalizedToFloat(src->B);1087dst->alpha = 1.0f;1088}10891090void R16G16B16S::writeColor(R16G16B16S *dst, const gl::ColorI *src)1091{1092dst->R = static_cast<int16_t>(src->red);1093dst->G = static_cast<int16_t>(src->green);1094dst->B = static_cast<int16_t>(src->blue);1095}10961097void R16G16B16S::writeColor(R16G16B16S *dst, const gl::ColorF *src)1098{1099dst->R = gl::floatToNormalized<int16_t>(src->red);1100dst->G = gl::floatToNormalized<int16_t>(src->green);1101dst->B = gl::floatToNormalized<int16_t>(src->blue);1102}11031104void R16G16B16S::average(R16G16B16S *dst, const R16G16B16S *src1, const R16G16B16S *src2)1105{1106dst->R = gl::average(src1->R, src2->R);1107dst->G = gl::average(src1->G, src2->G);1108dst->B = gl::average(src1->B, src2->B);1109}11101111void R16G16B16A16S::readColor(gl::ColorI *dst, const R16G16B16A16S *src)1112{1113dst->red = src->R;1114dst->green = src->G;1115dst->blue = src->B;1116dst->alpha = src->A;1117}11181119void R16G16B16A16S::readColor(gl::ColorF *dst, const R16G16B16A16S *src)1120{1121dst->red = gl::normalizedToFloat(src->R);1122dst->green = gl::normalizedToFloat(src->G);1123dst->blue = gl::normalizedToFloat(src->B);1124dst->alpha = gl::normalizedToFloat(src->A);1125}11261127void R16G16B16A16S::writeColor(R16G16B16A16S *dst, const gl::ColorI *src)1128{1129dst->R = static_cast<int16_t>(src->red);1130dst->G = static_cast<int16_t>(src->green);1131dst->B = static_cast<int16_t>(src->blue);1132dst->A = static_cast<int16_t>(src->alpha);1133}11341135void R16G16B16A16S::writeColor(R16G16B16A16S *dst, const gl::ColorF *src)1136{1137dst->R = gl::floatToNormalized<int16_t>(src->red);1138dst->G = gl::floatToNormalized<int16_t>(src->green);1139dst->B = gl::floatToNormalized<int16_t>(src->blue);1140dst->A = gl::floatToNormalized<int16_t>(src->alpha);1141}11421143void R16G16B16A16S::average(R16G16B16A16S *dst,1144const R16G16B16A16S *src1,1145const R16G16B16A16S *src2)1146{1147dst->R = gl::average(src1->R, src2->R);1148dst->G = gl::average(src1->G, src2->G);1149dst->B = gl::average(src1->B, src2->B);1150dst->A = gl::average(src1->A, src2->A);1151}11521153void R32S::readColor(gl::ColorI *dst, const R32S *src)1154{1155dst->red = src->R;1156dst->green = 0;1157dst->blue = 0;1158dst->alpha = 1;1159}11601161void R32S::readColor(gl::ColorF *dst, const R32S *src)1162{1163dst->red = gl::normalizedToFloat(src->R);1164dst->green = 0.0f;1165dst->blue = 0.0f;1166dst->alpha = 1.0f;1167}11681169void R32S::writeColor(R32S *dst, const gl::ColorI *src)1170{1171dst->R = static_cast<int32_t>(src->red);1172}11731174void R32S::writeColor(R32S *dst, const gl::ColorF *src)1175{1176dst->R = gl::floatToNormalized<int32_t>(src->red);1177}11781179void R32S::average(R32S *dst, const R32S *src1, const R32S *src2)1180{1181dst->R = gl::average(src1->R, src2->R);1182}11831184void R32G32S::readColor(gl::ColorI *dst, const R32G32S *src)1185{1186dst->red = src->R;1187dst->green = src->G;1188dst->blue = 0;1189dst->alpha = 1;1190}11911192void R32G32S::readColor(gl::ColorF *dst, const R32G32S *src)1193{1194dst->red = gl::normalizedToFloat(src->R);1195dst->green = gl::normalizedToFloat(src->G);1196dst->blue = 0.0f;1197dst->alpha = 1.0f;1198}11991200void R32G32S::writeColor(R32G32S *dst, const gl::ColorI *src)1201{1202dst->R = static_cast<int32_t>(src->red);1203dst->G = static_cast<int32_t>(src->green);1204}12051206void R32G32S::writeColor(R32G32S *dst, const gl::ColorF *src)1207{1208dst->R = gl::floatToNormalized<int32_t>(src->red);1209dst->G = gl::floatToNormalized<int32_t>(src->green);1210}12111212void R32G32S::average(R32G32S *dst, const R32G32S *src1, const R32G32S *src2)1213{1214dst->R = gl::average(src1->R, src2->R);1215dst->G = gl::average(src1->G, src2->G);1216}12171218void R32G32B32S::readColor(gl::ColorI *dst, const R32G32B32S *src)1219{1220dst->red = src->R;1221dst->green = src->G;1222dst->blue = src->B;1223dst->alpha = 1;1224}12251226void R32G32B32S::readColor(gl::ColorF *dst, const R32G32B32S *src)1227{1228dst->red = gl::normalizedToFloat(src->R);1229dst->green = gl::normalizedToFloat(src->G);1230dst->blue = gl::normalizedToFloat(src->B);1231dst->alpha = 1.0f;1232}12331234void R32G32B32S::writeColor(R32G32B32S *dst, const gl::ColorI *src)1235{1236dst->R = static_cast<int32_t>(src->red);1237dst->G = static_cast<int32_t>(src->green);1238dst->B = static_cast<int32_t>(src->blue);1239}12401241void R32G32B32S::writeColor(R32G32B32S *dst, const gl::ColorF *src)1242{1243dst->R = gl::floatToNormalized<int32_t>(src->red);1244dst->G = gl::floatToNormalized<int32_t>(src->green);1245dst->B = gl::floatToNormalized<int32_t>(src->blue);1246}12471248void R32G32B32S::average(R32G32B32S *dst, const R32G32B32S *src1, const R32G32B32S *src2)1249{1250dst->R = gl::average(src1->R, src2->R);1251dst->G = gl::average(src1->G, src2->G);1252dst->B = gl::average(src1->B, src2->B);1253}12541255void R32G32B32A32S::readColor(gl::ColorI *dst, const R32G32B32A32S *src)1256{1257dst->red = src->R;1258dst->green = src->G;1259dst->blue = src->B;1260dst->alpha = src->A;1261}12621263void R32G32B32A32S::readColor(gl::ColorF *dst, const R32G32B32A32S *src)1264{1265dst->red = gl::normalizedToFloat(src->R);1266dst->green = gl::normalizedToFloat(src->G);1267dst->blue = gl::normalizedToFloat(src->B);1268dst->alpha = gl::normalizedToFloat(src->A);1269}12701271void R32G32B32A32S::writeColor(R32G32B32A32S *dst, const gl::ColorI *src)1272{1273dst->R = static_cast<int32_t>(src->red);1274dst->G = static_cast<int32_t>(src->green);1275dst->B = static_cast<int32_t>(src->blue);1276dst->A = static_cast<int32_t>(src->alpha);1277}12781279void R32G32B32A32S::writeColor(R32G32B32A32S *dst, const gl::ColorF *src)1280{1281dst->R = gl::floatToNormalized<int32_t>(src->red);1282dst->G = gl::floatToNormalized<int32_t>(src->green);1283dst->B = gl::floatToNormalized<int32_t>(src->blue);1284dst->A = gl::floatToNormalized<int32_t>(src->alpha);1285}12861287void R32G32B32A32S::average(R32G32B32A32S *dst,1288const R32G32B32A32S *src1,1289const R32G32B32A32S *src2)1290{1291dst->R = gl::average(src1->R, src2->R);1292dst->G = gl::average(src1->G, src2->G);1293dst->B = gl::average(src1->B, src2->B);1294dst->A = gl::average(src1->A, src2->A);1295}12961297void A16B16G16R16F::readColor(gl::ColorF *dst, const A16B16G16R16F *src)1298{1299dst->red = gl::float16ToFloat32(src->R);1300dst->green = gl::float16ToFloat32(src->G);1301dst->blue = gl::float16ToFloat32(src->B);1302dst->alpha = gl::float16ToFloat32(src->A);1303}13041305void A16B16G16R16F::writeColor(A16B16G16R16F *dst, const gl::ColorF *src)1306{1307dst->R = gl::float32ToFloat16(src->red);1308dst->G = gl::float32ToFloat16(src->green);1309dst->B = gl::float32ToFloat16(src->blue);1310dst->A = gl::float32ToFloat16(src->alpha);1311}13121313void A16B16G16R16F::average(A16B16G16R16F *dst,1314const A16B16G16R16F *src1,1315const A16B16G16R16F *src2)1316{1317dst->R = gl::averageHalfFloat(src1->R, src2->R);1318dst->G = gl::averageHalfFloat(src1->G, src2->G);1319dst->B = gl::averageHalfFloat(src1->B, src2->B);1320dst->A = gl::averageHalfFloat(src1->A, src2->A);1321}13221323void R16G16B16A16F::readColor(gl::ColorF *dst, const R16G16B16A16F *src)1324{1325dst->red = gl::float16ToFloat32(src->R);1326dst->green = gl::float16ToFloat32(src->G);1327dst->blue = gl::float16ToFloat32(src->B);1328dst->alpha = gl::float16ToFloat32(src->A);1329}13301331void R16G16B16A16F::writeColor(R16G16B16A16F *dst, const gl::ColorF *src)1332{1333dst->R = gl::float32ToFloat16(src->red);1334dst->G = gl::float32ToFloat16(src->green);1335dst->B = gl::float32ToFloat16(src->blue);1336dst->A = gl::float32ToFloat16(src->alpha);1337}13381339void R16G16B16A16F::average(R16G16B16A16F *dst,1340const R16G16B16A16F *src1,1341const R16G16B16A16F *src2)1342{1343dst->R = gl::averageHalfFloat(src1->R, src2->R);1344dst->G = gl::averageHalfFloat(src1->G, src2->G);1345dst->B = gl::averageHalfFloat(src1->B, src2->B);1346dst->A = gl::averageHalfFloat(src1->A, src2->A);1347}13481349void R16F::readColor(gl::ColorF *dst, const R16F *src)1350{1351dst->red = gl::float16ToFloat32(src->R);1352dst->green = 0.0f;1353dst->blue = 0.0f;1354dst->alpha = 1.0f;1355}13561357void R16F::writeColor(R16F *dst, const gl::ColorF *src)1358{1359dst->R = gl::float32ToFloat16(src->red);1360}13611362void R16F::average(R16F *dst, const R16F *src1, const R16F *src2)1363{1364dst->R = gl::averageHalfFloat(src1->R, src2->R);1365}13661367void A16F::readColor(gl::ColorF *dst, const A16F *src)1368{1369dst->red = 0.0f;1370dst->green = 0.0f;1371dst->blue = 0.0f;1372dst->alpha = gl::float16ToFloat32(src->A);1373}13741375void A16F::writeColor(A16F *dst, const gl::ColorF *src)1376{1377dst->A = gl::float32ToFloat16(src->alpha);1378}13791380void A16F::average(A16F *dst, const A16F *src1, const A16F *src2)1381{1382dst->A = gl::averageHalfFloat(src1->A, src2->A);1383}13841385void L16F::readColor(gl::ColorF *dst, const L16F *src)1386{1387float lum = gl::float16ToFloat32(src->L);1388dst->red = lum;1389dst->green = lum;1390dst->blue = lum;1391dst->alpha = 1.0f;1392}13931394void L16F::writeColor(L16F *dst, const gl::ColorF *src)1395{1396dst->L = gl::float32ToFloat16(src->red);1397}13981399void L16F::average(L16F *dst, const L16F *src1, const L16F *src2)1400{1401dst->L = gl::averageHalfFloat(src1->L, src2->L);1402}14031404void L16A16F::readColor(gl::ColorF *dst, const L16A16F *src)1405{1406float lum = gl::float16ToFloat32(src->L);1407dst->red = lum;1408dst->green = lum;1409dst->blue = lum;1410dst->alpha = gl::float16ToFloat32(src->A);1411}14121413void L16A16F::writeColor(L16A16F *dst, const gl::ColorF *src)1414{1415dst->L = gl::float32ToFloat16(src->red);1416dst->A = gl::float32ToFloat16(src->alpha);1417}14181419void L16A16F::average(L16A16F *dst, const L16A16F *src1, const L16A16F *src2)1420{1421dst->L = gl::averageHalfFloat(src1->L, src2->L);1422dst->A = gl::averageHalfFloat(src1->A, src2->A);1423}14241425void R16G16F::readColor(gl::ColorF *dst, const R16G16F *src)1426{1427dst->red = gl::float16ToFloat32(src->R);1428dst->green = gl::float16ToFloat32(src->G);1429dst->blue = 0.0f;1430dst->alpha = 1.0f;1431}14321433void R16G16F::writeColor(R16G16F *dst, const gl::ColorF *src)1434{1435dst->R = gl::float32ToFloat16(src->red);1436dst->G = gl::float32ToFloat16(src->green);1437}14381439void R16G16F::average(R16G16F *dst, const R16G16F *src1, const R16G16F *src2)1440{1441dst->R = gl::averageHalfFloat(src1->R, src2->R);1442dst->G = gl::averageHalfFloat(src1->G, src2->G);1443}14441445void R16G16B16F::readColor(gl::ColorF *dst, const R16G16B16F *src)1446{1447dst->red = gl::float16ToFloat32(src->R);1448dst->green = gl::float16ToFloat32(src->G);1449dst->blue = gl::float16ToFloat32(src->B);1450dst->alpha = 1.0f;1451}14521453void R16G16B16F::writeColor(R16G16B16F *dst, const gl::ColorF *src)1454{1455dst->R = gl::float32ToFloat16(src->red);1456dst->G = gl::float32ToFloat16(src->green);1457dst->B = gl::float32ToFloat16(src->blue);1458}14591460void R16G16B16F::average(R16G16B16F *dst, const R16G16B16F *src1, const R16G16B16F *src2)1461{1462dst->R = gl::averageHalfFloat(src1->R, src2->R);1463dst->G = gl::averageHalfFloat(src1->G, src2->G);1464dst->B = gl::averageHalfFloat(src1->B, src2->B);1465}14661467void A32B32G32R32F::readColor(gl::ColorF *dst, const A32B32G32R32F *src)1468{1469dst->red = src->R;1470dst->green = src->G;1471dst->blue = src->B;1472dst->alpha = src->A;1473}14741475void A32B32G32R32F::writeColor(A32B32G32R32F *dst, const gl::ColorF *src)1476{1477dst->R = src->red;1478dst->G = src->green;1479dst->B = src->blue;1480dst->A = src->alpha;1481}14821483void A32B32G32R32F::average(A32B32G32R32F *dst,1484const A32B32G32R32F *src1,1485const A32B32G32R32F *src2)1486{1487dst->R = gl::average(src1->R, src2->R);1488dst->G = gl::average(src1->G, src2->G);1489dst->B = gl::average(src1->B, src2->B);1490dst->A = gl::average(src1->A, src2->A);1491}14921493void R32G32B32A32F::readColor(gl::ColorF *dst, const R32G32B32A32F *src)1494{1495dst->red = src->R;1496dst->green = src->G;1497dst->blue = src->B;1498dst->alpha = src->A;1499}15001501void R32G32B32A32F::writeColor(R32G32B32A32F *dst, const gl::ColorF *src)1502{1503dst->R = src->red;1504dst->G = src->green;1505dst->B = src->blue;1506dst->A = src->alpha;1507}15081509void R32G32B32A32F::average(R32G32B32A32F *dst,1510const R32G32B32A32F *src1,1511const R32G32B32A32F *src2)1512{1513dst->R = gl::average(src1->R, src2->R);1514dst->G = gl::average(src1->G, src2->G);1515dst->B = gl::average(src1->B, src2->B);1516dst->A = gl::average(src1->A, src2->A);1517}15181519void R32F::readColor(gl::ColorF *dst, const R32F *src)1520{1521dst->red = src->R;1522dst->green = 0.0f;1523dst->blue = 0.0f;1524dst->alpha = 1.0f;1525}15261527void R32F::writeColor(R32F *dst, const gl::ColorF *src)1528{1529dst->R = src->red;1530}15311532void R32F::average(R32F *dst, const R32F *src1, const R32F *src2)1533{1534dst->R = gl::average(src1->R, src2->R);1535}15361537void A32F::readColor(gl::ColorF *dst, const A32F *src)1538{1539dst->red = 0.0f;1540dst->green = 0.0f;1541dst->blue = 0.0f;1542dst->alpha = src->A;1543}15441545void A32F::writeColor(A32F *dst, const gl::ColorF *src)1546{1547dst->A = src->alpha;1548}15491550void A32F::average(A32F *dst, const A32F *src1, const A32F *src2)1551{1552dst->A = gl::average(src1->A, src2->A);1553}15541555void L32F::readColor(gl::ColorF *dst, const L32F *src)1556{1557dst->red = src->L;1558dst->green = src->L;1559dst->blue = src->L;1560dst->alpha = 1.0f;1561}15621563void L32F::writeColor(L32F *dst, const gl::ColorF *src)1564{1565dst->L = src->red;1566}15671568void L32F::average(L32F *dst, const L32F *src1, const L32F *src2)1569{1570dst->L = gl::average(src1->L, src2->L);1571}15721573void L32A32F::readColor(gl::ColorF *dst, const L32A32F *src)1574{1575dst->red = src->L;1576dst->green = src->L;1577dst->blue = src->L;1578dst->alpha = src->A;1579}15801581void L32A32F::writeColor(L32A32F *dst, const gl::ColorF *src)1582{1583dst->L = src->red;1584dst->A = src->alpha;1585}15861587void L32A32F::average(L32A32F *dst, const L32A32F *src1, const L32A32F *src2)1588{1589dst->L = gl::average(src1->L, src2->L);1590dst->A = gl::average(src1->A, src2->A);1591}15921593void R32G32F::readColor(gl::ColorF *dst, const R32G32F *src)1594{1595dst->red = src->R;1596dst->green = src->G;1597dst->blue = 0.0f;1598dst->alpha = 1.0f;1599}16001601void R32G32F::writeColor(R32G32F *dst, const gl::ColorF *src)1602{1603dst->R = src->red;1604dst->G = src->green;1605}16061607void R32G32F::average(R32G32F *dst, const R32G32F *src1, const R32G32F *src2)1608{1609dst->R = gl::average(src1->R, src2->R);1610dst->G = gl::average(src1->G, src2->G);1611}16121613void R32G32B32F::readColor(gl::ColorF *dst, const R32G32B32F *src)1614{1615dst->red = src->R;1616dst->green = src->G;1617dst->blue = src->B;1618dst->alpha = 1.0f;1619}16201621void R32G32B32F::writeColor(R32G32B32F *dst, const gl::ColorF *src)1622{1623dst->R = src->red;1624dst->G = src->green;1625dst->B = src->blue;1626}16271628void R32G32B32F::average(R32G32B32F *dst, const R32G32B32F *src1, const R32G32B32F *src2)1629{1630dst->R = gl::average(src1->R, src2->R);1631dst->G = gl::average(src1->G, src2->G);1632dst->B = gl::average(src1->B, src2->B);1633}16341635void R10G10B10A2::readColor(gl::ColorUI *dst, const R10G10B10A2 *src)1636{1637dst->red = src->R;1638dst->green = src->G;1639dst->blue = src->B;1640dst->alpha = src->A;1641}16421643void R10G10B10A2::readColor(gl::ColorF *dst, const R10G10B10A2 *src)1644{1645dst->red = gl::normalizedToFloat<10>(src->R);1646dst->green = gl::normalizedToFloat<10>(src->G);1647dst->blue = gl::normalizedToFloat<10>(src->B);1648dst->alpha = gl::normalizedToFloat<2>(src->A);1649}16501651void R10G10B10A2::writeColor(R10G10B10A2 *dst, const gl::ColorUI *src)1652{1653dst->R = static_cast<uint32_t>(src->red);1654dst->G = static_cast<uint32_t>(src->green);1655dst->B = static_cast<uint32_t>(src->blue);1656dst->A = static_cast<uint32_t>(src->alpha);1657}16581659void R10G10B10A2::writeColor(R10G10B10A2 *dst, const gl::ColorF *src)1660{1661dst->R = gl::floatToNormalized<10, uint32_t>(src->red);1662dst->G = gl::floatToNormalized<10, uint32_t>(src->green);1663dst->B = gl::floatToNormalized<10, uint32_t>(src->blue);1664dst->A = gl::floatToNormalized<2, uint32_t>(src->alpha);1665}16661667void R10G10B10A2::average(R10G10B10A2 *dst, const R10G10B10A2 *src1, const R10G10B10A2 *src2)1668{1669dst->R = gl::average(src1->R, src2->R);1670dst->G = gl::average(src1->G, src2->G);1671dst->B = gl::average(src1->B, src2->B);1672dst->A = gl::average(src1->A, src2->A);1673}16741675void R10G10B10A2S::readColor(gl::ColorI *dst, const R10G10B10A2S *src)1676{1677dst->red = src->R;1678dst->green = src->G;1679dst->blue = src->B;1680dst->alpha = src->A;1681}16821683void R10G10B10A2S::readColor(gl::ColorF *dst, const R10G10B10A2S *src)1684{1685dst->red = gl::normalizedToFloat<10>(src->R);1686dst->green = gl::normalizedToFloat<10>(src->G);1687dst->blue = gl::normalizedToFloat<10>(src->B);1688dst->alpha = gl::normalizedToFloat<2>(src->A);1689}16901691void R10G10B10A2S::writeColor(R10G10B10A2S *dst, const gl::ColorI *src)1692{1693dst->R = static_cast<int32_t>(src->red);1694dst->G = static_cast<int32_t>(src->green);1695dst->B = static_cast<int32_t>(src->blue);1696dst->A = static_cast<int32_t>(src->alpha);1697}16981699void R10G10B10A2S::writeColor(R10G10B10A2S *dst, const gl::ColorF *src)1700{1701dst->R = gl::floatToNormalized<10, int32_t>(src->red);1702dst->G = gl::floatToNormalized<10, int32_t>(src->green);1703dst->B = gl::floatToNormalized<10, int32_t>(src->blue);1704dst->A = gl::floatToNormalized<2, int32_t>(src->alpha);1705}17061707void R10G10B10A2S::average(R10G10B10A2S *dst, const R10G10B10A2S *src1, const R10G10B10A2S *src2)1708{1709dst->R = gl::average(src1->R, src2->R);1710dst->G = gl::average(src1->G, src2->G);1711dst->B = gl::average(src1->B, src2->B);1712dst->A = gl::average(src1->A, src2->A);1713}17141715void R10G10B10X2::readColor(gl::ColorUI *dst, const R10G10B10X2 *src)1716{1717dst->red = src->R;1718dst->green = src->G;1719dst->blue = src->B;1720dst->alpha = 0x3;1721}17221723void R10G10B10X2::readColor(gl::ColorF *dst, const R10G10B10X2 *src)1724{1725dst->red = gl::normalizedToFloat<10>(src->R);1726dst->green = gl::normalizedToFloat<10>(src->G);1727dst->blue = gl::normalizedToFloat<10>(src->B);1728dst->alpha = 1.0f;1729}17301731void R10G10B10X2::writeColor(R10G10B10X2 *dst, const gl::ColorUI *src)1732{1733dst->R = static_cast<uint32_t>(src->red);1734dst->G = static_cast<uint32_t>(src->green);1735dst->B = static_cast<uint32_t>(src->blue);1736}17371738void R10G10B10X2::writeColor(R10G10B10X2 *dst, const gl::ColorF *src)1739{1740dst->R = gl::floatToNormalized<10, uint32_t>(src->red);1741dst->G = gl::floatToNormalized<10, uint32_t>(src->green);1742dst->B = gl::floatToNormalized<10, uint32_t>(src->blue);1743}17441745void R10G10B10X2::average(R10G10B10X2 *dst, const R10G10B10X2 *src1, const R10G10B10X2 *src2)1746{1747dst->R = gl::average(src1->R, src2->R);1748dst->G = gl::average(src1->G, src2->G);1749dst->B = gl::average(src1->B, src2->B);1750}17511752void B10G10R10A2::readColor(gl::ColorUI *dst, const B10G10R10A2 *src)1753{1754dst->red = src->R;1755dst->green = src->G;1756dst->blue = src->B;1757dst->alpha = src->A;1758}17591760void B10G10R10A2::readColor(gl::ColorF *dst, const B10G10R10A2 *src)1761{1762dst->red = gl::normalizedToFloat<10>(src->R);1763dst->green = gl::normalizedToFloat<10>(src->G);1764dst->blue = gl::normalizedToFloat<10>(src->B);1765dst->alpha = gl::normalizedToFloat<2>(src->A);1766}17671768void B10G10R10A2::writeColor(B10G10R10A2 *dst, const gl::ColorUI *src)1769{1770dst->R = static_cast<uint32_t>(src->red);1771dst->G = static_cast<uint32_t>(src->green);1772dst->B = static_cast<uint32_t>(src->blue);1773dst->A = static_cast<uint32_t>(src->alpha);1774}17751776void B10G10R10A2::writeColor(B10G10R10A2 *dst, const gl::ColorF *src)1777{1778dst->R = gl::floatToNormalized<10, uint32_t>(src->red);1779dst->G = gl::floatToNormalized<10, uint32_t>(src->green);1780dst->B = gl::floatToNormalized<10, uint32_t>(src->blue);1781dst->A = gl::floatToNormalized<2, uint32_t>(src->alpha);1782}17831784void B10G10R10A2::average(B10G10R10A2 *dst, const B10G10R10A2 *src1, const B10G10R10A2 *src2)1785{1786dst->R = gl::average(src1->R, src2->R);1787dst->G = gl::average(src1->G, src2->G);1788dst->B = gl::average(src1->B, src2->B);1789dst->A = gl::average(src1->A, src2->A);1790}17911792void R9G9B9E5::readColor(gl::ColorF *dst, const R9G9B9E5 *src)1793{1794gl::convert999E5toRGBFloats(gl::bitCast<uint32_t>(*src), &dst->red, &dst->green, &dst->blue);1795dst->alpha = 1.0f;1796}17971798void R9G9B9E5::writeColor(R9G9B9E5 *dst, const gl::ColorF *src)1799{1800*reinterpret_cast<uint32_t *>(dst) =1801gl::convertRGBFloatsTo999E5(src->red, src->green, src->blue);1802}18031804void R9G9B9E5::average(R9G9B9E5 *dst, const R9G9B9E5 *src1, const R9G9B9E5 *src2)1805{1806float r1, g1, b1;1807gl::convert999E5toRGBFloats(*reinterpret_cast<const uint32_t *>(src1), &r1, &g1, &b1);18081809float r2, g2, b2;1810gl::convert999E5toRGBFloats(*reinterpret_cast<const uint32_t *>(src2), &r2, &g2, &b2);18111812*reinterpret_cast<uint32_t *>(dst) =1813gl::convertRGBFloatsTo999E5(gl::average(r1, r2), gl::average(g1, g2), gl::average(b1, b2));1814}18151816void R11G11B10F::readColor(gl::ColorF *dst, const R11G11B10F *src)1817{1818dst->red = gl::float11ToFloat32(src->R);1819dst->green = gl::float11ToFloat32(src->G);1820dst->blue = gl::float10ToFloat32(src->B);1821dst->alpha = 1.0f;1822}18231824void R11G11B10F::writeColor(R11G11B10F *dst, const gl::ColorF *src)1825{1826dst->R = gl::float32ToFloat11(src->red);1827dst->G = gl::float32ToFloat11(src->green);1828dst->B = gl::float32ToFloat10(src->blue);1829}18301831void R11G11B10F::average(R11G11B10F *dst, const R11G11B10F *src1, const R11G11B10F *src2)1832{1833dst->R = gl::averageFloat11(src1->R, src2->R);1834dst->G = gl::averageFloat11(src1->G, src2->G);1835dst->B = gl::averageFloat10(src1->B, src2->B);1836}18371838void D24S8::ReadDepthStencil(DepthStencil *dst, const D24S8 *src)1839{1840dst->depth = gl::normalizedToFloat<24>(src->D);1841dst->stencil = src->S;1842}18431844void D24S8::WriteDepthStencil(D24S8 *dst, const DepthStencil *src)1845{1846dst->D = gl::floatToNormalized<24, uint32_t>(static_cast<float>(src->depth));1847dst->S = src->stencil & 0xFF;1848}18491850void S8::ReadDepthStencil(DepthStencil *dst, const S8 *src)1851{1852dst->depth = 0;1853dst->stencil = src->S;1854}18551856void S8::WriteDepthStencil(S8 *dst, const DepthStencil *src)1857{1858dst->S = src->stencil & 0xFF;1859}18601861void D16::ReadDepthStencil(DepthStencil *dst, const D16 *src)1862{1863dst->depth = gl::normalizedToFloat(src->D);1864dst->stencil = 0;1865}18661867void D16::WriteDepthStencil(D16 *dst, const DepthStencil *src)1868{1869dst->D = gl::floatToNormalized<uint16_t>(static_cast<float>(src->depth));1870}18711872void D24X8::ReadDepthStencil(DepthStencil *dst, const D24X8 *src)1873{1874dst->depth = gl::normalizedToFloat<24>(src->D & 0x00ffffff);1875}18761877void D24X8::WriteDepthStencil(D24X8 *dst, const DepthStencil *src)1878{1879dst->D = gl::floatToNormalized<24, uint32_t>(static_cast<float>(src->depth));1880}18811882void D32F::ReadDepthStencil(DepthStencil *dst, const D32F *src)1883{1884dst->depth = src->D;1885}18861887void D32F::WriteDepthStencil(D32F *dst, const DepthStencil *src)1888{1889dst->D = static_cast<float>(src->depth);1890}18911892void D32::ReadDepthStencil(DepthStencil *dst, const D32 *src)1893{1894dst->depth = gl::normalizedToFloat(src->D);1895dst->stencil = 0;1896}18971898void D32::WriteDepthStencil(D32 *dst, const DepthStencil *src)1899{1900dst->D = gl::floatToNormalized<uint32_t>(static_cast<float>(src->depth));1901}19021903void D32FS8X24::ReadDepthStencil(DepthStencil *dst, const D32FS8X24 *src)1904{1905dst->depth = src->D;1906dst->stencil = src->S;1907}19081909void D32FS8X24::WriteDepthStencil(D32FS8X24 *dst, const DepthStencil *src)1910{1911dst->D = static_cast<float>(src->depth);1912dst->S = src->stencil & 0xFF;1913}1914} // namespace angle191519161917