FastLED 3.9.15
Loading...
Searching...
No Matches
splat.cpp.hpp
Go to the documentation of this file.
1
2#include "fl/gfx/tile2x2.h"
3#include "fl/gfx/splat.h"
4#include "fl/math/math.h"
5
6namespace fl {
7
8static u8 to_uint8(float f) {
9 // convert to [0..255] range
10 u8 i = static_cast<u8>(f * 255.0f + .5f);
11 return fl::min(i, 255);
12}
13
15 // 1) collect values.
16 float x = xy.x;
17 float y = xy.y;
18
19 // 2) integer cell indices
20 i16 cx = static_cast<i16>(floorf(x));
21 i16 cy = static_cast<i16>(floorf(y));
22
23 // 3) fractional offsets in [0..1)
24 float fx = x - cx;
25 float fy = y - cy;
26
27 // 4) bilinear weights
28 float w_ll = (1 - fx) * (1 - fy); // lower‑left
29 float w_lr = fx * (1 - fy); // lower‑right
30 float w_ul = (1 - fx) * fy; // upper‑left
31 float w_ur = fx * fy; // upper‑right
32
33 // 5) build Tile2x2_u8 anchored at (cx,cy)
34 Tile2x2_u8 out(vec2<u16>(cx, cy));
35 out.lower_left() = to_uint8(w_ll);
36 out.lower_right() = to_uint8(w_lr);
37 out.upper_left() = to_uint8(w_ul);
38 out.upper_right() = to_uint8(w_ur);
39
40 return out;
41}
42
43} // namespace
unsigned int xy(unsigned int x, unsigned int y)
u8 & lower_right()
Definition tile2x2.h:39
u8 & upper_right()
Definition tile2x2.h:40
u8 & lower_left()
Definition tile2x2.h:37
u8 & upper_left()
Definition tile2x2.h:38
FL_DISABLE_WARNING_PUSH U constexpr common_type_t< T, U > min(T a, U b) FL_NOEXCEPT
Definition math.h:71
unsigned char u8
Definition stdint.h:131
float floorf(float value) FL_NOEXCEPT
Definition math.h:304
vec2< float > vec2f
Definition geometry.h:333
Tile2x2_u8 splat(vec2f xy)
"Splat" as in "splat pixel rendering" takes a pixel value in float x,y coordinates and "splats" it in...
Definition splat.cpp.hpp:14
static u8 to_uint8(float f)
Definition splat.cpp.hpp:8
Base definition for an LED controller.
Definition crgb.hpp:179