Add entry points for GPU

This commit is contained in:
2026-06-27 18:25:41 -04:00
parent 6671475c75
commit 44b71c2692
11 changed files with 202 additions and 104 deletions
+21 -5
View File
@@ -1,12 +1,11 @@
//! # Variation
use crate::Coefficients2;
use bytemuck::{Pod, Zeroable};
use core::f32::consts::PI;
use glam::{Affine2, Vec2, vec2};
use libm::{atan2f, cosf, powf, sinf, sqrtf, tanf};
use rand::distr::Bernoulli;
use rand::{Rng, RngExt};
use rand::Rng;
use rand::distributions::Standard;
#[derive(Copy, Clone, Pod, Zeroable)]
#[repr(C)]
@@ -35,6 +34,20 @@ pub struct Variation {
}
impl Variation {
pub const IDENTITY: Variation = Variation {
kind: VariationKind::Linear,
weight: 1.0,
params: VariationParams([0f32; 4]),
};
pub fn new(kind: VariationKind, weight: f32, params: VariationParams) -> Variation {
Variation {
kind,
weight,
params,
}
}
pub fn transform_point<R: Rng>(
&self,
point: Vec2,
@@ -60,8 +73,11 @@ fn transform_point_julia<R: Rng>(point: Vec2, rng: &mut R) -> Vec2 {
let r = sqrtf(x2 + y2);
let theta = atan2f(point.x, point.y);
let omega_choice = rng.sample(Bernoulli::new(0.5).unwrap());
let omega = if omega_choice { PI } else { 0.0 };
let omega = if rng.sample::<f32, _>(Standard) > 0.5 {
PI
} else {
0.0
};
let sqrt_r = sqrtf(r);
let theta_val = theta / 2.0 + omega;