71 {
72 using FP = fl::s16x16;
73
74 auto *e = ctx.mEngine.get();
75 e->get_ready();
78 const fl::u8 *perm = PERLIN_NOISE;
79
80 e->timings.master_speed = 0.02;
81 e->timings.ratio[0] = 0.025;
82 e->timings.ratio[1] = 0.027;
83 e->timings.ratio[2] = 0.031;
84 e->timings.ratio[3] = 0.0033;
85 e->timings.ratio[4] = 0.0036;
86 e->timings.ratio[5] = 0.0039;
87
88 e->calculate_oscillators(e->timings);
89
90 const int total_pixels =
mState.count;
91
92 constexpr fl::i32
FP_ONE =
static_cast<fl::i32
>(1) << FP::FRAC_BITS;
93 constexpr fl::i32 scale_xy_raw =
FP(0.09f).
raw();
94 const fl::i32 cx_raw =
FP(e->animation.center_x).
raw();
95 const fl::i32 cy_raw =
FP(e->animation.center_y).
raw();
96
97
98 render_parameters_fp p = {};
99 p.scale_x_raw = scale_xy_raw;
100 p.scale_y_raw = scale_xy_raw;
101 p.scale_z_raw = 0;
102 p.offset_x_raw = 0;
103 p.offset_y_raw =
FP(-20.0f * e->move.linear[0]).
raw();
104 p.offset_z_raw = 0;
105 p.z_raw =
FP(5.0f).
raw();
106 p.center_x_raw = cx_raw;
107 p.center_y_raw = cy_raw;
108 p.low_limit_raw = 0;
109 p.high_limit_raw =
FP_ONE;
110
111
112 constexpr fl::i32 z1_raw =
FP(5.0f).
raw();
113 const fl::i32 z2_raw =
FP(500.0f).
raw();
114 const fl::i32 oy1_raw =
FP(-20.0f * e->move.linear[0]).
raw();
115 const fl::i32 oy2_raw =
FP(-40.0f * e->move.linear[0]).
raw();
116
117 fl::span<CRGB>
leds = e->mCtx->leds;
118
119 for (int i = 0; i < total_pixels; i++) {
120 const fl::i32 theta_raw =
mState.polar_theta_raw[i];
121 const fl::i32 dist_raw =
mState.distance_raw[i];
122
123
124 p.angle_raw = theta_raw;
125 p.dist_raw = dist_raw;
126 p.z_raw = z1_raw;
127 p.offset_y_raw = oy1_raw;
129
130
131 p.z_raw = z2_raw;
132 p.offset_y_raw = oy2_raw;
134
135 fl::i32 r =
add_fp(show2, show1);
139
144 }
145}
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 fl::i32 colordodge_fp(fl::i32 a, fl::i32 b) 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
FASTLED_FORCE_INLINE fl::i32 add_fp(fl::i32 a, fl::i32 b) FL_NO_EXCEPT