FastLED 3.9.15
Loading...
Searching...
No Matches

◆ flowPrepare()

void fl::FlowFieldFP::flowPrepare ( s16x16 t)
private

Definition at line 753 of file flowfield.cpp.hpp.

753 {
754 int w = mState.width;
755 int h = mState.height;
756 constexpr s16x16 kBaseFreq(0.23f);
757 constexpr s16x16 neg_one(-1.0f);
758 constexpr s16x16 one(1.0f);
759
760 const i32 *fade_lut = mState.fade_lut;
761
762 // Hoist loop-invariant products
763 s16x16 freqX = kBaseFreq * mNoiseFreqX_fp;
764 s16x16 scrollX = t * mFlowSpeedX_fp; // time offset added to spatial coord
765
766 for (int i = 0; i < w; i++) {
767 s16x16 fx = s16x16(i) * freqX + scrollX;
768 i32 noise_raw = perlin_s16x16::pnoise2d_raw(
769 fx.raw(), 0, fade_lut, mPermX);
770 s16x16 v = s16x16::from_raw(noise_raw);
771 s16x16 clamped = s16x16::clamp(v * mFlowAmpX_fp, neg_one, one);
772 mState.x_prof[i] = clamped.raw();
773 }
774
775 if (mParams.reverse_x_profile) {
776 for (int i = 0; i < w / 2; i++) {
777 i32 tmp = mState.x_prof[i];
778 mState.x_prof[i] = mState.x_prof[w - 1 - i];
779 mState.x_prof[w - 1 - i] = tmp;
780 }
781 }
782
783 // Hoist loop-invariant products
784 s16x16 freqY = kBaseFreq * mNoiseFreqY_fp;
785 s16x16 scrollY = t * mFlowSpeedY_fp; // time offset added to spatial coord
786
787 for (int i = 0; i < h; i++) {
788 s16x16 fx = s16x16(i) * freqY + scrollY;
789 i32 noise_raw = perlin_s16x16::pnoise2d_raw(
790 fx.raw(), 0, fade_lut, mPermY);
791 s16x16 v = s16x16::from_raw(noise_raw);
792 s16x16 clamped = s16x16::clamp(v * mFlowAmpY_fp, neg_one, one);
793 mState.y_prof[i] = clamped.raw();
794 }
795
796 // Apply noise bias (attack/decay bumps from noisePunch triggers).
797 for (int i = 0; i < w; i++) {
798 i32 bias_raw = s16x16(mNoiseBias.getX(i)).raw();
799 mState.x_prof[i] = clamp_q16(mState.x_prof[i] + bias_raw,
800 neg_one.raw(), one.raw());
801 }
802 for (int i = 0; i < h; i++) {
803 i32 bias_raw = s16x16(mNoiseBias.getY(i)).raw();
804 mState.y_prof[i] = clamp_q16(mState.y_prof[i] + bias_raw,
805 neg_one.raw(), one.raw());
806 }
807}
NoiseBias2D mNoiseBias
Definition flowfield.h:287
Params mParams
Definition flowfield.h:286
FlowFieldFPState mState
Definition flowfield.h:400
s16x16 mFlowAmpY_fp
Definition flowfield.h:411
s16x16 mNoiseFreqY_fp
Definition flowfield.h:409
s16x16 mFlowSpeedX_fp
Definition flowfield.h:410
static i32 clamp_q16(i32 v, i32 lo, i32 hi)
s16x16 mNoiseFreqX_fp
Definition flowfield.h:409
s16x16 mFlowSpeedY_fp
Definition flowfield.h:410
s16x16 mFlowAmpX_fp
Definition flowfield.h:411
static constexpr FASTLED_FORCE_INLINE s16x16 clamp(s16x16 x, s16x16 lo, s16x16 hi) FL_NOEXCEPT
Definition s16x16.h:162
static constexpr FASTLED_FORCE_INLINE s16x16 from_raw(i32 raw) FL_NOEXCEPT
Definition s16x16.h:54
static fl::i32 pnoise2d_raw(fl::i32 fx_raw, fl::i32 fy_raw, const fl::i32 *fade_lut, const fl::u8 *perm)

References fl::s16x16::clamp(), clamp_q16(), fl::s16x16::from_raw(), mFlowAmpX_fp, mFlowAmpY_fp, mFlowSpeedX_fp, mFlowSpeedY_fp, fl::FlowField::mNoiseBias, mNoiseFreqX_fp, mNoiseFreqY_fp, fl::FlowField::mParams, mPermX, mPermY, mState, fl::perlin_s16x16::pnoise2d_raw(), fl::s16x16::raw(), and fl::t.

Referenced by drawImpl().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: