5#ifndef MODES_PALETTES_H
6#define MODES_PALETTES_H
470template<u
int32_t startColor, u
int32_t endColor>
static constexpr PaletteTy _gradient_palette_from_color()
473 constexpr ToRGB start {startColor};
474 constexpr ToRGB end {endColor};
477 constexpr float step = palette.size() - 1;
478 constexpr float dr = (end.r - start.r) / step;
479 constexpr float dg = (end.g - start.g) / step;
480 constexpr float db = (end.b - start.b) / step;
482 for (
size_t I = 0; I < palette.size(); ++I)
484 uint8_t r = start.r + (I * dr);
485 uint8_t g = start.g + (I * dg);
486 uint8_t b = start.b + (I * db);
495 _gradient_palette_from_color<startColor, endColor>();
503template<
bool PaletteLoops = true,
typename UIntTy = u
int8_t>
507 uint8_t renormIndex = index >> 4;
509 float blendIndex = (index & 0x0F) / 16.0f;
512 if constexpr (
sizeof(UIntTy) > 1)
514 const float remapedIndex = (index /
static_cast<float>(UINT16_MAX)) * 16.f;
515 renormIndex = std::min<uint8_t>(floorf(remapedIndex), 15);
516 blendIndex = remapedIndex - renormIndex;
517 static_assert(std::is_same_v<UIntTy, uint16_t>,
"u8 or u16 allowed only");
521 static_assert(std::is_same_v<UIntTy, uint8_t>,
"u8 or u16 allowed only");
524 if (renormIndex >= 16)
528 if (blendIndex < 0.0f)
530 if (blendIndex > 1.0f)
532 blendIndex = 1.0f - blendIndex;
534 const uint32_t entry = palette[renormIndex];
537 uint8_t red1 = (entry &
Red) >> 16;
538 uint8_t green1 = (entry &
Lime) >> 8;
539 uint8_t blue1 = entry &
Blue;
544 uint32_t nextColor = 0;
545 if (renormIndex == 15)
547 nextColor = PaletteLoops ? palette[0] : palette[15];
551 nextColor = palette[1 + renormIndex];
554 const float f1 = blendIndex;
555 const float f2 = 1.0 - blendIndex;
557 const uint8_t red2 = (nextColor >> 16) & 0x0000ff;
561 const uint8_t green2 = (nextColor >> 8) & 0x0000ff;
562 green1 = green1 * f1;
563 green1 += green2 * f2;
565 const uint8_t blue2 = nextColor & 0x0000ff;
570 if (brightness != 255)
574 const float adjustedBrightness = (brightness + 1) / 256.0;
580 red1 = red1 * adjustedBrightness;
585 green1 = green1 * adjustedBrightness;
590 blue1 = blue1 * adjustedBrightness;
603 uint32_t outputColor = red1;
604 outputColor = (outputColor << 8) | green1;
605 outputColor = (outputColor << 8) | blue1;
Manipulate color representations.
Tools to manipulate colors and their representation.
Definition: gamma.hpp:10
static constexpr PaletteTy PaletteBlackBodyColors
Black body radiation, with the high end changed to be nicer.
Definition: palettes.hpp:396
static constexpr PaletteTy PalettePartyColors
basically, HSV with no green. looks better when lighing people
Definition: palettes.hpp:378
static constexpr uint32_t from_palette(UIntTy index, const PaletteTy &palette, uint8_t brightness=255)
Return a color from a palette.
Definition: palettes.hpp:504
static constexpr PaletteTy PaletteHeatColors
Heat black body.
Definition: palettes.hpp:415
static constexpr PaletteTy PaletteGradient
Return a palette gradient from startColor to endColor.
Definition: palettes.hpp:494
static constexpr PaletteTy PaletteOceanColors
Ocean colors, blues and whites.
Definition: palettes.hpp:306
static constexpr PaletteTy PaletteFlameColors
Fire color palette.
Definition: palettes.hpp:288
ColorTemperature
Color temperature values.
Definition: palettes.hpp:34
@ ClearBlueSky
Definition: palettes.hpp:54
@ HighNoonSun
Definition: palettes.hpp:48
@ HighPressureSodium
Definition: palettes.hpp:78
@ DirectSunlight
Definition: palettes.hpp:50
@ BlackLightFluorescent
Definition: palettes.hpp:70
@ WarmFluorescent
Warm (yellower) flourescent light bulbs.
Definition: palettes.hpp:60
@ GrowLightFluorescent
Definition: palettes.hpp:68
@ MetalHalide
Definition: palettes.hpp:76
@ Candle
1900 Kelvin
Definition: palettes.hpp:38
@ FullSpectrumFluorescent
Definition: palettes.hpp:66
@ Halogen
Definition: palettes.hpp:44
@ UncorrectedTemperature
Uncorrected temperature (0xFFFFFF)
Definition: palettes.hpp:82
@ CarbonArc
Definition: palettes.hpp:46
@ CoolWhiteFluorescent
Definition: palettes.hpp:64
@ MercuryVapor
Definition: palettes.hpp:72
@ Tungsten100W
Definition: palettes.hpp:42
@ StandardFluorescent
Definition: palettes.hpp:62
@ OvercastSky
Definition: palettes.hpp:52
@ Tungsten40W
Definition: palettes.hpp:40
@ SodiumVapor
Definition: palettes.hpp:74
static constexpr PaletteTy PaletteLavaColors
Lava color palette.
Definition: palettes.hpp:270
std::array< uint32_t, 16 > PaletteTy
Palette types.
Definition: palettes.hpp:18
static constexpr PaletteTy PaletteWaterColors
Water colors, blues.
Definition: palettes.hpp:324
static constexpr LMBD_INLINE uint32_t fromRGB(uint8_t r, uint8_t g, uint8_t b)
Return color (r, g, b) as a single uint32_t integer.
Definition: utils.hpp:24
static constexpr PaletteTy PaletteCloudColors
Cloudy color palette/ blue to blue-white.
Definition: palettes.hpp:252
static constexpr PaletteTy PaletteAuroraColors
Palette of green yellow colors.
Definition: palettes.hpp:432
static constexpr PaletteTy PaletteForestColors
Forest colors, greens.
Definition: palettes.hpp:342
static constexpr PaletteTy PaletteRainbowColors
HSV Rainbow.
Definition: palettes.hpp:360
static constexpr PaletteTy PalettePapiColors
Palette of nice handpicked colors.
Definition: palettes.hpp:450
HTMLColorCode
Define common HTML colors.
Definition: palettes.hpp:87
@ LightSteelBlue
Definition: palettes.hpp:167
@ FairyLightNCC
Definition: palettes.hpp:243
@ Purple
Definition: palettes.hpp:206
@ MediumAquamarine
Definition: palettes.hpp:174
@ SteelBlue
Definition: palettes.hpp:223
@ LightGreen
Definition: palettes.hpp:159
@ Tan
Definition: palettes.hpp:224
@ Khaki
Definition: palettes.hpp:150
@ DarkViolet
Definition: palettes.hpp:128
@ Linen
Definition: palettes.hpp:171
@ DarkKhaki
Definition: palettes.hpp:116
@ Pink
Definition: palettes.hpp:202
@ Gray
Definition: palettes.hpp:141
@ Orchid
Definition: palettes.hpp:194
@ Peru
Definition: palettes.hpp:201
@ CadetBlue
Definition: palettes.hpp:102
@ Violet
Definition: palettes.hpp:229
@ LavenderBlush
Definition: palettes.hpp:152
@ LightSeaGreen
Definition: palettes.hpp:163
@ PapayaWhip
Definition: palettes.hpp:199
@ BlanchedAlmond
Definition: palettes.hpp:97
@ Wheat
Definition: palettes.hpp:230
@ LightGrey
Definition: palettes.hpp:160
@ ForestGreen
Definition: palettes.hpp:136
@ MediumPurple
Definition: palettes.hpp:177
@ Brown
Definition: palettes.hpp:100
@ HotPink
Definition: palettes.hpp:146
@ Snow
Definition: palettes.hpp:221
@ Orange
Definition: palettes.hpp:192
@ AntiqueWhite
Definition: palettes.hpp:90
@ PaleGreen
Definition: palettes.hpp:196
@ Cyan
Definition: palettes.hpp:109
@ DarkOliveGreen
Definition: palettes.hpp:118
@ MediumVioletRed
Definition: palettes.hpp:182
@ DarkOrchid
Definition: palettes.hpp:120
@ Salmon
Definition: palettes.hpp:211
@ Beige
Definition: palettes.hpp:94
@ MistyRose
Definition: palettes.hpp:185
@ DarkSlateGrey
Definition: palettes.hpp:126
@ PaleGoldenrod
Definition: palettes.hpp:195
@ DarkSlateGray
Definition: palettes.hpp:125
@ Cornsilk
Definition: palettes.hpp:107
@ DarkGray
Definition: palettes.hpp:113
@ PaleTurquoise
Definition: palettes.hpp:197
@ LimeGreen
Definition: palettes.hpp:170
@ MediumBlue
Definition: palettes.hpp:175
@ Amethyst
Definition: palettes.hpp:89
@ SpringGreen
Definition: palettes.hpp:222
@ IndianRed
Definition: palettes.hpp:147
@ BurlyWood
Definition: palettes.hpp:101
@ LightBlue
Definition: palettes.hpp:155
@ BlueViolet
Definition: palettes.hpp:99
@ SlateGray
Definition: palettes.hpp:219
@ Green
Definition: palettes.hpp:143
@ LightSlateGray
Definition: palettes.hpp:165
@ MintCream
Definition: palettes.hpp:184
@ GreenYellow
Definition: palettes.hpp:144
@ GhostWhite
Definition: palettes.hpp:138
@ LightGoldenrodYellow
Definition: palettes.hpp:158
@ LightSlateGrey
Definition: palettes.hpp:166
@ MediumSlateBlue
Definition: palettes.hpp:179
@ White
Definition: palettes.hpp:231
@ Red
Definition: palettes.hpp:207
@ Tomato
Definition: palettes.hpp:227
@ PeachPuff
Definition: palettes.hpp:200
@ RosyBrown
Definition: palettes.hpp:208
@ Indigo
Definition: palettes.hpp:148
@ Plaid
Definition: palettes.hpp:203
@ LightSkyBlue
Definition: palettes.hpp:164
@ Navy
Definition: palettes.hpp:188
@ WhiteSmoke
Definition: palettes.hpp:232
@ Magenta
Definition: palettes.hpp:172
@ LightCoral
Definition: palettes.hpp:156
@ Turquoise
Definition: palettes.hpp:228
@ Lime
Definition: palettes.hpp:169
@ NavajoWhite
Definition: palettes.hpp:187
@ OldLace
Definition: palettes.hpp:189
@ Goldenrod
Definition: palettes.hpp:140
@ SeaGreen
Definition: palettes.hpp:213
@ LemonChiffon
Definition: palettes.hpp:154
@ Plum
Definition: palettes.hpp:204
@ RoyalBlue
Definition: palettes.hpp:209
@ Lavender
Definition: palettes.hpp:151
@ FireBrick
Definition: palettes.hpp:134
@ LawnGreen
Definition: palettes.hpp:153
@ LightYellow
Definition: palettes.hpp:168
@ Aquamarine
Definition: palettes.hpp:92
@ LightSalmon
Definition: palettes.hpp:162
@ Sienna
Definition: palettes.hpp:215
@ DarkGoldenrod
Definition: palettes.hpp:112
@ Moccasin
Definition: palettes.hpp:186
@ FairyLight
Definition: palettes.hpp:240
@ SlateBlue
Definition: palettes.hpp:218
@ Thistle
Definition: palettes.hpp:226
@ MediumSeaGreen
Definition: palettes.hpp:178
@ MediumOrchid
Definition: palettes.hpp:176
@ MediumTurquoise
Definition: palettes.hpp:181
@ Yellow
Definition: palettes.hpp:233
@ DarkSlateBlue
Definition: palettes.hpp:124
@ SandyBrown
Definition: palettes.hpp:212
@ SkyBlue
Definition: palettes.hpp:217
@ DarkBlue
Definition: palettes.hpp:110
@ AliceBlue
Definition: palettes.hpp:88
@ DeepPink
Definition: palettes.hpp:129
@ Azure
Definition: palettes.hpp:93
@ Gainsboro
Definition: palettes.hpp:137
@ LightPink
Definition: palettes.hpp:161
@ DarkTurquoise
Definition: palettes.hpp:127
@ Teal
Definition: palettes.hpp:225
@ OrangeRed
Definition: palettes.hpp:193
@ Gold
Definition: palettes.hpp:139
@ Blue
Definition: palettes.hpp:98
@ DarkSeaGreen
Definition: palettes.hpp:123
@ FloralWhite
Definition: palettes.hpp:135
@ DarkGreen
Definition: palettes.hpp:115
@ DarkMagenta
Definition: palettes.hpp:117
@ DarkGrey
Definition: palettes.hpp:114
@ DodgerBlue
Definition: palettes.hpp:133
@ Honeydew
Definition: palettes.hpp:145
@ Maroon
Definition: palettes.hpp:173
@ CornflowerBlue
Definition: palettes.hpp:106
@ DarkSalmon
Definition: palettes.hpp:122
@ Black
Definition: palettes.hpp:96
@ PowderBlue
Definition: palettes.hpp:205
@ SlateGrey
Definition: palettes.hpp:220
@ Olive
Definition: palettes.hpp:190
@ Seashell
Definition: palettes.hpp:214
@ Grey
Definition: palettes.hpp:142
@ Silver
Definition: palettes.hpp:216
@ Chocolate
Definition: palettes.hpp:104
@ DimGray
Definition: palettes.hpp:131
@ OliveDrab
Definition: palettes.hpp:191
@ DarkCyan
Definition: palettes.hpp:111
@ LightCyan
Definition: palettes.hpp:157
@ Aqua
Definition: palettes.hpp:91
@ Ivory
Definition: palettes.hpp:149
@ MidnightBlue
Definition: palettes.hpp:183
@ DimGrey
Definition: palettes.hpp:132
@ Chartreuse
Definition: palettes.hpp:103
@ DarkRed
Definition: palettes.hpp:121
@ YellowGreen
Definition: palettes.hpp:234
@ SaddleBrown
Definition: palettes.hpp:210
@ MediumSpringGreen
Definition: palettes.hpp:180
@ DarkOrange
Definition: palettes.hpp:119
@ Coral
Definition: palettes.hpp:105
@ PaleVioletRed
Definition: palettes.hpp:198
@ Crimson
Definition: palettes.hpp:108
@ DeepSkyBlue
Definition: palettes.hpp:130
@ Bisque
Definition: palettes.hpp:95
Exposes (r, g, b) as uint8_t in struct from a single uint32_t color.
Definition: utils.hpp:33