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 53 of file blend.cpp.

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

References fl::blur2d(), fl::XYMap::constructRectangularGrid(), fl::DRAW_MODE_BLEND_BY_MAX_BRIGHTNESS, 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: