362 {
364 const int total_pixels =
setup.total_pixels;
365 const i32 *fade_lut =
setup.fade_lut;
367 const i32 cx_raw =
setup.cx_raw;
368 const i32 cy_raw =
setup.cy_raw;
369 const i32 lin0_raw =
setup.lin0_raw;
370 const i32 lin1_raw =
setup.lin1_raw;
371 const i32 lin2_raw =
setup.lin2_raw;
372 const i32 rad0_raw =
setup.rad0_raw;
373 const i32 rad1_raw =
setup.rad1_raw;
374 const i32 rad2_raw =
setup.rad2_raw;
376
377
378 auto noise_channel = [&](const SinCos32_simd &sc, int lane,
379 i32 lin_raw, i32 dist_raw) -> i32 {
380 i32 cos_v = static_cast<i32>(simd::extract_u32_4(sc.cos_vals, lane));
381 i32 sin_v = static_cast<i32>(simd::extract_u32_4(sc.sin_vals, lane));
382 i32 nx =
perlinCoord(cos_v, dist_raw, lin_raw + cx_raw);
385 };
386
387 for (int i = 0; i < total_pixels; i++) {
388 const i32 base_raw =
setup.base_angle[i];
389 const i32 dist_raw =
setup.dist_scaled[i];
390
391
397
398 i32 s0 = noise_channel(sc, 0, lin0_raw, dist_raw);
399 i32 s1 = noise_channel(sc, 1, lin1_raw, dist_raw);
400 i32 s2 = noise_channel(sc, 2, lin2_raw, dist_raw);
401
405
409 }
410}
ChasingSpiralState mState
FASTLED_FORCE_INLINE u32 radiansToA24(i32 base_s16x16, i32 offset_s16x16)
FASTLED_FORCE_INLINE i32 applyRadialFilter(i32 noise_255, i32 rf_raw)
FASTLED_FORCE_INLINE i32 perlinCoord(i32 sc_val, i32 dist_raw, i32 offset)
FrameSetup setupChasingSpiralFrame(Context &ctx, ChasingSpiralState &state)
FASTLED_FORCE_INLINE i32 clampAndScale255(i32 raw_s16x16)
platforms::simd_u32x4 simd_u32x4
FASTLED_FORCE_INLINE SinCos32_simd sincos32_simd(simd::simd_u32x4 angles) FL_NOEXCEPT
Process 4 angles simultaneously, returning vectorized sin/cos values SIMD-optimized: vectorized angle...