55 {
56 using FP = fl::s16x16;
57
58 auto *e = ctx.mEngine.get();
59 e->get_ready();
62 const fl::u8 *perm = PERLIN_NOISE;
63
64 e->timings.master_speed = 0.01;
65 e->timings.ratio[0] = 0.0025;
66 e->timings.ratio[1] = 0.0027;
67 e->timings.ratio[2] = 0.029;
68 e->timings.ratio[3] = 0.033;
69
70 e->calculate_oscillators(e->timings);
71
72 const int total_pixels =
mState.count;
73
74
75 constexpr fl::i32
FP_ONE =
static_cast<fl::i32
>(1) << FP::FRAC_BITS;
76 constexpr fl::i32 scale_xy_raw =
FP(0.1f).
raw();
77 const fl::i32 cx_raw =
FP(e->animation.center_x).
raw();
78 const fl::i32 cy_raw =
FP(e->animation.center_y).
raw();
79
80
81 const fl::i32 dist_offset_raw =
FP(12.0f + e->move.directional[3] * 4.0f).
raw();
82
83
84 const fl::i32 angle_offset_raw =
FP(e->move.noise_angle[0] + e->move.noise_angle[1]).
raw();
85
86 render_parameters_fp p = {};
87 p.scale_x_raw = scale_xy_raw;
88 p.scale_y_raw = scale_xy_raw;
89 p.scale_z_raw = 0;
90 p.offset_x_raw =
FP(10.0f).
raw();
91 p.offset_y_raw =
FP(20.0f * e->move.linear[2]).
raw();
92 p.offset_z_raw =
FP(-10.0f).
raw();
93 p.z_raw =
FP(5.0f).
raw();
94 p.center_x_raw = cx_raw;
95 p.center_y_raw = cy_raw;
96 p.low_limit_raw = 0;
98
99 fl::span<CRGB>
leds = e->mCtx->leds;
100
101 for (int i = 0; i < total_pixels; i++) {
102 p.dist_raw =
mState.distance_raw[i] - dist_offset_raw;
103 p.angle_raw = angle_offset_raw +
mState.polar_theta_raw[i];
104
106
107 fl::i32 r = show1;
108 fl::i32 g = show1 - 80;
109 fl::i32 b = show1 - 150;
111
116 }
117}
constexpr i32 raw() const FL_NOEXCEPT
T * assume_aligned(T *ptr) FL_NOEXCEPT
static constexpr i32 FP_ONE
FASTLED_FORCE_INLINE void rgb_sanity_check_fp(fl::i32 &r, fl::i32 &g, fl::i32 &b)
FASTLED_FORCE_INLINE fl::i32 render_value_fp(const render_parameters_fp &p, const fl::i32 *fade_lut, const fl::u8 *perm)