175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang// 275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang// Copyright (c) 2013 The ANGLE Project Authors. All rights reserved. 375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang// Use of this source code is governed by a BSD-style license that can be 475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang// found in the LICENSE file. 575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang// 675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang// imageformats.h: Defines image format types with functions for mip generation 875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang// and copying. 975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang#ifndef LIBGLESV2_RENDERER_IMAGEFORMATS_H_ 1175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang#define LIBGLESV2_RENDERER_IMAGEFORMATS_H_ 1275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1357f9b6d56bec5e2040909b9dc0c68ddb7ac4a978Geoff Lang#include "common/mathutil.h" 14446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Langnamespace rx 1675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 1775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 18446a4477761d2f410041501118b0ae5a4a660311Geoff Lang// Several structures share functionality for reading, writing or mipmapping but the layout 19446a4477761d2f410041501118b0ae5a4a660311Geoff Lang// must match the texture format which the structure represents. If collapsing or typedefing 20446a4477761d2f410041501118b0ae5a4a660311Geoff Lang// structs in this header, make sure the functionality and memory layout is exactly the same. 21446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 2275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Langstruct L8 2375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 2475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned char L; 2575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 26446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const L8 *src) 27446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 28446a4477761d2f410041501118b0ae5a4a660311Geoff Lang const float lum = gl::normalizedToFloat(src->L); 29446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = lum; 30446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = lum; 31446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = lum; 32446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 33446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 34446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 35446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(L8 *dst, const gl::ColorF *src) 36446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 37446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->L = gl::floatToNormalized<unsigned char>((src->red + src->green + src->blue) / 3.0f); 38446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 39446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 4075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang static void average(L8 *dst, const L8 *src1, const L8 *src2) 4175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 42446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->L = gl::average(src1->L, src2->L); 4375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 4475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 4575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 4675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Langstruct R8 4775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 4875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned char R; 4975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 50446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R8 *src) 51446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 52446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 53446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = 0.0f; 54446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 55446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 56446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 57446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 58446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorUI *dst, const R8 *src) 59446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 60446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 61446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = 0; 62446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0; 63d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 64446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 65446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 66446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R8 *dst, const gl::ColorF *src) 67446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 68446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<unsigned char>(src->red); 69446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 70446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 71446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R8 *dst, const gl::ColorUI *src) 72446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 73446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<unsigned char>(src->red); 74446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 75446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 7675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang static void average(R8 *dst, const R8 *src1, const R8 *src2) 7775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 78446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 7975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 8075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 8175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 8275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Langstruct A8 8375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 8475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned char A; 8575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 86446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const A8 *src) 87446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 88446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = 0.0f; 89446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = 0.0f; 90446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 91446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::normalizedToFloat(src->A); 92446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 93446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 94446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(A8 *dst, const gl::ColorF *src) 95446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 96446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::floatToNormalized<unsigned char>(src->alpha); 97446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 98446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 9975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang static void average(A8 *dst, const A8 *src1, const A8 *src2) 10075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 101446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::average(src1->A, src2->A); 10275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 10375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 10475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 105446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct L8A8 10675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 10775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned char L; 10875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned char A; 10975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 110446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const L8A8 *src) 111446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 112446a4477761d2f410041501118b0ae5a4a660311Geoff Lang const float lum = gl::normalizedToFloat(src->L); 113446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = lum; 114446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = lum; 115446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = lum; 116446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::normalizedToFloat(src->A); 117446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 118446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 119446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(L8A8 *dst, const gl::ColorF *src) 120446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 121446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->L = gl::floatToNormalized<unsigned char>((src->red + src->green + src->blue) / 3.0f); 122446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::floatToNormalized<unsigned char>(src->alpha); 123446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 124446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 125446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(L8A8 *dst, const L8A8 *src1, const L8A8 *src2) 126446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 127446a4477761d2f410041501118b0ae5a4a660311Geoff Lang *(unsigned short*)dst = (((*(unsigned short*)src1 ^ *(unsigned short*)src2) & 0xFEFE) >> 1) + (*(unsigned short*)src1 & *(unsigned short*)src2); 128446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 129446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 130446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 131446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct A8L8 132446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 133446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char A; 134446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char L; 135446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 136446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const A8L8 *src) 137446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 138446a4477761d2f410041501118b0ae5a4a660311Geoff Lang const float lum = gl::normalizedToFloat(src->L); 139446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = lum; 140446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = lum; 141446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = lum; 142446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::normalizedToFloat(src->A); 143446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 144446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 145446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(A8L8 *dst, const gl::ColorF *src) 146446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 147446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->L = gl::floatToNormalized<unsigned char>((src->red + src->green + src->blue) / 3.0f); 148446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::floatToNormalized<unsigned char>(src->alpha); 149446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 150446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 15175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang static void average(A8L8 *dst, const A8L8 *src1, const A8L8 *src2) 15275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 15375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang *(unsigned short*)dst = (((*(unsigned short*)src1 ^ *(unsigned short*)src2) & 0xFEFE) >> 1) + (*(unsigned short*)src1 & *(unsigned short*)src2); 15475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 15575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 15675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 15775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Langstruct R8G8 15875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 15975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned char R; 16075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned char G; 16175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 162446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R8G8 *src) 163446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 164446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 165446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 166446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 167446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 168446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 169446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 170446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorUI *dst, const R8G8 *src) 171446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 172446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 173446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 174446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0; 175d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 176446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 177446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 178446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R8G8 *dst, const gl::ColorF *src) 179446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 180446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<unsigned char>(src->red); 181446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<unsigned char>(src->green); 182446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 183446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 184446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R8G8 *dst, const gl::ColorUI *src) 185446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 186446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<unsigned char>(src->red); 187446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<unsigned char>(src->green); 188446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 189446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 19075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang static void average(R8G8 *dst, const R8G8 *src1, const R8G8 *src2) 19175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 19275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang *(unsigned short*)dst = (((*(unsigned short*)src1 ^ *(unsigned short*)src2) & 0xFEFE) >> 1) + (*(unsigned short*)src1 & *(unsigned short*)src2); 19375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 19475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 19575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 196446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R8G8B8 197446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 198446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char R; 199446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char G; 200446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char B; 201446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 202446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R8G8B8 *src) 203446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 204446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 205446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 206446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat(src->B); 207446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 208446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 209446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 210446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorUI *dst, const R8G8B8 *src) 211446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 212446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 213446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 214446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->G; 215d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 216446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 217446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 218446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R8G8B8 *dst, const gl::ColorF *src) 219446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 220446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<unsigned char>(src->red); 221446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<unsigned char>(src->green); 222446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<unsigned char>(src->blue); 223446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 224446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 225446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R8G8B8 *dst, const gl::ColorUI *src) 226446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 227446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<unsigned char>(src->red); 228446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<unsigned char>(src->green); 229446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = static_cast<unsigned char>(src->blue); 230446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 231446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 232446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R8G8B8 *dst, const R8G8B8 *src1, const R8G8B8 *src2) 233446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 234446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 235446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 236446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 237446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 238446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 239446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 240446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct B8G8R8 241446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 242446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char B; 243446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char G; 244446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char R; 245446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 246446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const B8G8R8 *src) 247446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 248446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 249446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 250446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat(src->B); 251446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 252446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 253446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 254446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorUI *dst, const B8G8R8 *src) 255446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 256446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 257446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 258446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->G; 259d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 260446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 261446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 262446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(B8G8R8 *dst, const gl::ColorF *src) 263446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 264446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<unsigned char>(src->red); 265446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<unsigned char>(src->green); 266446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<unsigned char>(src->blue); 267446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 268446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 269446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(B8G8R8 *dst, const gl::ColorUI *src) 270446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 271446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<unsigned char>(src->red); 272446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<unsigned char>(src->green); 273446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = static_cast<unsigned char>(src->blue); 274446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 275446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 276446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(B8G8R8 *dst, const B8G8R8 *src1, const B8G8R8 *src2) 277446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 278446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 279446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 280446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 281446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 282446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 283446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 284446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R5G6B5 285446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 286446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short RGB; 287446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 288446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R5G6B5 *src) 289446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 290446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat<5>(gl::getShiftedData<5, 11>(src->RGB)); 291446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat<6>(gl::getShiftedData<6, 5>(src->RGB)); 292446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat<5>(gl::getShiftedData<5, 0>(src->RGB)); 293446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 294446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 295446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 296446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R5G6B5 *dst, const gl::ColorF *src) 297446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 298446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->RGB = gl::shiftData<5, 11>(gl::floatToNormalized<5, unsigned short>(src->red)) | 299446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::shiftData<6, 5>(gl::floatToNormalized<6, unsigned short>(src->green)) | 300446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::shiftData<5, 0>(gl::floatToNormalized<5, unsigned short>(src->blue)); 301446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 302446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 303446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R5G6B5 *dst, const R5G6B5 *src1, const R5G6B5 *src2) 304446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 305446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->RGB = gl::shiftData<5, 11>(gl::average(gl::getShiftedData<5, 11>(src1->RGB), gl::getShiftedData<5, 11>(src2->RGB))) | 306446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::shiftData<6, 5>(gl::average(gl::getShiftedData<6, 5>(src1->RGB), gl::getShiftedData<6, 5>(src2->RGB))) | 307446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::shiftData<5, 0>(gl::average(gl::getShiftedData<5, 0>(src1->RGB), gl::getShiftedData<5, 0>(src2->RGB))); 308446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 309446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 310446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 31175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Langstruct A8R8G8B8 31275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 313446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char A; 314446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char R; 315446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char G; 316446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char B; 317446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 318446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const A8R8G8B8 *src) 319446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 320446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 321446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 322446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat(src->B); 323446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::normalizedToFloat(src->A); 324446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 325446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 326446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorUI *dst, const A8R8G8B8 *src) 327446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 328446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 329446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 330446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->B; 331446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = src->A; 332446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 333446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 334446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(A8R8G8B8 *dst, const gl::ColorF *src) 335446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 336446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<unsigned char>(src->red); 337446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<unsigned char>(src->green); 338446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<unsigned char>(src->blue); 339446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::floatToNormalized<unsigned char>(src->alpha); 340446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 341446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 342446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(A8R8G8B8 *dst, const gl::ColorUI *src) 343446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 344446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<unsigned char>(src->red); 345446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<unsigned char>(src->green); 346446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = static_cast<unsigned char>(src->blue); 347446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = static_cast<unsigned char>(src->alpha); 348446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 349446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 350446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(A8R8G8B8 *dst, const A8R8G8B8 *src1, const A8R8G8B8 *src2) 351446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 352446a4477761d2f410041501118b0ae5a4a660311Geoff Lang *(unsigned int*)dst = (((*(unsigned int*)src1 ^ *(unsigned int*)src2) & 0xFEFEFEFE) >> 1) + (*(unsigned int*)src1 & *(unsigned int*)src2); 353446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 354446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 355446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 356446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R8G8B8A8 357446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 358446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char R; 359446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char G; 360446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char B; 361446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char A; 362446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 363446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R8G8B8A8 *src) 364446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 365446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 366446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 367446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat(src->B); 368446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::normalizedToFloat(src->A); 369446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 370446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 371446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorUI *dst, const R8G8B8A8 *src) 372446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 373446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 374446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 375446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->B; 376446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = src->A; 377446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 378446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 379446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R8G8B8A8 *dst, const gl::ColorF *src) 380446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 381446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<unsigned char>(src->red); 382446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<unsigned char>(src->green); 383446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<unsigned char>(src->blue); 384446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::floatToNormalized<unsigned char>(src->alpha); 385446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 386446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 387446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R8G8B8A8 *dst, const gl::ColorUI *src) 388446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 389446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<unsigned char>(src->red); 390446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<unsigned char>(src->green); 391446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = static_cast<unsigned char>(src->blue); 392446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = static_cast<unsigned char>(src->alpha); 393446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 394446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 395446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R8G8B8A8 *dst, const R8G8B8A8 *src1, const R8G8B8A8 *src2) 396446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 397446a4477761d2f410041501118b0ae5a4a660311Geoff Lang *(unsigned int*)dst = (((*(unsigned int*)src1 ^ *(unsigned int*)src2) & 0xFEFEFEFE) >> 1) + (*(unsigned int*)src1 & *(unsigned int*)src2); 398446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 399446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 400446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 401446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct B8G8R8A8 402446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 40375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned char B; 40475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned char G; 40575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned char R; 40675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned char A; 40775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 408446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const B8G8R8A8 *src) 409446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 410446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 411446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 412446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat(src->B); 413446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::normalizedToFloat(src->A); 414446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 415446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 416446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorUI *dst, const B8G8R8A8 *src) 417446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 418446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 419446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 420446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->B; 421446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = src->A; 422446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 423446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 424446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(B8G8R8A8 *dst, const gl::ColorF *src) 425446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 426446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<unsigned char>(src->red); 427446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<unsigned char>(src->green); 428446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<unsigned char>(src->blue); 429446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::floatToNormalized<unsigned char>(src->alpha); 430446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 431446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 432446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(B8G8R8A8 *dst, const gl::ColorUI *src) 433446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 434446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<unsigned char>(src->red); 435446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<unsigned char>(src->green); 436446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = static_cast<unsigned char>(src->blue); 437446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = static_cast<unsigned char>(src->alpha); 438446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 439446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 440446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(B8G8R8A8 *dst, const B8G8R8A8 *src1, const B8G8R8A8 *src2) 441446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 442446a4477761d2f410041501118b0ae5a4a660311Geoff Lang *(unsigned int*)dst = (((*(unsigned int*)src1 ^ *(unsigned int*)src2) & 0xFEFEFEFE) >> 1) + (*(unsigned int*)src1 & *(unsigned int*)src2); 443446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 444446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 445446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 446ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Langstruct B8G8R8X8 447ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang{ 448ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang unsigned char B; 449ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang unsigned char G; 450ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang unsigned char R; 451ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang unsigned char X; 452ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang 453ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang static void readColor(gl::ColorF *dst, const B8G8R8X8 *src) 454ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang { 455ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang dst->red = gl::normalizedToFloat(src->R); 456ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang dst->green = gl::normalizedToFloat(src->G); 457ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang dst->blue = gl::normalizedToFloat(src->B); 458ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang dst->alpha = 1.0f; 459ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang } 460ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang 461ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang static void readColor(gl::ColorUI *dst, const B8G8R8X8 *src) 462ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang { 463ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang dst->red = src->R; 464ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang dst->green = src->G; 465ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang dst->blue = src->B; 466ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang dst->alpha = 1; 467ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang } 468ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang 469ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang static void writeColor(B8G8R8X8 *dst, const gl::ColorF *src) 470ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang { 471ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang dst->R = gl::floatToNormalized<unsigned char>(src->red); 472ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang dst->G = gl::floatToNormalized<unsigned char>(src->green); 473ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang dst->B = gl::floatToNormalized<unsigned char>(src->blue); 474ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang dst->X = 255; 475ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang } 476ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang 477ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang static void writeColor(B8G8R8X8 *dst, const gl::ColorUI *src) 478ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang { 479ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang dst->R = static_cast<unsigned char>(src->red); 480ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang dst->G = static_cast<unsigned char>(src->green); 481ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang dst->B = static_cast<unsigned char>(src->blue); 482ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang dst->X = 255; 483ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang } 484ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang 485ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang static void average(B8G8R8X8 *dst, const B8G8R8X8 *src1, const B8G8R8X8 *src2) 486ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang { 487ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang *(unsigned int*)dst = (((*(unsigned int*)src1 ^ *(unsigned int*)src2) & 0xFEFEFEFE) >> 1) + (*(unsigned int*)src1 & *(unsigned int*)src2); 488ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang dst->X = 255; 489ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang } 490ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang}; 491ca623f3f44cb1c2a8bbfb0e91b52f0b541552754Geoff Lang 492446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct B5G5R5A1 493446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 494446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short BGRA; 495446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 496446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const B5G5R5A1 *src) 497446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 498446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::normalizedToFloat<1>(gl::getShiftedData<1, 15>(src->BGRA)); 499446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat<5>(gl::getShiftedData<5, 10>(src->BGRA)); 500446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat<5>(gl::getShiftedData<5, 5>(src->BGRA)); 501446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat<5>(gl::getShiftedData<5, 0>(src->BGRA)); 502446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 503446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 504446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(B5G5R5A1 *dst, const gl::ColorF *src) 505446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 506446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->BGRA = gl::shiftData<1, 15>(gl::floatToNormalized<1, unsigned short>(src->alpha)) | 507446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::shiftData<5, 10>(gl::floatToNormalized<5, unsigned short>(src->red)) | 508446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::shiftData<5, 5>(gl::floatToNormalized<5, unsigned short>(src->green)) | 509446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::shiftData<5, 0>(gl::floatToNormalized<5, unsigned short>(src->blue)); 510446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 511446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 512446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(B5G5R5A1 *dst, const B5G5R5A1 *src1, const B5G5R5A1 *src2) 513446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 514446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->BGRA = gl::shiftData<1, 15>(gl::average(gl::getShiftedData<1, 15>(src1->BGRA), gl::getShiftedData<1, 15>(src2->BGRA))) | 515446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::shiftData<5, 10>(gl::average(gl::getShiftedData<5, 10>(src1->BGRA), gl::getShiftedData<5, 10>(src2->BGRA))) | 516446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::shiftData<5, 5>(gl::average(gl::getShiftedData<5, 5>(src1->BGRA), gl::getShiftedData<5, 5>(src2->BGRA))) | 517446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::shiftData<5, 0>(gl::average(gl::getShiftedData<5, 0>(src1->BGRA), gl::getShiftedData<5, 0>(src2->BGRA))); 518446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 519446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 520446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 521446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R5G5B5A1 522446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 523446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short RGBA; 524446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 525446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R5G5B5A1 *src) 526446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 527446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::normalizedToFloat<1>(gl::getShiftedData<1, 15>(src->RGBA)); 528446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat<5>(gl::getShiftedData<5, 10>(src->RGBA)); 529446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat<5>(gl::getShiftedData<5, 5>(src->RGBA)); 530446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat<5>(gl::getShiftedData<5, 0>(src->RGBA)); 531446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 532446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 533446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R5G5B5A1 *dst, const gl::ColorF *src) 534446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 535446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->RGBA = gl::shiftData<1, 15>(gl::floatToNormalized<1, unsigned short>(src->alpha)) | 536446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::shiftData<5, 10>(gl::floatToNormalized<5, unsigned short>(src->blue)) | 537446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::shiftData<5, 5>(gl::floatToNormalized<5, unsigned short>(src->green)) | 538446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::shiftData<5, 0>(gl::floatToNormalized<5, unsigned short>(src->red)); 539446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 540446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 541446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R5G5B5A1 *dst, const R5G5B5A1 *src1, const R5G5B5A1 *src2) 542446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 543446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->RGBA = gl::shiftData<1, 15>(gl::average(gl::getShiftedData<1, 15>(src1->RGBA), gl::getShiftedData<1, 15>(src2->RGBA))) | 544446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::shiftData<5, 10>(gl::average(gl::getShiftedData<5, 10>(src1->RGBA), gl::getShiftedData<5, 10>(src2->RGBA))) | 545446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::shiftData<5, 5>(gl::average(gl::getShiftedData<5, 5>(src1->RGBA), gl::getShiftedData<5, 5>(src2->RGBA))) | 546446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::shiftData<5, 0>(gl::average(gl::getShiftedData<5, 0>(src1->RGBA), gl::getShiftedData<5, 0>(src2->RGBA))); 547446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 548446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 549446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 550446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R4G4B4A4 551446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 552446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char R : 4; 553446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char G : 4; 554446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char B : 4; 555446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char A : 4; 556446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 557446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R4G4B4A4 *src) 558446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 559446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat<4>(src->R); 560446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat<4>(src->G); 561446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat<4>(src->B); 562446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::normalizedToFloat<4>(src->A); 563446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 564446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 565446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R4G4B4A4 *dst, const gl::ColorF *src) 566446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 567446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<4, unsigned char>(src->red); 568446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<4, unsigned char>(src->green); 569446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<4, unsigned char>(src->blue); 570446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::floatToNormalized<4, unsigned char>(src->alpha); 571446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 572446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 573446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R4G4B4A4 *dst, const R4G4B4A4 *src1, const R4G4B4A4 *src2) 574446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 575446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 576446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 577446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 578446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::average(src1->A, src2->A); 579446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 580446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 581446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 582446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct A4R4G4B4 583446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 584446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char A : 4; 585446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char R : 4; 586446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char G : 4; 587446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char B : 4; 588446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 589446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const A4R4G4B4 *src) 590446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 591446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat<4>(src->R); 592446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat<4>(src->G); 593446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat<4>(src->B); 594446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::normalizedToFloat<4>(src->A); 595446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 596446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 597446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(A4R4G4B4 *dst, const gl::ColorF *src) 598446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 599446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<4, unsigned char>(src->red); 600446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<4, unsigned char>(src->green); 601446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<4, unsigned char>(src->blue); 602446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::floatToNormalized<4, unsigned char>(src->alpha); 603446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 604446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 605446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(A4R4G4B4 *dst, const A4R4G4B4 *src1, const A4R4G4B4 *src2) 606446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 607446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 608446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 609446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 610446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::average(src1->A, src2->A); 611446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 612446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 613446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 614446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct B4G4R4A4 615446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 616446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char B : 4; 617446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char G : 4; 618446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char R : 4; 619446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned char A : 4; 620446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 621446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const B4G4R4A4 *src) 622446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 623446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat<4>(src->R); 624446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat<4>(src->G); 625446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat<4>(src->B); 626446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::normalizedToFloat<4>(src->A); 627446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 628446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 629446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(B4G4R4A4 *dst, const gl::ColorF *src) 630446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 631446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<4, unsigned char>(src->red); 632446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<4, unsigned char>(src->green); 633446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<4, unsigned char>(src->blue); 634446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::floatToNormalized<4, unsigned char>(src->alpha); 635446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 636446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 637446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(B4G4R4A4 *dst, const B4G4R4A4 *src1, const B4G4R4A4 *src2) 638446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 639446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 640446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 641446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 642446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::average(src1->A, src2->A); 643446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 644446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 645446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 646446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R16 647446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 648446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short R; 649446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 650446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R16 *src) 651446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 652446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 653446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = 0.0f; 654446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 655446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 656446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 657446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 658446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorUI *dst, const R16 *src) 659446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 660446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 661446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = 0; 662446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0; 663d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 664446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 665446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 666446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16 *dst, const gl::ColorF *src) 667446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 668446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<unsigned short>(src->red); 669446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 670446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 671446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16 *dst, const gl::ColorUI *src) 672446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 673446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<unsigned short>(src->red); 674446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 675446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 676446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R16 *dst, const R16 *src1, const R16 *src2) 677446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 678446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 679446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 680446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 681446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 682446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R16G16 683446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 684446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short R; 685446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short G; 686446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 687446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R16G16 *src) 688446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 689446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 690446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 691446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 692446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 693446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 694446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 695446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorUI *dst, const R16G16 *src) 696446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 697446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 698446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 699446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0; 700d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 701446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 702446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 703446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16G16 *dst, const gl::ColorF *src) 704446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 705446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<unsigned short>(src->red); 706446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<unsigned short>(src->green); 707446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 708446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 709446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16G16 *dst, const gl::ColorUI *src) 710446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 711446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<unsigned short>(src->red); 712446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<unsigned short>(src->green); 713446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 714446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 715446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R16G16 *dst, const R16G16 *src1, const R16G16 *src2) 716446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 717446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 718446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 719446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 720446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 721446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 722446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R16G16B16 723446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 724446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short R; 725446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short G; 726446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short B; 727446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 728446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R16G16B16 *src) 729446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 730446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 731446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 732446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat(src->B); 733446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 734446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 735446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 736446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorUI *dst, const R16G16B16 *src) 737446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 738446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 739446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 740446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->B; 741d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 742446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 743446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 744446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16G16B16 *dst, const gl::ColorF *src) 745446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 746446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<unsigned short>(src->red); 747446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<unsigned short>(src->green); 748446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<unsigned short>(src->blue); 749446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 750446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 751446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16G16B16 *dst, const gl::ColorUI *src) 752446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 753446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<unsigned short>(src->red); 754446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<unsigned short>(src->green); 755446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = static_cast<unsigned short>(src->blue); 756446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 757446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 758446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R16G16B16 *dst, const R16G16B16 *src1, const R16G16B16 *src2) 759446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 760446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 761446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 762446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 763446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 764446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 765446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 766446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R16G16B16A16 767446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 768446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short R; 769446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short G; 770446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short B; 771446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short A; 772446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 773446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R16G16B16A16 *src) 774446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 775446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 776446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 777446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat(src->B); 778446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::normalizedToFloat(src->A); 779446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 780446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 781446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorUI *dst, const R16G16B16A16 *src) 782446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 783446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 784446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 785446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->B; 786446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = src->A; 787446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 788446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 789446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16G16B16A16 *dst, const gl::ColorF *src) 790446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 791446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<unsigned short>(src->red); 792446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<unsigned short>(src->green); 793446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<unsigned short>(src->blue); 794446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::floatToNormalized<unsigned short>(src->alpha); 795446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 796446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 797446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16G16B16A16 *dst, const gl::ColorUI *src) 798446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 799446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<unsigned short>(src->red); 800446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<unsigned short>(src->green); 801446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = static_cast<unsigned short>(src->blue); 802446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = static_cast<unsigned short>(src->alpha); 803446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 804446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 805446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R16G16B16A16 *dst, const R16G16B16A16 *src1, const R16G16B16A16 *src2) 806446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 807446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 808446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 809446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 810446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::average(src1->A, src2->A); 811446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 812446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 813446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 814446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R32 815446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 816446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned int R; 817446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 818446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R32 *src) 819446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 820446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 821446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = 0.0f; 822446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 823446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 824446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 825446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 826446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorUI *dst, const R32 *src) 827446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 828446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 829446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = 0; 830446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0; 831d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 832446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 833446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 834446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32 *dst, const gl::ColorF *src) 835446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 836446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<unsigned int>(src->red); 837446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 838446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 839446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32 *dst, const gl::ColorUI *src) 840446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 841446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<unsigned int>(src->red); 842446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 843446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 844446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R32 *dst, const R32 *src1, const R32 *src2) 845446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 846446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 847446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 848446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 849446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 850446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R32G32 851446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 852446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned int R; 853446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned int G; 854446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 855446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R32G32 *src) 856446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 857446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 858446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 859446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 860446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 861446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 862446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 863446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorUI *dst, const R32G32 *src) 864446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 865446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 866446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 867446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0; 868d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 869446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 870446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 871446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32G32 *dst, const gl::ColorF *src) 872446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 873446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<unsigned int>(src->red); 874446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<unsigned int>(src->green); 875446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 876446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 877446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32G32 *dst, const gl::ColorUI *src) 878446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 879446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<unsigned int>(src->red); 880446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<unsigned int>(src->green); 881446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 882446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 883446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R32G32 *dst, const R32G32 *src1, const R32G32 *src2) 884446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 885446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 886446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 887446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 888446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 889446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 890446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R32G32B32 891446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 892446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned int R; 893446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned int G; 894446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned int B; 895446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 896446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R32G32B32 *src) 897446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 898446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 899446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 900446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat(src->B); 901446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 902446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 903446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 904446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorUI *dst, const R32G32B32 *src) 905446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 906446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 907446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 908446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->B; 909d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 910446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 911446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 912446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32G32B32 *dst, const gl::ColorF *src) 913446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 914446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<unsigned int>(src->red); 915446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<unsigned int>(src->green); 916446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<unsigned int>(src->blue); 917446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 918446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 919446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32G32B32 *dst, const gl::ColorUI *src) 920446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 921446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<unsigned int>(src->red); 922446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<unsigned int>(src->green); 923446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = static_cast<unsigned int>(src->blue); 924446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 925446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 926446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R32G32B32 *dst, const R32G32B32 *src1, const R32G32B32 *src2) 927446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 928446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 929446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 930446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 931446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 932446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 933446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 934446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R32G32B32A32 935446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 936446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned int R; 937446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned int G; 938446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned int B; 939446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned int A; 940446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 941446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R32G32B32A32 *src) 942446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 943446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 944446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 945446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat(src->B); 946446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::normalizedToFloat(src->A); 947446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 948446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 949446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorUI *dst, const R32G32B32A32 *src) 950446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 951446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 952446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 953446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->B; 954446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = src->A; 955446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 956446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 957446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32G32B32A32 *dst, const gl::ColorF *src) 958446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 959446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<unsigned int>(src->red); 960446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<unsigned int>(src->green); 961446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<unsigned int>(src->blue); 962446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::floatToNormalized<unsigned int>(src->alpha); 963446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 964446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 965446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32G32B32A32 *dst, const gl::ColorUI *src) 966446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 967446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<unsigned int>(src->red); 968446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<unsigned int>(src->green); 969446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = static_cast<unsigned int>(src->blue); 970446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = static_cast<unsigned int>(src->alpha); 971446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 972446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 973446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R32G32B32A32 *dst, const R32G32B32A32 *src1, const R32G32B32A32 *src2) 974446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 975446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 976446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 977446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 978446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::average(src1->A, src2->A); 979446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 980446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 981446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 982446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R8S 983446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 984446a4477761d2f410041501118b0ae5a4a660311Geoff Lang char R; 985446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 986446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R8S *src) 987446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 988446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 989446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = 0.0f; 990446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 991446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 992446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 993446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 994446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorI *dst, const R8S *src) 995446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 996446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 997446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = 0; 998446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0; 999d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 1000446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1001446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1002446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R8S *dst, const gl::ColorF *src) 1003446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1004446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<char>(src->red); 1005446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1006446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1007446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R8S *dst, const gl::ColorI *src) 1008446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1009446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<char>(src->red); 1010446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1011446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1012446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R8S *dst, const R8S *src1, const R8S *src2) 1013446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1014446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 1015446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1016446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 1017446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1018446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R8G8S 1019446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 1020446a4477761d2f410041501118b0ae5a4a660311Geoff Lang char R; 1021446a4477761d2f410041501118b0ae5a4a660311Geoff Lang char G; 1022446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1023446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R8G8S *src) 1024446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1025446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 1026446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 1027446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 1028446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 1029446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1030446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1031446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorI *dst, const R8G8S *src) 1032446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1033446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 1034446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 1035446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0; 1036d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 1037446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1038446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1039446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R8G8S *dst, const gl::ColorF *src) 1040446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1041446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<char>(src->red); 1042446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<char>(src->green); 1043446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1044446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1045446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R8G8S *dst, const gl::ColorI *src) 1046446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1047446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<char>(src->red); 1048446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<char>(src->green); 1049446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1050446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1051446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R8G8S *dst, const R8G8S *src1, const R8G8S *src2) 1052446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1053446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 1054446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 1055446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1056446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 1057446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1058446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R8G8B8S 1059446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 1060446a4477761d2f410041501118b0ae5a4a660311Geoff Lang char R; 1061446a4477761d2f410041501118b0ae5a4a660311Geoff Lang char G; 1062446a4477761d2f410041501118b0ae5a4a660311Geoff Lang char B; 1063446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1064446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R8G8B8S *src) 1065446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1066446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 1067446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 1068446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat(src->B); 1069446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 1070446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1071446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1072446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorI *dst, const R8G8B8S *src) 1073446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1074446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 1075446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 1076446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->B; 1077d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 1078446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1079446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1080446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R8G8B8S *dst, const gl::ColorF *src) 1081446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1082446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<char>(src->red); 1083446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<char>(src->green); 1084446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<char>(src->blue); 1085446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1086446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1087446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R8G8B8S *dst, const gl::ColorI *src) 1088446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1089446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<char>(src->red); 1090446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<char>(src->green); 1091446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = static_cast<char>(src->blue); 1092446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1093446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1094446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R8G8B8S *dst, const R8G8B8S *src1, const R8G8B8S *src2) 1095446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1096446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 1097446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 1098446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 1099446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1100446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 1101446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1102446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R8G8B8A8S 1103446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 1104446a4477761d2f410041501118b0ae5a4a660311Geoff Lang char R; 1105446a4477761d2f410041501118b0ae5a4a660311Geoff Lang char G; 1106446a4477761d2f410041501118b0ae5a4a660311Geoff Lang char B; 1107446a4477761d2f410041501118b0ae5a4a660311Geoff Lang char A; 1108446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1109446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R8G8B8A8S *src) 1110446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1111446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 1112446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 1113446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat(src->B); 1114446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::normalizedToFloat(src->A); 1115446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1116446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1117446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorI *dst, const R8G8B8A8S *src) 1118446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1119446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 1120446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 1121446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->B; 1122446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = src->A; 1123446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1124446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1125446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R8G8B8A8S *dst, const gl::ColorF *src) 1126446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1127446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<char>(src->red); 1128446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<char>(src->green); 1129446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<char>(src->blue); 1130446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::floatToNormalized<char>(src->alpha); 1131446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1132446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1133446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R8G8B8A8S *dst, const gl::ColorI *src) 1134446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1135446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<char>(src->red); 1136446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<char>(src->green); 1137446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = static_cast<char>(src->blue); 1138446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = static_cast<char>(src->alpha); 1139446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1140446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1141446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R8G8B8A8S *dst, const R8G8B8A8S *src1, const R8G8B8A8S *src2) 1142446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1143446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 1144446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 1145446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 1146446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::average(src1->A, src2->A); 1147446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1148446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 1149446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1150446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R16S 1151446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 1152446a4477761d2f410041501118b0ae5a4a660311Geoff Lang short R; 1153446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1154446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R16S *src) 1155446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1156446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 1157446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = 0.0f; 1158446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 1159446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 1160446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1161446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1162446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorI *dst, const R16S *src) 1163446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1164446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 1165446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = 0; 1166446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0; 1167d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 1168446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1169446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1170446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16S *dst, const gl::ColorF *src) 1171446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1172446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<short>(src->red); 1173446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1174446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1175446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16S *dst, const gl::ColorI *src) 1176446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1177446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<short>(src->red); 1178446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1179446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1180446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R16S *dst, const R16S *src1, const R16S *src2) 1181446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1182446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 1183446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1184446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 1185446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1186446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R16G16S 1187446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 1188446a4477761d2f410041501118b0ae5a4a660311Geoff Lang short R; 1189446a4477761d2f410041501118b0ae5a4a660311Geoff Lang short G; 1190446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1191446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R16G16S *src) 1192446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1193446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 1194446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 1195446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 1196446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 1197446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1198446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1199446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorI *dst, const R16G16S *src) 1200446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1201446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 1202446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 1203446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0; 1204d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 1205446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1206446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1207446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16G16S *dst, const gl::ColorF *src) 1208446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1209446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<short>(src->red); 1210446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<short>(src->green); 1211446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1212446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1213446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16G16S *dst, const gl::ColorI *src) 1214446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1215446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<short>(src->red); 1216446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<short>(src->green); 1217446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1218446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1219446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R16G16S *dst, const R16G16S *src1, const R16G16S *src2) 1220446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1221446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 1222446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 1223446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1224446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 1225446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1226446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R16G16B16S 1227446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 1228446a4477761d2f410041501118b0ae5a4a660311Geoff Lang short R; 1229446a4477761d2f410041501118b0ae5a4a660311Geoff Lang short G; 1230446a4477761d2f410041501118b0ae5a4a660311Geoff Lang short B; 1231446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1232446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R16G16B16S *src) 1233446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1234446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 1235446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 1236446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat(src->B); 1237446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 1238446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1239446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1240446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorI *dst, const R16G16B16S *src) 1241446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1242446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 1243446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 1244446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->B; 1245d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 1246446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1247446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1248446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16G16B16S *dst, const gl::ColorF *src) 1249446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1250446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<short>(src->red); 1251446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<short>(src->green); 1252446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<short>(src->blue); 1253446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1254446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1255446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16G16B16S *dst, const gl::ColorI *src) 1256446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1257446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<short>(src->red); 1258446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<short>(src->green); 1259446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = static_cast<short>(src->blue); 1260446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1261446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1262446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R16G16B16S *dst, const R16G16B16S *src1, const R16G16B16S *src2) 1263446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1264446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 1265446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 1266446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 1267446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1268446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 1269446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1270446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R16G16B16A16S 1271446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 1272446a4477761d2f410041501118b0ae5a4a660311Geoff Lang short R; 1273446a4477761d2f410041501118b0ae5a4a660311Geoff Lang short G; 1274446a4477761d2f410041501118b0ae5a4a660311Geoff Lang short B; 1275446a4477761d2f410041501118b0ae5a4a660311Geoff Lang short A; 1276446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1277446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R16G16B16A16S *src) 1278446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1279446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 1280446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 1281446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat(src->B); 1282446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::normalizedToFloat(src->A); 1283446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1284446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1285446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorI *dst, const R16G16B16A16S *src) 1286446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1287446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 1288446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 1289446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->B; 1290446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = src->A; 1291446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1292446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1293446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16G16B16A16S *dst, const gl::ColorF *src) 1294446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1295446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<short>(src->red); 1296446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<short>(src->green); 1297446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<short>(src->blue); 1298446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::floatToNormalized<short>(src->alpha); 1299446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1300446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1301446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16G16B16A16S *dst, const gl::ColorI *src) 1302446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1303446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<short>(src->red); 1304446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<short>(src->green); 1305446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = static_cast<short>(src->blue); 1306446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = static_cast<short>(src->alpha); 1307446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1308446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1309446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R16G16B16A16S *dst, const R16G16B16A16S *src1, const R16G16B16A16S *src2) 1310446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1311446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 1312446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 1313446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 1314446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::average(src1->A, src2->A); 1315446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1316446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 1317446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1318446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R32S 1319446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 1320446a4477761d2f410041501118b0ae5a4a660311Geoff Lang int R; 1321446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1322446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R32S *src) 1323446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1324446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 1325446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = 0.0f; 1326446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 1327446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 1328446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1329446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1330446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorI *dst, const R32S *src) 1331446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1332446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 1333446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = 0; 1334446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0; 1335d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 1336446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1337446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1338446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32S *dst, const gl::ColorF *src) 1339446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1340446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<int>(src->red); 1341446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1342446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1343446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32S *dst, const gl::ColorI *src) 1344446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1345446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<int>(src->red); 1346446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1347446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1348446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R32S *dst, const R32S *src1, const R32S *src2) 1349446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1350446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 1351446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1352446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 1353446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1354446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R32G32S 1355446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 1356446a4477761d2f410041501118b0ae5a4a660311Geoff Lang int R; 1357446a4477761d2f410041501118b0ae5a4a660311Geoff Lang int G; 1358446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1359446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R32G32S *src) 1360446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1361446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 1362446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 1363446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 1364446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 1365446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1366446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1367446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorI *dst, const R32G32S *src) 1368446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1369446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 1370446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 1371446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0; 1372d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 1373446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1374446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1375446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32G32S *dst, const gl::ColorF *src) 1376446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1377446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<int>(src->red); 1378446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<int>(src->green); 1379446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1380446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1381446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32G32S *dst, const gl::ColorI *src) 1382446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1383446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<int>(src->red); 1384446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<int>(src->green); 1385446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1386446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1387446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R32G32S *dst, const R32G32S *src1, const R32G32S *src2) 1388446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1389446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 1390446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 1391446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1392446a4477761d2f410041501118b0ae5a4a660311Geoff Lang}; 1393446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1394446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R32G32B32S 1395446a4477761d2f410041501118b0ae5a4a660311Geoff Lang{ 1396446a4477761d2f410041501118b0ae5a4a660311Geoff Lang int R; 1397446a4477761d2f410041501118b0ae5a4a660311Geoff Lang int G; 1398446a4477761d2f410041501118b0ae5a4a660311Geoff Lang int B; 1399446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1400446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R32G32B32S *src) 1401446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1402446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 1403446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 1404446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat(src->B); 1405446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 1406446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1407446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1408446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorI *dst, const R32G32B32S *src) 1409446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1410446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 1411446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 1412446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->B; 1413d1e9a9a69193fc375646319c51b01fab82b340e0Geoff Lang dst->alpha = 1; 1414446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1415446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1416446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32G32B32S *dst, const gl::ColorF *src) 1417446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1418446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<int>(src->red); 1419446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<int>(src->green); 1420446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<int>(src->blue); 1421446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1422446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1423446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32G32B32S *dst, const gl::ColorI *src) 1424446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1425446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<int>(src->red); 1426446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<int>(src->green); 1427446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = static_cast<int>(src->blue); 1428446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1429446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1430446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R32G32B32S *dst, const R32G32B32S *src1, const R32G32B32S *src2) 143175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1432446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 1433446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 1434446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 143575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 143675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 143775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1438446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R32G32B32A32S 143975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 1440446a4477761d2f410041501118b0ae5a4a660311Geoff Lang int R; 1441446a4477761d2f410041501118b0ae5a4a660311Geoff Lang int G; 1442446a4477761d2f410041501118b0ae5a4a660311Geoff Lang int B; 1443446a4477761d2f410041501118b0ae5a4a660311Geoff Lang int A; 144475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1445446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R32G32B32A32S *src) 144675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1447446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat(src->R); 1448446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat(src->G); 1449446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat(src->B); 1450446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::normalizedToFloat(src->A); 145175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 145275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1453446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorI *dst, const R32G32B32A32S *src) 1454446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1455446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 1456446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 1457446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->B; 1458446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = src->A; 1459446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 146075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1461446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32G32B32A32S *dst, const gl::ColorF *src) 146275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1463446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<int>(src->red); 1464446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<int>(src->green); 1465446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<int>(src->blue); 1466446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::floatToNormalized<int>(src->alpha); 146775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 146875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1469446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32G32B32A32S *dst, const gl::ColorI *src) 1470446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1471446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<int>(src->red); 1472446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<int>(src->green); 1473446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = static_cast<int>(src->blue); 1474446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = static_cast<int>(src->alpha); 1475446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 147675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1477446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R32G32B32A32S *dst, const R32G32B32A32S *src1, const R32G32B32A32S *src2) 147875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1479446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 1480446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 1481446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 1482446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::average(src1->A, src2->A); 148375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 148475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 148575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1486446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct A16B16G16R16F 148775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 1488446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short A; 148975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned short R; 149075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned short G; 1491446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short B; 149275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1493446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const A16B16G16R16F *src) 1494446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1495446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::float16ToFloat32(src->R); 1496446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::float16ToFloat32(src->G); 1497446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::float16ToFloat32(src->B); 1498446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::float16ToFloat32(src->A); 1499446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1500446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1501446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(A16B16G16R16F *dst, const gl::ColorF *src) 150275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1503446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::float32ToFloat16(src->red); 1504446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::float32ToFloat16(src->green); 1505446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::float32ToFloat16(src->blue); 1506446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::float32ToFloat16(src->alpha); 1507446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1508446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1509446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(A16B16G16R16F *dst, const A16B16G16R16F *src1, const A16B16G16R16F *src2) 1510446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1511446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::averageHalfFloat(src1->R, src2->R); 1512446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::averageHalfFloat(src1->G, src2->G); 1513446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::averageHalfFloat(src1->B, src2->B); 1514446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::averageHalfFloat(src1->A, src2->A); 151575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 151675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 151775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1518446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R16G16B16A16F 151975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 152075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned short R; 152175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned short G; 152275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned short B; 152375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned short A; 152475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1525446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R16G16B16A16F *src) 152675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1527446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::float16ToFloat32(src->R); 1528446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::float16ToFloat32(src->G); 1529446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::float16ToFloat32(src->B); 1530446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::float16ToFloat32(src->A); 153175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 153275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1533446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16G16B16A16F *dst, const gl::ColorF *src) 1534446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1535446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::float32ToFloat16(src->red); 1536446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::float32ToFloat16(src->green); 1537446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::float32ToFloat16(src->blue); 1538446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::float32ToFloat16(src->alpha); 1539446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 154075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1541446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R16G16B16A16F *dst, const R16G16B16A16F *src1, const R16G16B16A16F *src2) 154275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1543446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::averageHalfFloat(src1->R, src2->R); 1544446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::averageHalfFloat(src1->G, src2->G); 1545446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::averageHalfFloat(src1->B, src2->B); 1546446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::averageHalfFloat(src1->A, src2->A); 154775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 154875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 154975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1550446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R16F 155175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 1552446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short R; 155375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1554446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R16F *src) 1555446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1556446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::float16ToFloat32(src->R); 1557446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = 0.0f; 1558446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 1559446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 1560446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1561446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1562446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16F *dst, const gl::ColorF *src) 156375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1564446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::float32ToFloat16(src->red); 1565446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1566446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1567446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R16F *dst, const R16F *src1, const R16F *src2) 1568446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1569446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::averageHalfFloat(src1->R, src2->R); 157075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 157175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 157275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1573446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct A16F 157475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 1575446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short A; 157675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1577446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const A16F *src) 157875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1579446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = 0.0f; 1580446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = 0.0f; 1581446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 1582446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::float16ToFloat32(src->A); 158375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 158475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1585446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(A16F *dst, const gl::ColorF *src) 1586446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1587446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::float32ToFloat16(src->alpha); 1588446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 158975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1590446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(A16F *dst, const A16F *src1, const A16F *src2) 159175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1592446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::averageHalfFloat(src1->A, src2->A); 159375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 159475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 159575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1596446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct L16F 159775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 1598446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short L; 159975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1600446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const L16F *src) 160175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1602446a4477761d2f410041501118b0ae5a4a660311Geoff Lang float lum = gl::float16ToFloat32(src->L); 1603446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = lum; 1604446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = lum; 1605446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = lum; 1606446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 160775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 160875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1609446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(L16F *dst, const gl::ColorF *src) 1610446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1611446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->L = gl::float32ToFloat16((src->red + src->green + src->blue) / 3.0f); 1612446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 161375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1614446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(L16F *dst, const L16F *src1, const L16F *src2) 161575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1616446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->L = gl::averageHalfFloat(src1->L, src2->L); 161775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 161875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 161975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1620446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct L16A16F 162175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 1622446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short L; 1623446a4477761d2f410041501118b0ae5a4a660311Geoff Lang unsigned short A; 162475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1625446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const L16A16F *src) 162675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1627446a4477761d2f410041501118b0ae5a4a660311Geoff Lang float lum = gl::float16ToFloat32(src->L); 1628446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = lum; 1629446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = lum; 1630446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = lum; 1631446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::float16ToFloat32(src->A); 163275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 163375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1634446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(L16A16F *dst, const gl::ColorF *src) 1635446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1636446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->L = gl::float32ToFloat16((src->red + src->green + src->blue) / 3.0f); 1637446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::float32ToFloat16(src->alpha); 1638446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 163975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1640446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(L16A16F *dst, const L16A16F *src1, const L16A16F *src2) 164175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1642446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->L = gl::averageHalfFloat(src1->L, src2->L); 1643446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::averageHalfFloat(src1->A, src2->A); 164475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 164575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 164675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1647446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R16G16F 164875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 164975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned short R; 165075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned short G; 165175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1652446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R16G16F *src) 1653446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1654446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::float16ToFloat32(src->R); 1655446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::float16ToFloat32(src->G); 1656446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 1657446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 1658446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1659446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1660446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16G16F *dst, const gl::ColorF *src) 1661446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1662446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::float32ToFloat16(src->red); 1663446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::float32ToFloat16(src->green); 1664446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1665446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1666446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R16G16F *dst, const R16G16F *src1, const R16G16F *src2) 166775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1668446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::averageHalfFloat(src1->R, src2->R); 1669446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::averageHalfFloat(src1->G, src2->G); 167075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 167175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 167275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1673446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R16G16B16F 167475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 167575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned short R; 167675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned short G; 167775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned short B; 167875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1679446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R16G16B16F *src) 168075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1681446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::float16ToFloat32(src->R); 1682446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::float16ToFloat32(src->G); 1683446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::float16ToFloat32(src->B); 1684446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 168575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 168675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1687446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R16G16B16F *dst, const gl::ColorF *src) 1688446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1689446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::float32ToFloat16(src->red); 1690446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::float32ToFloat16(src->green); 1691446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::float32ToFloat16(src->blue); 1692446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 169375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1694446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R16G16B16F *dst, const R16G16B16F *src1, const R16G16B16F *src2) 169575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1696446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::averageHalfFloat(src1->R, src2->R); 1697446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::averageHalfFloat(src1->G, src2->G); 1698446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::averageHalfFloat(src1->B, src2->B); 169975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 170075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 170175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1702446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct A32B32G32R32F 170375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 1704446a4477761d2f410041501118b0ae5a4a660311Geoff Lang float A; 1705446a4477761d2f410041501118b0ae5a4a660311Geoff Lang float R; 1706446a4477761d2f410041501118b0ae5a4a660311Geoff Lang float G; 1707446a4477761d2f410041501118b0ae5a4a660311Geoff Lang float B; 170875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1709446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const A32B32G32R32F *src) 171075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1711446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 1712446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 1713446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->B; 1714446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = src->A; 171575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 171675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1717446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(A32B32G32R32F *dst, const gl::ColorF *src) 1718446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1719446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = src->red; 1720446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = src->green; 1721446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = src->blue; 1722446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = src->alpha; 1723446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 172475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1725446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(A32B32G32R32F *dst, const A32B32G32R32F *src1, const A32B32G32R32F *src2) 172675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1727446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 1728446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 1729446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 1730446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::average(src1->A, src2->A); 173175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 173275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 173375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1734446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R32G32B32A32F 173575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 1736446a4477761d2f410041501118b0ae5a4a660311Geoff Lang float R; 1737446a4477761d2f410041501118b0ae5a4a660311Geoff Lang float G; 1738446a4477761d2f410041501118b0ae5a4a660311Geoff Lang float B; 1739446a4477761d2f410041501118b0ae5a4a660311Geoff Lang float A; 174075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1741446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R32G32B32A32F *src) 174275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1743446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 1744446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 1745446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->B; 1746446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = src->A; 174775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 174875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1749446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32G32B32A32F *dst, const gl::ColorF *src) 1750446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1751446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = src->red; 1752446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = src->green; 1753446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = src->blue; 1754446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = src->alpha; 1755446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 175675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1757446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R32G32B32A32F *dst, const R32G32B32A32F *src1, const R32G32B32A32F *src2) 175875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1759446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 1760446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 1761446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 1762446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::average(src1->A, src2->A); 176375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 176475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 176575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1766446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct R32F 176775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 1768446a4477761d2f410041501118b0ae5a4a660311Geoff Lang float R; 176975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1770446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R32F *src) 177175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1772446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 1773446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = 0.0f; 1774446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 1775446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 177675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 177775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1778446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32F *dst, const gl::ColorF *src) 1779446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1780446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = src->red; 1781446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 178275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1783446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(R32F *dst, const R32F *src1, const R32F *src2) 178475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1785446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 178675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 178775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 178875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1789446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct A32F 179075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 1791446a4477761d2f410041501118b0ae5a4a660311Geoff Lang float A; 179275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1793446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const A32F *src) 1794446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1795446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = 0.0f; 1796446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = 0.0f; 1797446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 1798446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = src->A; 1799446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1800446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1801446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(A32F *dst, const gl::ColorF *src) 1802446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1803446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = src->alpha; 1804446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1805446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1806446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(A32F *dst, const A32F *src1, const A32F *src2) 180775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1808446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::average(src1->A, src2->A); 180975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 181075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 181175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1812446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct L32F 181375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 1814446a4477761d2f410041501118b0ae5a4a660311Geoff Lang float L; 181575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1816446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const L32F *src) 1817446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1818446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->L; 1819446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->L; 1820446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->L; 1821446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 1822446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1823446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1824446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(L32F *dst, const gl::ColorF *src) 1825446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1826446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->L = (src->red + src->green + src->blue) / 3.0f; 1827446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1828446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1829446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(L32F *dst, const L32F *src1, const L32F *src2) 183075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1831446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->L = gl::average(src1->L, src2->L); 183275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 183375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 183475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1835446a4477761d2f410041501118b0ae5a4a660311Geoff Langstruct L32A32F 183675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 1837446a4477761d2f410041501118b0ae5a4a660311Geoff Lang float L; 183875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang float A; 183975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1840446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const L32A32F *src) 184175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1842446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->L; 1843446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->L; 1844446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->L; 1845446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = src->A; 184675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 184775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1848446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(L32A32F *dst, const gl::ColorF *src) 1849446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1850446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->L = (src->red + src->green + src->blue) / 3.0f; 1851446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = src->alpha; 1852446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 185375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1854446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void average(L32A32F *dst, const L32A32F *src1, const L32A32F *src2) 185575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1856446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->L = gl::average(src1->L, src2->L); 1857446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::average(src1->A, src2->A); 185875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 185975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 186075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 186175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Langstruct R32G32F 186275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 186375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang float R; 186475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang float G; 186575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1866446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R32G32F *src) 1867446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1868446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 1869446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 1870446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = 0.0f; 1871446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 1872446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1873446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1874446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32G32F *dst, const gl::ColorF *src) 1875446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1876446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = src->red; 1877446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = src->green; 1878446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1879446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 188075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang static void average(R32G32F *dst, const R32G32F *src1, const R32G32F *src2) 188175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1882446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 1883446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 188475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 188575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 188675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 188775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Langstruct R32G32B32F 188875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 188975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang float R; 189075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang float G; 189175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang float B; 189275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1893446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R32G32B32F *src) 1894446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1895446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 1896446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 1897446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->B; 1898446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 1899446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1900446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1901446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R32G32B32F *dst, const gl::ColorF *src) 1902446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1903446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = src->red; 1904446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = src->green; 1905446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = src->blue; 1906446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1907446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 190875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang static void average(R32G32B32F *dst, const R32G32B32F *src1, const R32G32B32F *src2) 190975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1910446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 1911446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 1912446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 191375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 191475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 191575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 191675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Langstruct R10G10B10A2 191775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 191875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned int R : 10; 191975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned int G : 10; 192075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned int B : 10; 192175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned int A : 2; 192275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1923446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R10G10B10A2 *src) 1924446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1925446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::normalizedToFloat<10>(src->R); 1926446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::normalizedToFloat<10>(src->G); 1927446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::normalizedToFloat<10>(src->B); 1928446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = gl::normalizedToFloat< 2>(src->A); 1929446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1930446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1931446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorUI *dst, const R10G10B10A2 *src) 1932446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1933446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = src->R; 1934446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = src->G; 1935446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = src->B; 1936446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = src->A; 1937446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1938446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1939446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R10G10B10A2 *dst, const gl::ColorF *src) 1940446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1941446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::floatToNormalized<10, unsigned int>(src->red); 1942446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::floatToNormalized<10, unsigned int>(src->green); 1943446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::floatToNormalized<10, unsigned int>(src->blue); 1944446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::floatToNormalized< 2, unsigned int>(src->alpha); 1945446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1946446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1947446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R10G10B10A2 *dst, const gl::ColorUI *src) 1948446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1949446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = static_cast<unsigned int>(src->red); 1950446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = static_cast<unsigned int>(src->green); 1951446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = static_cast<unsigned int>(src->blue); 1952446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = static_cast<unsigned int>(src->alpha); 1953446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1954446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 195575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang static void average(R10G10B10A2 *dst, const R10G10B10A2 *src1, const R10G10B10A2 *src2) 195675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 1957446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::average(src1->R, src2->R); 1958446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::average(src1->G, src2->G); 1959446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::average(src1->B, src2->B); 1960446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->A = gl::average(src1->A, src2->A); 196175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 196275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 196375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 196475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Langstruct R9G9B9E5 196575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 196675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned int R : 9; 196775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned int G : 9; 196875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned int B : 9; 196975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned int E : 5; 197075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1971446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R9G9B9E5 *src) 1972446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1973446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::convert999E5toRGBFloats(gl::bitCast<unsigned int>(*src), &dst->red, &dst->green, &dst->blue); 1974446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 1975446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1976446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 1977446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R9G9B9E5 *dst, const gl::ColorF *src) 1978446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 1979446a4477761d2f410041501118b0ae5a4a660311Geoff Lang *reinterpret_cast<unsigned int*>(dst) = gl::convertRGBFloatsTo999E5(src->red, 1980446a4477761d2f410041501118b0ae5a4a660311Geoff Lang src->green, 1981446a4477761d2f410041501118b0ae5a4a660311Geoff Lang src->blue); 1982446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 1983446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 198475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang static void average(R9G9B9E5 *dst, const R9G9B9E5 *src1, const R9G9B9E5 *src2) 198575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 198675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang float r1, g1, b1; 198775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang gl::convert999E5toRGBFloats(*reinterpret_cast<const unsigned int*>(src1), &r1, &g1, &b1); 198875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 198975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang float r2, g2, b2; 199075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang gl::convert999E5toRGBFloats(*reinterpret_cast<const unsigned int*>(src2), &r2, &g2, &b2); 199175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 1992446a4477761d2f410041501118b0ae5a4a660311Geoff Lang *reinterpret_cast<unsigned int*>(dst) = gl::convertRGBFloatsTo999E5(gl::average(r1, r2), 1993446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::average(g1, g2), 1994446a4477761d2f410041501118b0ae5a4a660311Geoff Lang gl::average(b1, b2)); 199575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 199675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 199775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 199875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Langstruct R11G11B10F 199975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang{ 200075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned int R : 11; 200175ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned int G : 11; 200275ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang unsigned int B : 10; 200375ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 2004446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void readColor(gl::ColorF *dst, const R11G11B10F *src) 2005446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 2006446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->red = gl::float11ToFloat32(src->R); 2007446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->green = gl::float11ToFloat32(src->G); 2008446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->blue = gl::float10ToFloat32(src->B); 2009446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->alpha = 1.0f; 2010446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 2011446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 2012446a4477761d2f410041501118b0ae5a4a660311Geoff Lang static void writeColor(R11G11B10F *dst, const gl::ColorF *src) 2013446a4477761d2f410041501118b0ae5a4a660311Geoff Lang { 2014446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::float32ToFloat11(src->red); 2015446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::float32ToFloat11(src->green); 2016446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::float32ToFloat10(src->blue); 2017446a4477761d2f410041501118b0ae5a4a660311Geoff Lang } 2018446a4477761d2f410041501118b0ae5a4a660311Geoff Lang 201975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang static void average(R11G11B10F *dst, const R11G11B10F *src1, const R11G11B10F *src2) 202075ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang { 2021446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->R = gl::averageFloat11(src1->R, src2->R); 2022446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->G = gl::averageFloat11(src1->G, src2->G); 2023446a4477761d2f410041501118b0ae5a4a660311Geoff Lang dst->B = gl::averageFloat10(src1->B, src2->B); 202475ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang } 202575ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang}; 202675ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 202775ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang} 202875ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang 202975ce3f21886637461bb7c47b82c24dcd6934bccaGeoff Lang#endif // LIBGLESV2_RENDERER_IMAGEFORMATS_H_ 2030