FastLED 3.10.8
Loading...
Searching...
No Matches

◆ flowPrepare()

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

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

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

References fl::s16x16::clamp(), clamp_q16(), fl::FL_NO_EXCEPT, 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: