FastLED 3.9.15
Loading...
Searching...
No Matches

◆ draw()

void fl::Blend2d::draw ( DrawContext context)
overridevirtual
Parameters
nowThe current time in milliseconds. Fx writers are encouraged to use this instead of millis() directly as this will more deterministic behavior.

Implements fl::Fx.

Definition at line 47 of file blend.cpp.

47 {
48 mFrame->clear();
49 mFrameTransform->clear();
50
51 // Draw each layer in reverse order and applying the blending.
52 bool first = true;
53 for (auto it = mLayers.begin(); it != mLayers.end(); ++it) {
54 DrawContext tmp_ctx = context;
55 tmp_ctx.leds = mFrame->rgb();
56 auto &fx = it->fx;
57 fx->draw(tmp_ctx);
60 first = false;
61 // Apply the blur effect per effect.
62 uint8_t blur_amount = it->blur_amount;
63 if (blur_amount > 0) {
64 const XYMap &xyMap = fx->getXYMap();
65 uint8_t blur_passes = MAX(1, it->blur_passes);
66 for (uint8_t i = 0; i < blur_passes; ++i) {
67 // Apply the blur effect
68 blur2d(mFrame->rgb(), mXyMap.getWidth(), mXyMap.getHeight(),
69 blur_amount, xyMap);
70 }
71 }
72 mFrame->draw(mFrameTransform->rgb(), mode);
73 }
74
75 if (mGlobalBlurAmount > 0) {
76 // Apply the blur effect
77 uint16_t width = mXyMap.getWidth();
78 uint16_t height = mXyMap.getHeight();
79 XYMap rect = XYMap::constructRectangularGrid(width, height);
80 CRGB *rgb = mFrameTransform->rgb();
81 uint8_t blur_passes = MAX(1, mGlobalBlurPasses);
82 for (uint8_t i = 0; i < blur_passes; ++i) {
83 // Apply the blur effect
84 blur2d(rgb, width, height, mGlobalBlurAmount, rect);
85 }
86 }
87
88 // Copy the final result to the output
89 // memcpy(mFrameTransform->rgb(), context.leds, sizeof(CRGB) *
90 // mXyMap.getTotal());
91 mFrameTransform->drawXY(context.leds, mXyMap,
93}
uint8_t mGlobalBlurPasses
Definition blend.h:61
FramePtr mFrame
Definition blend.h:58
uint8_t mGlobalBlurAmount
Definition blend.h:60
FramePtr mFrameTransform
Definition blend.h:59
HeapVector< Entry > mLayers
Definition blend.h:57
XYMap mXyMap
Definition fx2d.h:29
uint16_t xyMap(uint16_t x, uint16_t y) const
Definition fx2d.h:20
_DrawContext DrawContext
Definition fx.h:21
static XYMap constructRectangularGrid(uint16_t width, uint16_t height, uint16_t offset=0)
Definition xymap.cpp:35
#define MAX(a, b)
Definition math_macros.h:4
void blur2d(CRGB *leds, uint8_t width, uint8_t height, fract8 blur_amount, const XYMap &xymap)
Two-dimensional blur filter.
DrawMode
Definition frame.h:17
@ DRAW_MODE_BLEND_BY_BLACK
Definition frame.h:19
@ DRAW_MODE_OVERWRITE
Definition frame.h:18

References blur2d(), fl::XYMap::constructRectangularGrid(), fl::DRAW_MODE_BLEND_BY_BLACK, fl::DRAW_MODE_OVERWRITE, fl::_DrawContext::leds, MAX, mFrame, mFrameTransform, mGlobalBlurAmount, mGlobalBlurPasses, mLayers, fl::Fx2d::mXyMap, and fl::Fx2d::xyMap().

+ Here is the call graph for this function: