mod fitting;
mod noise_cpu;
mod optimizer;
mod shader;
mod spectrum;
pub use fitting::{fit_texture, reconstruct};
pub use noise_cpu::{eval_octave, hash_noise_3d_cpu};
pub use optimizer::{nelder_mead, OptimizeResult};
pub use shader::{generate_shader, ShaderLanguage};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TextureFitResult {
pub width: u32,
pub height: u32,
pub channels: u32,
pub bias: Vec<f32>,
pub octaves: Vec<Vec<FittedOctave>>,
pub psnr_db: f32,
pub nmse: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FittedOctave {
pub amplitude: f32,
pub frequency: f32,
pub phase: [f32; 2],
pub seed: u32,
pub rotation: f32,
}
pub struct TextureFitConfig {
pub max_octaves: u32,
pub target_psnr_db: f32,
pub iterations_per_octave: u32,
pub tileable: bool,
}
impl Default for TextureFitConfig {
fn default() -> Self {
Self {
max_octaves: 8,
target_psnr_db: 28.0,
iterations_per_octave: 500,
tileable: true,
}
}
}