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