lenia: optimise shader & move files
This commit is contained in:
parent
cf9e4b266d
commit
5281bfa340
24 changed files with 591 additions and 215 deletions
2
lenia-kernel/.gitignore
vendored
Normal file
2
lenia-kernel/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
target/
|
||||
Cargo.lock
|
8
lenia-kernel/Cargo.toml
Normal file
8
lenia-kernel/Cargo.toml
Normal 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]
|
1
lenia-kernel/rustfmt.toml
Normal file
1
lenia-kernel/rustfmt.toml
Normal file
|
@ -0,0 +1 @@
|
|||
hard_tabs = true
|
43
lenia-kernel/src/main.rs
Normal file
43
lenia-kernel/src/main.rs
Normal 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
|
||||
// }
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue