#ifndef _RGBAFLOAT_H #define _RGBAFLOAT_H struct RGBAFloat { float r,g,b,a; RGBAFloat(){a=r=g=b=1.0f;} RGBAFloat(float _r, float _g, float _b, float _a) { r=_r;g=_g;b=_b;a=_a; } void clamp() { if (r>1) r=1; if (g>1) g=1; if (b>1) b=1; if (a>1) a=1; if (r<0) r=0; if (g<0) g=0; if (b<0) b=0; if (a<0) a=0; } void convertToD3DColor(u32 &color) { clamp(); color = (int(a*255)<<24) | (int(r*255)<<16) | (int(g*255)<<8) | (int(b*255)); } void convertRGB_GC(u32 color) { r=((color>>24)&0xFF)/255.0f; g=((color>>16)&0xFF)/255.0f; b=((color>>8)&0xFF)/255.0f; } void convertRGB(u32 color) { r=((color>>16)&0xFF)/255.0f; g=((color>>8)&0xFF)/255.0f; b=((color)&0xFF)/255.0f; } void convertA(u32 color) { a=((color>>24)&0xFF)/255.0f; } void convertA_GC(u32 color) { a=((color)&0xFF)/255.0f; } void convert(u32 color) { convertRGB(color); convertA(color); } void convert_GC(u32 color) { convertRGB_GC(color); convertA_GC(color); } void operator *=(float f) { r*=f;g*=f;b*=f; a*=f; } RGBAFloat operator *(float f) { return RGBAFloat(r*f,g*f,b*f,a*f); } RGBAFloat operator *(RGBAFloat &o) { return RGBAFloat(r*o.r,g*o.g,b*o.b,a*o.a); } void operator *=(RGBAFloat &o) { r*=o.r;g*=o.g;b*=o.b;a*=o.a; } RGBAFloat operator +(RGBAFloat &o) { return RGBAFloat(r+o.r,g+o.g,b+o.b,a+o.a); } void operator +=(RGBAFloat &o) { r+=o.r;g+=o.g;b+=o.b;a+=o.a; } }; #endif