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