pub struct SeededRng(u64);
impl SeededRng {
#[must_use]
pub fn new(seed: u64) -> Self {
Self(seed)
}
fn next_u64(&mut self) -> u64 {
self.0 = self.0.wrapping_add(0x9E37_79B9_7F4A_7C15);
let mut z = self.0;
z = (z ^ (z >> 30)).wrapping_mul(0xBF58_476D_1CE4_E5B9);
z = (z ^ (z >> 27)).wrapping_mul(0x94D0_49BB_1331_11EB);
z ^ (z >> 31)
}
#[must_use]
pub fn next_u32(&mut self) -> u32 {
(self.next_u64() & 0xFFFF_FFFF) as u32
}
pub fn fill_bgra(&mut self, buf: &mut [u8]) {
assert!(
buf.len() % 4 == 0,
"fill_bgra: buffer length ({}) must be a multiple of 4",
buf.len()
);
for chunk in buf.chunks_exact_mut(4) {
chunk[0] = (self.next_u32() & 0xFF) as u8; chunk[1] = (self.next_u32() & 0xFF) as u8; chunk[2] = (self.next_u32() & 0xFF) as u8; chunk[3] = 255; }
}
}