62 lines
1.4 KiB
C++
62 lines
1.4 KiB
C++
#pragma once
|
|
|
|
|
|
struct Color16 {
|
|
static constexpr std::uint8_t MaxRed = 0x1f;
|
|
static constexpr std::uint8_t MaxGreen = 0x3f;
|
|
static constexpr std::uint8_t MaxBlue = 0x1f;
|
|
|
|
constexpr Color16() : value(0){}
|
|
constexpr Color16(std::uint16_t v) : value(v){}
|
|
|
|
static constexpr Color16 red() {
|
|
Color16 result;
|
|
result.r(MaxRed);
|
|
result.g(0);
|
|
result.b(0);
|
|
return result;
|
|
}
|
|
static constexpr Color16 green() {
|
|
Color16 result;
|
|
result.r(0);
|
|
result.g(MaxGreen);
|
|
result.b(0);
|
|
return result;
|
|
}
|
|
static constexpr Color16 blue() {
|
|
Color16 result;
|
|
result.r(0);
|
|
result.g(0);
|
|
result.b(MaxBlue);
|
|
return result;
|
|
}
|
|
static constexpr Color16 white() {
|
|
Color16 result;
|
|
result.r(MaxRed);
|
|
result.g(MaxGreen);
|
|
result.b(MaxBlue);
|
|
return result;
|
|
}
|
|
|
|
std::uint16_t value;
|
|
|
|
constexpr std::uint8_t r() const{
|
|
return (value & 0xf800) >> 11;
|
|
}
|
|
constexpr std::uint8_t g() const{
|
|
return (value & 0x7e0) >> 5;
|
|
}
|
|
constexpr std::uint8_t b() const{
|
|
return (value & 0x1f);
|
|
}
|
|
|
|
constexpr void r(std::uint8_t v){
|
|
value = (value & ~0xf800) | (v << 11);
|
|
}
|
|
constexpr void g(std::uint8_t v){
|
|
value = (value & ~0x7e0) | (v << 5);
|
|
}
|
|
constexpr void b(std::uint8_t v){
|
|
value = (value & ~0x1f) | (v);
|
|
}
|
|
}; |