FastLED 3.9.15
Loading...
Searching...
No Matches
tile2x2.h
Go to the documentation of this file.
1
2#pragma once
3
4#include <stdint.h>
5
6#include "fl/geometry.h"
7#include "fl/namespace.h"
8#include "fl/slice.h"
9#include "fl/xymap.h"
10
12struct CRGB;
14
15namespace fl {
16
17class XYMap;
19
21
22 public:
23 static void Rasterize(const Slice<const Tile2x2_u8> &tiles,
24 XYRasterU8Sparse *output);
25
26 Tile2x2_u8() = default;
28 Tile2x2_u8(const Tile2x2_u8 &) = default;
29 Tile2x2_u8 &operator=(const Tile2x2_u8 &) = default;
30 Tile2x2_u8(Tile2x2_u8 &&) = default;
31
32 void scale(uint8_t scale);
33
34 uint8_t &operator()(int x, int y) { return at(x, y); }
35 uint8_t &at(int x, int y) { return mTile[y][x]; }
36 const uint8_t &at(int x, int y) const { return mTile[y][x]; }
37
38 uint8_t &lower_left() { return at(0, 0); }
39 uint8_t &upper_left() { return at(0, 1); }
40 uint8_t &lower_right() { return at(1, 0); }
41 uint8_t &upper_right() { return at(1, 1); }
42
43 uint8_t maxValue() const {
44 uint8_t max = 0;
45 max = MAX(max, at(0, 0));
46 max = MAX(max, at(0, 1));
47 max = MAX(max, at(1, 0));
48 max = MAX(max, at(1, 1));
49 return max;
50 }
51
52 static Tile2x2_u8 Max(const Tile2x2_u8 &a, const Tile2x2_u8 &b) {
53 Tile2x2_u8 result;
54 for (int x = 0; x < 2; ++x) {
55 for (int y = 0; y < 2; ++y) {
56 result.at(x, y) = MAX(a.at(x, y), b.at(x, y));
57 }
58 }
59 return result;
60 }
61
62 vec2<int16_t> origin() const { return mOrigin; }
63
68 return rect<int16_t>(min, max);
69 }
70
71 // Draws the subpixel tile to the led array.
72 void draw(const CRGB &color, const XYMap &xymap, CRGB *out) const;
73
74 // Inlined, yet customizable drawing access. This will only send you pixels
75 // that are within the bounds of the XYMap.
76 template <typename XYVisitor>
77 void draw(const XYMap &xymap, XYVisitor &visitor) const {
78 for (uint16_t x = 0; x < 2; ++x) {
79 for (uint16_t y = 0; y < 2; ++y) {
80 uint8_t value = at(x, y);
81 if (value > 0) {
82 int xx = mOrigin.x + x;
83 int yy = mOrigin.y + y;
84 if (xymap.has(xx, yy)) {
85 int index = xymap(xx, yy);
86 visitor.draw(vec2<int16_t>(xx, yy), index, value);
87 }
88 }
89 }
90 }
91 }
92
93 private:
94 uint8_t mTile[2][2] = {};
95 // Subpixels can be rendered outside the viewport so this must be signed.
97};
98
99} // namespace fl
int y
Definition Audio.ino:72
int x
Definition Audio.ino:71
UISlider scale("Scale", 1.0f, 0.0f, 1.0f, 0.01f)
XYMap xymap(WIDTH, HEIGHT, SERPENTINE)
void scale(uint8_t scale)
Definition tile2x2.cpp:24
static void Rasterize(const Slice< const Tile2x2_u8 > &tiles, XYRasterU8Sparse *output)
Definition tile2x2.cpp:14
Tile2x2_u8(const Tile2x2_u8 &)=default
static Tile2x2_u8 Max(const Tile2x2_u8 &a, const Tile2x2_u8 &b)
Definition tile2x2.h:52
const uint8_t & at(int x, int y) const
Definition tile2x2.h:36
Tile2x2_u8(const vec2< int16_t > &origin)
Definition tile2x2.h:27
uint8_t & operator()(int x, int y)
Definition tile2x2.h:34
uint8_t & lower_right()
Definition tile2x2.h:40
vec2< int16_t > mOrigin
Definition tile2x2.h:96
uint8_t & upper_left()
Definition tile2x2.h:39
rect< int16_t > bounds() const
bounds => [begin_x, end_x) (where end_x is exclusive)
Definition tile2x2.h:65
uint8_t & upper_right()
Definition tile2x2.h:41
uint8_t & lower_left()
Definition tile2x2.h:38
uint8_t maxValue() const
Definition tile2x2.h:43
void draw(const CRGB &color, const XYMap &xymap, CRGB *out) const
Definition tile2x2.cpp:19
vec2< int16_t > origin() const
Definition tile2x2.h:62
Tile2x2_u8(Tile2x2_u8 &&)=default
Tile2x2_u8 & operator=(const Tile2x2_u8 &)=default
uint8_t mTile[2][2]
Definition tile2x2.h:94
void draw(const XYMap &xymap, XYVisitor &visitor) const
Definition tile2x2.h:77
uint8_t & at(int x, int y)
Definition tile2x2.h:35
Tile2x2_u8()=default
#define MAX(a, b)
Definition math_macros.h:11
#define FASTLED_NAMESPACE_END
Definition namespace.h:23
Implements the FastLED namespace macros.
Implements a simple red square effect for 2D LED grids.
Definition crgb.h:16
Representation of an RGB pixel (Red, Green, Blue)
Definition crgb.h:55