Add entry points for GPU
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user