150 lines
3.3 KiB
C++
150 lines
3.3 KiB
C++
// This code is in the public domain -- castanyo@yahoo.es
|
|
|
|
#pragma once
|
|
#ifndef NV_MATH_COLOR_H
|
|
#define NV_MATH_COLOR_H
|
|
|
|
#include "nvmath.h"
|
|
|
|
namespace nv
|
|
{
|
|
|
|
/// 64 bit color stored as BGRA.
|
|
class NVMATH_CLASS Color64
|
|
{
|
|
public:
|
|
Color64() { }
|
|
Color64(const Color64 & c) : u(c.u) { }
|
|
Color64(uint16 R, uint16 G, uint16 B, uint16 A) { setRGBA(R, G, B, A); }
|
|
explicit Color64(uint64 U) : u(U) { }
|
|
|
|
void setRGBA(uint16 R, uint16 G, uint16 B, uint16 A)
|
|
{
|
|
r = R;
|
|
g = G;
|
|
b = B;
|
|
a = A;
|
|
}
|
|
|
|
operator uint64 () const {
|
|
return u;
|
|
}
|
|
|
|
union {
|
|
struct {
|
|
#if NV_LITTLE_ENDIAN
|
|
uint16 r, a, b, g;
|
|
#else
|
|
uint16 a: 16;
|
|
uint16 r: 16;
|
|
uint16 g: 16;
|
|
uint16 b: 16;
|
|
#endif
|
|
};
|
|
uint64 u;
|
|
};
|
|
};
|
|
|
|
/// 32 bit color stored as BGRA.
|
|
class NVMATH_CLASS Color32
|
|
{
|
|
public:
|
|
Color32() { }
|
|
Color32(const Color32 & c) : u(c.u) { }
|
|
Color32(uint8 R, uint8 G, uint8 B) { setRGBA(R, G, B, 0xFF); }
|
|
Color32(uint8 R, uint8 G, uint8 B, uint8 A) { setRGBA( R, G, B, A); }
|
|
//Color32(uint8 c[4]) { setRGBA(c[0], c[1], c[2], c[3]); }
|
|
//Color32(float R, float G, float B) { setRGBA(uint(R*255), uint(G*255), uint(B*255), 0xFF); }
|
|
//Color32(float R, float G, float B, float A) { setRGBA(uint(R*255), uint(G*255), uint(B*255), uint(A*255)); }
|
|
explicit Color32(uint32 U) : u(U) { }
|
|
|
|
void setRGBA(uint8 R, uint8 G, uint8 B, uint8 A)
|
|
{
|
|
r = R;
|
|
g = G;
|
|
b = B;
|
|
a = A;
|
|
}
|
|
|
|
void setBGRA(uint8 B, uint8 G, uint8 R, uint8 A = 0xFF)
|
|
{
|
|
r = R;
|
|
g = G;
|
|
b = B;
|
|
a = A;
|
|
}
|
|
|
|
operator uint32 () const {
|
|
return u;
|
|
}
|
|
|
|
union {
|
|
struct {
|
|
#if NV_LITTLE_ENDIAN
|
|
uint8 b, g, r, a;
|
|
#else
|
|
uint8 a: 8;
|
|
uint8 r: 8;
|
|
uint8 g: 8;
|
|
uint8 b: 8;
|
|
#endif
|
|
};
|
|
uint8 component[4];
|
|
uint32 u;
|
|
};
|
|
};
|
|
|
|
|
|
/// 16 bit 565 BGR color.
|
|
class NVMATH_CLASS Color16
|
|
{
|
|
public:
|
|
Color16() { }
|
|
Color16(const Color16 & c) : u(c.u) { }
|
|
explicit Color16(uint16 U) : u(U) { }
|
|
|
|
union {
|
|
struct {
|
|
#if NV_LITTLE_ENDIAN
|
|
uint16 b : 5;
|
|
uint16 g : 6;
|
|
uint16 r : 5;
|
|
#else
|
|
uint16 r : 5;
|
|
uint16 g : 6;
|
|
uint16 b : 5;
|
|
#endif
|
|
};
|
|
uint16 u;
|
|
};
|
|
};
|
|
|
|
/// 16 bit 4444 BGRA color.
|
|
class NVMATH_CLASS Color16_4444
|
|
{
|
|
public:
|
|
Color16_4444() { }
|
|
Color16_4444(const Color16_4444 & c) : u(c.u) { }
|
|
explicit Color16_4444(uint16 U) : u(U) { }
|
|
|
|
union {
|
|
struct {
|
|
#if NV_LITTLE_ENDIAN
|
|
uint16 b : 4;
|
|
uint16 g : 4;
|
|
uint16 r : 4;
|
|
uint16 a : 4;
|
|
#else
|
|
uint16 a : 4;
|
|
uint16 r : 4;
|
|
uint16 g : 4;
|
|
uint16 b : 4;
|
|
#endif
|
|
};
|
|
uint16 u;
|
|
};
|
|
};
|
|
|
|
} // nv namespace
|
|
|
|
#endif // NV_MATH_COLOR_H
|