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<int> origin() const { return mOrigin; }
63
64 rect<int> bounds() const {
65 vec2<int> min = mOrigin;
66 vec2<int> max = mOrigin + vec2<int>(2, 2);
67 return rect<int>(min, max);
68 }
69
70 // Draws the subpixel tile to the led array.
71 void draw(const CRGB &color, const XYMap &xymap, CRGB *out) const;
72
73 // Inlined, yet customizable drawing access. This will only send you pixels
74 // that are within the bounds of the XYMap.
75 template <typename XYVisitor>
76 void draw(const XYMap &xymap, XYVisitor &visitor) const {
77 for (uint16_t x = 0; x < 2; ++x) {
78 for (uint16_t y = 0; y < 2; ++y) {
79 uint8_t value = at(x, y);
80 if (value > 0) {
81 int xx = mOrigin.x + x;
82 int yy = mOrigin.y + y;
83 if (xymap.has(xx, yy)) {
84 int index = xymap(xx, yy);
85 visitor.draw(vec2<int>(xx, yy), index, value);
86 }
87 }
88 }
89 }
90 }
91
92 private:
93 uint8_t mTile[2][2] = {};
94 // Subpixels can be rendered outside the viewport so this must be signed.
96};
97
98} // namespace fl
UISlider scale("Scale", 1.0f, 0.0f, 1.0f, 0.01f)
XYMap xymap(WIDTH, HEIGHT, SERPENTINE)
uint32_t x[NUM_LAYERS]
Definition Fire2023.ino:82
uint32_t y[NUM_LAYERS]
Definition Fire2023.ino:83
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
uint8_t & operator()(int x, int y)
Definition tile2x2.h:34
rect< int > bounds() const
Definition tile2x2.h:64
uint8_t & lower_right()
Definition tile2x2.h:40
uint8_t & upper_left()
Definition tile2x2.h:39
uint8_t & upper_right()
Definition tile2x2.h:41
uint8_t & lower_left()
Definition tile2x2.h:38
vec2< int > origin() const
Definition tile2x2.h:62
vec2< int > mOrigin
Definition tile2x2.h:95
uint8_t maxValue() const
Definition tile2x2.h:43
Tile2x2_u8(const vec2< int > &origin)
Definition tile2x2.h:27
void draw(const CRGB &color, const XYMap &xymap, CRGB *out) const
Definition tile2x2.cpp:19
Tile2x2_u8(Tile2x2_u8 &&)=default
Tile2x2_u8 & operator=(const Tile2x2_u8 &)=default
uint8_t mTile[2][2]
Definition tile2x2.h:93
void draw(const XYMap &xymap, XYVisitor &visitor) const
Definition tile2x2.h:76
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