lenia: optimise shader & move files

This commit is contained in:
Crispy 2023-06-23 21:27:34 +02:00
parent cf9e4b266d
commit 5281bfa340
24 changed files with 591 additions and 215 deletions

2
lenia-kernel/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
target/
Cargo.lock

8
lenia-kernel/Cargo.toml Normal file
View file

@ -0,0 +1,8 @@
[package]
name = "lenia-kernel"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

View file

@ -0,0 +1 @@
hard_tabs = true

43
lenia-kernel/src/main.rs Normal file
View file

@ -0,0 +1,43 @@
use std::env;
fn main() {
let args: Vec<_> = env::args().skip(1).collect();
if args.is_empty() {
println!("usage: kernel_radius");
return;
}
let radius = args[0].parse().unwrap();
let k_offset = 0.435;
let k_sharpness = 28.0;
let mut total_max = 0.0;
println!(" // generated by the rust program");
println!(" const int Radius = {};", radius);
println!(" #define RADIUS {}", radius);
println!(" // kernel LUT size is {} bytes", radius * (radius + 1) * 2);
println!(" const half Kernel[{}][{}] = {{", radius + 1, radius);
for y in 0..=radius {
print!(" {{");
for x in 1..=radius {
let k = k(x, y, radius, k_offset, k_sharpness);
total_max += k * 4.0;
print!("{:.4}, ", k);
}
println!("}},");
}
println!(" }};");
println!(" const float TOTAL_MAX = {};", total_max);
}
fn k(x: usize, y: usize, radius: usize, k_offset: f32, k_sharpness: f32) -> f32 {
let x = x as f32;
let y = y as f32;
let r = (x * x + y * y).sqrt() / radius as f32;
f32::exp(-((r - k_offset) * (r - k_offset)) * k_sharpness)
// lenia paper example kernel
// if r < 1.0 {
// f32::exp(4.0 - 4.0 / (4.0 * r * (1.0 - r)))
// } else {
// 0.0
// }
}