Skip to content

Commit ebd8a10

Browse files
committed
Prevent styles on 1px segments
1 parent 0430dc5 commit ebd8a10

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

wled00/FX_fcn.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1428,6 +1428,8 @@ void WS2812FX::service() {
14281428
unsigned h = seg.virtualHeight();
14291429
unsigned dw = p * w / 0xFFFFU + 1;
14301430
unsigned dh = p * h / 0xFFFFU + 1;
1431+
unsigned orgBS = blendingStyle;
1432+
if (w*h == 1) blendingStyle = BLEND_STYLE_FADE; // disable belending for single pixel segments (use fade instead)
14311433
switch (blendingStyle) {
14321434
case BLEND_STYLE_FAIRY_DUST: // fairy dust (must set entire segment, see isPixelXYClipped())
14331435
Segment::setClippingRect(0, w, 0, h);
@@ -1473,9 +1475,8 @@ void WS2812FX::service() {
14731475
Segment::setClippingRect(0, dw, h - dh, h);
14741476
break;
14751477
}
1476-
}
1477-
delay = (*_mode[seg.currentMode()])(); // run new/current mode
1478-
if (seg.isInTransition()) {
1478+
delay = (*_mode[seg.currentMode()])(); // run new/current mode
1479+
// now run old/previous mode
14791480
Segment::tmpsegd_t _tmpSegData;
14801481
Segment::modeBlend(true); // set semaphore
14811482
seg.swapSegenv(_tmpSegData); // temporarily store new mode state (and swap it with transitional state)
@@ -1491,10 +1492,10 @@ void WS2812FX::service() {
14911492
seg.restoreSegenv(_tmpSegData); // restore mode state (will also update transitional state)
14921493
delay = MIN(delay,d2); // use shortest delay
14931494
Segment::modeBlend(false); // unset semaphore
1494-
}
1495-
#else
1496-
delay = (*_mode[seg.mode])(); // run effect mode
1495+
blendingStyle = orgBS; // restore blending style if it was modified for single pixel segment
1496+
} else
14971497
#endif
1498+
delay = (*_mode[seg.mode])(); // run effect mode (not in transition)
14981499
seg.call++;
14991500
if (seg.isInTransition() && delay > FRAMETIME) delay = FRAMETIME; // force faster updates during transition
15001501
BusManager::setSegmentCCT(oldCCT); // restore old CCT for ABL adjustments

0 commit comments

Comments
 (0)