From bdff05feafe2e0c8af5aed444a56089439c1440d Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Sat, 5 Aug 2023 13:53:12 +0200 Subject: [PATCH] Palette blending optimisation. --- wled00/FX.h | 1 - wled00/FX_fcn.cpp | 13 ++++--------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/wled00/FX.h b/wled00/FX.h index fc8f16b9..a1627a29 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -399,7 +399,6 @@ typedef struct Segment { static CRGBPalette16 _randomPalette; static CRGBPalette16 _newRandomPalette; static unsigned long _lastPaletteChange; - static uint8_t _noOfBlendsRemaining; // transition data, valid only if transitional==true, holds values during transition (72 bytes) struct Transition { diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index c76e22a2..5cbebe1e 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -80,7 +80,6 @@ uint16_t Segment::maxHeight = 1; CRGBPalette16 Segment::_randomPalette = CRGBPalette16(DEFAULT_COLOR); CRGBPalette16 Segment::_newRandomPalette = CRGBPalette16(DEFAULT_COLOR); unsigned long Segment::_lastPaletteChange = 0; // perhaps it should be per segment -uint8_t Segment::_noOfBlendsRemaining = 0; // copy constructor Segment::Segment(const Segment &orig) { @@ -216,7 +215,7 @@ CRGBPalette16 &Segment::loadPalette(CRGBPalette16 &targetPalette, uint8_t pal) { CHSV(random8(), random8(160, 255), random8(128, 255)), CHSV(random8(), random8(160, 255), random8(128, 255))); _lastPaletteChange = millis(); - _noOfBlendsRemaining = 255; + handleRandomPalette(); // do initial blend } targetPalette = _randomPalette; break;} @@ -348,13 +347,9 @@ void Segment::handleTransition() { // relies on WS2812FX::service() to call it max every 8ms or more (MIN_SHOW_DELAY) void Segment::handleRandomPalette() { - if (_noOfBlendsRemaining > 0) { - // there needs to be 255 palette blends (48) for full blend - size_t noOfBlends = 3; // blending time ~850ms when MIN_SHOW_DELAY>10 - if (noOfBlends > _noOfBlendsRemaining) noOfBlends = _noOfBlendsRemaining; - for (size_t i=0; i