5#ifndef NEO_MATRIX_FX_HPP
6#define NEO_MATRIX_FX_HPP
10#include <mlab/bin_data.hpp>
11#include <mlab/unique_tracker.hpp>
18 using namespace std::chrono_literals;
40 [[nodiscard]]
inline float repeats_x()
const;
42 [[nodiscard]]
inline std::size_t
width()
const;
44 [[nodiscard]]
inline std::size_t
height()
const;
46 [[nodiscard]]
inline std::chrono::milliseconds
duration_x()
const;
48 [[nodiscard]]
inline std::chrono::milliseconds
duration_y()
const;
56 [[nodiscard]]
inline std::vector<rgb>
get_matrix()
const;
58 void set_matrix(std::vector<rgb> m, std::size_t w);
62 void tile(
float overlap_x,
float overlap_y);
66 [[nodiscard]] std::vector<rgb>
67 sample(std::size_t n_leds, std::chrono::milliseconds time_since_start, std::vector<rgb> recycle_buffer = {},
75 std::chrono::milliseconds elapsed, std::vector<rgb> recycle_buffer = {},
89 void apply(
matrix_fx &m_fx,
float tile_x = 0.1f,
float tile_y = 0.1f)
const;
91 [[nodiscard]] std::string
to_string()
const;
Definition: matrix_fx.hpp:21
std::size_t _width
Definition: matrix_fx.hpp:23
std::size_t _height
Definition: matrix_fx.hpp:24
std::size_t width() const
Definition: matrix_fx.hpp:114
std::vector< neo::rgb > _matrix
Definition: matrix_fx.hpp:22
std::vector< rgb > get_matrix() const
Definition: matrix_fx.hpp:136
std::chrono::milliseconds duration_y() const
Definition: matrix_fx.hpp:102
void resample(std::size_t new_width, std::size_t new_height, blending_method method=blend_linear)
Definition: matrix_fx.cpp:80
std::chrono::milliseconds duration_x() const
Definition: matrix_fx.hpp:106
float _repeats_x
Definition: matrix_fx.hpp:27
rgb sample(float x, float y, blending_method method=blend_linear) const
Definition: matrix_fx.cpp:37
void set_repeats_x(float n)
Definition: matrix_fx.hpp:132
float repeats_x() const
Definition: matrix_fx.hpp:110
std::chrono::milliseconds _duration_y
Definition: matrix_fx.hpp:26
void set_matrix(std::vector< rgb > m, std::size_t w)
Definition: matrix_fx.cpp:69
void set_duration_y(std::chrono::milliseconds d)
Definition: matrix_fx.hpp:128
std::vector< rgb > render_frame(transmittable_rgb_strip &strip, rmt_channel_t channel, std::chrono::milliseconds elapsed, std::vector< rgb > recycle_buffer={}, blending_method method=blend_linear) const
Definition: matrix_fx.cpp:168
std::function< void(std::chrono::milliseconds)> make_steady_timer_callback(transmittable_rgb_strip &strip, rmt_channel_t channel, blending_method method=blend_linear) const
Definition: matrix_fx.cpp:183
std::size_t height() const
Definition: matrix_fx.hpp:119
std::chrono::milliseconds _duration_x
Definition: matrix_fx.hpp:25
std::recursive_mutex _matrix_mutex
Definition: matrix_fx.hpp:28
matrix_fx & operator=(matrix_fx &&other) noexcept
Definition: matrix_fx.cpp:25
void set_duration_x(std::chrono::milliseconds d)
Definition: matrix_fx.hpp:124
void tile(float overlap_x, float overlap_y)
Definition: matrix_fx.cpp:95
Definition: any_fx.cpp:81
mlab::bin_stream & operator>>(mlab::bin_stream &s, neo::any_fx_config &fx_cfg)
Definition: any_fx.cpp:83
rgb(&)(rgb l, rgb r, float t) blending_method
Definition: gradient.hpp:13
rgb blend_linear(rgb l, rgb r, float t)
Definition: gradient.cpp:96
Definition: matrix_fx.hpp:79
void apply(matrix_fx &m_fx, float tile_x=0.1f, float tile_y=0.1f) const
Definition: matrix_fx.cpp:196
std::uint8_t width
Definition: matrix_fx.hpp:81
std::vector< neo::rgb > matrix
Definition: matrix_fx.hpp:80
std::uint32_t duration_x_ms
Definition: matrix_fx.hpp:83
std::uint32_t duration_y_ms
Definition: matrix_fx.hpp:84
float repeats_x
Definition: matrix_fx.hpp:82
matrix_fx_config()=default
std::string to_string() const
Definition: matrix_fx.cpp:153