noise_functions/modifiers/
lerp.rs1#[cfg(feature = "nightly-simd")]
2use core::simd::{LaneCount, Simd, SupportedLaneCount};
3
4use crate::{math::lerp, Noise, Sample};
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
8pub struct Lerp<A, B, T> {
9 pub a: A,
10 pub b: B,
11 pub t: T,
12}
13
14impl<A, B, T> Noise for Lerp<A, B, T> {}
15
16impl<const DIM: usize, A, B, T> Sample<DIM> for Lerp<A, B, T>
17where
18 A: Sample<DIM>,
19 B: Sample<DIM>,
20 T: Sample<DIM>,
21{
22 #[inline]
23 fn sample_with_seed(&self, point: [f32; DIM], seed: i32) -> f32 {
24 lerp(self.a.sample_with_seed(point, seed), self.b.sample_with_seed(point, seed), self.t.sample_with_seed(point, seed))
25 }
26}
27
28#[cfg(feature = "nightly-simd")]
29impl<const DIM: usize, const LANES: usize, A, B, T> Sample<DIM, Simd<f32, LANES>> for Lerp<A, B, T>
30where
31 A: Sample<DIM, Simd<f32, LANES>>,
32 B: Sample<DIM, Simd<f32, LANES>>,
33 T: Sample<DIM, Simd<f32, LANES>>,
34 LaneCount<LANES>: SupportedLaneCount,
35{
36 #[inline]
37 fn sample_with_seed(&self, point: Simd<f32, LANES>, seed: i32) -> f32 {
38 lerp(self.a.sample_with_seed(point, seed), self.b.sample_with_seed(point, seed), self.t.sample_with_seed(point, seed))
39 }
40}