mirror of
https://github.com/wled/WLED.git
synced 2025-07-20 17:26:32 +00:00
revert removal of adding with saturation, renamed 'fast' to 'saturate'
- blurring now uses desaturated adding: it is faster most of the times and blurring adds scaled colors so should rarely (ever?) saturate, I saw no visual difference in tests. - formatting
This commit is contained in:
parent
696290527a
commit
a88436c620
18
wled00/FX.h
18
wled00/FX.h
@ -595,9 +595,9 @@ typedef struct Segment {
|
|||||||
void fadeToBlackBy(uint8_t fadeBy);
|
void fadeToBlackBy(uint8_t fadeBy);
|
||||||
inline void blendPixelColor(int n, uint32_t color, uint8_t blend) { setPixelColor(n, color_blend(getPixelColor(n), color, blend)); }
|
inline void blendPixelColor(int n, uint32_t color, uint8_t blend) { setPixelColor(n, color_blend(getPixelColor(n), color, blend)); }
|
||||||
inline void blendPixelColor(int n, CRGB c, uint8_t blend) { blendPixelColor(n, RGBW32(c.r,c.g,c.b,0), blend); }
|
inline void blendPixelColor(int n, CRGB c, uint8_t blend) { blendPixelColor(n, RGBW32(c.r,c.g,c.b,0), blend); }
|
||||||
inline void addPixelColor(int n, uint32_t color) { setPixelColor(n, color_add(getPixelColor(n), color)); }
|
inline void addPixelColor(int n, uint32_t color, bool saturate = false) { setPixelColor(n, color_add(getPixelColor(n), color, saturate)); }
|
||||||
inline void addPixelColor(int n, byte r, byte g, byte b, byte w = 0) { addPixelColor(n, RGBW32(r,g,b,w)); }
|
inline void addPixelColor(int n, byte r, byte g, byte b, byte w = 0, bool saturate = false) { addPixelColor(n, RGBW32(r,g,b,w), saturate); }
|
||||||
inline void addPixelColor(int n, CRGB c) { addPixelColor(n, RGBW32(c.r,c.g,c.b,0)); }
|
inline void addPixelColor(int n, CRGB c, bool saturate = false) { addPixelColor(n, RGBW32(c.r,c.g,c.b,0), saturate); }
|
||||||
inline void fadePixelColor(uint16_t n, uint8_t fade) { setPixelColor(n, color_fade(getPixelColor(n), fade, true)); }
|
inline void fadePixelColor(uint16_t n, uint8_t fade) { setPixelColor(n, color_fade(getPixelColor(n), fade, true)); }
|
||||||
[[gnu::hot]] uint32_t color_from_palette(uint16_t, bool mapping, bool wrap, uint8_t mcol, uint8_t pbri = 255) const;
|
[[gnu::hot]] uint32_t color_from_palette(uint16_t, bool mapping, bool wrap, uint8_t mcol, uint8_t pbri = 255) const;
|
||||||
[[gnu::hot]] uint32_t color_wheel(uint8_t pos) const;
|
[[gnu::hot]] uint32_t color_wheel(uint8_t pos) const;
|
||||||
@ -632,9 +632,9 @@ typedef struct Segment {
|
|||||||
// 2D support functions
|
// 2D support functions
|
||||||
inline void blendPixelColorXY(uint16_t x, uint16_t y, uint32_t color, uint8_t blend) { setPixelColorXY(x, y, color_blend(getPixelColorXY(x,y), color, blend)); }
|
inline void blendPixelColorXY(uint16_t x, uint16_t y, uint32_t color, uint8_t blend) { setPixelColorXY(x, y, color_blend(getPixelColorXY(x,y), color, blend)); }
|
||||||
inline void blendPixelColorXY(uint16_t x, uint16_t y, CRGB c, uint8_t blend) { blendPixelColorXY(x, y, RGBW32(c.r,c.g,c.b,0), blend); }
|
inline void blendPixelColorXY(uint16_t x, uint16_t y, CRGB c, uint8_t blend) { blendPixelColorXY(x, y, RGBW32(c.r,c.g,c.b,0), blend); }
|
||||||
inline void addPixelColorXY(int x, int y, uint32_t color) { setPixelColorXY(x, y, color_add(getPixelColorXY(x,y), color)); }
|
inline void addPixelColorXY(int x, int y, uint32_t color, bool saturate = false) { setPixelColorXY(x, y, color_add(getPixelColorXY(x,y), color, saturate)); }
|
||||||
inline void addPixelColorXY(int x, int y, byte r, byte g, byte b, byte w = 0) { addPixelColorXY(x, y, RGBW32(r,g,b,w)); }
|
inline void addPixelColorXY(int x, int y, byte r, byte g, byte b, byte w = 0, bool saturate = false) { addPixelColorXY(x, y, RGBW32(r,g,b,w), saturate); }
|
||||||
inline void addPixelColorXY(int x, int y, CRGB c) { addPixelColorXY(x, y, RGBW32(c.r,c.g,c.b,0)); }
|
inline void addPixelColorXY(int x, int y, CRGB c, bool saturate = false) { addPixelColorXY(x, y, RGBW32(c.r,c.g,c.b,0), saturate); }
|
||||||
inline void fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade) { setPixelColorXY(x, y, color_fade(getPixelColorXY(x,y), fade, true)); }
|
inline void fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade) { setPixelColorXY(x, y, color_fade(getPixelColorXY(x,y), fade, true)); }
|
||||||
void box_blur(unsigned r = 1U, bool smear = false); // 2D box blur
|
void box_blur(unsigned r = 1U, bool smear = false); // 2D box blur
|
||||||
void blur2D(uint8_t blur_amount, bool smear = false);
|
void blur2D(uint8_t blur_amount, bool smear = false);
|
||||||
@ -670,9 +670,9 @@ typedef struct Segment {
|
|||||||
inline uint32_t getPixelColorXY(int x, int y) { return getPixelColor(x); }
|
inline uint32_t getPixelColorXY(int x, int y) { return getPixelColor(x); }
|
||||||
inline void blendPixelColorXY(uint16_t x, uint16_t y, uint32_t c, uint8_t blend) { blendPixelColor(x, c, blend); }
|
inline void blendPixelColorXY(uint16_t x, uint16_t y, uint32_t c, uint8_t blend) { blendPixelColor(x, c, blend); }
|
||||||
inline void blendPixelColorXY(uint16_t x, uint16_t y, CRGB c, uint8_t blend) { blendPixelColor(x, RGBW32(c.r,c.g,c.b,0), blend); }
|
inline void blendPixelColorXY(uint16_t x, uint16_t y, CRGB c, uint8_t blend) { blendPixelColor(x, RGBW32(c.r,c.g,c.b,0), blend); }
|
||||||
inline void addPixelColorXY(int x, int y, uint32_t color) { addPixelColor(x, color); }
|
inline void addPixelColorXY(int x, int y, uint32_t color, bool saturate = false) { addPixelColor(x, color, saturate); }
|
||||||
inline void addPixelColorXY(int x, int y, byte r, byte g, byte b, byte w = 0) { addPixelColor(x, RGBW32(r,g,b,w)); }
|
inline void addPixelColorXY(int x, int y, byte r, byte g, byte b, byte w = 0, bool saturate = false) { addPixelColor(x, RGBW32(r,g,b,w), saturate); }
|
||||||
inline void addPixelColorXY(int x, int y, CRGB c) { addPixelColor(x, RGBW32(c.r,c.g,c.b,0)); }
|
inline void addPixelColorXY(int x, int y, CRGB c, bool saturate = false) { addPixelColor(x, RGBW32(c.r,c.g,c.b,0), saturate); }
|
||||||
inline void fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade) { fadePixelColor(x, fade); }
|
inline void fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade) { fadePixelColor(x, fade); }
|
||||||
inline void box_blur(unsigned i, bool vertical, fract8 blur_amount) {}
|
inline void box_blur(unsigned i, bool vertical, fract8 blur_amount) {}
|
||||||
inline void blur2D(uint8_t blur_amount, bool smear = false) {}
|
inline void blur2D(uint8_t blur_amount, bool smear = false) {}
|
||||||
|
@ -36,7 +36,7 @@ uint32_t color_blend(uint32_t color1, uint32_t color2, uint16_t blend, bool b16)
|
|||||||
* original idea: https://github.com/Aircoookie/WLED/pull/2465 by https://github.com/Proto-molecule
|
* original idea: https://github.com/Aircoookie/WLED/pull/2465 by https://github.com/Proto-molecule
|
||||||
* heavily optimized for speed by @dedehai
|
* heavily optimized for speed by @dedehai
|
||||||
*/
|
*/
|
||||||
uint32_t color_add(uint32_t c1, uint32_t c2)
|
uint32_t color_add(uint32_t c1, uint32_t c2, bool desat)
|
||||||
{
|
{
|
||||||
if (c1 == BLACK) return c2;
|
if (c1 == BLACK) return c2;
|
||||||
if (c2 == BLACK) return c1;
|
if (c2 == BLACK) return c1;
|
||||||
@ -47,7 +47,8 @@ uint32_t color_add(uint32_t c1, uint32_t c2)
|
|||||||
uint32_t w = wg >> 16;
|
uint32_t w = wg >> 16;
|
||||||
uint32_t g = wg & 0xFFFF;
|
uint32_t g = wg & 0xFFFF;
|
||||||
|
|
||||||
unsigned max = r; // check for overflow note: not checking and just topping out at 255 (formerly 'fast') is not any faster (but even slower if not overflowing)
|
if(desat) { // desaturate
|
||||||
|
unsigned max = r; // check for overflow note
|
||||||
max = g > max ? g : max;
|
max = g > max ? g : max;
|
||||||
max = b > max ? b : max;
|
max = b > max ? b : max;
|
||||||
max = w > max ? w : max;
|
max = w > max ? w : max;
|
||||||
@ -60,6 +61,14 @@ uint32_t color_add(uint32_t c1, uint32_t c2)
|
|||||||
else wg = wg << 8; //shift white and green back to correct position
|
else wg = wg << 8; //shift white and green back to correct position
|
||||||
return rb | wg;
|
return rb | wg;
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
r = r > 255 ? 255 : r;
|
||||||
|
g = g > 255 ? 255 : g;
|
||||||
|
b = b > 255 ? 255 : b;
|
||||||
|
w = w > 255 ? 255 : w;
|
||||||
|
return RGBW32(r,g,b,w);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* fades color toward black
|
* fades color toward black
|
||||||
|
@ -80,7 +80,7 @@ class NeoGammaWLEDMethod {
|
|||||||
#define gamma32(c) NeoGammaWLEDMethod::Correct32(c)
|
#define gamma32(c) NeoGammaWLEDMethod::Correct32(c)
|
||||||
#define gamma8(c) NeoGammaWLEDMethod::rawGamma8(c)
|
#define gamma8(c) NeoGammaWLEDMethod::rawGamma8(c)
|
||||||
[[gnu::hot]] uint32_t color_blend(uint32_t, uint32_t, uint16_t, bool b16=false);
|
[[gnu::hot]] uint32_t color_blend(uint32_t, uint32_t, uint16_t, bool b16=false);
|
||||||
[[gnu::hot]] uint32_t color_add(uint32_t,uint32_t);
|
[[gnu::hot]] uint32_t color_add(uint32_t, uint32_t, bool desat = false);
|
||||||
[[gnu::hot]] uint32_t color_fade(uint32_t c1, uint8_t amount, bool video=false);
|
[[gnu::hot]] uint32_t color_fade(uint32_t c1, uint8_t amount, bool video=false);
|
||||||
[[gnu::hot]] CRGB ColorFromPaletteWLED(const CRGBPalette16 &pal, unsigned index, uint8_t brightness = (uint8_t)255U, TBlendType blendType = LINEARBLEND);
|
[[gnu::hot]] CRGB ColorFromPaletteWLED(const CRGBPalette16 &pal, unsigned index, uint8_t brightness = (uint8_t)255U, TBlendType blendType = LINEARBLEND);
|
||||||
CRGBPalette16 generateHarmonicRandomPalette(CRGBPalette16 &basepalette);
|
CRGBPalette16 generateHarmonicRandomPalette(CRGBPalette16 &basepalette);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user